From bffd56537acf99339773b284172c04515f319daf Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Mon, 8 Sep 2025 00:15:17 -0700 Subject: [PATCH 01/40] Start out with just the documentation files --- docs/internal/FONTCODECHANGES.tedit | Bin 22779 -> 32924 bytes docs/internal/MCCS.TEDIT | Bin 0 -> 42347 bytes docs/internal/MEDLEYFONTFORMAT.TEDIT | Bin 12478 -> 12761 bytes library/UNICODE.TEDIT | Bin 19461 -> 21624 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/internal/MCCS.TEDIT diff --git a/docs/internal/FONTCODECHANGES.tedit b/docs/internal/FONTCODECHANGES.tedit index 732c117e04aa6f1b5fa5d5d37b09dc4603dfa306..f05b93b6a0a5990e975f331f03ecb2981112400c 100644 GIT binary patch literal 32924 zcmeHw%WtGvmY1DX(?fe0-j7Cu&__+93OBa%QJGcU*)Jl);mlCk4tGR2t7wp!!GY%*B(7sJWw&_OZp&xU8kJnLWP;|u(Kl@E$+G07H}MRq>H?8B?+sNgy| z$7jQFHkl2I8T-unZFqj8&i%=t*vV$a)#P=N%_mnywj3AzVm{AjH(4zo57f9AUSW~5 z+2mC*-p5#SHtvPn}POgT>{X zn!jE2WS2QGe^wOZK!t&@N?e7>%MSTqPz)Y#X@*Ao=;W~3Yo0vLdfD)t z=v>`lAcOdU8~y#?Ckl4^6Y|EQ`1#MX9Q;_E5657^vjXJU%UWYl1c>S9bMS>GjpX1Q z^W}639LzC7#0M%~=c8qjfwh-xJ-ab>81}OlPflBh``yFSr;Tpw_@JF#Ut*WJsQmsM z-4=ugRLjnnWAQmq02Bjb$F0LX$m{9$+A&qtKK;bLwZ@3oH_ zjqbtm|N|- z-OrAmv=6x&bQ^Y-)q%y?pg)=3V85@2ec(6;)uvO(2B6C(*JF*}T}*bpN1Qtn5{qz? zV3p-)5tcgYwNJUqPKKX8we^HZXw**g7!9rCr-n;0YMd1~t&!`NSNR#B09A!fa?ZVN z$GF%$-P2B1$G&>aPkY;YTTRo3*@H(PX0`7Vv_3SP#nMUy@NQKqUy)Spx*~4!Oh82*3uOdtLMwnASj#(^7HT zTo^M0n8ln%iJFu>uP=xFOOT!-{%TC}Yh5&4OF9UoX|Y+6CrSufA9AsjnaGNO{~#U# z5X=a+miqFAwd8z>74t}BiZzAs25^c9GI!KJg5V6MF9;O)Ji*6q&@YtgEI+4>P{-j6 z+9PZfKxSLVpQ~*R%|(U8vz*|d31 z+Y2QtHVi6oFoDc+lf|1Mpi7hll(HF(sPef6yGkWs66obC%n3YDQWuNjYKqAxU~yPd zXc}sQ90Sl3kb(a|)d18U_7LX{3YK7{EREIJI~or71#254NcreGzgg)EjnZ|K0R$~) z0wTazvGBw3VEB4CSXNlbU@swuatx3ix4EP^*HjHblpnCm#_{s%47(M(1^Ce{MvxUU zcCH8rl^d}`lu(pUI_;Bgb~&MeCtgRS3nnzJxC?lTX@NfspP_X=E&9WA7{BRkGA-a! zfU2Uk6KFo4^oMjWz`N2EPKfNJ96^l>YH}kW6%5sE2q}|sC2^vb4Y(krdt0^Sw=7s( ze#wrTpFFQ0o;J6?{^O&(KbyP^8x+k_N<$XFYTlinu?x_o7{E|T{^w91fCKU<=9NpQ zHOvVBc5GpD4bz#-vdgP#lLxMcbTGJ^{&F@W5^tM_FvOAOjrE~rf@^N%gh7D}T_ZGDp84ER+b=k1ukoze z__*GA+6A%(32yIW_p3dkV@0M1pN^o+&S0FR7ogJ2l<-p`9+J@lVl{_jPrC|U2m(;N zNu15Qpb+rLz+xo30er`0gPPgICkS@v`rz^JX+1aA0eqvtR#vA)nOs4modX^~Fox{V;I)pL-A??v;5jDWz zL7#&tQ#jlRPPc7?(&4qE=6>t+DC;zzo*vda{`WTbN|p*tyXW)|zvJU1+i!JG4(p$Z zn_ZWMog_L(mVk&SR?M`0S864l>K<|ia1@OD0>#1W7H?6!kTVcw&3!W$;tDYV;!K&A zd@PMbkj>&ohNPl~zan}h6Q#;I%c5FeQwyfSWkpS&ffhmPon=6xJ~9+$6a$mrjbfJ7 z0`tw8V_-@ln@vLWW`=h=NPuM;5KN6={fS5fr6R%=Enn6>p+1a@f&j%E@r(KdAqtTb zHY_Hl{K?O_ED%slVi0sjk7ayeF}-139EY$L0phA!=;we$C@5w#P;rQmy~KCKG<7}< zgrf&I0b=0H!QBi|R3LEl7q9ZE7~AA@2bzyMCrkt416ey6V1f}?g$bR6DN(;vm^*U) zm83y5ADpkCse+1$ir#pls$ZaeYsZrXwZs{W^(!(hkzA}XhQtS$p*`Q*hAs^vU`FRw zMcI%~JNIw&Mcvmkr#A5cAu!t}^x~w_2{3t*4c~$5Je|@6&`g88_W*v=Nkmyl#FCVe zlAvD=4O8pD@OJj2;)5s94fHwangPJ?AjbhzWiSE&|uWN_2>20Vg1P=!fSGDquuN@nvv7l6Fq)Ny? zVRtPA06_(q0S=Z#U`PXmNJH8Mq2}v+Hbh1OVjYNno6R=`kLizKcwDa6u?wlc&KCKr zkdH)!1)hZIcKD)WBIt`8E`Vj4Of%l4X1u$%w^ss1dfiL|wtX5v&Ao9kbA}}QD;%W_ z%kP~7*IWvzfDo@DONjIUvTU!55qw1Q6g?GW6n9{sk>4ZdrkP8K6hwwX1{TA<Ns<7v8weqc?B#X`6IqNoQY^3(!Q5MLnPy7iD#)FTFbLY(a*l|bj-`jsYQ6_+ zL1!YNh8uAu9m)@|ATn$u0b8@Y33t zyQqwg*%Q+d2@OMx2Nn)W#+EdGfsrFW1oWKe!x5;2$b&~N$XV%Z1Dk~YfZ&J~pkd~_ zy9C^pM&@5W8Cw>U>E6~cjF^#GTy4G13MAx*wBVR|cz%xT3j!7}L#dd6&UpT!i1$eW zIe~znPuQiq=yr6%bU*;S^vV-P8pG~5{j^KVWfLmwQJjVaLaLiCilsIgHBxTNbh#Px zDy=K2rei1u3-y1p99+mK1TL5Jr{t6!vJgupu+=F;vV(^=m_oeBOxQdtGor;@$>#Yh znqF!Vx0`L86ELqRzKR$NK1tdAX&v|}xmIEQBM6HnD{&Zs%#1NS_Q!npwoMCELc$u( z?G#cYadig*VKAH{fqz4Giz z!*2bs)$PIZ_h01~g=S+=9t^A7d^^%1b)+(<%Ne34fc)aH-TwIWgz_FXvr{G?>@bnu z(F;1;&c^Eexysx(WBZ)WhF3#HX%P|vVXlXACDAQY(j5|=#tgCWw@27@h5 zHu31t7}e9{kTFM^q!$~9nFTlpyqmqQPC64c;ak)@P`-Au3 z%!PgJdbCi2>Cz}Ec9NIbM{>731M{4fDCG7-KIQ$uVh6_%auBOYfb0+j%ZhV_5Xef7 zKtwcg=LuRf^ArROul-kJxTSC#L>|C{S`_Ew2KA@o6#mu5lA{ ztok|zll#swfIc>|y4V|5Aqgc2qB3_5HElh@!AYRje>ifgC%Jq)mq! zlgW<@k%E&|E(Q9BI0NbwX&6rlN%^~UXuk~Ghd8Z-vYC;0Q@PF0=n6&As(|EhAE{y^ zu&&Ia*pmjQhi%-F#Zav4QBWvN$WRf1q6P#&6v-sf1ftTRO%f+5fWev)Foq07>Yj;- zd&xv4=Y%URo#>~?C|h8n33GE`=}TMJa~)b$_G^Ye9PvTjrW{Bmbhq1s0zQJ%TndQE z#mm6DwKWDz#zn7NVBRu`l9rymUs;0Z9@J{wtgE|#c%3OD2zi{!T@5({Fq-7A-XLD~ z2+B#?0DBfzanTF%ilIos9X3DXIBP3^Pv%J)-!>P}2EGq-+b=5sWl3u?lY>>O?0_*t zXej$y6vku6m{@_Xs%sr_X$fo6g`pd|mER89oufMZ=L8-@8>G!lsn5@GLJz@7x+frc z4~>Oat9)ZrZWeOO*peqGn6duk2B73d#iL7u%sQLbKjm(d7}q zG?z?=**w#=$v%Gq@Xdfpemk~^KCdMxsC&@?|N9hke^cAg7ix;2G)3a$F4Q2vNCtmb(kmiY#p85v%EKM*&0WP^>I*oOFnAPL#xXz(zE?|x4_`U6l1#jGK&HMWJFOFOFZZl#BtHK4gNzfZ3dEbc@mGl_)syBUkjCut%{ zv#^vC5P;oy36Gu8$!AufC(&b`+%71H+y=5OMsft?DZxWEp7FT5wqOb#ZiMj1EQoWe zcvK0;z^G@%1=v(+3a%P;r@|4OiI)p&Wr%Y~YE*h#K24r;|AR*#{XiLt`}cN_TAken z8eo(#PS!`Jkn%Fus!FdS=kE4~2TKS#m;tY;TK6VPCL?F{0Op8QG)hCIT7gPS?y*O8 zB@*Gr8YY=;GC8H@l=9-R5O$jIhO8nO0TB~Q!4yag&9KO%SSq)m8OFy1OOQyUNH8m8 z5~HE}kc8sSUn3`%pFxo>ZY{o&y)A+6hvq0l5RH57_77{!?Yjr=F3z?bQbz9x zyb-Fp$DkcTL}Y#DlNq-k@+B4h)@^rsF6doo&dTpm1#~M~vWw}09}gYY1$n2J`I*cL zv#MCeuo{9svxVUoe4Jk)!T=GOy=OLk2t8-RrptvkF)J=mjy$^?G>092o++PbRvpMz zY~1`537zf_zYvoZ@Pol)#D%y6v1)n75Az@QY_&3C73{|klJE9unuB4lV6wCnlJ z2W#d#(TJ_iQp#PKl}LQM02*ctHBj;^DtR=pZsHjs=&pv-Xp^<;>(m#h@eMw7{_<<#mR&G(_< zN$NnAA298LEg;rJgE%lA=7B7h2vr(`=R@?CIIiD^rKj%zgP`gV309fh4r#J7MVlZM z<2BA>a9LF)0g^0~B>~Lq%09f8y=Tea_aaE}&+SM>CO33^@R0gxg(YDdXyU>|`fxh=L02@$>!x ze7)Y$A^o*X8I~AP`4Tz=QH}9#JZ``}2kNi{Yc9ML*1d4B?qvu&LC$G*fLfR+(EoY{ z%?wstPRT>ATAb^w(w%gu3Wm_u#Y&)+%Q)eR`7)3Usw64)T}|8Fma?;I=rnr~a$ph% zMv7z&QzU@zMYmb+G@cQiX7eLvZ!-!nx7PZ{0=O%;AP5MBb#Sza*ykU=T2UZ#{dO{X zULLse0F?fjpYTT~5wwVbk?5Ej?9#cYcr{Qs^k2>C1&9adIqDxP|B)-4QZ1S!JhrZ4P0fx=qzGV1BE0adD7sAy;C6 zVksO2QC~zAC~HYKaj@G*5nlE!6+2V1a(XW;;*2STQd%(^Smnve4HV9t#d{mK^NYo) zyt|Z^KcFTC5QOcs=s!4Xv@U`|Q!{M`!BBZ2`?k?M`V8n>4L zN;r?BUW6M4KMKAr&>f0Jz!6*-feCIIJyWfk1@2rkjtSFP=`PCN=zrb z8QQ_Iu?<`_&4+U%g~^~2t|?)5q#c!j(UCe=yDU(+j9N-7=Yj3U83XPlf^m82iKwRk z14P(C29d$j_%V`iI%zZPnE->wQM%h_rPvt??t^jVD$Xz9oU2R|zK>mhjP7kY z>Y*dnVmnEUU*6+cBJ}}qNKm4fQ2wxKSS^<{gruMnoZ{tduABl)A}f(lat)H&-4)({ z#0|W?>~jiZ?VIa00VQwo}BUE-aG;0Wv%NAfE$Hv0k!C=?-p^n~x=O)EfXq$0mR? zEoTZy3UeERDr1FJGv9U`MxPp2?sbzp$~{1ks^L&85&xnrY!2ENKgK8lZdi1_1SGQgarZ=AZ$1 zi5%7k z2Q3$H%54s2Dpw8WLH@YM(Aa%wt|ZaumM5nQCQ2x{0G)YNANT!MvFW$|IMV87{g4Pw z7#s0d=|E=HOd$A8VT<_)jOK7sILTfd)j#b$W5pUSn7Oh@>I*|WLQ2tM`t`px*n;Oq zrn4$@>5}LSl;k&d9YYHs$PTkAHHCaP^=Fh((>jQpAlXO`sIR4lEKwCS78!>ImB1O- zu};a@*n~ah6*A;x%GwMKMo44MSJ0U7qHxr}T&tY|5PvdIT+FIC zE1V-JnUvvGF&Dq6rx=TqSx(&l$Z86O;r|5RzI^gT7z+s*sH1o%SU~Ekl2418>e~9u zkVr_D5PCN-D9gJl!U-&sCUaz}VKKb)n`$LyKs_lB-sF7vBmfXT#hgKj02c^OdcK5X zhi4=%3KRGbA3gfuQK`!obX!dKnzR^wjE@xWU@3%tGMwR9j1V9pafy1SU3+%s>}J6t z(>4|iH-81C-?~H2kkHaU!r93+-&wdPSOl-s|@whdX(NSawza<_@_aw-= z=vD5RP*e0cVon1-IX`DxXbO{r&_cpjmJ<7=XGFG>x$+cxMgj_j35IxVN2aC4tHEPH z*3JBd%HueKsoV&dK220JM;$@}q6s^a1I5(#9GUAx-%FM2kLL5{aqGa9ZG~q}t?pjk z$S7ZA$D#kLvk}of)LIB?=V3@Tk05vh!dQTyf)?b&Aiczc$Wg(LB?x6wjHuvgkR3eb zH~vWup5sV+SG-VI$7rGH7jaJ^o-lY6jTRMmq zk0mNmFsXtv#(O2JJhr2kWYThtOn2-nT+#_QO(++ZB!mov0)rd7lJ6L|Dffdso+FO2 ztJ9&k3Ne7YkQsSwRr0)r#?l7d1+2#dS*6SF2F)_fQQ2s96jnGvLc1sbm#n z5@G`cI)*UW6JoF?XRxbV4SR$EUNkuY4{Q~$`8JM~+)yMYXN-U-5Pq(DF`ArtbqZYq z&zosMSZ7+*+DX0f@wX(f#y-Y@xU0jrhe9rdR!>B8G0<0Kn>s?w6 z(|KkbD#~F!vXd;QRg=)u!uudr-GRj*JuL2C_d$e_c!5*ye&t4|b{}rXxs+91`Y0Ht zo-0!4Fl#$Jywtl2ibKu+i^_ofKt%g&rFH<#`GGKaT@;Kw=(1%M_~ny7KDKL+I0|b5 z3He337~4q2Kod}-!pJb6E~Dao;f_NuJoK|g=welQ@q`2H2{yio_O*^*kHAo?#0%L7lSjNSi|SS|Eze> zisZ~nxny8TbU+0=v<$%K3{_BvV;u3I%}>Coj@U~`z)%R~Xh|rUjYLAoX7Jv%?|mPc z<8Nh;!c`}Oj^VV*OQLJ_KpTGq6^NV)bG+p9ppAud)Eu#H&6YKr=XIU7W+;>J8>CVR zh}M?62MmYO5F=8${}}fK03j7bJCQ|CzVuN)4U;L<_+lp$YL|ei?c6E0F zgGIt2t%`hq0MwxfBnozp%h=OlmLh}_ElBe&cmqMgsIyh*dkkbhPO_ceHztMv(6h$lv5Ia#GkfMV4*rLrtnQkhxhu86s~QJmRBR29ip zYy*vQwska|_wig}J}xFpdo7cBt?BZNCw%UfWJm4ivTmXz&Wc}yAkkJrcmXRE7;7Lc zf5*7a<1a8vI9Nh1C#1g>)bRw{ujCTTVA$$9C-qjR>kqNuxd0XX;rD|&u1#7}h4!Mt zvo=P^b!$}fBTS@Rk&hvm!G0;}3Kmf=t;~58usFwY!!M2>IT%2g-=Yz!YnE zvST5fP?9@Ru5i?1VL1cvHyu%C*Q+4-hS9wTd#BTrDi2_DDN4OQihL7%QYQ5zSwVTG zOFH9_TN2QEtZy*Z^RtmP3?+H5^@+)TJeZKv(j^^e z)d}JJD4!uSF~c(xJbs(vuJKyR-pN@3d$v=`cTuhE$p=Hu0VHlNV#<4h03XCx|f^VmQfn({m7ISDb$E+3?&F z-7a(8l0i}0A;kaxN|)R#U}T@ZHx+A`xKFtyOtY%ka}OS=`+)FX0>#|62=(QWMT}f< z>#wedz&tdG&N5%);hvypbd^;fVr-5o3wx2tS>&YxQT2?;W5tTRMdXzP$eMfdz?FQ| z`qZ%gysF5^ox@`%0O_|qsgGNS<8{+6Nb2g3II>rFR5{9D!#zOoY2|Pr+EB6#vLN8K zHo7M{6|YF~^T!=~=Xs0+0KWHG)~`~xjV4Gev#hq!4;mlzLSPLjv0@Z=}A;*_ez?XQnDGkzLkEmzSrBSFUW%zv*)-Y=-GU!Nn3m zy_DkNgvDH?XdpYz&_;r9dw{-CdPZIi<`ORBHQ!*-eFA!aDn3#EjBygxltTvwh#3cu zMsPBEMW;M+2|?a1yUCqhiCKbDq)X0h2nMef>;@7Y)EmuSyN;)ZAsG$6MtKk`N>jIq zj*Gt--0EzvFBe=y`Q=umT*FlqzQES%;aP)5e1HuIdX7^KUVsO;V@+bu&X+tL$`mBl zL(j(g16>*d@g*<9#)&U1SlQb;q8}JcGWL#$2k(oer-JqdBc%y~$=Y=ypFAx280pN{ zj5x$1`n8p`Ua4l8KLlngUn#{v?ThjTr`|#kf%OoQpLYS%NA~V#ism4Ym^SgW0B!KB zxg1%AGesv<-lPv?iNW~&aLZ#4;TN<3uoLcyu0Z9XVs*zL2cv1PHFKgUwaS-SU=&;n z!ahT_RNn-U8iH&2qIKLoMV`(A5Me>&0MU@6{I1m`v2#?;%JR;yVU~&k-yMT~OGn3@ zgDqlIgMvIA%R~jOHD2POew9@66kJQg2y(4}rbtE-5!t1sR)DvhT zSJU_&9;3zzbas34vab(pCdg2Am%qPV>kB1Xo!EkuN~N|G-fqw3@An@4Vwj8ToJ7zs+iQ< zMwn^;zyhADQCbN7V&xqk&&$WS!N|Q@v@A~0<5)n%6S#s|1#BXC6_WBF4~T`}^01wE za7zqNs7f`_C)A~j)j5D|o)j~|6Q755ljZ&;Id9h|R3$eLrh7 zaXQgy?r%%ug)iMxF0G3+n5cF9ywz>tg~6BZ`8$WL<1m4qS!kcya6A~6d~1GsQrDeWx8*30Z=c|TLU>~JlVx*ATGf{g0hC| z>8Nz%Gu7;+p8szQfI0t+;D3q<{wI*>KO^a%W*LSUZ%di~%Eqs6+}BUxk9RgVzM1}h z+s_Z#xcQ5XU*%u#yu0zu&COqI-qtZ`^D%$%PcY`se}yskH@>lP53t?wF$oN}{^$eZ zW^V13H2O~1^yPQ|jg4;rs;@SN3;bf^FXOLw-+AXtV)Zwyx?4)s+mTrT z|7%~^9UVT{*ec)G4_xs!a#2e0-yLY7jSa0p5=)nS9Y6dP{J;Gcy4=BUzxJ$iipQH6 z_Z-LXrhe{ha8qB{iEDger(Z)St^en^2>QQu)K}`nt%26%)`*5(Z_rlW_lrHo zc}t(a;PVjKoQ8%h#qj1%+5=E+ewH?HNMvUL#TH?Pf9MCAAhKPg6ZiHrZ;0S(ZyEql z_{(p47vPh8y|M9~wU+1J!Y*7W?lq2%E$7}hF8Q~-g(J27?|KX8Bb?lh*7iZ0zwIsF zB_hPTZ2X3IiEIB2Z}CCDn>KKfC^-=pDvt`zB8Fm@zw2FuH%{}yTeuJ#o~8|?-w)CT z_7KTAfmnzwk(V4=t&A_5zqdL#G7#;#7F+}SU;CH{_8)pnn17R)PPcmJ8!HW)@23rf z@rxJUd^^&)=705BBa3~o+Hxmysv{$AP)to&{@UuGvPCRb>EqM=Rp#*ZMs2mIzMN1#wjFeIl~rK4VKLR~#M;RL=?Lluu zalXqh>=Ko@PkY2K!fF^31yR%Ais65jj;Zv>_@&a~>ok3g)_iv|N zC@TNc8)BFL;4MB&+;b$!8iz#v8aX7k_$(2)xX_v$f8SS*UH-^he3odGGJdJ-kzKf> zDC!a1pR%u0gk$0?k>}T7`N+paUBBxsk&Ie^^Tw9@-Y1Uw-damV@emrZ5(fxGhZ9?Q zr{;sh-ro7Wm4?mdD-C!4d)iRhYvkB9>P2-FF}AMT8$NIB^Doz0o~^aS9YuUZof=zy z$45Dh|83epipDXb5;wKBg-Dz@?LYEaVoSE#vbpCizH}5-aqF!siNm?CIB%p<4vLE6CnYp!#9wZ}hL zZKw<(pi#RDKb%##s`I7uSoMXIggrSD^6m%D2%YrFpE-o+P+$c#i1K2j$5rjLo7s1+-8{2$)O870me zo#ANXy^C0gv%F>AxJe(RYyby+KD>X=VR_5E|H=CVJZ%2Aw1J}k+p7&Gko!0*di;}r P%2;;Lz4Nu7{=xqRlxdE% delta 6560 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 diff --git a/docs/internal/MCCS.TEDIT b/docs/internal/MCCS.TEDIT new file mode 100644 index 0000000000000000000000000000000000000000..37591b741d92025e34bd46a28aacc438b552f750 GIT binary patch literal 42347 zcmeHwU2I&*mEP?pXC%@;(l{H(31&PMSsORKBK2cQqaFWDx5%c%8H(hRt@TViYpdCP zNw%li&FyZAq~V{&tbsU2vhhO@ERYu=@IxMU7YPz1KoBH+NU-~`5A&AA8d)$;MuJRM z$OedDOlIz+Dw{_9lL)v0@NvmGBy+?$g41-X*9E2^|KgQawDYaXD5p49j+olVko@vLM z^~M1h&F~9}b!8L~ZE8T5CJtASc+3ko1KuRw*&3L2L0dcL4(9-Yj_8PH}>W~sA zNtfSFD2?_mR3=?semyUe0iM(cWM@0>wGT`$?zboc3{Q>)9lL>M5oj-lK{bF-a9LW~ z-FkC(hit*p?C@T(Chk~KkiSuC86>?tEbNuz_v_oSsq6RG<6d_^YxpJ7G3D*wtnUgl zN_@B7?(R{&&DO?7+yinD-rwr(b(|D8T0Qu}V6O{xwRg8Webe2@^c~dK+wsdEd=M2r zR`}Ql(ZmEt6sMGL7v%}s&6P{nubVIJU%Ni>qlt?XzWvIjYuB%TX}@wEjX#?B(d5LH zOIJVt(wFvc%ujrM;&&&$?)n4n2H|GeIPtp*cN1{ciLXuk-o)2JxEp|*W8=i{jgXyk z3mc_P4tl$Bpe*Q`a&1C1^`7asHalW=jolu_b0C)1->dKJzy?Zc0Zu|~m>*1Wz56hp z@-9*D^}2iND-Brb;PP}1&?pc2ot_@-ze<~9@rKUj}VqaD|KHa55@kQfW}puy#{ zeWTP3%xD9KsdTysX#0qVuwZMgt94Kh^sRxhwzS>qz-b@Wd#yTxV9E>zTdiKxnt<6u zzZjO??EqUKESm2qIe{&SuXY%Ye=&(`2}j~+@LJRFPB-f9HYB{X2Gi`rqYmJKok8D} zW)YnGt;QvD50R+Xxnyc_4}{m-Gcz+&24T9}JdgpQLvPf=OyBJ8NLYd(ws+bwShqe5 zxquI7eg{ES!W|TV5Fht;;O>mLft57lhph%W_u}8&ZQ-#zv~dnW!MaCiKa80g4`EnP zWV6xT0Y3~x7-y^g5Py4DhGAjif+ISww*1dbR@z;7>RxNGCEyZmMg$RRHKt1IozcO> zN@rxCF*~iz&4cOndgCp4x{61`3N(Sx27WQAAfhX$+q>;SYkK`)0AqC)ih=v4x2usN zXmw$k0n0a=emtNk`*H6fIX)Pv1&< zdSTHFU`teWUYI(A?%H`s#*o>7&LWdf9mdaD?*7tRt#W&@s>W-hm7sQ}CsTsw0}{r3 zOnYj;AP`kDEIB6`n7#S|^NGY3X`z=et?tAfnW>?3xIXQRFd7O0UpH4(ZwMaO^c&Pa zQv;vg@-I{_xbf=PzUcbq4RGgXp*kEeZXof3CBO)#uO!3+_qqlf&PD9nH&>=p zz1c&0sewaQd)?i3lRSg-dh;QoT746)(V><*n;eD8P)87Iylhly@J>}GD24$0@XW>* zyD_-|ACiL+AHQ=Jw3_m)HX2<-npS@c<^%G<9TKSRon4JF7<*9fZN|`SdUOt<1`&5K z6Uk2nQ4(g%JPGI+cv))PxZc>(z>?^Hi`jw9C(W4ppg=&s+UjhEd;1e+oQJW^*>+WtMN_EwikYhk1{TT6i@;>5g z8`IIA*<&n3=;PG19)nR%j~ly^$s*=aM7xljpy)7Y*vOhq3QOYVQ+6_kOdW6wa!thG z6DN99=_2P^&a~@DNo}AIe-qE^BM4aeBmpjC8=xjZuKvf=O5I6pj8R|GbEsWICdM>h z*#fJOR=0;0iOlr%hus$E*3QOmpKA7G9)dGlrCvBNZ*uW{BR&q(3uxSEls(2If4$6>|-;3w0idePeK&Pg6>o z#xp$FcxF8z84$u^7OeVLH<3t|$XMudU>d0rTsjC(NJP1|apq%JP$Ee#bYStalKX-t zZB8(|eF#M}lCB~l0#%F+YMSYdN|N2`P*~Ueg!0wie#UiaUof{rqmo~C;yq3ODHLhR zEyS?2- z%E>?=7N4GBbOpybRMt>B3z4VMNdmPfi7Q;T*J27Jsfh$rVM>is<1lRgb92@C%KgRK zboKRGb#HVF9sJsZC}P z$V!NUE6v`mtX5`a%zM=}%)Lmr;`WXvQAj5w4kIfhyiYCHT~akE00;bNFd<#>#lV%-awegDnJ)DuKE5>(sqW*L_`~6OfR;oeI#RSm-0N1gCL2Quq)RY@yVnR|D@QgFY`?3~dK zm{U=Z14xrw6S}6b)4?QjM^yyIk+g@IN`rw{nX^ug$ic4rn2H%Vd_)@Up4(V0aaP@A zjHfD~7i{F%<)RY7NJ`fGFpEF?oC}0isWj}Zug|uaa_b9I+CTH$N*kSs>Q!uw1+b9Ai1eCk}*whcl&W4 zO9#%m1g^B%OC%)g#99krSl-vMLZtTY#_fmkpw+-;RX{qPZT4a-P#KT-WEK$_L&ZBW z7l%p_xPn5sjn+0VO|K(fioqFpGJ5I0h}ctq2a_M|&r^{mg3ArEFU|%V>0)+GG8{LA z=tnwc0Jd72Ov3d!9LP(N%PI3s%y1ZcIlGXy3uw1qPFB!kc2@^kd*j~itm!0NaKX448E0fB7nhUfWMUq<2}#4+hQBa*fj{Y9rV7GM z7>oyS52lws7GU^M#^#eV@=ObBHFmirMP89;Z!`O%iE-x||6fOfExVGA0$CW?@kFJP zWN%}0O6FK$NH)M0mM}rCtX9{+??h#>wp_zxJ0ba$U2b%{o^|K`NsWc2@iB%<{4cr08t?TlSAXq(rM9pPHN2AG zl^zbUrF9f$=Xz=6jL)+NJ*;3_jSRuAgTp;LN)C<=@$WopX*Q)h2;^^J83^}q9VSZh z%pt#PjUgpvY^$|x>_$*YP85)lDAh))wC<$E>09wsfw|~%S@W`d1sii4ZR#%t5g7j#vvNT&= zMRcpI&aKtHvP^IIf-&1%$z!?rmg&SX){KZc*zaiCT)&Ap$K6qY=*G=u?Cmom9njth z%rG!B`4zXR$Svm%5@Lj$`Q@dWPCif{f|Wn-;=_B@xy9-m1kqGp#4gDRazovPV3=ZN zSr<%97pqH9z{1iUn~w~*p9AM*M%6$RW~>Ug23-IIZZ35JDFQ9o)Plg+&ykdl-(kYg z4maN~nVmK^F~}Mh3N?gvaKKdxCM_k0CNaA$1)cm>^JNgZf*@PW8MX zGnP;$(Zf%}o+c8E?Rn1$1P)R$w;|PGZqe0bQev@K6Ubd~=PS~cB2LK;d~lXz7u`#A zq>7k0SqF249~iyVpp`}TzE@e9U&1Nqq?|#@FEhWoe9vhq4B40mJq9RPhVr}U6uu`S z<#4LFSSRKba>)_sTLd9BU|e=a1Q|^SMuuFtwT&G+>@LLhZBud?B)VWe)m?PmjYotB zeUN`=Gj3+Y(uebbYfUTQC3|W{b~hB$b-SfABJJ>DtI6Cu&?Ho5mo-*(DP>g>N-UMc z3nt*?z>LikD1^spUO+Sfn>}a_li;I23cL+3E@|-gGZP$2*v(BHC8dIUwPl(1Fg4fi zEvDe`=sts>DcLoWETn6p0NrTm_JW*^GeMF-#GM)}1F1F&4M`#b0WqU@paTt=unP5NKd!mA{OeWcA!~*k2K)tU zpcXKn0V%?U&xpDRmv%|i>cH}_aVBiQpz5+(3R7wI)lr`6a#Bq#Nw=fH`HqZ_2eRRA z&C*BPz~xlRq1TzE<%PNGQf;C3M#=$KWjbOs)eT?A7^7NXud)ERVrM3bBXDRE0Gbee ztjX=lY806zTv}6GDh87j(t6#Y#=4}vix69Ko@`wZ>n`kNy@kD`{aDt&2kDV?W)vEk z>hj3bpUrdd8Qr`Icbk&^8?Rn5D@zV$wZR^Di34}xGQ^+W>bj0P2iwVN8o6~3s}^o2 z`g7hAQ%43-cOvR`kR_!?JhTpkv6$`!>4HrxO0T<=Li5W2Vsf5mk?n&^9KhNiEkq?k zF}_;gspFj3ZYtn7f!_mTcU#ZmZR{Y~E_o&Em$>i}!FDj0HSvxLEEo|h@HLnOWNwcq zlZ|3OZe|0WUg?$7Zmsv~y@M~mT3M+qRoAL;xZ4mGH~>nb#S(B=yr!?mz<7bC^NrT! zS>YpO1INeq@P*qD9pjd2jO7FFXJYEX0vcf(I+ODTm}e5rkT7E_{orzIfNjABHU?qm zo5-RDTiaq5GAwpu2Ap}lBZ5F6gk&&Cp8*QuOVTW?-Q!+^9-qb~$FZOYnVPbb@IimF z?+GyNkOYKuLb(u$4M$$GRFX;}(5RwNl{C7W9ogixX$JO?Z0<8zdabhb>H??wwQ6le zb}sQ{l=02pU7%`C0_D0DR%LTo3&}iIC63^zZscbe?i)xBs&a+ca(qC_!t`DXm@#!b zAGXKyvMI0wn};0f01B-6c%SrG1LAhCzF=gdwOTW}Xl4rch1P6jMmh)U8$B_Xyz=*2 z&A}GP!}i4#gB%iIUFPaLN6;I+&$zHn5UW7O3Mf)%Hc>7(_q|4GoAaQOpRB2a9K!Aw z>K5a)GJ>S zYnh=z&MsG1XJwt~PcTIaL^iEioyLp}O+dJd$)h2pwAfkfVY^qn8<9))44J-9gR+nU zdjEC{J8h77i4)mW!bP8ZJKV_DT}5m&Vj5Hz@YM1R2tEIzdXC%t>&2Vdj74W*+0usO zGyoARybNdB9>1(fAk6I@EQLrPG|;r-PCDsJjC4?hHk`Azun7dJq?ZlP$=pdoeUuZy z^6d&acw)>&D1%Ha%QCYwF6ld7oAN#oQem~=iv$hI zTxo{7*T{kGVsEyb^f5Fgw1<}?ndk&TK^G0OAA4Eii4x3LyZn}!EUxTUI;P?zpa3m` z4nzyfq>QXbP_|qpVTy0+R-*Wvx{Ejl)_{KF*yw zu$ICL(Vs+x=brvK|J@Is`Z@ZLU>=_W&*N|Zap$L>n)%XufBuuJfAEvhq#b?x$A9+l z{dfQKPv8B?%^&~xM3|qx|L%YLSI5CT{?@0uzyIlX3G>hY;21oQG1l+D|L*_(&Ix!( z&!4{k?mORk_uXU1I{Nk>*Z=g>|Ksw%`}24I^=}-**Qw-l3K@QA`g#yO^|NydmLAB{a5J&DfZ+vM=$M+Fm^=y9|k zeKGoU@d04?DV!fKM&FCh<7+V@rqM75fcaE36Fn2XcvLuyjyxWY#ZTe<*}n^zD7p%m zv%{h(tc-w}cnCH({@(@WYIMGQ%vjOUctK!h z1g7xL2$~_uXE734wx3~+9z0MvkA!jkj{O_DD3(RK35Y=h8vO?_h2abDfLbbOU)oLi zg?EbOfM(jpa}i)30OorFbB+xVd_Z#)y#hRiqiCg2jGm8Ph|UjRd1ve}fT8_7cOH0* zz+8wv6PfaJ=f@42oNWX!-v^$LLthFrmgrsRQ9MrypNOt`m;jH3i6T=NkN#f7vCa=U zRv{WO7GS;wieHGp*ZHx-u_q}Qa5@yOi{x3p$sdm9obQ|lCPCxAQD5%6`}+*O6b{`l z_z7WNc&A`sz)zz0qB0(xg#uyoS@{%9;XL?yTVT$BuMA8P`T`z>c{BP5dP^PY!MeHHFn7~^3e_B73fyBLc!bN*6#0vH{ucm=`sJ;WBy zxe7D(DUXLRnUBI0&w7{<@zC;~mSF}@_9u1mv=3ljID{z-K{Mx+=h0!rSWGU8Wy?Ef zAPbYo`9brQLxF)=MRQ0i8SAL8RK6ie3QQA1n}bC=7?_ol^G;L7dL(0&05j?EJn%3N z0CVnW{6QWj%zuc-!kh=5aYyqz9*>SS_CxTFIW>ea0SwTjKRLdR*Hy#RxDjM|0&I9&bMkZ?8u42~5IQ z0P{t_+>SmswDL*&j!-%*jz1ly@KMaV^WHWx{-t=L{{@(rJxnx$9svYB-c}>8(~Q2p zcnTQBmi|+8k#3S-UWK24Lr`D%lwo5o_hak@Oj+ppsI0%F-w^gZ4!-w_;VilA$>Jd_rJK$HUNmEX}u% z9}9MOBNM%i3_x|^ z^`*Ly;h_t_%t>E1oCJe}TjUJaRliVO2%fUwDPb&y0jf}63Ik&?(COJxa<=PbA?9s06(988|(p>WMV985s7(o^st*ewty9AAOWCouVM$LR|O;k3h6mBEIvXn^39LZQ%L3lg@Gvy0mJ{jn1`W!1P@^-L%4}x3-Bn6r6(ol z>{!zCEF{g*tbA4^Cb&Hr@Ws#f!3@XC!Pv1PjJ6}ZJDQ^ePXI$)UOrI(qrCI6d_ILg zb7N&f`N6!$A)al9e93sv$%XGdI;ITB* zRU*J7{uRJb7b2e_p5MZMW6loK^x(-!pR9jzEcqNJy~Mxdrzu1c?cVCkpfU6>fhhxq zw(9s2FHG+-O3rUa!_ZdwfiXnjJ;9U80Rotmf0gs}41tHA z`^1+q5hXJ8v3FSb9-8^F@j2n$!;}kLS-m+5#^*n#a1ng1N6!x}o@A^PObxl;XHOjK zmoV1tQDZ4R@U0>8`4r61+o6s{Z$~_IFzAAY3=G$`NJ^fQIU7305hAGW0tgS3o-Y{3Erpy)mZ*sEmeDq&` zag6=G98n*8wET->?BF1I#Mj3U0@pj{>#5x4Lp;W|WIQ>B9E4piz3?v65qKFo7-XQ84}(JBP=O6&zz9 z50e~Y=U{?mp32!EeCOx^aVLLt3j7&hbWV)qwFBsDi0RKAb(0>!JPsM+lfXOx%=hGx zz+g_qkA1AtBWD}fR`y5TDVS0K11vlaciZma%cDAL$5Qze47U8-ak$V^hH`kC%JfL(gXBn$y30V~ zVIu78hA`a1#x@*}!wG}!vm=22kxf~oTLc()9L|Q~BY{yo-sT?wj~<5$42{L%@%kFd zSbC%fJPH%i40DMDW*tk1V62S4C&%H0u{68XkWCmm`3OuT^eBv{=R}y~;W6J}&&NDT znx6vW>_-VqxS?x^))u)cwS*j;OjV@ z9!lJxe2P{+_?moFJ|5=TpIKiP^@%!lFxH-jkaBp0FOQ9#cN8WXGXDvV@DW6#$iXP@ z(1S@G;TMfyqOH353k~Je5k5K%(Wo$XEW(6G_{BpREdzsXrr-!4VzGS#ZdCzxipO9-O5K{+%dmhqd6FBKM}@Cj`;<~fSOP~2!G6<-7$X# zkFy_vamV}u^Tgvx!OTGy-rvc1I2H^+dDmn9k@Ns2`FQy_JeK!z0%GHsG&mUsPe*?} zQD3%87RD|~QwVKrfvX(B<=&RV0@4g7$`RN2__+83eF0`p`V&U{i!fjI^C^~g3ZuvT zfEh-If@eM|c>58U62{W_EC`9`)#&4HEDmml4s}oZr1t5b*WI=%XPFJ;OwSt!n%U za*1Jq5PF24!sB6v@a8gL^pyg@Ji<@K^GP?>5DUOZfYDb9tc@wma~5Xo2r#5aUn!vd z*qj6jn$s8YB(D@?@YtA%P=Yw`UMUz&59aqM0!+$J&%?%&oFC7I`0p0}<1sDp@N>n& z{Dt%-7*cZ>J%q0v2+X0!V`&C*`*HSMD5D{i55{pH zg?Z)u!qJ)cJ&b#p{k!ZM^7?X5lE3pXj0*T1%AfLwvuFGWUQK{K8z_%)HI=W1uO?XD zA6XcuFNBBW)r65UkEJ}Vu=}g%7x_h1@7tPbPC@I zUtbVBWlyux!>D0%Y&#E@F_y;FVEu(&_G1M`sx$OB2sfV=j%@7Zo_X>x{jKbNo>E^9 zJpcDaZNgYWB1Oi)rN{H43!2+LcyoLBh)~>T3t*@X>fI!3&vL=wwF5)<);Yz&0I`b+ zXabCT#Q|dtfrWT(C1arxFx;JN5wsIL?rBwuC0Lm1Up5x-?Vb$BF+<5($}q41v2 z4Ac(B`|^-&_*iu)d~Tup6tpqwB%N>F6)VG zXnhG(FIZqLNmj7!nH^NXKxGR>z)BmgqQE8#n@U-Z+jH}%tkOd{CRT-#0xw#*f%kfJ zQKAM_9bB~#DJzDNNP<>|kn%u4VSh@chNK1#>t(aTH7Y%@roqf)Rm*v!AXBQUrQ#~B zNl8>x=ta>H)TwLj>~wA6VXabIM`;czZ7J0j1})yLAq05Q28E%a0u(h%j{|B@qCu;p zp~?oX?4mp}r5%#;(LwpFp!}HB$duA|T0Fxtmn!_>YBBpdBdi#us`0eCNgw0?}#NYpa>-5pz_5GY;!HdoFFHEi_S1}*KuL3{DGEi|O%+kl&8MEtNx zNvfnIi&#idy+mqbpo%6dVi2e3C{<-uOQzh$-4+36sn3CeNGR*a>MZ_3C0kwj0&3A; zxq5*GmM>htsoz=M#KV35#!Hv3UVBOFjkuD69DldNDmz+AcV==9HEp^FENMe`@KrSW zlXs-p7(3J-)=?^Fz141^x{d{!MxFQ;3JQ7qCm^q@lRAK?>Vcx-EOib=+k&Z5d&L(` zO^TY?QqaDxWdER#I|6M%kY?M`aR&O$H(IMypO^tLr#Oy#ZHS7Nut!J$?b z!a?Dv?bbJ4*%46s7MW_+Q6SSbs@Uc3C_Ivi;$G!al2n`E`6vO00!ZmX_%MaIk0Mev z$}YKu3YgMJM)b0G1hHO{*ou^Lf%1rQ#^|jGykv>e&a%fMIjIUS1Y)Ty)^f+-C6-M= zB{cI{+!PMEwQ6|bj21MaRM|OGtr|LE2|E zlvLzW1SxhdSF!L}V%<`K5BD*_^kKrpDTSF5E+9DGWk{L2i00~{X5}6_Dt%n81+h9q zNYR=&v@BNx%h%A+8{+6OQba2mDpv+esUh}JMgs@gL^;kL?`&LG<8T*pF+QLwVI9Sh z@Gw)b(8>&P5Z8*J6y7v1A(~!TnqLN_zm)-M&pl?5D7|WEtBbnwU`{Wdp~pkec0`6e z)Sc4FK?~;f>l-ZlMnSVwDGNbK(L}9>kMMeXdAYV$Tdl14@{H)%;3!as-qK(-j-pr? z$`*c-xgQmeFgjEwDp_ZxG0~$}AtlXt#K}I9N?xQ4IjnpM)|b^0HJ;O~SzL?HGn}C8 zd#&~c1jX4=e}o)xR+ox}2@{}!ZjGwO914j?aM`GYPH@L!b(TNUYp#`)m^Y8l|sgf=woJbg%@ks zYI`>RRZv$dbtx(oX)8eSwgH(vtTN?EZl?gLBK5{b0P@Gdo)oE4?B zI3JFzBa20V1NocsgLOD*z%gKvl5AIpcPSE@@;NV~1Xu?ar^u+>Gb;$vJef9=7!IUgbO3po%{F3CI4k&OE3N=m-T?LM}6BI|3a^h8YVGEhw- z(A$+hlnGYTUbOm}hNj|XW@Pdr7xi97r=W@;NrRY`Y+K>)K&}RXZuAjCz7)Jx4J5Y< zs@Kca%d%=g#H9hF(xo?HTvLRq{hSiWtIKMqGpT}2keCA4H3FgOv$-UJw`kCYry0PY zM&TqqC(-mli7p4UP93Bi%Vhx~dDP})u|pKwjQ1P3GuwcLEm?iqPU$5Y`}A#rej68< z(nzzN3lX{LbO`r-l<%YOiX*@-+_gN`knVQ(Sb-3xq4^Y9(dmwhU0okJ-pwGeW-%r= z@ov|9Z>fFu;q4jYNm2~6~8;~QF~v4CI&@iX}Ro^WXZL$iK&EK=1a(dI4S6bd!U3U7o_q#+=yFKB1Z7y z_GCZ`W+lw=ai_maclL4>FXdgzwz4;EiB}|xk@E_Xz%j{?Oh%yF@}UEWgG1vr03exy zd6R5^A%}$(V)eR!9bDkR5WwQeDkyjFfXZF&-jMAJj>(P~(klXt*%$$NiSB)Gh+U=_ zPNeL*d|$5Gm|t=%QjVM&VM~xSuT`NqI90N!DM)h8ETc>C#c=XmuW<01^W>D`navsF zE6iKNizu-PgpC%;$g6!~r*0k9S5YBeOQwco zx@=K;aSHbXkv`2XWu=ukv84cp3wm%3h?o*6!9354){zE62Mo{>lUe;AmnQ2ii71vW zdz9Q-ATx*;$z9xi%#n;@yd(w~B!IE1F4W@I126_H@a<+PcF@%YEFa4d)b6#Gom}t& z)gz)XU@+!zAB$96-se4}mvtG5=ipZEB4ZY@)xtf4HjQ@NawL(t$i%siy;4gM+tU4) z?=LOL6(8I=0jRyx@;Z6n7i4md54Wj;k4PA+0r!2Cl$FM7Noy<^Qtf-QAi4p&I5ekP1jg zxT2>LgS*AeUEzSx;V)|dpO{^EL#6O5rWP8b+))D2Ithv?pa(96!B`ZL3mtvABtoxJ zfyo|oOT>M5ON0@~u$F(){}uCe1c1q7pw|3FGU_S1hl_gm{l*sVjHMZqYOzr8r7Pk~ z`uEkFx2w8-;5zy0&BbcUV#*Ra%>S#bq$=Mxo$}EQCl29EmAG{G2P5uotjO)o}_;x8amn1fh+=^cL=dm1LkvD@Dn3cUdFUY+Whe z=_V|tv?l$p+k9DWRrMW6TX=^u)aPy)>0FYFfn)=d++x|Nw?<;~R4?IGo7GIHfwK8} zw;n8=+X)9dT36eGhT5*Y!fn9cyMR0Cp24R!TJ70}e;;%n76^m-GN*~ezQ zyJN*3*HA}p69_mYrNo*!S?@X}U>Fx7I7I*D)b+vhHe8#V6S%6#@BfOZ%}s=d*Q_oz zwNO*>aaOm{8wV2}&GiWvrR}AK$s<%D&yQi%IhD-jA|B?*8a#PRESw!-RF5-wZHI1S zkA4m(;lJsudst5P8ssBsH2k`o3T zT%CcM_Sj3otd9Ez7=Xy!L!6>%H2u|1WctarDOioxJ`rss~`HtW50 z+%t!LFy2Ba%k_t?cn`7=)R6x^WYKL~7Ug#`o+APRlk@O2HctYCH=iumAgqK19R?@) zHr&CyQgl-YDT1+tOHP;Eshg0+y?%^T;YBabni7}5COPdruN6*^+)$^=d7I=6R`%Rz z*SIRzNiv$^&R?DG)T@J)VPN=Bp)R92)-2yb4!W?uT$YeXtN zWjJ76tt>7tzlMA7aAoV9nZ>Pf)z#|Ul-wOI(6g%xD>cxyu=MK-YYVrL>MhUD zo3-jBAoj}l$0y#aFZZ3gub_~o0qO%H#e?@eR&765Fnia@~bz^^&2aOt_VWvc|0PxUU%;n-q0+z1J`6XWl3@N!^h=ReC${f4juj&Ne(A9C&?-b_b@i_hR zI6&8)?r@3`US&^^Bp;3tu<;Sj5;on4J`&^_3O(Xa{=1sjqh~e8!oOJMXRcIw6B*G$ zZDw|Pae39;UaZW%hRMV>`Xs5u%M_8itsoCn$QcW(q3u_qGqa18wY7y=i};fx5i<(@ zTu6Ws{ao-Ow*Fl3o)7WTNH zp~s?Dd7l!9VFp%^u*Q0smtBLfGR9vRj$mRVY>+38Q}iiL6Ua3X;wBqh-;d+_KVbtQ zAWjk=MdVAqK)6qBAqdfUYV(~=3Gy+(Ni=ihqM`7Q94$nGhA}S$+fewO5CVf2z7RH$ zQwmd97Q_xaWQKo6iVqtw$*C>j-=1p=(NnA&VZ%r8LjpPbct!<(s)dG-mY^TW_oC3! zFt6oWW?c)Zf!!AtGY!#ixdxB-71v_>6#pdCp#MP0iGh*6>>xankU0LEI%{GnCRcO4 zXr#iD*gAXp7LVCD7~kTB#SSu7UZ8&~*DEyA<9c1l^$Ia-FW6K@4Zo6W@f3n)?G?&L zT?83-2G3s&TC`W*2rdOMiYGsorxI4p>qoc<=z@P8Z@3xUFK_z*(qB)o5NAaf3c zMoy_0{=RD=2+{V!1`Mp&i1x4Z3DHWPz!o8gEe^jX-T3M7M_=PZ!ugiZxE6L|SpUai z1BLDJd&x^@V)6D9wkTCzrxtJVRu-?fOU@z3*tfSZ50k=6ihP3y`L%E)1|P8|ejzRJ zi{d}zR}q(O=w=&c!Ukae^nV2WM{nO-zWu7sX}WmIKq*d#7~RZ&d1^P%Q;^W-x{*My zCsItxMcV-jg-hYkGz`wolp<Mh(c=Opl{zM1ci&IN{Q$!)pE_j5QNxdZ^NOb lNqi%OV8e2zA^N&B%wbdWY}j6djv<*a1qTA_@&fPi?BEw3q-ALLgc>lZk5KFWKfJLXkSLpUFhFCz_cA z0;&ciR-mqC#fk-65J;6ORH^KcShHi*1wVl`68GH6yS8H$M}kPU-<)^ux%Zy?W+uP5 zf3$!4VK$DG7b^Y9o^D6FqoN%*Qm*RjPEQ|p{XwKY_If?FtySCa@AY(~Ro4$xd&do2 z3J6rFqfohn&JYSIB--%?Lxf4!lpCrJ2?Tv_K$*4=m0hdUZvQ`o3gTdWf8XcbZ| zUe{~8k>?LW<#(wntw6DBPQxzMs!itFH;auSf?{9l=mW2<)n4H5=^*lSSXfBDpM5>~ zbM|8LaAq!EJERi2?tYKD9<~-nen1sb$*!t6>t$ziz0^?Q{&vR;$QD01G(}MFeKKGW zh1XMyK1?%ih1a=js*Ajg^dO|t$AVZl-ZXr4Q&26qJ(dSf4h7smQ&sKWeuv5nG>nP7 z1Km4Bt?Q*`yUH z&*xA@v+mf5zi2O!YS*JiT>9zh^i1{LsJ)}ZyZ06!oQYqy<|?&yr%|;QEc`94V3zep zt=?2CcCB1%sDfH67wvbhT%qk%Yu+vwo6VAaGX6CAcvL@QS+838n@;&Xr&Y3x|4)X| z1X;^^#mcpuMx|6OmZ2X{Z+X~44hBtgXh?rzDm_d2hy1yzd?LJNEwoA%r`f1gidAcQ zY6!KAzpRC7I0NQPPFq%JA#x9!fBy*-XOxc#t6<3D-$VGHzah4D111lL^X~hnZ7|V8;$_AivvaE;k@gm;93a)UeSQLSvZDH4dU~AkJAf{3gJOvDO-@<|ej+!}Z03HY^ zv`hVi!#p%O;WCr4E$v;P3l0!dmM4&}3?fl)7(}9;0TOd&su1uB5cc7y&MKV9>Ahu`-yy8HgP4tH4e;4|zUG4dOK$1{raJT?fLCCDa(p z?B(7Tp?%sPAEP~i>`oxJCy>t#Vj7it7TA9j^qJw92WBRHKLI{^7|K1!;Rq6wd4ako z9)@d($F`Wk3qfM&$a_y7Yx1;~uq`9>pUNp26{B0WI>#X^GKfhfeFDHgMJcdeY&mc4 Qe(~TQz25)MEPi_bA9fLKiU0rr delta 3203 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 AL;wH) delta 4675 zcmZ`*Uu=_A6#u@BZP3Zs#s;h#ayLflU>igc2+Fpy7FJxl(RNTIBHjAU6-ztYjxaP9 zP4?=)>w^!PnE0ZJF~R8zi9YF*!6zSl@xk~2YBU;SqKS##-}!ou-8u>VcJJ?;^E>DK z?zvz4=X>_boA#?SO=nZNrBq@0_T{jxeRci%3wx)X)Zf}ZeYfs)JGpwL{tepze{4Ez zHok_74Q6x8bHqG9@w{W8^Ua&;&7VsxKf^8DI%}REw2tY2T6@i^x6NBl6;;}q&*Yr6 znq5|<1xL;0)6USf)Z$_$_q3YNWSyd#&lglmEv5>k%-m8oRWLr;tTR{2pY<@0PG6^y{!%|$DO=k)wIA2&+`SLvFEaex6 zvd(oUt0JM`Wawfr98=;osHjLoeXY9A>#6LLgY+}e@c2|PWMV?&iK$pP6d(4~Vp}eq zPZct$*{t)VC$W$zD*VssJ?*=9sF9gm25pZdokIS`$k}jwWMEjgdqY}#)#}IItIbBO zJw79{p7wQ{XVw=m&kub)M%*ubzd&5G*$yENsDe{mggB<1Wk=ulpEgd120pX*4sxkO zk-+qHIC>^NoJb~ADwkH_==o4A5en+wgPo0oMw3)&b^PG{=4O8~F*SqsR8s%Aebgj6 z(D8(Mu5?Uz*)&Qg0H*<^{4u+XbI#($E|Zg#n3M#PvhrJ|ZioE|z(Q=^=mk<<_k414?&p=2dd zR9y%M6BGKk?cTlx=SC$NO;~i$j95Bt2BnmDy@po@kNF$zt*bL9uiC4>kDRm1P1X); zb0QRrgrk8;%VY7sPOE8rG7yi4$E&~&t1)6!iAAfh4Z`cJjYwN9>%aI1+&p!UTGlSh zlL$vb@z_)(5ViU%2L7|vEE=(CGM_D2)Z<~*SzGnCQ$1UF*Ic`6XB(1jMo^<3Jk`I2 z=nMgclzE5NTj0b|rVH!Pdcdv*P|hX>P@iSY_6#FrLcka!C>!W509e>o**rNTkWupy z07X-MV3}QSAvIumalM6WK|L-TE%11b5!7P%%T_ZGn5272Nj#`dQYo{c@}#*qBOruk zA5{bBfQAYQF0Z$k!!;>jis;+Zoql-ZzzI5s1xo|sn+!DT?}A?aL$JLE@Y-@Z7^%}Q zPj!_eyhU|r=Oh4R+z1}%Kw6`omO|yd( z_&6gnQ=}mx=>3BlDI5=M=DIJk z3pbLfnu*?A0JgD;z$L#^(8!(K>k(8+?QW3Frh(!ylyKerQe?NbUzQb4GH>4qe!(KfiJEH9tMC!HC@UvJ;X8ejR0Rc z8$NHFYT!bUh$gHIXE`=%4v38EcC(T45hXNo1>{)BglGwpuTpvWOB5+wkDmkry}Lda zoiA7wEMS&b15N=w9%GA~iYs4JQec7UVoi?8EiY9YYWU{aAuQg4se|cu1k{YX{%n zlCm z26`!!Cwv1$Zh_o+d8fD1?Gs5jku_FRiA)RYD8fql^hO4k(2xm;2z!T#rC!_8_oiB- zQUmzW9)%EU01){Qip3fW1Xyz)5VB9dHPMw8kz_hZ34~9Z&)NeOX(=Uq|!(m-6Z%it@AF6(tx*gid7UKQ~$( L{>uLQ=AC~5gr1Pk From d467bb7f57584bde073d1c7762e1d19d6932e7af Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 9 Sep 2025 10:11:16 -0700 Subject: [PATCH 02/40] UNICODE.TEDIT added description of UTF8TOMSTRING --- library/UNICODE.TEDIT | Bin 21624 -> 22129 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/library/UNICODE.TEDIT b/library/UNICODE.TEDIT index c049d8af2ab240774002fb162a5c9f7d7ab6cc12..907f510f49adcc4246c5534463403a976bd490c4 100644 GIT binary patch delta 454 zcmeydg7M=T#tjcdCW}f6%Y}yc`#Sr(xY{d(`gwvFnhFY>(Qc)A$t9Wjd7GI;jhWbj zLxMd0+$T4PDoxH3k6|pHd`#SGGNXhBdwFI~jzUuEWFrZ^0ENsng~Yr{h5R&yl8jV^ z(7ep#{FGFM8PBvqj}wXifbFFAGc1~D~epjDG3)Oeu|QYg;I zFDjXAE}`iJau&!viACw9xv6<23P3GD#l_ehh~0IY6C^|pRYe$pfEkFnK@3J9W(6@o zB4RKG@8o(!Vll&zo-}B_;Vuz|=)Smp&)0m4Brs3D-Y_C6@CK?(V z&K{0Iu71Gq2L`l)o`SElbFikSW#f6q4a0}E;hfyy9SjyxL=xd-{IuE8=MSf#i(`nZRaX0%eg+0}9VUsYT>!o; BF$Vwu From 3e322d48281c3e62f2e04faafa32776625f89f3b Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Tue, 9 Sep 2025 10:35:36 -0700 Subject: [PATCH 03/40] MCCS.TEDIT -- clarify the filename issue --- docs/internal/MCCS.TEDIT | Bin 42347 -> 42696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/internal/MCCS.TEDIT b/docs/internal/MCCS.TEDIT index 37591b741d92025e34bd46a28aacc438b552f750..60c350314a83df276944df5e81ecb0a682de12be 100644 GIT binary patch delta 1674 zcmZ8h&x;&I6rNc&Xcjz(M3UP(BnEVUfG6?bvQDxZ;_gDW1A!1iZFTi@Io(xlRrOBV zD1!*W9}o|NXBG7-!SR&8Km-r|2i`sS2MDg;tL~n4vja=@t5@%R?|a{SfBm-d>+dU1 zUVC_6WI;I!xthP|FD!08{Cc>e()phsB^OKKCN$MWK}U-8*jT4hI;z8B>*MX=?CmM9ih?!nUDXmq$vJ~(a09`Qm>#+r>gFq1Y&UOC0C(x!^2VW+Mq?M2Rn(&A%-#%_5jw6%{a$PL&BdYfuL0>Tv)DA|H0uRVb2cS<;pZ zmomL}`Fx!zZJ9JrLVvRVbRqV%x}j$-$k`!L{o#JF6sBpf74ln1(DkbpWWGL_WXB zKly3(t&@|%@P(7X-P_6T8_B`mVRGxn{yRj(-|fe}^LKYUjQ7@%;`D~9`Nc<%w_E4a z$8B*afP2^~n+e9d4ahBkPsjjlba(SVzIb`)C*tc<^1ID54xTiu-6t^$Vk}}fP+!Ck@@gg=ML+gAhNn~=YW6YizD>tLygz=CX zAh8PZv|k}2O`YRdw#h8zGwO(&2GbQ+kT5(Tz{;&@*FzMXwB?aD3{zs9Kn>(h z?aJ_>+nQKG85lGHbtx%oEU&KUI0jq)oj?8Iv-gIt_x7ddq_=e0hT$2*;C?h*+exm!`Tplmo*xXp`guqnKK%~> Cqb|7s delta 1269 zcmZuxPiqrF6ir3g~rHy02I+km& zAqQUte0X(ZubBOK)E?e>e62WGvLFm-&Ww`Gi#S*X%$PLBRmiM6#w8vUvJ0vM47y^C zOYlRcnNN-LA}jC+79?6oOU2lhX4aaGc6D)XWuZ}R&M!4?QVs1Ji$mkVc>{i`HJ27T zO4`cgQU@0r_&SRdgfqX~q7KxJB}pWBKnQWV>=HumPB~x_mL%dyG&d&iPNl7W?5U_s zwGx=@1D7Txe2&4Cqd>ZV2~`>e;AJ0Ao*8tbei9|~$5BcSfpUIWq|-y^lw9N55C}J##*k2g-lsN6?MS^r zoP%-J&+M9k^p z8Y4rWRk3x5RM0PQf}!Y9e?(bn(G`+KF41E!0ke#9B9+Yp5)5xVeS4@hxtv{mwmqEQ zJU4NrCL%6b%rQ==OddT{iw=35bh0@b9+bhTY-j8J0BZjdS;i~S!6rampeJmI8Gv{t292O|QGZqFr5+i{eLJzld&`n)_E zsuHf9P#E!1UMXHertaeQlzvcwmZj0?s7KZlD9oP1rL!#2)Z@VY9rMLNpeQ!Gzcqcl z44f{x#Sz_*j%l8K-#&HSN8QHOkN*HJD~*H*vPWrPGC)^iPssgCMt96qV7T())`{Z1 zY-e}+Z1G6}KSlZ}l<-?99j4`hjRMcU?wrnk?*5*dJ@{$@A6{mEUOz9Dn%S$pnWLMZ NT7|-Pzc};o!(ZsmwoCv3 From 32145e2b6ff6049327493e63e84f3c3df5c5f0b1 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:41:42 -0700 Subject: [PATCH 04/40] Basic font files--see documentation For the most part as described in docs/internal/FONTCODECHANGES and docs/internal/MEDLEYFONTFORMAT --- internal/FONT-DEBUG | 147 +- internal/FONT-DEBUG.LCOM | Bin 8702 -> 11748 bytes sources/AFONT | 236 +- sources/AFONT.DFASL | Bin 8597 -> 6642 bytes sources/FONT | 4405 +++++++++++++++++++-------------- sources/FONT.LCOM | Bin 65336 -> 68727 bytes sources/MEDLEYFONTFORMAT | 259 +- sources/MEDLEYFONTFORMAT.LCOM | Bin 20840 -> 21044 bytes 8 files changed, 2751 insertions(+), 2296 deletions(-) diff --git a/internal/FONT-DEBUG b/internal/FONT-DEBUG index 52587e8ab..8bf7b959e 100644 --- a/internal/FONT-DEBUG +++ b/internal/FONT-DEBUG @@ -1,23 +1,25 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "19-Jul-2025 16:43:34" {WMEDLEY}FONT-DEBUG.;46 19345 +(FILECREATED " 2-Sep-2025 13:47:42" {WMEDLEY}FONT-DEBUG.;66 23502 :EDIT-BY rmk - :CHANGES-TO (FNS CSBMSIZE FONTSIZE CSSIZE EQCHARBM) - (VARS FONT-DEBUGCOMS) + :CHANGES-TO (FNS TRUEFONTCREATE) - :PREVIOUS-DATE "19-Jul-2025 12:36:48" {WMEDLEY}FONT-DEBUG.;41) + :PREVIOUS-DATE "29-Aug-2025 22:39:54" {WMEDLEY}FONT-DEBUG.;65) (PRETTYCOMPRINT FONT-DEBUGCOMS) -(RPAQQ FONT-DEBUGCOMS ( - (* ;; "Little tools to help in debugging display fonts") +(RPAQQ FONT-DEBUGCOMS + ( + (* ;; "Little tools to help in debugging display fonts") - (FNS DEBUGCHARSET IBM ICS SHOWCACHE SHOWCSBITMAP EQCSBM EQCHARBM CHARSETCHARS - CHARBMDIFFS SHOWCSCHAR CSCOMPARE SHOWBMS SHOWCHARBITMAPS CANDS) - (FNS FONTSIZE CSSIZE CSBMSIZE))) + (FNS DEBUGCHARSET IBM ICS SHOWCACHE SHOWCSBITMAP EQCSBM EQCHARBM CHARSETCHARS CHARBMDIFFS + SHOWCSCHAR CSCOMPARE SHOWBMS SHOWCHARBITMAPS CANDS TRUEFONTCREATE) + (FNS FONTSIZE CSSIZE CSBMSIZE) + (FNS FONTCOMPARE) + (MACROS TRUEFONT))) @@ -26,7 +28,8 @@ (DEFINEQ (DEBUGCHARSET - [LAMBDA (FONTSPEC CHARSET INCLUDEMEDLEYFONT) (* ; "Edited 9-Jul-2025 16:26 by rmk") + [LAMBDA (FONTSPEC CHARSET INCLUDEMEDLEYFONT) (* ; "Edited 27-Aug-2025 17:19 by rmk") + (* ; "Edited 9-Jul-2025 16:26 by rmk") (* ; "Edited 6-Jul-2025 22:33 by rmk") (* ; "Edited 2-Jul-2025 16:50 by rmk") (* ; "Edited 30-Jun-2025 09:27 by rmk") @@ -43,46 +46,41 @@ (CL:UNLESS INCLUDEMEDLEYFONT (RESETSAVE DISPLAYFONTEXTENSIONS (REMOVE 'MEDLEYDISPLAYFONT DISPLAYFONTEXTENSIONS) )) - [if (OR (LITATOM FONTSPEC) + (if (OR (LITATOM FONTSPEC) (STRINGP FONTSPEC)) then (CL:UNLESS CHARSET (SETQ CHARSET 0)) (LET (STRM) [RESETSAVE (SETQ STRM (OPENSTREAM FONTSPEC 'INPUT)) `(PROGN (CLOSEF? OLDVALUE] - (for FNS CSINFO (FI _ (\FONTINFOFROMFILENAME FONTSPEC 'DISPLAY)) + (for FNS CSINFO (FI _ (FONTSPECFROMFILENAME FONTSPEC 'DISPLAY)) in DISPLAYCHARSETFNS do (CL:WHEN (CAR (NLSETQ (APPLY* (CADR FNS) STRM))) (SETQ CSINFO (APPLY* (CADDR FNS) - STRM - (CAR FI) - (CADR FI) - (CADDR FI) - (CADDDR FI) - (CAR (CDDDDR FI)) - CHARSET)) + STRM CHARSET)) (PUTMULTI (fetch (CHARSETINFO CSINFOPROPS) of CSINFO) 'FILE (PSEUDOFILENAME FONTSPEC)) (RETURN CSINFO)) (CLOSEF? STRM))) - else (LET ((CS CHARSET)) - (CL:MULTIPLE-VALUE-BIND (FAMILY SIZE FACE ROTATION DEVICE CHARSET) - (\FONT.CHECKARGS FONTSPEC) - (CL:WHEN CS (SETQ CHARSET CS)) - (\READCHARSET FAMILY SIZE FACE ROTATION 'DISPLAY CHARSET])]) + else (\READCHARSET (\FONT.CHECKARGS FONTSPEC) + CHARSET)))]) (IBM - [LAMBDA (FONT CHARSET) (* ; "Edited 29-Jun-2025 17:05 by rmk") + [LAMBDA (FONT CHARSET) (* ; "Edited 27-Aug-2025 17:29 by rmk") + (* ; "Edited 25-Aug-2025 08:58 by rmk") + (* ; "Edited 29-Jun-2025 17:05 by rmk") (* ; "Edited 20-Jun-2025 16:35 by rmk") (* ; "Edited 18-Jun-2025 14:09 by rmk") (* ;; "Inspects the character set bitmap for CHARSET in FONT, which may also be a charset info. If necessary, builds the font (unlike ICS).") + (SETQ CHARSET (CHARSET.DECODE CHARSET)) (SHOWCSBITMAP (if (type? CHARSETINFO FONT) then FONT - else (\XGETCHARSETINFO (SETQ FONT (FONTCREATE FONT)) - (OR CHARSET 0]) + elseif FONT + then (\XGETCHARSETINFO (FONTCREATE FONT) + (OR CHARSET 0]) (ICS [LAMBDA (FONT CHARSET INCLUDEMEDLEYFONT) (* ; "Edited 7-Jul-2025 23:12 by rmk") @@ -114,7 +112,8 @@ (DV \FONTEXISTS?-CACHE]) (SHOWCSBITMAP - [LAMBDA (CSINFO) (* ; "Edited 29-Jun-2025 17:07 by rmk") + [LAMBDA (CSINFO) (* ; "Edited 17-Aug-2025 12:36 by rmk") + (* ; "Edited 29-Jun-2025 17:07 by rmk") (* ; "Edited 20-Jun-2025 16:38 by rmk") (* ;; "Given a charsetinfo, shows the whole bitmap using EDITBM. Unfortunately, that runs in a separate process, so we can't directly get the window to put something useful in the title. If EDITBM is called directly, it doen't return until you quit...in which case it's gone. We'd really like just the displayer.") @@ -129,7 +128,7 @@ (IGREATERP (BITMAPHEIGHT BM) 0)) then (EVAL.AS.PROCESS (LIST 'EDITBM BM)) - else "EMPTY BITMAP") + else (PRINTOUT T "EMPTY BITMAP" T)) CSINFO]) (EQCSBM @@ -277,11 +276,27 @@ (LET ((CINFOS (CSCOMPARE CS1 CS2 CHARSET INCLUDEMEDLEYFONT))) (SHOWCHARBITMAPS NIL CINFOS CHARSET INCLUDEMEDLEYFONT T) CINFOS]) + +(TRUEFONTCREATE + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOERRORFLG CHARSET) + (* ; "Edited 2-Sep-2025 13:46 by rmk") + (* ; "Edited 29-Aug-2025 22:38 by rmk") + (* ; "Edited 17-Aug-2025 15:47 by rmk") + (* ; "Edited 31-Jul-2025 10:10 by rmk") + (* ; "Edited 25-Jul-2025 13:43 by rmk") + + (* ;; "New font, no coercions, no MEDLEYFORMAT") + + (LEGACYFONT (FONTCREATE FAMILY SIZE FACE ROTATION DEVICE NOERRORFLG CHARSET]) ) (DEFINEQ (FONTSIZE - [LAMBDA (FONT CHARSETS FILETOO NOERROR) (* ; "Edited 19-Jul-2025 16:42 by rmk") + [LAMBDA (FONT CHARSETS FILETOO NOERROR) (* ; "Edited 16-Aug-2025 23:34 by rmk") + (* ; "Edited 19-Jul-2025 16:42 by rmk") + + (* ;; "Estimates the amount of storage occupied by FONT") + (SETQ FONT (FONTCREATE FONT NIL NIL NIL 'DISPLAY NOERROR)) (CL:UNLESS CHARSETS (SETQ CHARSETS (for CS CSINFO BM from 0 to 255 when (SETQ CSINFO (\XGETCHARSETINFO FONT CS)) @@ -343,10 +358,72 @@ 8) finally (PRINTOUT T T)) else 0]) ) +(DEFINEQ + +(FONTCOMPARE + [LAMBDA (ARGS VIRGIN SHOWFONT) (* ; "Edited 5-Aug-2025 13:14 by rmk") + + (* ;; "Prints a line of characters in different fonts, for shape/size comparison. Each argument is a list of the form (FONT CHAR1 CHAR2...) or (FONT CHAR1 - CHARN) (hyphen). Characters can be codes or names.") + + (* ;; "If CHARS are not specfied, uses the chars from the previous arg.") + + (RESETLST + (RESETSAVE (DSPFONT NIL T)) + (CL:WHEN VIRGIN + (RESETSAVE \FONTSINCORE NIL) + (RESETSAVE \DISPLAYCHARSETCOERCIONS NIL) + (RESETSAVE \DISPLAYFONTCOERCIONS NIL) + (RESETSAVE \FONTEXISTS?-CACHE NIL) + (RESETSAVE DISPLAYFONTEXTENSIONS '(DISPLAYFONT))) + (TERPRI T) + (for A CHARS FONT SIZEPOS in ARGS + do (CL:WHEN (CADR A) + (SETQ CHARS (CDR A)) + [SETQ CHARS (if (EQ '- (CADR CHARS)) + then (for C from (CL:IF (CHARCODEP (CAR CHARS)) + (CAR CHARS) + (CHARCODE.DECODE (CAR CHARS))) + to (CL:IF (CHARCODEP (CADDR CHARS)) + (CADDR CHARS) + (CHARCODE.DECODE (CADDR CHARS))) collect C) + else (for C in CHARS collect (CL:IF (CHARCODEP C) + C + (CHARCODE.DECODE C))]) + (SETQ FONT (FONTCREATE (CAR A))) + (if SHOWFONT + then (SETQ SIZEPOS (IDIFFERENCE (STRPOS "-" FONT) + 2)) + (PRINTOUT T .FONT '(GACHA 8) + " [" + (SUBSTRING FONT 2 3) + (SUBSTRING FONT SIZEPOS (ADD1 SIZEPOS)) + "]") + else (PRINTOUT T .FONT '(GACHA 8) + "/")) + (DSPFONT FONT T) + (for C in CHARS do (PRIN1 (CHARACTER C) + T))) + (TERPRI T))]) +) +(DECLARE%: EVAL@COMPILE + +(PUTPROPS TRUEFONT MACRO ((FORM) (* ; + "Execute FORM in a non-medleyfont displayfont environment") + (RESETVARS (\FONTSINCORE \FONTEXISTS?-CACHE DISPLAYFONTCOERCIONS + DISPLAYCHARCOERCIONS (DISPLAYFONTEXTENSIONS '(DISPLAYFONT + )) + (DISPLAYFONTDIRECTORIES (MEDLEYDIR "fonts>displayfonts>") + ) + (DISPLAYCHARSETFNS (REMOVE (ASSOC 'MEDLEYFONT + DISPLAYCHARSETFNS) + DISPLAYCHARSETFNS))) + (RETURN FORM)))) +) (DECLARE%: DONTCOPY - (FILEMAP (NIL (818 15839 (DEBUGCHARSET 828 . 4007) (IBM 4009 . 4717) (ICS 4719 . 6013) (SHOWCACHE 6015 - . 6362) (SHOWCSBITMAP 6364 . 7478) (EQCSBM 7480 . 8366) (EQCHARBM 8368 . 9129) (CHARSETCHARS 9131 . -9797) (CHARBMDIFFS 9799 . 10675) (SHOWCSCHAR 10677 . 11112) (CSCOMPARE 11114 . 13706) (SHOWBMS 13708 - . 13886) (SHOWCHARBITMAPS 13888 . 15479) (CANDS 15481 . 15837)) (15840 19322 (FONTSIZE 15850 . 16535) - (CSSIZE 16537 . 17946) (CSBMSIZE 17948 . 19320))))) + (FILEMAP (NIL (774 16422 (DEBUGCHARSET 784 . 3405) (IBM 3407 . 4405) (ICS 4407 . 5701) (SHOWCACHE 5703 + . 6050) (SHOWCSBITMAP 6052 . 7290) (EQCSBM 7292 . 8178) (EQCHARBM 8180 . 8941) (CHARSETCHARS 8943 . +9609) (CHARBMDIFFS 9611 . 10487) (SHOWCSCHAR 10489 . 10924) (CSCOMPARE 10926 . 13518) (SHOWBMS 13520 + . 13698) (SHOWCHARBITMAPS 13700 . 15291) (CANDS 15293 . 15649) (TRUEFONTCREATE 15651 . 16420)) (16423 + 20082 (FONTSIZE 16433 . 17295) (CSSIZE 17297 . 18706) (CSBMSIZE 18708 . 20080)) (20083 22490 ( +FONTCOMPARE 20093 . 22488))))) STOP diff --git a/internal/FONT-DEBUG.LCOM b/internal/FONT-DEBUG.LCOM index 301a5ac247c2e07af6fda92cb7951e5fe3334f7b..985e79c72e9a3df32a6d11aa8639f03bbc83deba 100644 GIT binary patch delta 4239 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 e6W62TAFONT.;13 43176 +(FILECREATED "22-Jul-2025 23:20:06"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>AFONT.;15 27510 :EDIT-BY rmk - :CHANGES-TO (FNS ACFONT.GETCHARSET \READACFONTFILE) + :CHANGES-TO (VARS AFONTCOMS) - :PREVIOUS-DATE " 8-Jul-2025 22:09:41" {WMEDLEY}AFONT.;12) + :PREVIOUS-DATE "21-Jul-2025 00:14:04" +{DSK}kaplan>Local>medley3.5>working-medley>sources>AFONT.;14) (PRETTYCOMPRINT AFONTCOMS) (RPAQQ AFONTCOMS - ( - (* ;; "AC and Interpress font file support. ACFILEP is on FONT") + [ + (* ;; "AC font file support. ACFONT.FILEP is on FONT") (XCL:FILE-ENVIRONMENTS "AFONT") - (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS BOUNDINGBOX FONTBOUNDINGBOX) - (CONSTANTS noInfoCode)) - (FNS ACFONT.FILEP ACFONT.GETCHARSET \CREATESTARFONT \READACFONTBOXES \READACFONTFILE - \ACCHARIMAGELIST \ACCHARWIDTHLIST \GETFBB \ACCHARPOSLIST \ACROTATECHAR \READFONTWDFILE - \FACECODE \FAMILYCODE \FINDFONT) - (ADDVARS (DISPLAYCHARSETFNS (AC ACFONT.FILEP ACFONT.GETCHARSET))) - (INITVARS (INTERPRESSFONTDIRECTORIES)) - (MACROS \POSITIONFONTFILE))) + (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS BOUNDINGBOX FONTBOUNDINGBOX)) + (FNS ACFONT.FILEP ACFONT.GETCHARSET \READACFONTBOXES \READACFONTFILE \ACCHARIMAGELIST + \ACCHARWIDTHLIST \GETFBB \ACCHARPOSLIST \ACROTATECHAR \FACECODE \FAMILYCODE) + (ADDVARS (DISPLAYCHARSETFNS (AC ACFONT.FILEP ACFONT.GETCHARSET]) -(* ;; "AC and Interpress font file support. ACFILEP is on FONT") +(* ;; "AC font file support. ACFONT.FILEP is on FONT") (XCL:DEFINE-FILE-ENVIRONMENT "AFONT" :PACKAGE "IL" @@ -58,14 +56,6 @@ (RECORD FONTBOUNDINGBOX (FBBBDX FBBBDY FBBBOX FBBBOY)) ) - -(DECLARE%: EVAL@COMPILE - -(RPAQQ noInfoCode 32768) - - -(CONSTANTS noInfoCode) -) ) (DEFINEQ @@ -96,35 +86,6 @@ (\READACFONTFILE STRM]) -(\CREATESTARFONT - [LAMBDA (FAMILY PSIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 22-May-2025 09:59 by rmk") - (* ; "Edited 18-May-2025 21:37 by rmk") - (* gbn " 1-Oct-85 18:29") - - (* ;; "the Build font descriptor for an Interpress NS font. If we can't find widths info for that font, return NIL") - - (* ;; "Widths array is fully allocated, with zeroes for characters with no information. An array is not allocated for fixed WidthsY. DEVICE is PRESS or INTERPRESS") - - (DECLARE (GLOBALVARS INTERPRESSFONTDIRECTORIES \ASCIITONS)) - (RESETLST (* ; - "RESETLST to make sure the fontfiles get closed") - (LET [(FD (create FONTDESCRIPTOR - FONTDEVICE _ DEVICE - FONTFAMILY _ FAMILY - FONTSIZE _ PSIZE - FONTFACE _ FACE - \SFFACECODE _ (\FACECODE FACE) - ROTATION _ ROTATION - OTHERDEVICEFONTPROPS _ \ASCIITONS - FONTSCALE _ (CONSTANT (FQUOTIENT 2540 72] - (CL:UNLESS (fetch (CHARSETINFO CSSLUGP) of (\INSURECHARSETINFO (OR CHARSET - \DEFAULTCHARSET) - FD)) - - (* ;; "return NIL for slug, let FONTCREATE decide whether or not to cause an error") - - FD)))]) - (\READACFONTBOXES [LAMBDA (FILE STARTCHAR ENDCHAR) (* jds "15-Jun-85 11:48") (* ; @@ -448,93 +409,6 @@ (ROTATE-BITMAP-LEFT BITMAP]) -(\READFONTWDFILE - [LAMBDA (FILE FD WIDTHS SCALE) (* jds " 2-Jan-86 12:34") - - (* ;; "Widths array is fully allocated, with zeroes for characters with no information. An array is not allocated for fixed WidthsY. DEVICE is PRESS or INTERPRESS") - - (DECLARE (GLOBALVARS FONTWIDTHSFILES)) (* (RESETLST (* ; - "RESETLST to make sure the fontfiles get closed") - (PROG (FIXEDFLAGS FIRSTCHAR LASTCHAR - TEM WIDTHSY) (SETFILEPTR FILE - (LLSH (\FIXPIN FILE) 1)) - (* ; "Locate the segment") - (replace (FONTDESCRIPTOR FBBOX) of FD - with (SIGNED (\WIN FILE) BITSPERWORD)) - (replace \SFDescent of FD with - (IMINUS (SIGNED (\WIN FILE) - BITSPERWORD))) (* ; "Descent is -FBBOY") - (replace (FONTDESCRIPTOR FBBDX) of FD - with (SIGNED (\WIN FILE) BITSPERWORD)) - (replace \SFHeight of FD with - (SIGNED (\WIN FILE) BITSPERWORD)) - (* ; "Height is FBBDY") - (replace \SFWidths of FD with WIDTHS) - (SETQ FIRSTCHAR (fetch FIRSTCHAR of FD)) - (* ; - "First and last 'real' characters in the font") - (SETQ LASTCHAR (fetch LASTCHAR of FD)) - (COND (SCALE (* ; - "Dimensions are relative, must be scaled") - (replace (FONTDESCRIPTOR FBBOX) of FD - with (IQUOTIENT (ITIMES - (fetch (FONTDESCRIPTOR FBBOX) of FD) - SCALE) 1000)) (replace \SFDescent of - FD with (IQUOTIENT (ITIMES - (fetch \SFDescent of FD) SCALE) 1000)) - (replace (FONTDESCRIPTOR FBBDX) of FD - with (IQUOTIENT (ITIMES - (fetch (FONTDESCRIPTOR FBBDX) of FD) - SCALE) 1000)) (replace \SFHeight of FD - with (IQUOTIENT (ITIMES - (fetch \SFHeight of FD) SCALE) 1000)))) - (replace \SFAscent of FD with - (IDIFFERENCE (fetch \SFHeight of FD) - (fetch \SFDescent of FD))) - (SETQ FIXEDFLAGS (LRSH - (\BIN FILE) 6)) (* ; - "The fixed flags") (\BIN FILE) - (* ; "Skip the spares") - (COND ((EQ 2 (LOGAND FIXEDFLAGS 2)) - (SETQ TEM (\WIN FILE)) - (* ; "The fixed width for this font") - (COND ((AND SCALE (NOT - (ZEROP TEM))) (SETQ TEM - (IQUOTIENT (ITIMES TEM SCALE) 1000)))) - (for I from FIRSTCHAR to LASTCHAR do - (SETA WIDTHS I TEM))) - (T (AIN WIDTHS FIRSTCHAR - (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) - FILE) (for I from FIRSTCHAR to - LASTCHAR when (EQ noInfoCode - (ELT WIDTHS I)) do (SETA WIDTHS I 0)) - (COND (SCALE (for I from FIRSTCHAR to - LASTCHAR do (SETA WIDTHS I - (IQUOTIENT (ITIMES (ELT WIDTHS I) - SCALE) 1000))))))) (COND - ((EQ 1 (LOGAND FIXEDFLAGS 1)) - (SETQ WIDTHSY (\WIN FILE)) - (* ; - "The fixed width-Y for this font; the width-Y field is a single integer in the FD") - (replace \SFWidthsY of FD with - (COND ((AND SCALE (NOT - (ZEROP WIDTHSY))) (IQUOTIENT - (ITIMES WIDTHSY SCALE) 1000)) - (T WIDTHSY)))) (T (replace \SFWidthsY - of FD with (SETQ WIDTHSY - (ARRAY (ADD1 \MAXCHAR) - (QUOTE SMALLPOSP) 0 0))) - (AIN WIDTHSY FIRSTCHAR - (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) - FILE) (for I from FIRSTCHAR to - LASTCHAR when (EQ noInfoCode - (ELT WIDTHSY I)) do (SETA WIDTHSY I 0)) - (COND (SCALE (for I from FIRSTCHAR to - LASTCHAR do (SETA WIDTHSY I - (IQUOTIENT (ITIMES (ELT WIDTHSY I) - SCALE) 1000)))))))))) - (HELP]) - (\FACECODE [LAMBDA (FACE) (* rmk%: "27-FEB-81 12:16") (IPLUS (SELECTQ (fetch (FONTFACE EXPANSION) of FACE) @@ -578,90 +452,12 @@ (RETURN CODE)))) (0 (RETURN NIL)) NIL]) - -(\FINDFONT - [LAMBDA (FD WSTRM PRESSMICASIZE NSMICASIZE DONTCHECK) (* ; "Edited 2-Apr-87 14:39 by bvm:") - - (* ;; "Finds the widths information for the specified FAMILY, FACECODE, MSIZE, and ROTATION. The FIRSTCHAR and LASTCHAR of the font are filled in, since we have to read past those to check the size. If successful, returns the size found in the widths file, with zero indicating that dimensions in the widths file are relative, leaving the file pointing just after the Rotation word of the font. --- If DONTCHECK, then assumes that this file contains exactly the right face and family, without checking --- Returns NIL if the font is not found") - (* (bind TYPE LENGTH SIZE FAMILYCODE - (ROTATION _ (fetch ROTATION of FD)) - (FACECODE _ (\FACECODE - (fetch FONTFACE of FD))) - (NEXT _ 0) (FUZZ _ (PROG1 0.02 - (* ; - "percentile difference acceptable as the same font size"))) - first (OR (SETQ FAMILYCODE - (\FAMILYCODE (OR DONTCHECK - (fetch FONTFAMILY of FD)) WSTRM)) - (RETURN NIL)) do (SETQ TYPE - (\BIN WSTRM)) (SETQ LENGTH - (\BIN WSTRM)) (add NEXT - (LLSH (IPLUS LENGTH (LLSH - (LOGAND TYPE 15) 8)) 1)) - (SELECTQ (LRSH TYPE 4) - (4 (COND ((OR (AND (EQ FAMILYCODE - (\BIN WSTRM)) (EQ FACECODE - (\BIN WSTRM))) DONTCHECK) - (* ; - "This is the right family/face (DONTCHECK must come last, so the file reads get done.)") - (replace FIRSTCHAR of FD with - (\BIN WSTRM)) (replace LASTCHAR of FD - with (\BIN WSTRM)) (COND - ((AND (OR (ZEROP (SETQ SIZE - (\WIN WSTRM))) (LESSP - (ABS (FQUOTIENT (IDIFFERENCE - (OR PRESSMICASIZE NSMICASIZE) SIZE) - PRESSMICASIZE)) FUZZ)) - (EQ ROTATION (\WIN WSTRM))) - (replace \SFFACECODE of FD with - FACECODE) (RETURN SIZE)))))) - (0 (RETURN NIL)) NIL) - (SETFILEPTR WSTRM NEXT))) - (HELP]) ) (ADDTOVAR DISPLAYCHARSETFNS (AC ACFONT.FILEP ACFONT.GETCHARSET)) - -(RPAQ? INTERPRESSFONTDIRECTORIES ) -(DECLARE%: EVAL@COMPILE - -(PUTPROPS \POSITIONFONTFILE MACRO - ((WSTRM NSMICASIZE FIRSTCHAR LASTCHAR FAMILY FACECODE) - (* gbn "25-Jul-85 02:15") - (bind TYPE LENGTH SIZE FAMCODE FILEFAM FILEFACE (NEXT _ 0) - first (OR (SETQ FAMCODE (\FAMILYCODE (OR FAMILY T) - WSTRM)) - (RETURN NIL)) - do (SETQ TYPE (\BIN WSTRM)) - (SETQ LENGTH (\BIN WSTRM)) - (add NEXT (LLSH (IPLUS LENGTH (LLSH (LOGAND TYPE 15) - 8)) - 1)) - (SELECTQ (LRSH TYPE 4) - (4 (SETQ FILEFAM (\BIN WSTRM)) - (SETQ FILEFACE (\BIN WSTRM)) - [COND - ((OR (EQ FAMILY T) - (EQ FAMILY NIL) - (AND (IEQP FILEFAM FAMCODE) - (IEQP FILEFACE FACECODE))) - (SETQ FIRSTCHAR (\BIN WSTRM)) - (SETQ LASTCHAR (\BIN WSTRM)) - (COND - ((AND (OR (ZEROP (SETQ SIZE (\WIN WSTRM))) - (LESSP (ABS (FQUOTIENT (IDIFFERENCE NSMICASIZE SIZE) - NSMICASIZE)) - 0.02)) - (ZEROP (\WIN WSTRM))) - (RETURN SIZE]) - (0 (RETURN NIL)) - NIL) - (SETFILEPTR WSTRM NEXT)))) -) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2849 41269 (ACFONT.FILEP 2859 . 3743) (ACFONT.GETCHARSET 3745 . 4137) (\CREATESTARFONT -4139 . 5862) (\READACFONTBOXES 5864 . 8091) (\READACFONTFILE 8093 . 20934) (\ACCHARIMAGELIST 20936 . -21293) (\ACCHARWIDTHLIST 21295 . 22561) (\GETFBB 22563 . 25843) (\ACCHARPOSLIST 25845 . 26895) ( -\ACROTATECHAR 26897 . 27461) (\READFONTWDFILE 27463 . 35496) (\FACECODE 35498 . 36092) (\FAMILYCODE -36094 . 37398) (\FINDFONT 37400 . 41267))))) + (FILEMAP (NIL (2626 27417 (ACFONT.FILEP 2636 . 3520) (ACFONT.GETCHARSET 3522 . 3914) (\READACFONTBOXES + 3916 . 6143) (\READACFONTFILE 6145 . 18986) (\ACCHARIMAGELIST 18988 . 19345) (\ACCHARWIDTHLIST 19347 + . 20613) (\GETFBB 20615 . 23895) (\ACCHARPOSLIST 23897 . 24947) (\ACROTATECHAR 24949 . 25513) ( +\FACECODE 25515 . 26109) (\FAMILYCODE 26111 . 27415))))) STOP diff --git a/sources/AFONT.DFASL b/sources/AFONT.DFASL index 3a69ea17500842f4c4123d32e9cca07a9639baa0..9338e3cfce097131782c19f74ddb8b3f509788bd 100644 GIT binary patch delta 1726 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 Hy?g%$)NDh_ diff --git a/sources/FONT b/sources/FONT index 39591da8e..4d819826b 100644 --- a/sources/FONT +++ b/sources/FONT @@ -1,14 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Jul-2025 13:39:57"  -{DSK}kaplan>Local>medley3.5>working-medley>sources>FONT.;375 239724 +(FILECREATED "10-Sep-2025 23:28:04" {WMEDLEY}FONT.;602 281058 :EDIT-BY rmk - :CHANGES-TO (FNS \FONT.CHECKARGS \FONT.CHECKARGS1 \COERCEFONTDESC) - (MACROS FONTASCENT FONTDESCENT FONTHEIGHT) + :CHANGES-TO (FNS \STRINGWIDTH.GENERIC) - :PREVIOUS-DATE "25-Jul-2025 21:38:56" {WMEDLEY}FONT.;372) + :PREVIOUS-DATE " 9-Sep-2025 23:55:03" {WMEDLEY}FONT.;600) (PRETTYCOMPRINT FONTCOMS) @@ -31,38 +29,74 @@ (* ;; "Creation: ") (FNS FONTCREATE FONTCREATE1 FONTCREATE.SLUGFD \FONT.CHECKARGS \FONT.CHECKARGS1 - \FONTCREATE1.NOFN FONTFILEP \READCHARSET \COERCEFONTSPEC) - (FNS \COERCEFONTDESC) + \FONTCREATE1.NOFN FONTFILEP \READCHARSET) + (FNS \FONT.CHECKARGS \CHARSET.CHECK) + (FNS COERCEFONTSPEC) + (DECLARE%: EVAL@COMPILE DONTCOPY (MACROS COERCEFONTSPEC.MATCH COERCEFONTSPEC.TARGET)) (MACROS SPREADFONTSPEC) - (FNS COMPLETE.FONT COMPLETEFONTP COMPLETE.CHARSET PRUNEFONTSLUGS)) + (FNS MAKEFONTSPEC) + (FNS COMPLETE.FONT COMPLETEFONTP COMPLETE.CHARSET PRUNESLUGCSINFOS)) (COMS (* ;; "Property extraction:") - (FNS FONTASCENT FONTDESCENT FONTHEIGHT FONTPROP \AVGCHARWIDTH)) - (COMS - (* ;; "Moving character information") - + (FNS FONTASCENT FONTDESCENT FONTHEIGHT FONTPROP \AVGCHARWIDTH) + (EXPORT (OPTIMIZERS FONTPROP)) + (FNS FONTDEVICEPROP)) + (COMS (* ; "Moving character information") (FNS EDITCHAR) (* ; "Should this be on EDITFONT ?") (FNS GETCHARBITMAP PUTCHARBITMAP \GETCHARBITMAP.CSINFO \PUTCHARBITMAP.CSINFO) - (FNS MOVECHARBITMAP MOVEFONTCHARS \MOVEFONTCHAR SLUGCHARP.DISPLAY \GETCHARINFO) + (FNS MOVECHARBITMAP MOVEFONTCHARS \MOVEFONTCHAR \MOVEFONTCHARS.SOURCEDATA \MAKESLUGCHAR + SLUGCHARP.DISPLAY) (MACROS UPDATEINFOELEMENT)) (COMS (* ;; "\FINDFONTFILE \FONTFILENAME \SEARCHFONTFILES \FONTINFOFROMFILENAME are redefined to deal with character-set directories. That behavior is conditioned on the setting of the global variable *USEOLDFONTDIRECTORIES*, T at PARC, maybe NIL most other places. ") (FNS FONTFILES \FINDFONTFILE \FONTFILENAMES \FONTFILENAME \FONTFILENAME.OLD - \FONTFILENAME.NEW \FONTINFOFROMFILENAME \FONTINFOFROMFILENAME.OLD) + \FONTFILENAME.NEW FONTSPECFROMFILENAME \FONTINFOFROMFILENAME.OLD) (* (* ; "Do we still want old fonts?") (ADDVARS (*OLD-FONT-EXTENSIONS* STRIKE))) (INITVARS (*OLD-FONT-EXTENSIONS* NIL)) (INITVARS (*USEOLDFONTDIRECTORIES* NIL)) (GLOBALVARS *OLD-FONT-EXTENSIONS* *USEOLDFONTDIRECTORIES*)) - (FNS FONTCOPY FONTP FONTUNPARSE SETFONTDESCRIPTOR \STREAMCHARWIDTH \UNITWIDTHSVECTOR - \COERCECHARSET \BUILDSLUGCSINFO \FONTSYMBOL \DEVICESYMBOL \FONTFACE \FONTFACE.COLOR - SETFONTCHARENCODING) - (FNS FONTSAVAILABLE FONTEXISTS? \FONTSAVAILABLE.INCORE \SEARCHFONTFILES FLUSHFONTSINCORE - MATCHFONTFACE FINDFONTFILES) - (INITVARS \FONTEXISTS?-CACHE) + (FNS FONTCOPY FONTP FONTUNPARSE SETFONTDESCRIPTOR \STREAMCHARWIDTH \COERCECHARSET + \BUILDSLUGCSINFO \FONTSYMBOL \DEVICESYMBOL \FONTFACE \FONTFACE.COLOR SETFONTCHARENCODING + ) + (FNS FONTSAVAILABLE FONTEXISTS? \SEARCHFONTFILES FLUSHFONTSINCORE FINDFONTFILES SORTFONTSPECS + ) + (FNS MATCHFONTFACE MAKEFONTFACE FONTFACETOATOM) + (INITVARS \FONTSINCORE \FONTEXISTS?-CACHE \DEFAULTDEVICEFONTS) + [COMS (GLOBALVARS \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) + (INITVARS \UNITWIDTHSVECTOR) + (FNS \UNITWIDTHSVECTOR) + (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR] + (DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO FONTSPEC) + (MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET + \FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH + \FGETIMAGEWIDTH \FSETIMAGEWIDTH) + (MACROS \GETCHARSETINFO \SETCHARSETINFO \INSURECHARSETINFO + \CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR CHARSETPROP) + (PROP ARGNAMES CHARSETPROP) + (CONSTANTS (SLUGCHARINDEX (ADD1 \MAXTHINCHAR)) + (SLUGCHARSET (ADD1 \MAXCHARSET))) + (MACROS LEGACYFONT)) + (MACROS INDIRECTCHARSETP)) + (FNS FONTDESCRIPTOR.DEFPRINT FONTCLASS.DEFPRINT) + (INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) + (SYSRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) + (FNS \CREATEKERNELEMENT \FSETLEFTKERN \FGETLEFTKERN) + (FNS \CREATEFONT \CREATECHARSET \INSTALLCHARSETINFO \INSTALLCHARSETINFO.CHARENCODING) + (DECLARE%: DONTCOPY (MACROS FIRSTCHARSETCODE LASTCHARSETCODE)) + (FNS \FONTRESETCHARWIDTHS) + (MACROS \FGETCHARIMAGEWIDTH) + (LOCALVARS . T) + (PROP FILETYPE FONT) + + (* ;; "") + + + (* ;; "DISPLAY") + (COMS (* ;  "Functions for DISPLAY IMAGESTREAMTYPES ") (FNS \CREATEDISPLAYFONT \CREATECHARSET.DISPLAY \FONTEXISTS?.DISPLAY)) @@ -72,111 +106,94 @@ \SFMAKEITALIC) (FNS \SFMAKEROTATEDFONT \SFROTATECSINFO \SFROTATEFONTCHARACTERS \SFROTATECSINFOOFFSETS) (FNS \SFMAKECOLOR)) - (FNS FONTDESCRIPTOR.DEFPRINT FONTCLASS.DEFPRINT) - (INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) - (SYSRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO) - (INITVARS (\FONTSINCORE) - (\DEFAULTDEVICEFONTS) - (\UNITWIDTHSVECTOR)) - (GLOBALVARS \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR))) - (EXPORT (OPTIMIZERS FONTPROP)) - (DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO) - (MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET - \FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH - \FGETIMAGEWIDTH \FSETIMAGEWIDTH) - (MACROS \XGETCHARSETINFO \GETCHARSETINFO \INSURECHARSETINFO - \CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR CHARSETPROP) - (CONSTANTS (\MAXNSCHAR 65535))) - (MACROS INDIRECTCHARSETP MAKECSSOURCE)) - (FNS \CREATEKERNELEMENT \FSETLEFTKERN \FGETLEFTKERN) - [COMS (FNS \CREATEFONT \CREATECHARSET \INSTALLCHARSETINFO \INSTALLCHARSETINFO.CHARENCODING) - (EXPORT (GLOBALVARS DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS DISPLAYGLYPHCOERCIONS - DISPLAYFONTCOERCIONS)) - - (* ;; "Removed ((CLASSIC 36) (CLASSIC 24)) so that TIMESROMAN 36 BOLD boldifies rather than coercing to CLASSIC 24 BOLD.") - - (INITVARS [DISPLAYFONTCOERCIONS '(((HELVETICA 1) - (HELVETICA 4)) - ((HELVETICA 2) - (HELVETICA 4)) - ((MODERN 60) - (MODERN 48)) - ((MODERN 96) - (MODERN 72)) - ((MODERN 120) - (MODERN 72)) - ((PALATINO 9) - (PALATINO 12)) - ((PALATINO 8) - (PALATINO 10)) - ((PALATINO 6) - (PALATINO 10)) - ((TITAN 6) - (TITAN 10)) - ((TITAN 9 (TITAN 10))) - ((LPT) - (AMTEX] - [DISPLAYGLYPHCOERCIONS '(((GACHA) - (TERMINAL)) - ((MODERN) - (CLASSIC)) - ((TIMESROMAN) - (CLASSIC)) - ((HELVETICA) - (MODERN)) - ((TERMINAL) - (MODERN] - [ADOBEDISPLAYFONTCOERCIONS '(((HELVETICABLACK 16) - (HELVETICABLACK 18)) - ((SYMBOL) - (ADOBESYMBOL)) - ((SYMBOL 11) - (ADOBESYMBOL 10)) - ((AVANTGARDE-DEMI) - (AVANTGARDE)) - ((AVANTGARDE-BOOK) - (AVANTGARDE)) - ((NEWCENTURYSCHLBK) - (CENTURYSCHOOLBOOK)) - ((BOOKMAN-LIGHT) - (BOOKMAN)) - ((BOOKMAN-DEMI) - (BOOKMAN)) - ((HELVETICA-NARROW) - (HELVETICANARROW)) - ((HELVETICA 24) - (ADOBEHELVETICA 24] - (\DEFAULTCHARSET 0)) - (COMS (* ; "MAPPING FOR DOS FILENAMES ") - (INITVARS (*DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) - (HELVETICA . HV) - (TIMESROMAND . TD) - (HELVETICAD . HD) - (MODERN . MD) - (CLASSIC . CL) - (GACHA . GC) - (TITAN . TI) - (LETTERGOTHIC . LG) - (BOLDPS . BP) - (TERMINAL . TM) - (CLASSICTHIN . CT) - (HIPPO . HP) - (LOGO . LG) - (MATH . MA) - (OLDENGLISH . OE) - (SYMBOL . SY] - (FNS \FONTRESETCHARWIDTHS) - (GLOBALVARS DISPLAYCHARSETFNS) - [DECLARE%: DONTEVAL@LOAD DOCOPY (INITVARS (DISPLAYFONTDIRECTORIES NIL)) - (ADDVARS (DISPLAYCHARSETFNS (STRIKE STRIKEFONT.FILEP STRIKEFONT.GETCHARSET] - (DECLARE%: DONTEVAL@LOAD DOCOPY (* ; "The loadup might have fewer") + (EXPORT (GLOBALVARS DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS DISPLAYCHARCOERCIONS + DISPLAYFONTCOERCIONS DISPLAYCHARSETFNS)) + (DECLARE%: DONTEVAL@LOAD DOCOPY (INITVARS (DISPLAYFONTDIRECTORIES NIL)) + (ADDVARS (DISPLAYCHARSETFNS (STRIKE STRIKEFONT.FILEP STRIKEFONT.GETCHARSET))) + (* ; "The loadup might have fewer") (ADDVARS (DISPLAYFONTEXTENSIONS MEDLEYDISPLAYFONT DISPLAYFONT))) - (DECLARE%: EVAL@COMPILE DONTCOPY (CONSTANTS (MAXCODE 255) - (DUMMYINDEX 256))) - (MACROS \FGETCHARIMAGEWIDTH \SETCHARSETINFO) - (LOCALVARS . T) - (PROP FILETYPE FONT) + (INITVARS [DISPLAYFONTCOERCIONS '(((HELVETICA (<= * 2)) + (HELVETICA 4)) + ((MODERN (<= 15 * 16)) + (* 14)) + ((MODERN (<= 17 * 21)) + (* 18)) + ((MODERN (<= 22 * 28)) + (* 24)) + ((MODERN (<= 29 * 33)) + (* 30)) + ((MODERN (<= 34 * 40)) + (* 36)) + ((MODERN (<= 41 * 65)) + (* 48)) + ((MODERN (<= 66 *)) + (* 72)) + ((PALATINO 9) + (PALATINO 12)) + ((PALATINO (<= * 8)) + (PALATINO 10)) + ((TITAN (<= * 9)) + (TITAN 10)) + (LPT AMTEX] + [DISPLAYCHARCOERCIONS '((GACHA TERMINAL) + (MODERN CLASSIC) + (TIMESROMAN CLASSIC) + (HELVETICA MODERN) + (TERMINAL MODERN) + (HIPPO CLASSIC) + (CYRILLIC CLASSIC) + (MATH CLASSIC) + (SIGMA MODERN) + (SYMBOL MODERN) + (TITAN CLASSIC) + (OPTIMA MODERN) + (BOLDPS CLASSIC) + (PCTERMINAL) + (TITANLEGAL CLASSIC] + (\DEFAULTCHARSET 0)) + + (* ;; "") + + + (* ;; "Defunct coercions? Mapping for DOS filenames, Adobe equivalences") + + [COMS (INITVARS [ADOBEDISPLAYFONTCOERCIONS '(((HELVETICABLACK 16) + (HELVETICABLACK 18)) + ((SYMBOL) + (ADOBESYMBOL)) + ((SYMBOL 11) + (ADOBESYMBOL 10)) + ((AVANTGARDE-DEMI) + (AVANTGARDE)) + ((AVANTGARDE-BOOK) + (AVANTGARDE)) + ((NEWCENTURYSCHLBK) + (CENTURYSCHOOLBOOK)) + ((BOOKMAN-LIGHT) + (BOOKMAN)) + ((BOOKMAN-DEMI) + (BOOKMAN)) + ((HELVETICA-NARROW) + (HELVETICANARROW)) + ((HELVETICA 24) + (ADOBEHELVETICA 24] + (*DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) + (HELVETICA . HV) + (TIMESROMAND . TD) + (HELVETICAD . HD) + (MODERN . MD) + (CLASSIC . CL) + (GACHA . GC) + (TITAN . TI) + (LETTERGOTHIC . LG) + (BOLDPS . BP) + (TERMINAL . TM) + (CLASSICTHIN . CT) + (HIPPO . HP) + (LOGO . LG) + (MATH . MA) + (OLDENGLISH . OE) + (SYMBOL . SY] (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA FONTCOPY]) @@ -209,7 +226,8 @@ CHARCODE]) (CHARWIDTHY - [LAMBDA (CHARCODE FONT) (* ; "Edited 22-May-2025 09:47 by rmk") + [LAMBDA (CHARCODE FONT) (* ; "Edited 2-Sep-2025 13:25 by rmk") + (* ; "Edited 22-May-2025 09:47 by rmk") (* edited%: "18-Mar-86 19:30") (* ;  "Gets the Y-component of the width of a character code in a font.") @@ -218,8 +236,7 @@ (LET (TEMP WY) (COND ((type? FONTDESCRIPTOR FONT) - (SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\INSURECHARSETINFO (\CHARSET CHARCODE) - FONT))) + [SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\INSURECHARSETINFO FONT (\CHARSET CHARCODE] (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) @@ -228,8 +245,8 @@ (* ;  "NIL font goes thru here--primary output file") (IMAGEOP 'IMCHARWIDTHY TEMP TEMP CHARCODE)) - (T [SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\INSURECHARSETINFO (\CHARSET CHARCODE) - (FONTCREATE FONT] + (T [SETQ WY (ffetch (CHARSETINFO YWIDTHS) of (\INSURECHARSETINFO (FONTCREATE FONT) + (\CHARSET CHARCODE] (COND ((FIXP WY)) (WY (\FGETWIDTH WY (\CHAR8CODE CHARCODE))) @@ -274,7 +291,10 @@ (ffetch DDSPACEWIDTH of DD]) (\STRINGWIDTH.GENERIC - [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 22-May-2025 09:51 by rmk") + [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 10-Sep-2025 23:25 by rmk") + (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 30-Aug-2025 23:19 by rmk") + (* ; "Edited 22-May-2025 09:51 by rmk") (* ; "Edited 3-Apr-87 13:47 by jop") (* ;; "Returns the width of STR with SPACEWIDTH for the width of spaces. RDTBL has already been coerced, so no FLG is needed ") @@ -289,45 +309,39 @@ (if RDTBL then (GO SLOW) else (RETURN (for C WIDTHSBASE CSET inatom STR - sum [COND - ((NEQ CSET (\CHARSET C)) + sum (CL:UNLESS (EQ CSET (\CHARSET C)) (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) - of (\INSURECHARSETINFO CSET FONT] - (COND - ((EQ C (CHARCODE SPACE)) - SPACEWIDTH) - (T (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C] + of (\INSURECHARSETINFO FONT CSET)))) + (CL:IF (EQ C (CHARCODE SPACE)) + SPACEWIDTH + (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C)))] ((STRINGP STR) - (RETURN - (LET ((TOTAL 0) - ESC ESCWIDTH WIDTHSBASE CSET) - [COND - (RDTBL (* ; + (RETURN (LET ((TOTAL 0) + ESC ESCWIDTH WIDTHSBASE CSET) + (CL:WHEN RDTBL (* ;  "Count delimiting quotes and internal escapes") - (SETQ TOTAL (UNFOLD (\FGETCHARWIDTH FONT (CHARCODE %")) - 2)) - (SETQ ESC (fetch (READTABLEP ESCAPECHAR) of RDTBL)) - (SETQ ESCWIDTH (\FGETCHARWIDTH FONT ESC] - [for C instring STR - do [COND - ((NEQ (\CHARSET C) - CSET) (* ; + (SETQ TOTAL (UNFOLD (\FGETCHARWIDTH FONT (CHARCODE %")) + 2)) + (SETQ ESC (fetch (READTABLEP ESCAPECHAR) of RDTBL)) + (SETQ ESCWIDTH (\FGETCHARWIDTH FONT ESC))) + [for C instring STR + do (CL:UNLESS (EQ (\CHARSET C) + CSET) (* ;  "Get the widths vector for this character set") - (SETQ CSET (\CHARSET C)) - (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) of (\INSURECHARSETINFO - CSET FONT] - (add TOTAL (COND - ((EQ C (CHARCODE SPACE)) - SPACEWIDTH) - (T (IPLUS (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C)) - (COND - ((AND RDTBL (OR (EQ C (CHARCODE %")) - (EQ C ESC))) + (SETQ CSET (\CHARSET C)) + (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) + of (\INSURECHARSETINFO FONT CSET)))) + (add TOTAL (CL:IF (EQ C (CHARCODE SPACE)) + SPACEWIDTH + (IPLUS (\FGETWIDTH WIDTHSBASE (\CHAR8CODE C)) + (COND + ((AND RDTBL (OR (EQ C (CHARCODE %")) + (EQ C ESC))) (* ; "String char must be escaped") - ESCWIDTH) - (T 0] - TOTAL] + ESCWIDTH) + (T 0))))] + TOTAL] SLOW (* ; "Do the general case here") (RETURN (LET ((TOTALWIDTH 0) @@ -344,8 +358,8 @@ (T (SETQ CSET (\CHARSET CC)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO WIDTHS) - of (\INSURECHARSETINFO CSET - FONT))) + of (\INSURECHARSETINFO FONT + CSET))) (\FGETWIDTH WIDTHSBASE (\CHAR8CODE CC] STR RDTBL RDTBL *PRINT-LEVEL* *PRINT-LENGTH*) @@ -463,7 +477,6 @@ (SELECTQ DEVICE (DISPLAY (fetch (FONTCLASS DISPLAYFD) of FCLASS)) (INTERPRESS (fetch (FONTCLASS INTERPRESSFD) of FCLASS)) - (PRESS (fetch (FONTCLASS PRESSFD) of FCLASS)) (GETMULTI (fetch (FONTCLASS OTHERFDS) of FCLASS) DEVICE)))) @@ -481,7 +494,7 @@ (RPAQQ NSFONTFAMILIES (CLASSIC MODERN TERMINAL OPTIMA TITAN BOLDPS PCTERMINAL)) -(RPAQQ ALTOFONTFAMILIES (GACHA TIMESROMAN TIMESROMAND HELVETICA OLDENGLISH SNAIL TONTO)) +(RPAQQ ALTOFONTFAMILIES (TIMESROMAN TIMESROMAND HELVETICA)) @@ -491,6 +504,9 @@ (FONTCREATE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOERRORFLG CHARSET) + (* ; "Edited 28-Aug-2025 14:39 by rmk") + (* ; "Edited 15-Aug-2025 23:48 by rmk") + (* ; "Edited 12-Aug-2025 21:02 by rmk") (* ; "Edited 21-Jul-2025 09:11 by rmk") (* ; "Edited 11-Jul-2025 10:23 by rmk") (* ; "Edited 4-Jul-2025 12:10 by rmk") @@ -501,7 +517,7 @@ (* ; "Edited 28-Jul-88 14:43 by rmk:") (* ; "Edited 10-Nov-87 18:08 by FS") - (* ;; "Returns the requested font descriptor. If NOERRORFLG, return NIL if the requested font or CHARSET doesn't exist; otherwise cause an error. And always cause an error if any argument is bogus.") + (* ;; "Returns the requested font descriptor. If NOERRORFLG, return NIL if the requested font doesn't exist; otherwise cause an error. And always cause an error if any argument is bogus.") (* ;; "A font exists if it has at least one charset, even if the optionally desired CHARSET doesn't exist. There is no difference between all the characters in a missing charset and particular missing characters in an existing charset: they will show up as slugs. ") @@ -510,22 +526,35 @@ (PROG (FONTSPEC) RETRY (* ; "Back to here if ERROR returns") - (SETQ FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE CHARSET)) + (SETQ CHARSET (\CHARSET.CHECK CHARSET)) + (SETQ FONTSPEC (if (AND (type? FONTDESCRIPTOR FAMILY) + (NULL SIZE) + (NULL FACE) + (NULL ROTATION) + (NULL DEVICE)) + then + (* ;; "Pretest for a fontdescriptor with no modification--makes it possible to break/trace/change \FONT.CHECKARGS") + + FAMILY + else (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE))) (* ;; "If FONTSPEC is a fontdescriptor, it's what we want") (RETURN (if (type? FONTDESCRIPTOR FONTSPEC) then FONTSPEC - else (SPREADFONTSPEC FONTSPEC) - (if (FONTCREATE1 FAMILY SIZE FACE ROTATION DEVICE (OR CHARSET - \DEFAULTCHARSET)) - elseif NOERRORFLG - then NIL - else (ERROR "FONT NOT FOUND" FONTSPEC) - (GO RETRY]) + elseif (FONTCREATE1 FONTSPEC CHARSET) + elseif NOERRORFLG + then NIL + else (ERROR "FONT NOT FOUND" FONTSPEC) + (GO RETRY]) (FONTCREATE1 - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 24-Jul-2025 19:52 by rmk") + [LAMBDA (FONTSPEC CHARSET) (* ; "Edited 30-Aug-2025 23:13 by rmk") + (* ; "Edited 28-Aug-2025 14:32 by rmk") + (* ; "Edited 26-Aug-2025 23:45 by rmk") + (* ; "Edited 16-Aug-2025 18:55 by rmk") + (* ; "Edited 8-Aug-2025 10:05 by rmk") + (* ; "Edited 24-Jul-2025 19:52 by rmk") (* ; "Edited 23-Jul-2025 10:01 by rmk") (* ; "Edited 17-Jul-2025 23:48 by rmk") (* ; "Edited 10-Jul-2025 12:38 by rmk") @@ -536,21 +565,28 @@ (* ; "Edited 14-Jun-2025 20:53 by rmk") (* ; "Edited 10-Jun-2025 23:54 by rmk") - (* ;; "Causes an error only if the arguments are bogus, otherwise returns NIL if font or character set not found. Error happens at FONTCREATE") + (* ;; "Returns NIL if font not found. Error happens at FONTCREATE. ") - (DECLARE (GLOBALVARS IMAGESTREAMTYPES \FONTSINCORE)) - (LET (FONTX) - (CL:WHEN (if (SETQ FONTX (GETMULTI \FONTSINCORE FAMILY SIZE FACE ROTATION DEVICE)) - then (\INSURECHARSETINFO CHARSET FONTX) - elseif (AND (FONTEXISTS? FAMILY SIZE FACE ROTATION DEVICE CHARSET) - (SETQ FONTX (\CREATEFONT FAMILY SIZE FACE ROTATION DEVICE CHARSET)) - (\INSURECHARSETINFO CHARSET FONTX)) - then (PUTMULTI \FONTSINCORE FAMILY SIZE FACE ROTATION DEVICE FONTX)) - (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONTX with (\AVGCHARWIDTH FONTX)) - FONTX)]) + (DECLARE (GLOBALVARS \FONTSINCORE)) + (CL:UNLESS CHARSET (SETQ CHARSET \DEFAULTCHARSET)) + (LET (FONT) + (CL:WHEN (if (SETQ FONT (FETCHMULTI \FONTSINCORE FONTSPEC)) + elseif (AND (FONTEXISTS? FONTSPEC) + (SETQ FONT (\CREATEFONT FONTSPEC))) + then + (* ;; "Storing stops internal charset recursions") + + (STOREMULTI \FONTSINCORE FONTSPEC FONT)) + + (* ;; "Even the cached font may not have had the requested charset.") + + (\INSURECHARSETINFO FONT CHARSET) + (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT with (\AVGCHARWIDTH FONT)) + FONT)]) (FONTCREATE.SLUGFD - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 14-Jun-2025 23:25 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 14-Jun-2025 23:25 by rmk") (* ; "Edited 13-Jun-2025 09:44 by rmk") (* ; "Edited 11-Jun-2025 10:59 by rmk") @@ -570,15 +606,18 @@ FONTAVGCHARWIDTH _ (FIXR (FTIMES SIZE 0.75] (SLUGCSINFO (\BUILDSLUGCSINFO FONTDESC))) (if CHARSET - then (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of FONTDESC) - CHARSET SLUGCSINFO) - else (for CS from 0 to (ADD1 \MAXCHARSET) do (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR - of FONTDESC) - CS SLUGCSINFO))) + then (\SETCHARSETINFO FONTDESC CHARSET SLUGCSINFO) + else (for CS from 0 to (ADD1 \MAXCHARSET) do (\SETCHARSETINFO FONTDESC CS SLUGCSINFO))) FONTDESC]) (\FONT.CHECKARGS - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 27-Jul-2025 13:30 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 28-Aug-2025 14:46 by rmk") + (* ; "Edited 23-Aug-2025 11:54 by rmk") + (* ; "Edited 17-Aug-2025 19:15 by rmk") + (* ; "Edited 12-Aug-2025 22:36 by rmk") + (* ; "Edited 10-Aug-2025 12:06 by rmk") + (* ; "Edited 8-Aug-2025 09:57 by rmk") + (* ; "Edited 27-Jul-2025 13:30 by rmk") (* ; "Edited 22-Jul-2025 23:07 by rmk") (* ; "Edited 21-Jul-2025 09:22 by rmk") (* ; "Edited 14-Jul-2025 20:09 by rmk") @@ -588,23 +627,14 @@ (* ; "Edited 27-Jun-2025 10:42 by rmk") (* ; "Edited 15-Jun-2025 00:25 by rmk") + (* ;; "DON'T BREAK, TRACE, OR UNSAVE THIS UNLESS ALL SYSTEM FONTS HAVE ALREADY BEEN INSTANTIATED") + (* ;; "Decodes and checks the various ways of specifying the arguments to font lookup functions.") - (* ;; "If FAMILY can be coerced to a font descriptor and none of its properties are overwritten by the other aguments, then that font descriptor is returned. Otherwise the value is the coerce fontspec (family size face rotation device). CHARSET is checked for validity but not coerced.") + (* ;; "If FAMILY can be coerced to a font descriptor and none of its properties are overwritten by the other aguments, then that font descriptor is returned. Otherwise the value is the coerced fontspec (family size face rotation device).") (LET (FONTX) - (SETQ DEVICE (if (NULL DEVICE) - then (CL:IF (type? FONTDESCRIPTOR FAMILY) - (fetch (FONTDESCRIPTOR FONTDEVICE) of FAMILY) - 'DISPLAY) - elseif (OR (AND (LITATOM DEVICE) - (NEQ DEVICE T)) - (STRINGP DEVICE)) - then (\DEVICESYMBOL DEVICE) - elseif [AND (SETQ DEVICE (\GETSTREAM DEVICE 'OUTPUT T)) - (CAR (MKLIST (IMAGESTREAMTYPE DEVICE] - else (\ILLEGAL.ARG DEVICE))) - (CL:WHEN (AND (EQ 'CLASS (CAR FAMILY)) + (CL:WHEN (AND (EQ 'CLASS (CAR (LISTP FAMILY))) (LITATOM (CADR FAMILY))) (* ;; "This used to be at the entry to FONTCREATE, and it returned the FONTCLASS. That seemed wrong--FONTCREATE should always return a fontdescriptor. So here we build a throwaway fontclass, coerce it to its device font, and fall through.") @@ -618,19 +648,17 @@ (* ;; "FAMILY T or NIL produces an error below") [if (LISTP FAMILY) - then (SETQ FONTX (CL:IF (EQ 'FONT (CAR FAMILY)) + then + (* ;; "Presumably a FONTSPEC. The variables here override the FONTX properties, as with the fontdescriptor below ") + + (SETQ FONTX (CL:IF (EQ 'FONT (CAR FAMILY)) (CDR FAMILY) FAMILY)) - (SETQ FAMILY (pop FONTX)) - (SETQ SIZE (OR (pop FONTX) - SIZE)) - (SETQ FACE (OR (pop FONTX) - FACE)) - (SETQ ROTATION (OR (pop FONTX) - ROTATION)) - (SETQ DEVICE (OR (pop FONTX) - DEVICE)) - (SETQ CHARSET (pop FONTX)) + (SETQ FAMILY (fetch (FONTSPEC FSFAMILY) of FONTX)) + (SETQ SIZE (OR SIZE (fetch (FONTSPEC FSSIZE) of FONTX))) + (SETQ FACE (OR FACE (fetch (FONTSPEC FSFACE) of FONTX))) + (SETQ ROTATION (OR ROTATION (fetch (FONTSPEC FSROTATION) of FONTX))) + (SETQ DEVICE (OR DEVICE (fetch (FONTSPEC FSDEVICE) of FONTX))) (SETQ FONTX NIL) elseif (SETQ FONTX (CL:IF (type? FONTDESCRIPTOR FAMILY) FAMILY @@ -649,8 +677,17 @@ (CL:UNLESS DEVICE (SETQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of FONTX)))]) - (* ;; "The arguments are now coerced, validate them.") + (* ;; "We have decoded the arguments, fill in defaults and validate") + (SETQ DEVICE (if (NULL DEVICE) + then 'DISPLAY + elseif (OR (AND (LITATOM DEVICE) + (NEQ DEVICE T)) + (STRINGP DEVICE)) + then (\DEVICESYMBOL DEVICE) + elseif [AND (SETQ DEVICE (\GETSTREAM DEVICE 'OUTPUT T)) + (CAR (MKLIST (IMAGESTREAMTYPE DEVICE] + else (\ILLEGAL.ARG DEVICE))) (CL:UNLESS (AND FAMILY (LITATOM FAMILY) (NEQ FAMILY T)) (ERROR "Illegal font family" FAMILY)) @@ -667,9 +704,6 @@ (IGEQ ROTATION 0)) elseif (EQ ROTATION '*) else (\ILLEGAL.ARG ROTATION)) - (CL:WHEN CHARSET - (CL:UNLESS (<= 0 CHARSET \MAXCHARSET) - (\ILLEGAL.ARG CHARSET))) (CL:WHEN FONTX (* ;; "Return FONTX only if no fields were overwritten") @@ -679,7 +713,7 @@ (EQ ROTATION (fetch (FONTDESCRIPTOR ROTATION) of FONTX)) (EQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of FONTX))) (SETQ FONTX NIL))) - (OR FONTX (LIST FAMILY SIZE FACE ROTATION DEVICE]) + (OR FONTX (MAKEFONTSPEC FAMILY SIZE FACE ROTATION DEVICE]) (\FONT.CHECKARGS1 [LAMBDA (SPEC STREAM NOERRORFLG) (* ; "Edited 22-Jul-2025 18:47 by rmk") @@ -761,13 +795,14 @@ (ERROR (CONCAT "FONTCREATE function is not specified for image-type " DEVICE]) (FONTFILEP - [LAMBDA (FILE DEVICE) (* ; "Edited 13-Jul-2025 13:41 by rmk") + [LAMBDA (FILE DEVICE) (* ; "Edited 25-Aug-2025 10:22 by rmk") + (* ; "Edited 13-Jul-2025 13:41 by rmk") (* ; "Edited 27-Jun-2025 22:54 by rmk") (CL:UNLESS DEVICE (SETQ DEVICE 'DISPLAY)) (RESETLST (if (EQ DEVICE 'DISPLAY) - then (for FNS STRM in (GETATOMVAL (PACK* DEVICE 'CHARSETFNS)) + then (for FNS STRM in (FONTDEVICEPROP DEVICE 'CHARSETFNS) first [RESETSAVE (SETQ STRM (OPENSTREAM FILE 'INPUT)) `(PROGN (CLOSEF? OLDVALUE] do (CL:WHEN (CAR (NLSETQ (APPLY* (CADR FNS) @@ -776,7 +811,11 @@ (CLOSEF? STRM))))]) (\READCHARSET - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 21-Jul-2025 18:35 by rmk") + [LAMBDA (FONTSPEC CHARSET FONT) (* ; "Edited 2-Sep-2025 23:57 by rmk") + (* ; "Edited 28-Aug-2025 23:17 by rmk") + (* ; "Edited 25-Aug-2025 12:03 by rmk") + (* ; "Edited 16-Aug-2025 18:00 by rmk") + (* ; "Edited 21-Jul-2025 18:35 by rmk") (* ; "Edited 14-Jul-2025 19:51 by rmk") (* ; "Edited 12-Jul-2025 13:20 by rmk") (* ; "Edited 10-Jul-2025 12:38 by rmk") @@ -784,13 +823,13 @@ (* ;; "This finds the first file in the directories/extensions order that contains information about charset, determines its format, and reads it in. The assumption is that the first such existing file is the one we want. ") - (CL:WHEN (EQ ROTATION 0) + (CL:WHEN (EQ 0 (fetch (FONTSPEC FSROTATION) of FONTSPEC)) (RESETLST - (for FILE STRM CSINFO in (FONTFILES FAMILY SIZE FACE ROTATION DEVICE CHARSET) + (for FILE STRM CSINFO in (FONTFILES FONTSPEC CHARSET) do (* ;; "We know that FILE exists and is the best source of information about charset--maybe none. We assume FILE is one of the valid formats, we open it separately for each format-type, and ensure it is closed on exit. We can't used CL:WITHOPEN-FILE because that doesn't exist in the loadup when the first font is created.") - (for FNS in (GETATOMVAL (PACK* DEVICE 'CHARSETFNS)) + (for FNS FAMILY in (FONTDEVICEPROP FONTSPEC 'CHARSETFNS) do [RESETSAVE (SETQ STRM (OPENSTREAM FILE 'INPUT)) `(PROGN (CLOSEF? OLDVALUE] (CL:WHEN (CAR (NLSETQ (APPLY* (CADR FNS) @@ -799,12 +838,13 @@ (* ;; "Assume that predicate leaves stream (open or closed) in proper state for its retrieval function. The FILE may be of the right type, but it may not contain this CHARSET (e.g. a complete MEDLEYFONTFILE but CHARSET doesn't exist anywhere).") (SETQ CSINFO (APPLY* (CADDR FNS) - STRM CHARSET FAMILY SIZE FACE ROTATION DEVICE)) + STRM CHARSET FONT)) (CL:WHEN (type? CHARSETINFO CSINFO) (CL:UNLESS (CHARSETPROP CSINFO 'CSCHARENCODING) (* ;; "The file didn't know its own encoding") + (SETQ FAMILY (fetch (FONTSPEC FSFAMILY) of FONTSPEC)) (CHARSETPROP CSINFO 'CSCHARENCODING (if (NEQ CHARSET 0) then 'MCCS elseif (MEMB FAMILY @@ -821,81 +861,244 @@ (CHARSETPROP CSINFO 'FILE (MKSTRING (PSEUDOFILENAME FILE))) (CL:UNLESS (CHARSETPROP CSINFO 'SOURCE) - (CHARSETPROP CSINFO 'SOURCE (MAKECSSOURCE FAMILY SIZE FACE - ROTATION DEVICE CHARSET))) + (CHARSETPROP CSINFO 'SOURCE (create FONTSPEC using FONTSPEC))) + (replace (CHARSETINFO CHARSETNO) of CSINFO with CHARSET) (RETURN))) (* ;; "Prepare for next format-type") (CLOSEF? STRM)) (CL:WHEN CSINFO (RETURN CSINFO)))))]) +) +(DEFINEQ -(\COERCEFONTSPEC - [LAMBDA (COERCIONS FAMILY SIZE FACE ROTATION DEVICE CHARSET) - (* ; "Edited 23-Jul-2025 15:39 by rmk") +(\FONT.CHECKARGS + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 28-Aug-2025 14:46 by rmk") + (* ; "Edited 23-Aug-2025 11:54 by rmk") + (* ; "Edited 17-Aug-2025 19:15 by rmk") + (* ; "Edited 12-Aug-2025 22:36 by rmk") + (* ; "Edited 10-Aug-2025 12:06 by rmk") + (* ; "Edited 8-Aug-2025 09:57 by rmk") + (* ; "Edited 27-Jul-2025 13:30 by rmk") + (* ; "Edited 22-Jul-2025 23:07 by rmk") + (* ; "Edited 21-Jul-2025 09:22 by rmk") + (* ; "Edited 14-Jul-2025 20:09 by rmk") + (* ; "Edited 11-Jul-2025 10:15 by rmk") + (* ; "Edited 5-Jul-2025 13:37 by rmk") + (* ; "Edited 2-Jul-2025 16:50 by rmk") + (* ; "Edited 27-Jun-2025 10:42 by rmk") + (* ; "Edited 15-Jun-2025 00:25 by rmk") - (* ;; "Produces a list of coerced fontspecs, one for each coercion whose right side matches the given parameters.") - - (* ;; "If MFAMILY is NIL, use FAMILY--default when nothing else matches.") - - (for C MATCH TARGET MFAMILY MSIZE TFAMILY TSIZE COERCED in COERCIONS - eachtime (SETQ MATCH (CAR C)) - (if (LISTP MATCH) - then (SETQ MFAMILY (OR (CAR MATCH) - FAMILY)) - (SETQ MSIZE (OR (CADR MATCH) - SIZE)) - else (SETQ MFAMILY (OR MATCH FAMILY)) - (SETQ MSIZE SIZE)) when [AND (EQ FAMILY MFAMILY) - (EQ SIZE MSIZE) - (PROGN (SETQ TARGET (CADR C)) - (* ; - "Don't include the input in the output, if the coercions have a loop") - (if (LISTP TARGET) - then (SETQ TFAMILY (OR (CAR TARGET) - FAMILY)) - (SETQ TSIZE (OR (CADR TARGET) - SIZE)) - else (SETQ TFAMILY TARGET) - (SETQ TSIZE SIZE)) - (NOT (AND (EQ FAMILY TFAMILY) - (EQ SIZE TSIZE] - unless (MEMBER (SETQ COERCED (LIST TFAMILY TSIZE FACE ROTATION DEVICE CHARSET)) - $$VAL) collect COERCED]) + (* ;; "DON'T BREAK, TRACE, OR UNSAVE THIS UNLESS ALL SYSTEM FONTS HAVE ALREADY BEEN INSTANTIATED") + + (* ;; "Decodes and checks the various ways of specifying the arguments to font lookup functions.") + + (* ;; "If FAMILY can be coerced to a font descriptor and none of its properties are overwritten by the other aguments, then that font descriptor is returned. Otherwise the value is the coerced fontspec (family size face rotation device).") + + (LET (FONTX) + (CL:WHEN (AND (EQ 'CLASS (CAR (LISTP FAMILY))) + (LITATOM (CADR FAMILY))) + + (* ;; "This used to be at the entry to FONTCREATE, and it returned the FONTCLASS. That seemed wrong--FONTCREATE should always return a fontdescriptor. So here we build a throwaway fontclass, coerce it to its device font, and fall through.") + + (SETQ FAMILY (\FONT.CHECKARGS1 (FONTCLASS (CADR FAMILY) + (CDDR FAMILY)) + DEVICE))) + (CL:UNLESS (AND FAMILY (LITATOM FAMILY) + (NEQ FAMILY T)) + + (* ;; "FAMILY T or NIL produces an error below") + + [if (LISTP FAMILY) + then + (* ;; "Presumably a FONTSPEC. The variables here override the FONTX properties, as with the fontdescriptor below ") + + (SETQ FONTX (CL:IF (EQ 'FONT (CAR FAMILY)) + (CDR FAMILY) + FAMILY)) + (SETQ FAMILY (fetch (FONTSPEC FSFAMILY) of FONTX)) + (SETQ SIZE (OR SIZE (fetch (FONTSPEC FSSIZE) of FONTX))) + (SETQ FACE (OR FACE (fetch (FONTSPEC FSFACE) of FONTX))) + (SETQ ROTATION (OR ROTATION (fetch (FONTSPEC FSROTATION) of FONTX))) + (SETQ DEVICE (OR DEVICE (fetch (FONTSPEC FSDEVICE) of FONTX))) + (SETQ FONTX NIL) + elseif (SETQ FONTX (CL:IF (type? FONTDESCRIPTOR FAMILY) + FAMILY + (\FONT.CHECKARGS1 FAMILY DEVICE T))) + then + (* ;; + "FAMILY was a spec for a font descriptor. Are any of its properties overwritten?") + + (SETQ FAMILY (fetch (FONTDESCRIPTOR FONTFAMILY) of FONTX)) + (CL:UNLESS SIZE + (SETQ SIZE (fetch (FONTDESCRIPTOR FONTSIZE) of FONTX))) + (CL:UNLESS FACE + (SETQ FACE (fetch (FONTDESCRIPTOR FONTFACE) of FONTX))) + (CL:UNLESS ROTATION + (SETQ ROTATION (fetch (FONTDESCRIPTOR ROTATION) of FONTX))) + (CL:UNLESS DEVICE + (SETQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of FONTX)))]) + + (* ;; "We have decoded the arguments, fill in defaults and validate") + + (SETQ DEVICE (if (NULL DEVICE) + then 'DISPLAY + elseif (OR (AND (LITATOM DEVICE) + (NEQ DEVICE T)) + (STRINGP DEVICE)) + then (\DEVICESYMBOL DEVICE) + elseif [AND (SETQ DEVICE (\GETSTREAM DEVICE 'OUTPUT T)) + (CAR (MKLIST (IMAGESTREAMTYPE DEVICE] + else (\ILLEGAL.ARG DEVICE))) + (CL:UNLESS (AND FAMILY (LITATOM FAMILY) + (NEQ FAMILY T)) + (ERROR "Illegal font family" FAMILY)) + (SETQ FAMILY (U-CASE FAMILY)) + (CL:UNLESS (OR (AND (FIXP SIZE) + (IGREATERP SIZE 0)) + (EQ SIZE '*)) + (ERROR "Illegal font size" SIZE)) + (CL:UNLESS (EQ FACE '*) + (SETQ FACE (\FONTFACE FACE NIL DEVICE))) + (if (NULL ROTATION) + then (SETQ ROTATION 0) + elseif (AND (FIXP ROTATION) + (IGEQ ROTATION 0)) + elseif (EQ ROTATION '*) + else (\ILLEGAL.ARG ROTATION)) + (CL:WHEN FONTX + + (* ;; "Return FONTX only if no fields were overwritten") + + (CL:UNLESS (AND (EQ SIZE (fetch (FONTDESCRIPTOR FONTSIZE) of FONTX)) + (EQUAL FACE (fetch (FONTDESCRIPTOR FONTFACE) of FONTX)) + (EQ ROTATION (fetch (FONTDESCRIPTOR ROTATION) of FONTX)) + (EQ DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of FONTX))) + (SETQ FONTX NIL))) + (OR FONTX (MAKEFONTSPEC FAMILY SIZE FACE ROTATION DEVICE]) + +(\CHARSET.CHECK + [LAMBDA (CHARSET) (* ; "Edited 28-Aug-2025 14:35 by rmk") + (if CHARSET + then (CHARSET.DECODE (CL:IF (LISTP CHARSET) + (CAR CHARSET) + CHARSET)) + else 0]) ) (DEFINEQ -(\COERCEFONTDESC - [LAMBDA (SPEC STREAM NOERRORFLG) (* ; "Edited 27-Jul-2025 13:38 by rmk") - (* ; "Edited 22-Jul-2025 18:47 by rmk") - (* ; "Edited 14-Jul-2025 19:40 by rmk") - (* ; "Edited 5-Jul-2025 14:16 by rmk") - (* ; "Edited 29-Aug-91 12:19 by jds") +(COERCEFONTSPEC + [LAMBDA (FONTSPEC COERCIONS) (* ; "Edited 28-Aug-2025 14:41 by rmk") + (* ; "Edited 25-Aug-2025 10:22 by rmk") + (* ; "Edited 17-Aug-2025 19:15 by rmk") + (* ; "Edited 16-Aug-2025 17:47 by rmk") + (* ; "Edited 12-Aug-2025 12:30 by rmk") + (* ; "Edited 10-Aug-2025 12:03 by rmk") + (* ; "Edited 5-Aug-2025 17:27 by rmk") + (* ; "Edited 23-Jul-2025 15:39 by rmk") + + (* ;; "Produces a list of coerced fontspecs, one for each coercion whose right side matches the given FONTSPEC parameters.") + + (* ;; "Doesn't make sense to coerce the device, DEVICE and also CHARSET are just carried along.") + + (* ;; "A NIL match component matches everything, and a NIL target component denotes the corresponding argument.") + + (for C MATCH TARGET MFAMILY MSIZE MFACE MROTATION TFAMILY TSIZE TFACE TROTATION COERCED FAMILY + SIZE FACE ROTATION DEVICE in (OR COERCIONS (FONTDEVICEPROP FONTSPEC 'FONTCOERCIONS)) + first (SPREADFONTSPEC FONTSPEC) eachtime (SETQ MATCH (MKLIST (CAR C))) + when [AND (COERCEFONTSPEC.MATCH (pop MATCH) + FAMILY) + (COERCEFONTSPEC.MATCH (pop MATCH) + SIZE) + (COERCEFONTSPEC.MATCH (pop MATCH) + FACE) + (COERCEFONTSPEC.MATCH (CAR MATCH) + ROTATION) + (PROGN (SETQ TARGET (MKLIST (CADR C))) + (SETQ TFAMILY (COERCEFONTSPEC.TARGET (pop TARGET) + FAMILY)) + (SETQ TSIZE (COERCEFONTSPEC.TARGET (pop TARGET) + SIZE)) + (SETQ TFACE (COERCEFONTSPEC.TARGET (pop TARGET) + FACE)) + (SETQ TROTATION (COERCEFONTSPEC.TARGET ROTATION (pop TARGET))) + + (* ;; "Don't include the input in the output, if the coercions have a loop") + + (NOT (AND (EQ FAMILY TFAMILY) + (EQ SIZE TSIZE) + (EQUAL FACE TFACE) + (EQ ROTATION TROTATION] + unless (MEMBER (SETQ COERCED (MAKEFONTSPEC TFAMILY TSIZE TFACE TROTATION DEVICE)) + $$VAL) collect COERCED]) +) +(DECLARE%: EVAL@COMPILE DONTCOPY +(DECLARE%: EVAL@COMPILE - (* ;; "It was intended to remove this function in favor of FONTCREATE as FONT was cleaned up to avoid stack overflows in certain situations. The calls in system code have been replaced, but the macros for FONTASCENT, FONTDESCENT, and FONTHEIGHT were putting out calls. So there may be calls in user code that still has compiled references.") +(PUTPROPS COERCEFONTSPEC.MATCH MACRO [(M F) (* ; "* can't be car--comment") + (LET ((MM M) + *) + (DECLARE (LOCALVARS MM) + (SPECVARS *)) + (SETQ * F) + (OR (EQ * MM) + (MEMB MM '(NIL *)) + (AND (LISTP MM) + (EVAL MM]) + +(PUTPROPS COERCEFONTSPEC.TARGET MACRO + (OPENLAMBDA (TG F) + (if (MEMB TG '(NIL *)) + then F + elseif (AND (LISTP TG) + (LET (VAL *) + (DECLARE (LOCALVARS VAL) + (SPECVARS *)) (* ; "* Can't be car--comment") + (SETQ * F) + (SETQ VAL (EVAL TG)) + (CL:IF (MEMB VAL '(NIL *)) + F + VAL))) + else TG))) +) +) +(DECLARE%: EVAL@COMPILE - (* ;; "Those macro calls all had NIL for STREAM and NOERRORFLG. So here we give a dummy definition that just calls FONTCREATE") +(PUTPROPS SPREADFONTSPEC MACRO [(FONTSPEC) + (LET ((FS FONTSPEC)) - (* ;; "We probably should put out a macro to compile \COERCEFONTDESC away.") + (* ;; "Unwrap a FONTSPEC sequentially") - (FONTCREATE SPEC]) + (CL:WHEN (type? FONTDESCRIPTOR FS) + (SETQ FS (FONTPROP FS 'SPEC))) + (SETQ FAMILY (pop FS)) + (SETQ SIZE (pop FS)) + (SETQ FACE (pop FS)) + (SETQ ROTATION (pop FS)) + (SETQ DEVICE (pop FS]) ) -(DECLARE%: EVAL@COMPILE +(DEFINEQ + +(MAKEFONTSPEC + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 28-Aug-2025 14:32 by rmk") + (* ; "Edited 17-Aug-2025 20:44 by rmk") -(PUTPROPS SPREADFONTSPEC MACRO (OPENLAMBDA (FONTSPEC) - (CL:WHEN (type? FONTDESCRIPTOR FONTSPEC) - (SETQ FONTSPEC (FONTPROP FONTSPEC 'SPEC))) - (SETQ SIZE (CADR FONTSPEC)) - (SETQ FACE (CADDR FONTSPEC)) - (SETQ ROTATION (CADDDR FONTSPEC)) - (SETQ DEVICE (CAR (CDDDDR FONTSPEC))) - (SETQ CHARSET (CADR (CDDDDR FONTSPEC))) - (SETQ FAMILY (CAR FONTSPEC)))) + (* ;; "This is a function, not a macro, so that it can be used in the loadup sequence to create the FONTSPEC for the \GUARANTEEDDISPLAYFONT. That font is created by \CREATEFONT and therefore is not dependent on \FONT.CHECKARGS or on the multi-alist multi-key indexing functions. The strategy might change if MULTI-ALIST is moved earlier in the loadup sequence.") + + (create FONTSPEC + FSFAMILY _ FAMILY + FSSIZE _ SIZE + FSFACE _ FACE + FSROTATION _ ROTATION + FSDEVICE _ DEVICE]) ) (DEFINEQ (COMPLETE.FONT - [LAMBDA (FONTSPEC EVENIFCOMPLETE) (* ; "Edited 21-Jun-2025 11:37 by rmk") + [LAMBDA (FONTSPEC EVENIFCOMPLETE) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 29-Aug-2025 23:51 by rmk") + (* ; "Edited 27-Aug-2025 10:51 by rmk") + (* ; "Edited 21-Jun-2025 11:37 by rmk") (* ; "Edited 19-Jun-2025 14:42 by rmk") (* ; "Edited 12-Jun-2025 22:06 by rmk") (* ; "Edited 8-Jun-2025 15:57 by rmk") @@ -906,29 +1109,35 @@ (* ;; "This returns a FONTDESCRIPTOR for FONTSPEC that is complete with respect to all known character sources. A caller that wants to insure that only files sources are considered should reset \FONTSINCORE and \FONTEXISTS?-CACHE. If reset, we still get the benefit of previous completions/coercions in this run if medleyfont files have been created for them.") - (LET ((FONT (FONTCREATE FONTSPEC))) (* ; - "This will pick up FAMILY/SIZE...properties from FONT") + (LET ((FONT (FONTCREATE FONTSPEC))) + (SETQ FONTSPEC (FONTPROP FONT 'SPEC)) (* ; "Normalized version") (CL:WHEN (OR EVENIFCOMPLETE (NOT (fetch (FONTDESCRIPTOR FONTCOMPLETEP) of FONT))) - (for CS from 0 to \MAXCHARSET do - (* ;; - "Skips existing charsets--they already have as much information as they are ever going to get") - - (\INSURECHARSETINFO CS FONT)) + (for CHARSET CSINFO from 0 to \MAXCHARSET + do (if (SETQ CSINFO (\GETCHARSETINFO FONT CHARSET)) + then (CL:WHEN EVENIFCOMPLETE + (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with NIL)) + else (SETQ CSINFO (\CREATECHARSET CHARSET FONT))) + (COMPLETE.CHARSET CSINFO FONTSPEC CHARSET FONT)) (replace (FONTDESCRIPTOR FONTCOMPLETEP) of FONT with T)) - (PRUNEFONTSLUGS FONT) + (PRUNESLUGCSINFOS FONT) FONT]) (COMPLETEFONTP - [LAMBDA (FONT) (* ; "Edited 24-May-2025 20:55 by rmk") + [LAMBDA (FONT) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 24-May-2025 20:55 by rmk") (* ; "Edited 20-May-2025 14:37 by rmk") (* ;; "A font is incomplete if there is a NIL in any charset slot. Completing will install a charset everywhere, even if it is a slug charset.") (SETQ FONT (FONTCREATE FONT)) - (for CS from 0 to \MAXCHARSET always (\XGETCHARSETINFO FONT CS]) + (for CS from 0 to \MAXCHARSET always (\GETCHARSETINFO FONT CS]) (COMPLETE.CHARSET - [LAMBDA (CSINFO FAMILY SIZE FACE ROTATION DEVICE CHARSET COERCIONS FONTDESC) + [LAMBDA (CSINFO FONTSPEC CHARSET FONT) (* ; "Edited 7-Sep-2025 11:23 by rmk") + (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 28-Aug-2025 20:46 by rmk") + (* ; "Edited 27-Aug-2025 12:37 by rmk") + (* ; "Edited 17-Aug-2025 11:47 by rmk") (* ; "Edited 12-Jul-2025 13:15 by rmk") (* ; "Edited 10-Jul-2025 12:38 by rmk") (* ; "Edited 9-Jul-2025 09:12 by rmk") @@ -937,29 +1146,35 @@ (* ; "Edited 8-Jun-2025 20:20 by rmk") (* ; "Edited 7-Jun-2025 13:52 by rmk") - (* ;; "CSINFO has some characters for this charset, but others may fill in from later fonts in the coercion chain. We assume that CSINFO is or will be the charsetinfo for CHARSET in the font described by FAMILY SIZE... For each missing code we look through all the possible coercions to find the first font with real information about that character. We copy that character up to CSINFO.") + (* ;; "CSINFO has some characters for this charset in FONT, but others may fill in from the FONTSPEC of later fonts in the coercion chain. We assume that CSINFO is or will be the charsetinfo for the charset/font described by FONTSPEC. For each missing code we look through all the possible coercions to find the first font with real information about that character. We copy that character up to CSINFO.") + (\SETCHARSETINFO FONT CHARSET CSINFO) (CL:UNLESS (fetch (CHARSETINFO CSCOMPLETEP) of CSINFO) - [for THINCODE SOURCECSINFO GLYPHADDED from 0 to \MAXTHINCHAR - when (AND (SLUGCHARP.DISPLAY THINCODE CSINFO) - (SETQ SOURCECSINFO (\COERCECHARSET FAMILY SIZE FACE ROTATION DEVICE CHARSET - COERCIONS THINCODE))) - do (\MOVEFONTCHAR SOURCECSINFO CSINFO THINCODE THINCODE FONTDESC) - (SETQ GLYPHADDED T) finally (CL:WHEN GLYPHADDED(* ; "The source is now here") - (CHARSETPROP CSINFO 'SOURCE - (MAKECSSOURCE FAMILY SIZE FACE ROTATION DEVICE - CHARSET)))] - (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with T)) + (for CODE SOURCEFONT from (FIRSTCHARSETCODE CHARSET) to (LASTCHARSETCODE CHARSET) + when [AND (SLUGCHARP.DISPLAY CODE FONT) + (SETQ SOURCEFONT (CAR (\COERCECHARSET FONTSPEC CHARSET CODE] + collect (LIST (LIST CODE SOURCEFONT) + CODE) finally (CL:WHEN $$VAL (* ; "The source is now here") + (MOVEFONTCHARS $$VAL FONT) + (CHARSETPROP CSINFO 'SOURCE FONTSPEC))) + (CL:WHEN (FONTDEVICEPROP FONT 'CHARCOERCIONS) (* ; + "Maybe coercions are just being delayed") + (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with T))) CSINFO]) -(PRUNEFONTSLUGS - [LAMBDA (FONT) (* ; "Edited 9-Jun-2025 15:02 by rmk") +(PRUNESLUGCSINFOS + [LAMBDA (FONT) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 17-Aug-2025 19:44 by rmk") + (* ; "Edited 9-Jun-2025 15:02 by rmk") (* ; "Edited 24-May-2025 21:11 by rmk") + + (* ;; "Replaces slug csinfos in FONT with NIL") + (SETQ FONT (FONTCREATE FONT)) - (for CS CSINFO from 0 to \MAXCHARSET when (AND (SETQ CSINFO (\XGETCHARSETINFO FONT CS)) + (for CS CSINFO from 0 to \MAXCHARSET when (AND (SETQ CSINFO (\GETCHARSETINFO FONT CS)) (fetch (CHARSETINFO CSSLUGP) of CSINFO)) - do (\SETCHARSETINFO (fetch (FONTDESCRIPTOR FONTCHARSETVECTOR) of FONT) - CS NIL)) + do (\SETCHARSETINFO FONT CS NIL)) FONT]) ) @@ -989,7 +1204,10 @@ (fetch (FONTDESCRIPTOR \SFHeight) of (FONTCREATE FONTSPEC]) (FONTPROP - [LAMBDA (FONT PROP) (* ; "Edited 23-Jul-2025 17:01 by rmk") + [LAMBDA (FONT PROP) (* ; "Edited 2-Sep-2025 22:21 by rmk") + (* ; "Edited 12-Aug-2025 21:10 by rmk") + (* ; "Edited 10-Aug-2025 13:28 by rmk") + (* ; "Edited 23-Jul-2025 17:01 by rmk") (* ; "Edited 13-Jul-2025 22:44 by rmk") (* ; "Edited 8-Jun-2025 20:42 by rmk") (* ; "Edited 24-May-2025 07:40 by rmk") @@ -1015,56 +1233,51 @@ (DEVICE (ffetch FONTDEVICE of FONT)) (CHARENCODING [OR (ffetch FONTCHARENCODING of FONT) (freplace FONTCHARENCODING of FONT - with (if (NEQ CHARSET 0) - then 'MCCS - elseif (MEMB (fetch (FONTDESCRIPTOR FONTFAMILY) of FONT) - NSFONTFAMILIES) + with (if (MEMB (fetch (FONTDESCRIPTOR FONTFAMILY) of FONT) + NSFONTFAMILIES) then 'XCCS$ elseif (MEMB (fetch (FONTDESCRIPTOR FONTFAMILY) of FONT) ALTOFONTFAMILIES) then 'ALTOTEXT else (fetch (FONTDESCRIPTOR FONTFAMILY) of FONT]) - (SPEC (LIST (ffetch FONTFAMILY of FONT) - (ffetch FONTSIZE of FONT) - (COPY (ffetch FONTFACE of FONT)) - (ffetch ROTATION of FONT) - (ffetch FONTDEVICE of FONT))) + (SPEC (create FONTSPEC + FSFAMILY _ (ffetch FONTFAMILY of FONT) + FSSIZE _ (ffetch FONTSIZE of FONT) + FSFACE _ (COPY (ffetch FONTFACE of FONT)) + FSROTATION _ (ffetch ROTATION of FONT) + FSDEVICE _ (ffetch FONTDEVICE of FONT))) (DEVICESPEC (* ;  "DEVICE fields are for communicating coercions to the particular printing device") - [COND - ((ffetch FONTDEVICESPEC of FONT) - (COPY (ffetch FONTDEVICESPEC of FONT))) - (T (FONTPROP FONT 'SPEC]) - (DEVICEFACE [COPY (COND - ((ffetch FONTDEVICESPEC of FONT) - (CADDR (ffetch FONTDEVICESPEC of FONT))) - (T (ffetch FONTFACE of FONT]) - (DEVICESLOPE [fetch SLOPE of (COND - ((ffetch FONTDEVICESPEC of FONT) - (CADDR (ffetch FONTDEVICESPEC of FONT))) - (T (ffetch FONTFACE of FONT]) - (DEVICEWEIGHT [fetch WEIGHT of (COND - ((ffetch FONTDEVICESPEC of FONT) - (CADDR (ffetch FONTDEVICESPEC of FONT))) - (T (ffetch FONTFACE of FONT]) + (CL:IF (ffetch FONTDEVICESPEC of FONT) + (COPY (ffetch FONTDEVICESPEC of FONT)) + (FONTPROP FONT 'SPEC))) + (DEVICEFAMILY (CL:IF (ffetch FONTDEVICESPEC of FONT) + (fetch (FONTSPEC FSFAMILY) of (ffetch FONTDEVICESPEC of FONT)) + (ffetch FONTFAMILY of FONT))) + (DEVICESIZE (CL:IF (ffetch FONTDEVICESPEC of FONT) + (fetch (FONTSPEC FSSIZE) of (ffetch FONTDEVICESPEC of FONT)) + (ffetch FONTSIZE of FONT))) + (DEVICEFACE (COPY (CL:IF (ffetch FONTDEVICESPEC of FONT) + (fetch (FONTSPEC FSFACE) of (ffetch FONTDEVICESPEC of FONT)) + (ffetch FONTFACE of FONT)))) + (DEVICESLOPE (fetch SLOPE of (CL:IF (ffetch FONTDEVICESPEC of FONT) + (fetch (FONTSPEC FSFACE) of (ffetch FONTDEVICESPEC + of FONT)) + (ffetch FONTFACE of FONT)))) + (DEVICEWEIGHT (fetch WEIGHT of (CL:IF (ffetch FONTDEVICESPEC of FONT) + (fetch (FONTSPEC FSFACE) of (ffetch FONTDEVICESPEC + of FONT)) + (ffetch FONTFACE of FONT)))) (DEVICEEXPANSION - [fetch EXPANSION of (COND - ((ffetch FONTDEVICESPEC of FONT) - (CADDR (ffetch FONTDEVICESPEC of FONT))) - (T (ffetch FONTFACE of FONT]) - (DEVICESIZE (COND - ((ffetch FONTDEVICESPEC of FONT) - (CADR (ffetch FONTDEVICESPEC of FONT))) - (T (ffetch FONTSIZE of FONT)))) - (DEVICEFAMILY (COND - ((ffetch FONTDEVICESPEC of FONT) - (CAR (ffetch FONTDEVICESPEC of FONT))) - (T (ffetch FONTFAMILY of FONT)))) + (fetch EXPANSION of (CL:IF (ffetch FONTDEVICESPEC of FONT) + (fetch (FONTSPEC FSFACE) of (ffetch FONTDEVICESPEC of FONT)) + (ffetch FONTFACE of FONT)))) (SCALE (ffetch FONTSCALE of FONT)) (CHARSETS (for CS CSINFO (CSVECTOR _ (ffetch FONTCHARSETVECTOR of FONT)) from 0 to \MAXCHARSET eachtime (SETQ CSINFO (\GETBASEPTR CSVECTOR (UNFOLD CS 2))) when CSINFO unless (fetch (CHARSETINFO CSSLUGP) of CSINFO) collect CS)) + (FONTTOMCCSFN (ffetch FONTTOMCCSFN of FONT)) (\ILLEGAL.ARG PROP]) (\AVGCHARWIDTH @@ -1082,19 +1295,55 @@ then W else 1]) ) +(* "FOLLOWING DEFINITIONS EXPORTED") +(DEFOPTIMIZER FONTPROP (&REST ARGS) + (SELECTQ (AND (EQ (CAADR ARGS) + 'QUOTE) + (CADADR ARGS)) + (ASCENT `(FONTASCENT ,(CAR ARGS))) + (DESCENT `(FONTDESCENT ,(CAR ARGS))) + (HEIGHT `(FONTHEIGHT ,(CAR ARGS))) + (FONTTOMCCSFN `(fetch (FONTDESCRIPTOR FONTTOMCCSFN) + of ,(CAR ARGS))) + 'IGNOREMACRO)) + +(* "END EXPORTED DEFINITIONS") + +(DEFINEQ + +(FONTDEVICEPROP + [LAMBDA (FONTDEVICE PROP) (* ; "Edited 25-Aug-2025 21:23 by rmk") + + (* ;; "Returns the value of the PROP property of the FONTDEVICE. E.g. if FONTDEVICE is DISPLAY and PROP is %"FONTCOERCIONS%", returns the value of DISPLAYFONTCOERCIONS ((HELVETICA 1)(HELVETICA 4)...)") + + [if (LITATOM FONTDEVICE) + then (SETQ FONTDEVICE (\FONTSYMBOL FONTDEVICE)) + else (SETQ FONTDEVICE (\FONT.CHECKARGS FONTDEVICE)) + (SETQ FONTDEVICE (CL:IF (type? FONTDESCRIPTOR FONTDEVICE) + (FONTPROP FONTDEVICE 'DEVICE) + (fetch (FONTSPEC FSDEVICE) of FONTDEVICE))] + (CL:UNLESS FONTDEVICE + (SETQ FONTDEVICE 'DISPLAY)) + (LET ((VAR (PACK* FONTDEVICE PROP))) + (CL:WHEN (BOUNDP VAR) + (GETATOMVAL VAR]) +) -(* ;; "Moving character information") +(* ; "Moving character information") (DEFINEQ (EDITCHAR - [LAMBDA (CHARCODE FONT) (* ; "Edited 14-Jul-2025 22:54 by rmk") + [LAMBDA (CHARCODE FONT) (* ; "Edited 28-Aug-2025 23:50 by rmk") + (* ; "Edited 14-Jul-2025 22:54 by rmk") (* ; "Edited 5-Jul-2025 18:47 by rmk") (* rrb "24-MAR-82 12:22") (* ;  "calls the bitmap editor on a character of a font") + (SETQ CHARCODE (OR (CHARCODEP CHARCODE) + (CHARCODE.DECODE CHARCODE))) (LET ((FONTDESC (FONTCREATE FONT))) (PUTCHARBITMAP CHARCODE FONTDESC (EDITBM (GETCHARBITMAP CHARCODE FONTDESC]) ) @@ -1106,19 +1355,24 @@ (DEFINEQ (GETCHARBITMAP - [LAMBDA (CHARCODE FONT) (* ; "Edited 7-Jun-2025 09:55 by rmk") + [LAMBDA (CHARCODE FONT) (* ; "Edited 30-Aug-2025 23:19 by rmk") + (* ; "Edited 3-Aug-2025 13:28 by rmk") + (* ; "Edited 7-Jun-2025 09:55 by rmk") (* ; "Edited 22-May-2025 09:52 by rmk") (* ; "Edited 25-Apr-2025 11:21 by rmk") (* ; "Edited 26-Apr-89 21:49 by atm") (* ;  "returns a bitmap of the character CHARCODE from the font descriptor FONTDESC.") - (SETQ CHARCODE (CHARCODE.DECODE CHARCODE)) + (SETQ CHARCODE (CL:IF (CHARCODEP CHARCODE) + CHARCODE + (CHARCODE.DECODE CHARCODE))) (\GETCHARBITMAP.CSINFO (\CHAR8CODE CHARCODE) - (\INSURECHARSETINFO (\CHARSET CHARCODE) - (FONTCREATE FONT]) + (\INSURECHARSETINFO (FONTCREATE FONT) + (\CHARSET CHARCODE]) (PUTCHARBITMAP - [LAMBDA (CHARCODE FONT NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 7-Jun-2025 10:16 by rmk") + [LAMBDA (CHARCODE FONT NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 30-Aug-2025 23:20 by rmk") + (* ; "Edited 7-Jun-2025 10:16 by rmk") (* ; "Edited 25-May-2025 15:10 by rmk") (* ; "Edited 22-May-2025 09:56 by rmk") (* ; "Edited 1-May-2025 13:21 by rmk") @@ -1131,8 +1385,7 @@ (\ILLEGAL.ARG NEWCHARBITMAP)) (SETQ CHARCODE (CHARCODE.DECODE CHARCODE)) (SETQ FONT (FONTCREATE FONT)) - (LET ((CSINFO (\INSURECHARSETINFO (\CHARSET CHARCODE) - FONT))) + (LET [(CSINFO (\INSURECHARSETINFO FONT (\CHARSET CHARCODE] (UNINTERRUPTABLY (CL:WHEN (\PUTCHARBITMAP.CSINFO (\CHAR8CODE CHARCODE) CSINFO NEWCHARBITMAP NEWCHARDESCENT) @@ -1149,7 +1402,8 @@ NIL NEWCHARBITMAP]) (\GETCHARBITMAP.CSINFO - [LAMBDA (CODE CSINFO) (* ; "Edited 7-Jun-2025 09:56 by rmk") + [LAMBDA (CODE CSINFO) (* ; "Edited 3-Aug-2025 20:59 by rmk") + (* ; "Edited 7-Jun-2025 09:56 by rmk") (* ; "Edited 22-May-2025 09:52 by rmk") (* ; "Edited 25-Apr-2025 11:21 by rmk") (* ; "Edited 26-Apr-89 21:49 by atm") @@ -1177,7 +1431,8 @@ CBM]) (\PUTCHARBITMAP.CSINFO - [LAMBDA (CODE CSINFO NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 7-Jun-2025 10:15 by rmk") + [LAMBDA (THINCODE CSINFO NEWCHARBITMAP NEWCHARDESCENT) (* ; "Edited 24-Aug-2025 09:56 by rmk") + (* ; "Edited 7-Jun-2025 10:15 by rmk") (* ; "Edited 25-May-2025 15:10 by rmk") (* ; "Edited 22-May-2025 09:56 by rmk") (* ; "Edited 1-May-2025 13:21 by rmk") @@ -1192,8 +1447,8 @@ (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) (IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) - (CIMWIDTH (AND IMWIDTHS (\FGETIMAGEWIDTH IMWIDTHS CODE))) - (CWIDTH (OR CIMWIDTH (\FGETWIDTH WIDTHS CODE))) + (CIMWIDTH (AND IMWIDTHS (\FGETIMAGEWIDTH IMWIDTHS THINCODE))) + (CWIDTH (OR CIMWIDTH (\FGETWIDTH WIDTHS THINCODE))) (FONTBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) (OFWIDTH (fetch (BITMAP BITMAPWIDTH) of FONTBITMAP)) TEMPBITMAP BWIDTH DW BHEIGHT BASCENT BDESCENT NDESCENT NASCENT NHEIGHT CHAROFFSET @@ -1208,11 +1463,11 @@ (SETQ NDESCENT (IMAX BDESCENT CDESCENT)) (SETQ NASCENT (IMAX BASCENT CASCENT)) (SETQ NHEIGHT (IPLUS NDESCENT NASCENT)) - (SETQ CHAROFFSET (\FGETOFFSET OFFSETS CODE)) + (SETQ CHAROFFSET (\FGETOFFSET OFFSETS THINCODE)) (* ;; "set up a new target bitmap if any of the parameters have changed.") - (if (EQ CHAROFFSET (\FGETOFFSET OFFSETS \MAXTHINCHAR)) + (if (EQ CHAROFFSET (\FGETOFFSET OFFSETS SLUGCHARINDEX)) then (* ;; "changing the bitmap for a character which formerly pointed at the slug character. Allocate a new bitmap character bitmap for this.") @@ -1262,14 +1517,14 @@ (UNINTERRUPTABLY (* ;  "update the parameters for this character set.") - (\FSETWIDTH WIDTHS CODE BWIDTH) (* ; "The new character's correct width") + (\FSETWIDTH WIDTHS THINCODE BWIDTH) (* ; "The new character's correct width") (* ;  "Make sure that we update imagewidths also") - (CL:WHEN IMWIDTHS (\FSETIMAGEWIDTH IMWIDTHS CODE BWIDTH)) - (\FSETOFFSET OFFSETS CODE CHAROFFSET) + (CL:WHEN IMWIDTHS (\FSETIMAGEWIDTH IMWIDTHS THINCODE BWIDTH)) + (\FSETOFFSET OFFSETS THINCODE CHAROFFSET) (CL:WHEN DW - (for I from 0 to \MAXTHINCHAR when (IGREATERP (\FGETOFFSET OFFSETS I) - CHAROFFSET) + (for I from 0 to SLUGCHARINDEX when (IGREATERP (\FGETOFFSET OFFSETS I) + CHAROFFSET) do (* ;;  "If the imagewidth has changed, offsets after the modified character have to be adjusted. ") @@ -1318,7 +1573,11 @@ NEWDESCENT]) (MOVEFONTCHARS - [LAMBDA (PAIRS DESTFONT DEFAULTSOURCEFONT) (* ; "Edited 24-Jul-2025 21:05 by rmk") + [LAMBDA (PAIRS DESTFONT DEFAULTSOURCEFONT) (* ; "Edited 4-Sep-2025 11:07 by rmk") + (* ; "Edited 30-Aug-2025 23:20 by rmk") + (* ; "Edited 26-Aug-2025 23:10 by rmk") + (* ; "Edited 25-Aug-2025 09:12 by rmk") + (* ; "Edited 24-Jul-2025 21:05 by rmk") (* ; "Edited 9-Jul-2025 09:13 by rmk") (* ; "Edited 17-Jun-2025 19:53 by rmk") (* ; "Edited 7-Jun-2025 00:06 by rmk") @@ -1337,83 +1596,57 @@ (CL:WHEN PAIRS (SETQ DESTFONT (FONTCREATE DESTFONT)) - (LET ((DEVICE (FONTPROP DESTFONT 'DEVICE)) - PAIRINFO) - (SETQ DEFAULTSOURCEFONT (CL:IF DEFAULTSOURCEFONT - (FONTCREATE DEFAULTSOURCEFONT NIL NIL NIL DEVICE) - DESTFONT)) + (SETQ DEFAULTSOURCEFONT (CL:IF DEFAULTSOURCEFONT + (FONTCREATE DEFAULTSOURCEFONT NIL NIL NIL (FONTPROP DESTFONT + 'DEVICE)) + DESTFONT)) + (LET (PAIRINFO) (* ;; "Fix/check arguments, and expand out the information for all the source characters, so there is no toe-stepping if there are overlaps.") - (SETQ PAIRINFO (for P S SCODE SFONT DCODE SCSINFO DCSINFO in PAIRS - collect (CL:WHEN (SMALLP P) - (SETQ P (LIST P P))) - (SETQ S (CAR P)) - (SETQ DCODE (CADR P)) - (CL:UNLESS (CHARCODEP DCODE) - (SETQ DCODE (CHARCODE.DECODE DCODE))) - (CL:UNLESS (\INSURECHARSETINFO (\CHARSET DCODE) - DESTFONT)) - (SETQ SCODE (CL:IF (LISTP S) - (CAR S) - S)) - (CL:UNLESS (CHARCODEP SCODE) - (SETQ SCODE (CHARCODE.DECODE SCODE))) - (SETQ SFONT (CL:IF (LISTP S) - (FONTCREATE (CADR S) - NIL NIL NIL DEVICE) - DEFAULTSOURCEFONT)) - (CL:UNLESS (SETQ SCSINFO (\INSURECHARSETINFO (\CHARSET SCODE) - SFONT))) - (CL:UNLESS (SETQ DCSINFO (\INSURECHARSETINFO (\CHARSET DCODE) - DESTFONT)) - - (* ;; - "If the destination csinfo doesn't exist, initialize with a copy of the source character's csinfo") - - (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of DESTFONT) - (\CHARSET DCODE) - (COPYALL SCSINFO))) - (LIST (LIST SCODE (\GETCHARINFO SCSINFO (\CHAR8CODE SCODE))) - DCODE))) + (SETQ PAIRINFO (for P S DCODE in PAIRS collect (CL:WHEN (SMALLP P) + (SETQ P (LIST P P))) + (SETQ DCODE (CADR P)) + (CL:UNLESS (CHARCODEP DCODE) + (SETQ DCODE (CHARCODE.DECODE DCODE))) + (\INSURECHARSETINFO DESTFONT (\CHARSET + DCODE)) + (LIST (\MOVEFONTCHARS.SOURCEDATA + (CAR P) + DEFAULTSOURCEFONT) + DCODE))) (* ;; "Install source character information into the destination font. ") - (for P DCHARCODE DCSINFO ASCENT DESCENT in PAIRINFO - do (SETQ DCHARCODE (CADR P)) - (SETQ DCSINFO (\XGETCHARSETINFO DESTFONT (\CHARSET DCHARCODE))) - (CL:WHEN (fetch (CHARSETINFO CSSLUGP) of DCSINFO) - (* ; "Break the slug-sharing") - (SETQ DCSINFO (create CHARSETINFO copying DCSINFO CSSLUGP _ NIL)) - (\SETCHARSETINFO (fetch (FONTDESCRIPTOR FONTCHARSETVECTOR)) - (\CHARSET DCHARCODE) - DCSINFO)) - (\MOVEFONTCHAR (CADAR P) - DCSINFO - (\CHAR8CODE (CAAR P)) - (\CHAR8CODE DCHARCODE) - DESTFONT)))) + (for P in PAIRINFO do (\MOVEFONTCHAR (CAR P) + (CADR P) + DESTFONT)))) DESTFONT]) (\MOVEFONTCHAR - [LAMBDA (SCHARINFO DCSINFO SCODE DCODE DFONT) (* ; "Edited 24-Jul-2025 10:47 by rmk") + [LAMBDA (SOURCEDATA DCODE DFONT) (* ; "Edited 4-Sep-2025 12:37 by rmk") + (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 28-Aug-2025 20:50 by rmk") + (* ; "Edited 26-Aug-2025 22:25 by rmk") + (* ; "Edited 25-Aug-2025 09:13 by rmk") + (* ; "Edited 24-Jul-2025 10:47 by rmk") (* ; "Edited 22-Jul-2025 13:18 by rmk") (* ; "Edited 8-Jul-2025 22:23 by rmk") (* ; "Edited 17-Jun-2025 19:53 by rmk") (* ; "Edited 7-Jun-2025 14:43 by rmk") - (* ;; "Internal CSINFO-level function to move the information for (thinchar) SCODE in the source CSINFO to (thinchar) DCODE) in the destination CSINFO.") + (* ;; "Internal CSINFO-level function to move the information for STHINCODE in the source CSINFO to DTHINCODE) in the destination CSINFO.") - (* ;; "The caller (MOVEFONTCHARS) may have provided the source character information as an alist structure to avoid stepping on toes. If SCHARINFO is a CSINFO, the alist is extracted here.") + (* ;; "The caller (MOVEFONTCHARS) may have provided the source character information as an alist structure to avoid stepping on toes. If SOURCEDATA is a CSINFO, the alist is extracted here.") - (* ;; "If DFONT is provided, its ascent and descent may be adjusted to reflect SCHARINFO.") + (* ;; "If DFONT is provided, its ascent and descent may be adjusted to reflect SOURCEDATA.") - (CL:WHEN (type? CHARSETINFO SCHARINFO) - (SETQ SCHARINFO (\GETCHARINFO SCHARINFO SCODE))) - (LET (DESCENT ASCENT TEMP) - (CL:WHEN [AND (FGETMULTI SCHARINFO 'IMAGEWIDTHS) - (NEQ (FGETMULTI SCHARINFO 'WIDTHS) - (FGETMULTI SCHARINFO 'IMAGEWIDTHS)) + (LET ((DCSINFO (\INSURECHARSETINFO DFONT (\CHARSET DCODE))) + (DTHINCODE (\CHAR8CODE DCODE)) + DESCENT ASCENT TEMP) + (CL:WHEN [AND (FGETMULTI SOURCEDATA 'IMAGEWIDTHS) + (NEQ (FGETMULTI SOURCEDATA 'WIDTHS) + (FGETMULTI SOURCEDATA 'IMAGEWIDTHS)) (OR (EQ (ffetch (CHARSETINFO WIDTHS) of DCSINFO) (ffetch (CHARSETINFO IMAGEWIDTHS) of DCSINFO)) (NULL (ffetch (CHARSETINFO IMAGEWIDTHS) of DCSINFO] @@ -1423,20 +1656,29 @@ (replace (CHARSETINFO IMAGEWIDTHS) of DCSINFO with (\COPYARRAYBLOCK (ffetch (CHARSETINFO WIDTHS) of DCSINFO)))) - (CL:WHEN (SETQ TEMP (FGETMULTI SCHARINFO 'BITMAP)) - (\PUTCHARBITMAP.CSINFO DCODE DCSINFO TEMP (FGETMULTI SCHARINFO 'DESCENT))) - (UPDATEINFOELEMENT WIDTHS) - (UPDATEINFOELEMENT IMAGEWIDTHS) - (UPDATEINFOELEMENT YWIDTHS) - (CL:WHEN (FGETMULTI SCHARINFO 'LEFTKERN) - (\FSETLEFTKERN DCSINFO DCODE (FGETMULTI SCHARINFO 'LEFTKERN))) - (SETQ DESCENT (IMAX (FGETMULTI SCHARINFO 'DESCENT) + [if (FGETMULTI SOURCEDATA 'SLUG) + then (\MAKESLUGCHAR DTHINCODE DCSINFO) + else (CL:WHEN (fetch (CHARSETINFO CSSLUGP) of DCSINFO) + (* ; "No longer a slug csinfo") + (SETQ DCSINFO (create CHARSETINFO copying DCSINFO CSSLUGP _ NIL CSCOMPLETEP _ NIL + )) + (\SETCHARSETINFO DFONT (\CHARSET DCODE) + DCSINFO)) + (CL:WHEN (SETQ TEMP (FGETMULTI SOURCEDATA 'BITMAP)) + (\PUTCHARBITMAP.CSINFO DTHINCODE DCSINFO TEMP (FGETMULTI SOURCEDATA 'DESCENT)) + (UPDATEINFOELEMENT WIDTHS) + (UPDATEINFOELEMENT IMAGEWIDTHS) + (UPDATEINFOELEMENT YWIDTHS) + (CL:WHEN (FGETMULTI SOURCEDATA 'LEFTKERN) + (\FSETLEFTKERN DCSINFO DTHINCODE (FGETMULTI SOURCEDATA 'LEFTKERN))) + (replace (CHARSETINFO CSSLUGP) of DCSINFO with NIL) + (CHARSETPROP DCSINFO 'SOURCE (FONTPROP DFONT 'SPEC)))] + (SETQ DESCENT (IMAX (FGETMULTI SOURCEDATA 'DESCENT) (fetch (CHARSETINFO CHARSETDESCENT) of DCSINFO))) - (SETQ ASCENT (IMAX (FGETMULTI SCHARINFO 'ASCENT) + (SETQ ASCENT (IMAX (FGETMULTI SOURCEDATA 'ASCENT) (fetch (CHARSETINFO CHARSETASCENT) of DCSINFO))) (replace (CHARSETINFO CHARSETDESCENT) of DCSINFO with DESCENT) (replace (CHARSETINFO CHARSETASCENT) of DCSINFO with ASCENT) - (replace (CHARSETINFO CSSLUGP) of DCSINFO with NIL) (CL:WHEN DFONT (SETQ DESCENT (IMAX DESCENT (fetch (FONTDESCRIPTOR \SFDescent) of DFONT))) (SETQ ASCENT (IMAX ASCENT (fetch (FONTDESCRIPTOR \SFAscent) of DFONT))) @@ -1445,29 +1687,74 @@ (replace (FONTDESCRIPTOR \SFHeight) of DFONT with (IPLUS DESCENT ASCENT))) DCSINFO]) -(SLUGCHARP.DISPLAY - [LAMBDA (CODE FONT/CHARSETINFO) (* ; "Edited 6-Jun-2025 10:24 by rmk") - (* ; "Edited 31-May-2025 23:44 by rmk") - - (* ;; "True if CODE is currently a slug in FONT or the particular CHARSETINFO. If we are given a CSINFO, CODE is alread charset-relative.") - - (LET [(CSINFO (CL:IF (type? CHARSETINFO FONT/CHARSETINFO) - FONT/CHARSETINFO - (\XGETCHARSETINFO FONT/CHARSETINFO (\CHARSET CODE)))] - (OR (NULL CSINFO) - (fetch (CHARSETINFO CSSLUGP) of CSINFO) - (EQ (\GETBASE (fetch (CHARSETINFO OFFSETS) of CSINFO) - (\CHAR8CODE CODE)) - (\GETBASE (fetch (CHARSETINFO OFFSETS) of CSINFO) - (ADD1 \MAXTHINCHAR]) - -(\GETCHARINFO - [LAMBDA (CSINFO CHAR8CODE) (* ; "Edited 23-Jul-2025 15:59 by rmk") +(\MOVEFONTCHARS.SOURCEDATA + [LAMBDA (SOURCE DEFAULTSOURCEFONT) (* ; "Edited 6-Sep-2025 12:59 by rmk") + (* ; "Edited 4-Sep-2025 11:01 by rmk") + (* ; "Edited 2-Sep-2025 13:28 by rmk") + (* ; "Edited 30-Aug-2025 23:20 by rmk") + (* ; "Edited 26-Aug-2025 20:23 by rmk") + (* ; "Edited 25-Aug-2025 09:12 by rmk") + (* ; "Edited 23-Aug-2025 23:45 by rmk") + (* ; "Edited 23-Jul-2025 15:59 by rmk") (* ; "Edited 22-Jul-2025 12:48 by rmk") (* ; "Edited 8-Jul-2025 22:50 by rmk") (* ; "Edited 7-Jun-2025 14:35 by rmk") - (LET (TEMP) - `((ASCENT \, (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) + + (* ;; "This decodes the source size of a MOVEFONTCHARS pair. SOURCE can be") + + (* ;; " a character name or character code: The source font is the DEFAULTSOURCEFONT") + + (* ;; " a list of the form (sourcechar sourcefont) where sourcechar is a name or code and sourcefont is a full or partial font specification with defaults taken from the DEFAULTSOURCE FONT. E.g. if the defaultsource font is GACHA 10 then the pair (94 TERMINAL) is interpreted as (TERMINAL 10).") + + (LET (SCODE CHAR8CODE SFONT CSINFO TEMP) + (if (LISTP SOURCE) + then (SETQ SFONT (CADR SOURCE)) + (SETQ SCODE (CAR SOURCE)) + else (SETQ SFONT DEFAULTSOURCEFONT) + (SETQ SCODE SOURCE)) + (CL:UNLESS (type? FONTDESCRIPTOR SFONT) + (if SFONT + then (SETQ SFONT (MKLIST SFONT)) (* ; + "Make it look like a fontspec, then fill in defaults") + [SETQ SFONT (FONTCREATE (create FONTSPEC + FSFAMILY _ (OR (fetch (FONTSPEC FSFAMILY) + of SFONT) + (FONTPROP DEFAULTSOURCEFONT + 'FAMILY)) + FSSIZE _ (OR (fetch (FONTSPEC FSSIZE) + of SFONT) + (FONTPROP DEFAULTSOURCEFONT + 'SIZE)) + FSFACE _ (OR (fetch (FONTSPEC FSFACE) + of SFONT) + (FONTPROP DEFAULTSOURCEFONT + 'FACE)) + FSROTATION _ (OR (fetch (FONTSPEC FSROTATION) + of SFONT) + (FONTPROP DEFAULTSOURCEFONT + 'ROTATION)) + FSDEVICE _ (OR (fetch (FONTSPEC FSDEVICE) + of SFONT) + (FONTPROP DEFAULTSOURCEFONT + 'DEVICE] + else (SETQ SFONT DEFAULTSOURCEFONT))) + (CL:UNLESS (CHARCODEP SCODE) + (SETQ SCODE (CHARCODE.DECODE SCODE))) + (CL:WHEN (AND SCODE (SLUGCHARP.DISPLAY SCODE SFONT)) + (SETQ SCODE NIL)) + (if SCODE + then (SETQ CSINFO (\INSURECHARSETINFO SFONT (\CHARSET SCODE))) + (SETQ CHAR8CODE (\CHAR8CODE SCODE)) + else + (* ;; "NIL SCODE means replace with slug. We calculate the source-slug information, but that should be ignored later in favor of the slug information from the destination's character set. ") + + (SETQ CSINFO (\INSURECHARSETINFO SFONT 0)) + (SETQ CHAR8CODE SLUGCHARINDEX)) + + (* ;; "Use (plural) vector field names for UPDATEINFOELEMENT. Don't know if the CHAR8CODE is useful, but...") + + `((CHAR8CODE \, CHAR8CODE) + (ASCENT \, (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) (DESCENT \, (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) (WIDTHS \, (CL:WHEN (SETQ TEMP (ffetch (CHARSETINFO WIDTHS) of CSINFO)) (\FGETWIDTH TEMP CHAR8CODE))) @@ -1479,18 +1766,79 @@ (ELT (fetch (CHARSETINFO LEFTKERN) of CSINFO) CHAR8CODE))) (BITMAP \, (CL:WHEN (SETQ TEMP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) - (\GETCHARBITMAP.CSINFO CHAR8CODE CSINFO]) + (\GETCHARBITMAP.CSINFO CHAR8CODE CSINFO))) + (SLUG \, (NOT SCODE]) + +(\MAKESLUGCHAR + [LAMBDA (CODE FONT/CSINFO) (* ; "Edited 30-Aug-2025 23:20 by rmk") + (* ; "Edited 24-Aug-2025 09:55 by rmk") + + (* ;; "Makes CODE be a slug character in FONT/CSINFO. If give a FONT, CODE is a true character code, otherwise it is a thincode in the given character set.") + + (LET (CSINFO THINCODE OFFSETS WIDTHS) + (if (type? FONTDESCRIPTOR FONT/CSINFO) + then (SETQ CSINFO (\INSURECHARSETINFO FONT/CSINFO (\CHARSET CODE))) + (SETQ THINCODE (\CHAR8CODE CODE)) + else (SETQ CSINFO FONT/CSINFO) + (SETQ THINCODE CODE)) + (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + (CL:UNLESS (AND OFFSETS (EQ (\FGETOFFSET OFFSETS THINCODE) + (\FGETOFFSET OFFSETS SLUGCHARINDEX))) + (if OFFSETS + then + (* ;; "Must be a display. W e remove the character's current bitmap, then change the vectors to point to the existing slug. Otherwise we might end up with multiple slug bitmaps interspersed.") + + (\PUTCHARBITMAP.CSINFO THINCODE CSINFO (BITMAPCREATE 0 0)) + (\FSETOFFSET OFFSETS THINCODE (\FGETOFFSET OFFSETS SLUGCHARINDEX)) + else (HELP "NONDISPLAY SLUG ?")) + (\FSETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) + THINCODE + (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) + SLUGCHARINDEX)) + (\FSETIMAGEWIDTH (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) + THINCODE + (\FGETIMAGEWIDTH (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) + SLUGCHARINDEX)) + (CL:WHEN (fetch (CHARSETINFO YWIDTHS) of CSINFO) + (\FSETWIDTH (fetch (CHARSETINFO YWIDTHS) of CSINFO) + THINCODE + (\FGETWIDTH (fetch (CHARSETINFO YWIDTHS) of CSINFO) + SLUGCHARINDEX))) + (CL:WHEN (fetch (CHARSETINFO LEFTKERN) of CSINFO) + (SETA (fetch (CHARSETINFO LEFTKERN) of CSINFO) + THINCODE + (ELT (fetch (CHARSETINFO LEFTKERN) of CSINFO) + SLUGCHARINDEX)))) + CSINFO]) + +(SLUGCHARP.DISPLAY + [LAMBDA (CODE FONT/CHARSETINFO) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 28-Aug-2025 22:56 by rmk") + (* ; "Edited 6-Jun-2025 10:24 by rmk") + (* ; "Edited 31-May-2025 23:44 by rmk") + + (* ;; "True if CODE is currently a slug in FONT or the particular CHARSETINFO. If we are given a CSINFO, CODE is alread charset-relative.") + + (LET [(CSINFO (CL:IF (type? CHARSETINFO FONT/CHARSETINFO) + FONT/CHARSETINFO + (\GETCHARSETINFO FONT/CHARSETINFO (\CHARSET CODE)))] + (OR (NULL CSINFO) + (fetch (CHARSETINFO CSSLUGP) of CSINFO) + (EQ (\FGETOFFSET (fetch (CHARSETINFO OFFSETS) of CSINFO) + (\CHAR8CODE CODE)) + (\FGETOFFSET (fetch (CHARSETINFO OFFSETS) of CSINFO) + (ADD1 \MAXTHINCHAR]) ) (DECLARE%: EVAL@COMPILE (PUTPROPS UPDATEINFOELEMENT MACRO [(FIELD) (LET [(DBLOCK (ffetch (CHARSETINFO FIELD) of DCSINFO)) - (NEWVAL (FGETMULTI SCHARINFO 'FIELD] + (NEWVAL (FGETMULTI SOURCEDATA 'FIELD] (CL:WHEN NEWVAL (CL:UNLESS DBLOCK (SETQ DBLOCK (\CREATECSINFOELEMENT)) (freplace (CHARSETINFO FIELD) of DCSINFO with DBLOCK)) - (\FSETWIDTH DBLOCK DCODE NEWVAL))]) + (\FSETWIDTH DBLOCK DTHINCODE NEWVAL))]) ) @@ -1502,7 +1850,9 @@ (DEFINEQ (FONTFILES - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST) + [LAMBDA (FONTSPEC CHARSET DIRLST EXTLST) (* ; "Edited 28-Aug-2025 14:42 by rmk") + (* ; "Edited 25-Aug-2025 10:22 by rmk") + (* ; "Edited 16-Aug-2025 21:03 by rmk") (* ; "Edited 11-Jul-2025 09:42 by rmk") (* ; "Edited 6-Jul-2025 10:40 by rmk") (* ; "Edited 19-Jun-2025 17:09 by rmk") @@ -1513,11 +1863,13 @@ (* ;; "Considers all posible names for font files that respect the given characteristics, returns a list of the names of files that actually exist somewhere in DIRLST. Does not validate their contents.") - [SETQ DIRLST (MKLIST (OR DIRLST (GETATOMVAL (PACK* DEVICE "FONTDIRECTORIES"] - [SETQ EXTLST (MKLIST (OR EXTLST (GETATOMVAL (PACK* DEVICE "FONTEXTENSIONS"] - (CL:UNLESS CHARSET (SETQ CHARSET \DEFAULTCHARSET)) - (APPEND (MKLIST (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE 'NOCHARSET DIRLST EXTLST)) - (MKLIST (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST]) + (LET (FAMILY SIZE FACE ROTATION DEVICE) + (SPREADFONTSPEC FONTSPEC) + [SETQ DIRLST (MKLIST (OR DIRLST (FONTDEVICEPROP DEVICE 'FONTDIRECTORIES] + [SETQ EXTLST (MKLIST (OR EXTLST (FONTDEVICEPROP DEVICE 'FONTEXTENSIONS] + (CL:UNLESS CHARSET (SETQ CHARSET \DEFAULTCHARSET)) + (APPEND (MKLIST (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE 'NOCHARSET DIRLST EXTLST)) + (MKLIST (\FINDFONTFILE FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST]) (\FINDFONTFILE [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET DIRLST EXTLST) @@ -1700,8 +2052,13 @@ (T "-C0"))) 'EXTENSION EXTENSION]) -(\FONTINFOFROMFILENAME - [LAMBDA (FONTFILE DEVICE NOCHARSET) (* ; "Edited 10-Jul-2025 09:42 by rmk") +(FONTSPECFROMFILENAME + [LAMBDA (FONTFILE DEVICE) (* ; "Edited 30-Aug-2025 10:05 by rmk") + (* ; "Edited 28-Aug-2025 14:28 by rmk") + (* ; "Edited 25-Aug-2025 10:16 by rmk") + (* ; "Edited 23-Aug-2025 10:42 by rmk") + (* ; "Edited 17-Aug-2025 00:05 by rmk") + (* ; "Edited 10-Jul-2025 09:42 by rmk") (* ; "Edited 26-Jun-2025 23:03 by rmk") (* ; "Edited 14-Sep-96 10:23 by rmk:") (* ; "Edited 5-Oct-89 18:28 by bvm") @@ -1709,7 +2066,7 @@ (* ;; "returns a list of the family size face rotation device of the font stored in the file name FONTFILE. Rotation is 0 always. Parses both new & old format files.") (LET ((FILENAMELIST (UNPACKFILENAME.STRING FONTFILE)) - CH SIZEBEG SIZEND NAME FAMILY SIZE FACE EXT CHARSET) + CH SIZEBEG SIZEEND NAME FAMILY SIZE FACE CHARSET) (SETQ NAME (LISTGET FILENAMELIST 'NAME)) (* ;  "find where the name and size are. MUST check for ch nil below or possible infinite loop") (SETQ SIZEBEG (for CH# from 1 when (OR (NUMBERP (SETQ CH (NTHCHAR NAME CH#))) @@ -1721,50 +2078,50 @@ (* ;; "Get Size") - [SETQ SIZEND (find CH# from SIZEBEG suchthat (NOT (NUMBERP (NTHCHAR NAME CH#] - [SETQ SIZE (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEND] - (if (EQ (NTHCHAR NAME SIZEND) + [SETQ SIZEEND (find CH# from SIZEBEG suchthat (NOT (NUMBERP (NTHCHAR NAME CH#] + [SETQ SIZE (SMALLP (MKATOM (SUBSTRING NAME SIZEBEG (SUB1 SIZEEND] + (if (EQ (NTHCHAR NAME SIZEEND) '-) - then (SETQ SIZEND (ADD1 SIZEND))) + then (SETQ SIZEEND (ADD1 SIZEEND))) (* ;; "Get Face") - (SETQ NAME (U-CASE NAME)) (* ; + (SETQ NAME (U-CASE NAME)) + (SETQ FACE (SUBSTRING NAME SIZEEND)) (* ;  "don't need name, but checks for lowercase face") - [SETQ FACE (LIST (COND - ((STRPOS "B" NAME SIZEND NIL T NIL UPPERCASEARRAY) - 'BOLD) - ((STRPOS "L" NAME SIZEND NIL T NIL UPPERCASEARRAY) - 'LIGHT) - (T 'MEDIUM)) - (COND - ((STRPOS "I" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) - 'ITALIC) - (T 'REGULAR)) - (COND - ((STRPOS "E" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) - 'EXPANDED) - ((STRPOS "C-" NAME SIZEND NIL NIL NIL UPPERCASEARRAY) - 'COMPRESSED) - (T 'REGULAR] + [SETQ FACE (LIST (SELCHARQ (NTHCHARCODE FACE 1) + (B 'BOLD) + (L 'LIGHT) + 'MEDIUM) + (SELCHARQ (NTHCHARCODE FACE 2) + (I 'ITALIC) + 'REGULAR) + (SELCHARQ (NTHCHARCODE FACE 3) + (C 'COMPRESSED) + (E 'EXPANDED) + 'REGULAR] (CL:WHEN (SETQ CHARSET (STRPOS "-c" NAME NIL NIL NIL T UPPERCASEARRAY)) [SETQ CHARSET (FIXP (MKATOM (CONCAT (SUBSTRING NAME CHARSET) "Q"]) - (LIST* FAMILY SIZE FACE 0 (COND - ((STREAMP DEVICE) - (IMAGESTREAMTYPE DEVICE)) - ((NULL DEVICE) - [SETQ EXT (MKATOM (U-CASE (LISTGET FILENAMELIST 'EXTENSION] - (SELECTQ EXT - ((WD MEDLEYINTERPRESSFONT) - 'INTERPRESS) - ((STRIKE AC DISPLAYFONT MEDLEYDISPLAYFONT) - 'DISPLAY) - EXT)) - ((LITATOM DEVICE) - (\FONTSYMBOL DEVICE)) - (T DEVICE)) - (CL:UNLESS NOCHARSET (CONS CHARSET]) + (SETQ DEVICE (COND + ((STREAMP DEVICE) + (IMAGESTREAMTYPE DEVICE)) + [(NULL DEVICE) + (CAR (find I DEXTS (EXT _ (LISTGET FILENAMELIST 'EXTENSION)) in + IMAGESTREAMTYPES + suchthat (thereis E inside (FONTDEVICEPROP (CAR I) + 'FONTEXTENSIONS) + suchthat (STRING.EQUAL EXT E] + ((LITATOM DEVICE) + (\FONTSYMBOL DEVICE)) + (T DEVICE))) + (CL:WHEN (AND FAMILY SIZE FACE DEVICE) + (create FONTSPEC + FSFAMILY _ FAMILY + FSSIZE _ SIZE + FSFACE _ FACE + FSROTATION _ 0 + FSDEVICE _ DEVICE]) (\FONTINFOFROMFILENAME.OLD [LAMBDA (FONTFILE DEVICE) (* ; "Edited 1-Jan-87 01:29 by FS") @@ -1905,54 +2262,37 @@ X]) (FONTUNPARSE - [LAMBDA (FONT) (* kbr%: "25-Feb-86 19:40") + [LAMBDA (FONT) (* ; "Edited 7-Sep-2025 09:19 by rmk") + (* ; "Edited 21-Aug-2025 18:15 by rmk") + (* ; "Edited 18-Aug-2025 00:52 by rmk") + (* kbr%: "25-Feb-86 19:40") (* ;; "Produces a minimal specification of the font or fontclass specification, for dumping by Tedit, imageobjects.") - (PROG (FACE SPEC) - (SETQ SPEC (COND - ((type? FONTDESCRIPTOR FONT) - (FONTPROP FONT 'SPEC)) - [(type? FONTCLASS FONT) - (RETURN (CONS 'CLASS (FONTCLASSUNPARSE FONT] - (T - (* ;; "Could be a non-instantiated specification in a fontclass, just use it as the spec without creating the font.") - - FONT))) - (OR SPEC (RETURN)) - (SETQ FACE (CADDR SPEC)) (* ; - "FACE and rotation can be NIL for a non-fontdescriptor fontclass component") - [SETQ FACE (COND - ([OR (NULL FACE) - (EQUAL FACE '(MEDIUM REGULAR REGULAR] - NIL) - ((LITATOM FACE) - FACE) - [(LISTP FACE) - (PACK (LIST* (NTHCHAR (fetch (FONTFACE WEIGHT) of FACE) - 1) - (NTHCHAR (fetch (FONTFACE SLOPE) of FACE) - 1) - (NTHCHAR (fetch (FONTFACE EXPANSION) of FACE) - 1) - (COND - ((fetch (FONTFACE COLOR) of FACE) - (LIST "-" (fetch (FONTFACE BACKCOLOR) of FACE) - "-" - (fetch (FONTFACE FORECOLOR) of FACE] - (T (SHOULDNT] (* ; - "Don't return device, or any trailing defaults") - (RETURN (CONS (CAR SPEC) - (CONS (CADR SPEC) - (COND - ([AND (CADDDR SPEC) - (NOT (EQ 0 (CADDDR SPEC] - (LIST (OR FACE 'MRR) - (CADDDR SPEC))) - (FACE (CONS FACE]) + (if (type? FONTCLASS FONT) + then (CONS 'CLASS (FONTCLASSUNPARSE FONT)) + elseif (type? FONTDESCRIPTOR FONT) + then (LET ((SPEC (FONTPROP FONT 'SPEC)) + FACE) + (SETQ FACE (FONTFACETOATOM (fetch (FONTSPEC FSFACE) of SPEC) + T)) + + (* ;; "Original: Don't return device, or any trailing defaults. ") + + (* ;; "We still honor that even though it is more attractive to return the whole fontspec, perhaps with device NIL.") + + (* ;; "Seems harmless to include a 0 rotation--any caller would have expected that something might appear there.") + (* (create FONTSPEC using SPEC FSFACE + _ FACE FSDEVICE _ NIL)) + (LIST (fetch (FONTSPEC FSFAMILY) of SPEC) + (fetch (FONTSPEC FSSIZE) of SPEC) + FACE + (fetch (FONTSPEC FSROTATION) of SPEC]) (SETFONTDESCRIPTOR - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE FONT) (* ; "Edited 21-Jul-2025 08:55 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE FONT) (* ; "Edited 28-Aug-2025 14:43 by rmk") + (* ; "Edited 12-Aug-2025 21:07 by rmk") + (* ; "Edited 21-Jul-2025 08:55 by rmk") (* ; "Edited 14-Jul-2025 22:37 by rmk") (* ; "Edited 10-Jul-2025 12:38 by rmk") (* ; "Edited 19-Jun-2025 21:21 by rmk") @@ -2030,32 +2370,37 @@ (IGNORE.CCE 0) (SHOULDNT]) -(\UNITWIDTHSVECTOR - [LAMBDA NIL (* JonL " 7-NOV-83 19:23") - (SETQ \UNITWIDTHSVECTOR (\ALLOCBLOCK (UNFOLD (IPLUS \MAXCHAR 3) - WORDSPERCELL))) - (for I from 0 to (IPLUS \MAXCHAR 2) do (\PUTBASE \UNITWIDTHSVECTOR I 1)) - \UNITWIDTHSVECTOR]) - (\COERCECHARSET - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET COERCIONS THINCODE) + [LAMBDA (FONTSPEC CHARSET CODE COERCIONS) (* ; "Edited 31-Aug-2025 00:00 by rmk") + (* ; "Edited 28-Aug-2025 23:07 by rmk") + (* ; "Edited 27-Aug-2025 17:08 by rmk") + (* ; "Edited 16-Aug-2025 17:48 by rmk") + (* ; "Edited 5-Aug-2025 17:55 by rmk") (* ; "Edited 24-Jul-2025 00:19 by rmk") (* ; "Edited 8-Jul-2025 08:14 by rmk") (* ; "Edited 11-Jun-2025 09:13 by rmk") (* ; "Edited 7-Jun-2025 13:39 by rmk") (* ; "Edited 21-May-2025 10:50 by rmk") - (* ;; "COERCIONS is a set of (oldspec newspec) pairs, where a spec is either just a font name or a font name with a size. If oldspec matches the current requested characteristics, then that csinfo is returned.") - (* ; "") - (for C CSINFO FONT in (\COERCEFONTSPEC COERCIONS FAMILY SIZE FACE ROTATION DEVICE CHARSET) - eachtime (SPREADFONTSPEC C) when [AND (SETQ FONT (FONTCREATE1 FAMILY SIZE FACE ROTATION DEVICE - CHARSET)) - (SETQ CSINFO (\INSURECHARSETINFO CHARSET FONT)) - (NOT (AND THINCODE (SLUGCHARP.DISPLAY THINCODE CSINFO] - do (RETURN CSINFO]) + (* ;; "Returns the CHARSET's CSINFO from the first font that the requested font coerces to and that has a non-slug entry for THINCODE (if given). ") + + (if (NULL COERCIONS) + then [SETQ COERCIONS (FONTDEVICEPROP FONTSPEC (CL:IF CODE + 'CHARCOERCIONS + 'FONTCOERCIONS)] + elseif (LITATOM COERCIONS) + then (SETQ COERCIONS (FONTDEVICEPROP FONTSPEC COERCIONS))) + (for CFS CFONT CSINFO in (COERCEFONTSPEC FONTSPEC COERCIONS) + when (AND (SETQ CFONT (FONTCREATE1 CFS CHARSET)) + (SETQ CSINFO (\INSURECHARSETINFO CFONT CHARSET))) + unless (AND CODE (SLUGCHARP.DISPLAY CODE CFONT)) do (RETURN (LIST CFONT CSINFO]) (\BUILDSLUGCSINFO - [LAMBDA (WIDTH HEIGHT DESCENT DEVICE SCALE) (* ; "Edited 15-Jun-2025 12:42 by rmk") + [LAMBDA (FONT SLUGWIDTH) (* ; "Edited 17-Aug-2025 12:46 by rmk") + (* ; "Edited 10-Aug-2025 12:43 by rmk") + (* ; "Edited 6-Aug-2025 22:42 by rmk") + (* ; "Edited 3-Aug-2025 16:11 by rmk") + (* ; "Edited 15-Jun-2025 12:42 by rmk") (* ; "Edited 13-Jun-2025 22:55 by rmk") (* ; "Edited 11-Jun-2025 10:56 by rmk") (* ; "Edited 20-May-2025 14:50 by rmk") @@ -2063,36 +2408,43 @@ (* ; "Edited 12-May-2025 21:09 by rmk") (* ; "Edited 9-May-93 23:12 by rmk:") - (* ;; "builds a csinfo which contains only the slug (black rectangle) character. Maybe there should only be a single FONTDESC argument") - - (CL:WHEN (type? FONTDESCRIPTOR WIDTH) - (SETQ HEIGHT (OR HEIGHT (fetch (FONTDESCRIPTOR \SFHeight) of WIDTH))) - (SETQ DESCENT (OR DESCENT (fetch (FONTDESCRIPTOR \SFDescent) of WIDTH))) - (SETQ DEVICE (OR DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of WIDTH))) - - (* ;; "SCALE is only used for the display bitmap") - - (SETQ SCALE (OR SCALE (fetch (FONTDESCRIPTOR FONTSCALE) of WIDTH) - 1)) - (SETQ WIDTH (CL:IF (EQ 0 (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of WIDTH)) - (FIXR (FTIMES HEIGHT 0.6)) - (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of WIDTH)))) - (LET ((CSINFO (create CHARSETINFO - CHARSETASCENT _ (IDIFFERENCE HEIGHT DESCENT) - CHARSETDESCENT _ DESCENT - CSSLUGP _ T - CSCOMPLETEP _ T)) - WIDTHS OFFSETS BITMAP IMAGEWIDTHS) + (* ;; "\SF... values are scaled") + + (LET ((SLUGHEIGHT (fetch (FONTDESCRIPTOR \SFHeight) of FONT)) + (DESCENT (fetch (FONTDESCRIPTOR \SFDescent) of FONT)) + (DEVICE (fetch (FONTDESCRIPTOR FONTDEVICE) of FONT)) + CSINFO WIDTHS OFFSETS BITMAP) + (CL:WHEN (EQ SLUGHEIGHT 0) + + (* ;; "First character set hasn't been read, so height isn't known. But usually it is a bit bigger than the request fontsize.") + + (* ;; "This could also be adjusted later.") + + [SETQ SLUGHEIGHT (FIXR (FTIMES 1.2 (OR (fetch (FONTDESCRIPTOR FONTSCALE) of FONT) + 1) + (fetch (FONTDESCRIPTOR FONTSIZE) of FONT]) + (CL:UNLESS SLUGWIDTH + (SETQ SLUGWIDTH (fetch (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT))) + (CL:WHEN (ZEROP SLUGWIDTH) + (SETQ SLUGWIDTH (CL:IF (EQ 0 (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT)) + (FIXR (FTIMES SLUGHEIGHT 0.6)) + (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT))) + (replace (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT with SLUGWIDTH)) + (SETQ CSINFO (create CHARSETINFO + CHARSETASCENT _ (IDIFFERENCE SLUGHEIGHT DESCENT) + CHARSETDESCENT _ DESCENT + CSSLUGP _ T + CSCOMPLETEP _ T)) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I WIDTH)) + (for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I SLUGWIDTH)) (replace IMAGEWIDTHS OF CSINFO with WIDTHS) - (replace (CHARSETINFO OFFSETS) of CSINFO with (SETQ OFFSETS (\CREATECSINFOELEMENT))) - (for I from 0 to \MAXTHINCHAR do (\FSETOFFSET OFFSETS I 0)) (CL:WHEN (MEMB DEVICE \DISPLAYSTREAMTYPES) - (SETQ BITMAP (BITMAPCREATE (ROUND (QUOTIENT WIDTH SCALE)) - (ROUND (QUOTIENT HEIGHT SCALE)) - 1)) - [BLTSHADE BLACKSHADE BITMAP 1 NIL (SUB1 (ROUND (QUOTIENT WIDTH SCALE] + (SETQ OFFSETS (\CREATECSINFOELEMENT)) + (replace (CHARSETINFO OFFSETS) of CSINFO with OFFSETS) + (for I from 0 to \MAXTHINCHAR do (\FSETOFFSET OFFSETS I 0)) + (* ; "Slug is at offset 0 in the bitmap") + (SETQ BITMAP (BITMAPCREATE SLUGWIDTH SLUGHEIGHT 1)) + (BLTSHADE BLACKSHADE BITMAP 1 NIL (SUB1 SLUGWIDTH)) (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with BITMAP)) CSINFO]) @@ -2378,7 +2730,8 @@ (T (\ILLEGAL.ARG FACE]) (SETFONTCHARENCODING - [LAMBDA (FONT CHARENCODING) (* ; "Edited 19-Jul-2025 23:28 by rmk") + [LAMBDA (FONT CHARENCODING) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 19-Jul-2025 23:28 by rmk") (* ; "Edited 12-Jul-2025 13:15 by rmk") (* ; "Edited 10-Jul-2025 12:38 by rmk") (* ; "Edited 6-Jul-2025 21:41 by rmk") @@ -2389,140 +2742,212 @@ (* ;; "The FONT charencoding is the same as its charset 0 encoding (e.g. ALTOTEXT). But all higher charsets are MCCS") (replace (FONTDESCRIPTOR FONTCHARENCODING) of (FONTCREATE FONT) with CHARENCODING) - (CHARSETPROP (\XGETCHARSETINFO FONT 0) + (CHARSETPROP (\GETCHARSETINFO FONT 0) 'CSCHARENCODING CHARENCODING]) ) (DEFINEQ (FONTSAVAILABLE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* ; "Edited 21-Jul-2025 08:55 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* ; "Edited 30-Aug-2025 13:55 by rmk") + (* ; "Edited 28-Aug-2025 14:43 by rmk") + (* ; "Edited 23-Aug-2025 10:51 by rmk") + (* ; "Edited 15-Aug-2025 12:18 by rmk") + (* ; "Edited 12-Aug-2025 12:27 by rmk") + (* ; "Edited 30-Jul-2025 14:30 by rmk") + (* ; "Edited 21-Jul-2025 08:55 by rmk") (* ; "Edited 21-Jun-2025 15:41 by rmk") (* ; "Edited 14-Jun-2025 11:06 by rmk") (* ; "Edited 12-Jun-2025 10:48 by rmk") (* rrb " 7-Nov-84 15:41") -(* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if CHECKFILESTOO? is NIL, only fonts in core will be considered. If ONLY, fonts in memory will be ignored.") +(* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if CHECKFILESTOO? is NIL, only fonts in core will be considered. If ONLY, fonts in memory will be ignored. ") - (SPREADFONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) - (UNION (CL:UNLESS (EQ 'ONLY CHECKFILESTOO?) - (\FONTSAVAILABLE.INCORE FAMILY SIZE FACE ROTATION DEVICE)) - (CL:WHEN CHECKFILESTOO? - (if (EQ DEVICE '*) - then (* ; - "map thru all the imagestream devices") - (for I in IMAGESTREAMTYPES - join (APPLY* (OR (CADR (ASSOC 'FONTSAVAILABLE (CDR I))) - (FUNCTION NILL)) - FAMILY SIZE FACE ROTATION (CAR I))) - else (* ; + (DECLARE (GLOBALVARS \FONTSINCORE)) + (LET ((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE))) + (if (EQ '* (fetch (FONTSPEC FSDEVICE) of FONTSPEC)) + then + (* ;; + "The results for each device will be grouped together, because the sort happens in the clause below") + + (for I in IMAGESTREAMTYPES join (FONTSAVAILABLE FONTSPEC NIL NIL NIL (CAR I) + CHECKFILESTOO?)) + else (SPREADFONTSPEC FONTSPEC) (* ; "For easier matching code") + (SORTFONTSPECS (UNION (CL:UNLESS (EQ 'ONLY CHECKFILESTOO?) + [COLLECTMULTI \FONTSINCORE + (FUNCTION (LAMBDA (FM S FC R D FONT) + (DECLARE (USEDFREE $$COLLECT)) + (CL:WHEN + [AND (OR (EQ FAMILY FM) + (EQ FAMILY '*)) + (OR (EQ SIZE S) + (EQ SIZE '*)) + (MATCHFONTFACE FACE FC) + (OR (EQ ROTATION R) + (EQ ROTATION '*)) + (OR (EQ DEVICE D) + (EQ DEVICE '*] + (push $$COLLECT + (create FONTSPEC + FSFAMILY _ FM + FSSIZE _ S + FSFACE _ FC + FSROTATION _ R + FSDEVICE _ D)))]) + (CL:WHEN CHECKFILESTOO?(* ;  "apply the device font lookup function.") - (APPLY* (OR [CADR (ASSOC 'FONTSAVAILABLE (CDR (ASSOC DEVICE IMAGESTREAMTYPES] - (FUNCTION NILL)) - FAMILY SIZE FACE ROTATION DEVICE)))]) + (LET [(FN (OR (CAR (GETMULTI IMAGESTREAMTYPES DEVICE + 'FONTSAVAILABLE)) + (FUNCTION \SEARCHFONTFILES] + + (* ;; "Until all the device functions take a FONTSPEC") + + (CL:IF (EQ 1 (NARGS FN)) + (APPLY* FN FONTSPEC) + (APPLY* FN FAMILY SIZE FACE ROTATION DEVICE))))]) (FONTEXISTS? - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET NOCOERCIONS) - (* ; "Edited 25-Jul-2025 21:21 by rmk") - (* ; "Edited 23-Jul-2025 13:02 by rmk") - (* ; "Edited 21-Jul-2025 09:05 by rmk") - (* ; "Edited 10-Jul-2025 12:38 by rmk") - (* ; "Edited 27-Jun-2025 10:27 by rmk") - (* ; "Edited 22-Jun-2025 09:02 by rmk") - (* ; "Edited 20-Jun-2025 00:37 by rmk") - (* ; "Edited 17-Jun-2025 23:06 by rmk") - (* ; "Edited 16-Jun-2025 10:08 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOCOERCIONS) (* ; "Edited 28-Aug-2025 22:16 by rmk") + (* ; "Edited 23-Aug-2025 12:45 by rmk") + (* ; "Edited 16-Aug-2025 17:49 by rmk") + (* ; "Edited 12-Aug-2025 21:04 by rmk") + (* ; "Edited 9-Aug-2025 00:08 by rmk") + (* ; "Edited 5-Aug-2025 17:54 by rmk") - (* ;; "Do we have any way of finding or creating the font, even by coercion from other fonts? If not NIL, value is either the font in memory or the file that contains information about the requested CHARSET. The DEVICE can have a FONTEXISTS? function for the case where we can't find a file--presumably returns the file for a coercion to a different font specification.") + (* ;; "Do we have any way of finding or creating the font, even by coercion from other fonts? The DEVICE can have a FONTEXISTS? function for the case where we can't find a file--presumably returns the file for a coercion to a different font specification.") (* ;;  "Tries device specific coercions if the original request can't be satisfied and NOCOERCIONS is NIL.") (DECLARE (GLOBALVARS \FONTSINCORE \FONTEXISTS?-CACHE IMAGESTREAMTYPES)) - (LET ((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE CHARSET)) - VAL) + (LET ((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) + VAL DEVICE) (if (type? FONTDESCRIPTOR FONTSPEC) then (* ;;  "FAMILY was a font descriptor, unmodified by other args: record that it exists") - (SPREADFONTSPEC (FONTPROP FONTSPEC 'SPEC)) - (PUTMULTI \FONTEXISTS?-CACHE FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTSPEC) - else (SPREADFONTSPEC FONTSPEC) - (if (GETMULTI \FONTSINCORE FAMILY SIZE FACE ROTATION DEVICE CHARSET) - elseif (SETQ VAL (GETMULTI \FONTEXISTS?-CACHE FAMILY SIZE FACE ROTATION DEVICE - CHARSET)) + (STOREMULTI \FONTEXISTS?-CACHE FONTSPEC) + else (if (FETCHMULTI \FONTSINCORE FONTSPEC) + elseif (SETQ VAL (FETCHMULTI \FONTEXISTS?-CACHE FONTSPEC)) then (CL:UNLESS (EQ VAL 'NO) VAL) - else (CL:WHEN (MEMB ROTATION '(0 90 270)) (* ; - "Only 0 really exists. We cache just the first file. ") - (SETQ VAL (OR (CAR (FONTFILES FAMILY SIZE FACE 0 DEVICE 0)) - (AND CHARSET (NEQ CHARSET 0) - (FONTFILES FAMILY SIZE FACE 0 DEVICE CHARSET)) - (APPLY* (OR [CADR (ASSOC 'FONTEXISTS? - (CDR (ASSOC DEVICE IMAGESTREAMTYPES - ] - (FUNCTION NILL)) - FAMILY SIZE FACE 0 DEVICE CHARSET)))) + else (* ; + "Only 0 really exists. Cache just the first file") + (SETQ DEVICE (fetch (FONTSPEC FSDEVICE) of FONTSPEC)) + (SETQ VAL (OR (CAR (FONTFILES (CL:IF (MEMB (fetch (FONTSPEC FSROTATION) + of FONTSPEC) + '(90 270)) + (create FONTSPEC using FONTSPEC FSROTATION _ + 0) + FONTSPEC))) + (APPLY* (OR (CAR (GETMULTI IMAGESTREAMTYPES DEVICE 'FONTEXISTS?) + ) + (CAR (GETMULTI IMAGESTREAMTYPES DEVICE + 'FONTSAVAILABLE)) + (FUNCTION TRUE)) + FONTSPEC))) (if VAL - then (PUTMULTI \FONTEXISTS?-CACHE FAMILY SIZE FACE ROTATION DEVICE CHARSET - VAL) + then (STOREMULTI \FONTEXISTS?-CACHE FONTSPEC VAL) elseif [AND (NOT NOCOERCIONS) - (find FS in (\COERCEFONTSPEC (GETATOMVAL (PACK* DEVICE - "FONTCOERCIONS") - ) - FAMILY SIZE FACE ROTATION DEVICE CHARSET) - suchthat (SETQ VAL (FONTEXISTS? FS NIL NIL NIL DEVICE CHARSET - T] - then (PUTMULTI \FONTEXISTS?-CACHE FAMILY SIZE FACE ROTATION DEVICE CHARSET - VAL) - else (PUTMULTI \FONTEXISTS?-CACHE FAMILY SIZE FACE ROTATION DEVICE CHARSET - 'NO) + (find FS in (COERCEFONTSPEC FONTSPEC (FONTDEVICEPROP + DEVICE + 'FONTCOERCIONS)) + suchthat (SETQ VAL (FONTEXISTS? FS NIL NIL NIL NIL T] + then + (* ;; "It's coerceable...but not yet coerced.") + + (STOREMULTI \FONTEXISTS?-CACHE FONTSPEC VAL) + else (STOREMULTI \FONTEXISTS?-CACHE FONTSPEC 'NO) NIL]) -(\FONTSAVAILABLE.INCORE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 21-Jul-2025 09:27 by rmk") - (* ; "Edited 21-Jun-2025 11:17 by rmk") - (* ; "Edited 25-Apr-93 13:07 by rmk:") - (* rrb "25-Sep-84 12:10") - - (* ;; "Returns a list of the fonts that are available in core. * matches anything. * can appear as a component of FACE") - - (DECLARE (GLOBALVARS \FONTSINCORE)) - (SPREADFONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) - (COLLECTMULTI \FONTSINCORE (FUNCTION (LAMBDA (FM S FC R D FONT) - (CL:WHEN [AND (OR (EQ FAMILY FM) - (EQ FAMILY '*)) - (OR (EQ SIZE S) - (EQ SIZE '*)) - (MATCHFONTFACE FACE FC) - (OR (EQ ROTATION R) - (EQ ROTATION '*)) - (OR (EQ DEVICE D) - (EQ DEVICE '*] - (push $$COLLECT (LIST FM S FC R D)))]) - (\SEARCHFONTFILES - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE DIRLST EXTLST) (* ; "Edited 21-Jul-2025 08:57 by rmk") - (* ; "Edited 10-Jul-2025 11:19 by rmk") + [LAMBDA (FONTSPEC) (* ; "Edited 28-Aug-2025 14:47 by rmk") + (* ; "Edited 25-Aug-2025 10:23 by rmk") + (* ; "Edited 23-Aug-2025 12:36 by rmk") + (* ; "Edited 21-Jul-2025 08:57 by rmk") (* ; "Edited 21-Jun-2025 12:00 by rmk") - (* ; "Edited 13-Jun-2025 22:49 by rmk") - (* ; "Edited 12-Jun-2025 08:49 by rmk") (* ; "Edited 17-May-2025 14:09 by rmk") - (* ; "Edited 15-May-2025 23:12 by rmk") (* ; "Edited 14-Sep-96 10:54 by rmk:") (* ; "Edited 6-Oct-89 12:34 by bvm") (* ;; "GENERIC FUNCTION") - (* ;; "returns a list of the fonts that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") + (* ;; "Returns a list of the fonts that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270. The caller must do any desired coercions.") + + (LET (FAMILY SIZE FACE ROTATION DEVICE) + (SPREADFONTSPEC FONTSPEC) + (for FILEPATTERN FILEDIR FONTSFOUND (FILING.ENUMERATION.DEPTH _ 1) + in [\FONTFILENAMES FAMILY SIZE FACE DEVICE (MKLIST (FONTDEVICEPROP DEVICE + 'FONTEXTENSIONS] + do (SETQ FILEDIR (FILENAMEFIELD FILEPATTERN 'DIRECTORY)) + (SETQ FILEDIR (CL:IF FILEDIR + (CONCAT ">" FILEDIR ">") + "")) + (for DIR inside (FONTDEVICEPROP DEVICE 'FONTDIRECTORIES) + eachtime + + (* ;; "The file pattern might have an extending subdirectory (C41>) that might not exist, but DIRECTORYNAMEP makes sure that it does.") + + (SETQ DIR (CONCAT DIR ">" (OR FILEDIR ""))) when (DIRECTORYNAMEP DIR) + do (for FONTFILE THISFONT in (DIRECTORY DIR) eachtime (SETQ THISFONT + (FONTSPECFROMFILENAME + FONTFILE DEVICE)) + + (* ;; + "make sure the face, size, and family really match.") + when (AND (OR (EQ FAMILY '*) + (EQ FAMILY (fetch (FONTSPEC FSFAMILY) of THISFONT))) + (OR (EQ SIZE '*) + (EQ SIZE (fetch (FONTSPEC FSSIZE) of THISFONT))) + (MATCHFONTFACE FACE (fetch (FONTSPEC FSFACE) of THISFONT))) unless (MEMBER THISFONT + FONTSFOUND) + do (push FONTSFOUND THISFONT))) finally (RETURN (DREVERSE FONTSFOUND]) + +(FLUSHFONTSINCORE + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 4-Sep-2025 10:14 by rmk") + (* ; "Edited 28-Aug-2025 14:44 by rmk") + (* ; "Edited 18-Aug-2025 00:33 by rmk") + (* ; "Edited 12-Aug-2025 21:07 by rmk") + (* ; "Edited 21-Jul-2025 08:59 by rmk") + (* ; "Edited 21-Jun-2025 11:19 by rmk") + (DECLARE (SPECVARS . T) + (GLOBALVARS \FONTSINCORE)) + (SPREADFONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) + (LET ((NFLUSHED 0)) + (DECLARE (SPECVARS NFLUSHED)) + [MAPMULTI \FONTSINCORE (FUNCTION (LAMBDA (FM S FC R DPAIR) + (CL:WHEN [AND (OR (EQ FAMILY FM) + (EQ FAMILY '*)) + (OR (EQ SIZE S) + (EQ SIZE '*)) + (MATCHFONTFACE FACE FC) + (OR (EQ ROTATION R) + (EQ ROTATION '*)) + (OR (EQ DEVICE (CAR DPAIR)) + (EQ DEVICE '*] + (ADD NFLUSHED 1) + (RPLACD DPAIR))] + (LIST NFLUSHED 'flushed]) + +(FINDFONTFILES + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE DIRLST EXTLST) (* ; "Edited 28-Aug-2025 14:45 by rmk") + (* ; "Edited 25-Aug-2025 10:23 by rmk") + (* ; "Edited 21-Aug-2025 18:19 by rmk") + (* ; "Edited 12-Aug-2025 21:06 by rmk") + (* ; "Edited 21-Jul-2025 09:00 by rmk") + (* ; "Edited 29-Jun-2025 09:08 by rmk") + + (* ;; "GENERIC FUNCTION") + + (* ;; "returns a list of the fontfiles that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") - (* ;; "Just in case the caller hasn't check the arguments:") + (* ;; "The same algorithm as \SEARCHFONTFILES except returns the file names. This may return several files for the same specification") (SPREADFONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) (CL:UNLESS DIRLST - [SETQ DIRLST (MKLIST (GETATOMVAL (PACK* DEVICE "FONTDIRECTORIES"]) + [SETQ DIRLST (MKLIST (FONTDEVICEPROP DEVICE 'FONTDIRECTORIES]) (CL:UNLESS EXTLST - [SETQ EXTLST (MKLIST (GETATOMVAL (PACK* DEVICE "FONTEXTENSIONS"]) + [SETQ EXTLST (MKLIST (FONTDEVICEPROP DEVICE 'FONTEXTENSIONS]) (for FILEPATTERN FILEDIR FONTSFOUND (FILING.ENUMERATION.DEPTH _ 1) IN (\FONTFILENAMES FAMILY SIZE FACE DEVICE EXTLST) do (SETQ FILEDIR (FILENAMEFIELD FILEPATTERN 'DIRECTORY)) @@ -2534,36 +2959,58 @@ (* ;; "The file pattern might have an extending subdirectory (C41>) that might not exist, but DIRECTORYNAMEP makes sure that it does.") (SETQ DIR (CONCAT DIR ">" (OR FILEDIR ""))) - when (DIRECTORYNAMEP DIR) do (for FONTFILE THISFONT in (DIRECTORY DIR) - eachtime (SETQ THISFONT (\FONTINFOFROMFILENAME FONTFILE - DEVICE T)) - - (* ;; + when (DIRECTORYNAMEP DIR) + do (for FONTFILE FONTSPEC THISFACE in (DIRECTORY DIR) eachtime (SETQ FONTSPEC + (FONTSPECFROMFILENAME + FONTFILE DEVICE)) + (SETQ THISFACE (CADDR + FONTSPEC + )) + + (* ;;  "make sure the face, size, and family really match.") - when (AND (OR (EQ FAMILY '*) - (EQ FAMILY (CAR THISFONT))) + when (AND (NOT (MEMBER FONTFILE FONTSFOUND)) + (OR (EQ FAMILY '*) + (EQ FAMILY (fetch (FONTSPEC FSFAMILY) of FONTSPEC))) (OR (EQ SIZE '*) - (EQ SIZE (CADR THISFONT))) - (MATCHFONTFACE FACE (CADDR THISFONT))) unless (MEMBER THISFONT FONTSFOUND) - do (push FONTSFOUND THISFONT))) - finally (RETURN (DREVERSE FONTSFOUND]) + (EQ SIZE (fetch (FONTSPEC FSSIZE) of FONTSPEC))) + (MATCHFONTFACE FACE (fetch (FONTSPEC FSFACE) of FONTSPEC))) do (push FONTSFOUND FONTFILE)) + ) finally (RETURN (DREVERSE FONTSFOUND]) -(FLUSHFONTSINCORE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 21-Jul-2025 08:59 by rmk") - (* ; "Edited 21-Jun-2025 11:19 by rmk") - (DECLARE (GLOBALVARS \FONTSINCORE)) - (SPREADFONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) - (MAPMULTI \FONTSINCORE (FUNCTION (LAMBDA (FM S FC R TAIL) - (CL:WHEN [AND (OR (EQ FAMILY FM) - (EQ FAMILY '*)) - (OR (EQ SIZE S) - (EQ SIZE '*)) - (MATCHFONTFACE FACE FC) - (OR (EQ ROTATION R) - (EQ ROTATION '*)) - (OR (EQ DEVICE (CAR TAIL)) - (EQ DEVICE '*] - (RPLACD TAIL]) +(SORTFONTSPECS + [LAMBDA (FONTSPECS) (* ; "Edited 30-Aug-2025 15:12 by rmk") + + (* ;; + "Sort FONTSPECS by alphabetically by family, then by smaller sizes, then by medium/regular faces") + + (SORT + FONTSPECS + (FUNCTION (LAMBDA (FS1 FS2) + (SELECTQ (ALPHORDER (fetch (FONTSPEC FSDEVICE) of FS1) + (fetch (FONTSPEC FSDEVICE) of FS2)) + (EQUAL (SELECTQ (ALPHORDER (fetch (FONTSPEC FSFAMILY) of FS1) + (fetch (FONTSPEC FSFAMILY) of FS2)) + (EQUAL [OR (ILESSP (fetch (FONTSPEC FSSIZE) of FS1) + (fetch (FONTSPEC FSSIZE) of FS2)) + (CL:WHEN (EQ (fetch (FONTSPEC FSSIZE) of FS1) + (fetch (FONTSPEC FSSIZE) of FS2)) + [LET ((FACE1 (fetch (FONTSPEC FSFACE) of FS1)) + (FACE2 (fetch (FONTSPEC FSFACE) of FS2))) + (OR (EQUAL FACE1 FACE2) + (AND (EQ 'MEDIUM (fetch (FONTFACE WEIGHT) + of FACE1)) + (NEQ 'MEDIUM (fetch (FONTFACE WEIGHT) + of FACE2))) + (AND (EQ 'REGULAR (fetch (FONTFACE SLOPE) + of FACE1)) + (NEQ 'REGULAR (fetch (FONTFACE SLOPE) + of FACE2])]) + (LESSP T) + NIL)) + (LESSP T) + NIL]) +) +(DEFINEQ (MATCHFONTFACE [LAMBDA (PATTERN FACE) (* ; "Edited 21-Jun-2025 11:57 by rmk") @@ -2582,1284 +3029,1502 @@ (OR (EQ PEXPANSION (fetch (FONTFACE EXPANSION) of FACE)) (EQ PEXPANSION '*]) -(FINDFONTFILES - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE DIRLST EXTLST) (* ; "Edited 21-Jul-2025 09:00 by rmk") - (* ; "Edited 29-Jun-2025 09:08 by rmk") +(MAKEFONTFACE + [LAMBDA (WEIGHT SLOPE EXPANSION BASE COLOR) (* ; "Edited 30-Aug-2025 10:22 by rmk") + (CL:UNLESS WEIGHT + (SETQ WEIGHT (CL:IF BASE + (fetch (FONTFACE WEIGHT) of BASE) + 'MEDIUM))) + (CL:UNLESS SLOPE + (SETQ SLOPE (CL:IF BASE + (fetch (FONTFACE SLOPE) of BASE) + 'REGULAR))) + (CL:UNLESS EXPANSION + (SETQ EXPANSION (CL:IF BASE + (fetch (FONTFACE EXPANSION) of BASE) + 'REGULAR))) + (CL:UNLESS COLOR + (SETQ COLOR (COPY (fetch (FONTFACE COLOR) of BASE)))) + (create FONTFACE + WEIGHT _ WEIGHT + SLOPE _ SLOPE + EXPANSION _ EXPANSION + COLOR _ COLOR]) + +(FONTFACETOATOM + [LAMBDA (FACE NOERROR) (* ; "Edited 7-Sep-2025 09:19 by rmk") + (* ; "Edited 4-Sep-2025 08:45 by rmk") + (if (type? FONTFACE FACE) + then [PACK (LIST* (SELECTQ (fetch (FONTFACE WEIGHT) of FACE) + (MEDIUM 'M) + (BOLD 'B) + (LIGHT 'L) + (fetch (FONTFACE WEIGHT) of FACE)) + (SELECTQ (fetch (FONTFACE SLOPE) of FACE) + (ITALIC 'I) + (REGULAR 'R) + (fetch (FONTFACE SLOPE) of FACE)) + (SELECTQ (fetch (FONTFACE EXPANSION) of FACE) + (REGULAR 'R) + (COMPRESSED 'C) + (EXPANDED 'E) + (fetch (FONTFACE EXPANSION) of FACE)) + (CL:WHEN (fetch (FONTFACE COLOR) of FACE) + (LIST "-" (fetch (FONTFACE BACKCOLOR) of FACE) + "-" + (fetch (FONTFACE FORECOLOR) of FACE)))] + elseif (AND FACE (LITATOM FACE) + (MEMB (NTHCHARCODE FACE 1) + (CHARCODE M B L)) + (MEMB (NTHCHARCODE FACE 2) + (CHARCODE I R)) + (MEMB (NTHCHARCODE FACE 3) + (CHARCODE R C E))) + then FACE + elseif (NOT NOERROR) + then (\ILLEGAL.ARG FACE]) +) - (* ;; "GENERIC FUNCTION") +(RPAQ? \FONTSINCORE NIL) - (* ;; "returns a list of the fontfiles that can be read in for a device. Rotation is ignored because it is assumed that all devices support 0 90 and 270.") +(RPAQ? \FONTEXISTS?-CACHE NIL) - (* ;; "The same algorithm as \SEARCHFONTFILES except returns the file names. This may return several files for the same specification") +(RPAQ? \DEFAULTDEVICEFONTS NIL) +(DECLARE%: DOEVAL@COMPILE DONTCOPY - (SPREADFONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)) - (CL:UNLESS DIRLST - [SETQ DIRLST (MKLIST (GETATOMVAL (PACK* DEVICE "FONTDIRECTORIES"]) - (CL:UNLESS EXTLST - [SETQ EXTLST (MKLIST (GETATOMVAL (PACK* DEVICE "FONTEXTENSIONS"]) - (for FILEPATTERN FILEDIR FONTSFOUND (FILING.ENUMERATION.DEPTH _ 1) - IN (\FONTFILENAMES FAMILY SIZE FACE DEVICE EXTLST) - do (SETQ FILEDIR (FILENAMEFIELD FILEPATTERN 'DIRECTORY)) - (SETQ FILEDIR (CL:IF FILEDIR - (CONCAT ">" FILEDIR ">") - "")) - (for DIR inside DIRLST eachtime +(GLOBALVARS \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) +) - (* ;; "The file pattern might have an extending subdirectory (C41>) that might not exist, but DIRECTORYNAMEP makes sure that it does.") +(RPAQ? \UNITWIDTHSVECTOR NIL) +(DEFINEQ - (SETQ DIR (CONCAT DIR ">" (OR FILEDIR ""))) - when (DIRECTORYNAMEP DIR) do (for FONTFILE FONTSPEC THISFACE in (DIRECTORY DIR) - eachtime (SETQ FONTSPEC (\FONTINFOFROMFILENAME FONTFILE - DEVICE)) - (SETQ THISFACE (CADDR FONTSPEC)) +(\UNITWIDTHSVECTOR + [LAMBDA NIL (* ; "Edited 24-Aug-2025 12:39 by rmk") + (* JonL " 7-NOV-83 19:23") + (SETQ \UNITWIDTHSVECTOR (\ALLOCBLOCK (UNFOLD (IPLUS \MAXTHINCHAR 3) + WORDSPERCELL))) + (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\PUTBASE \UNITWIDTHSVECTOR I 1)) + \UNITWIDTHSVECTOR]) +) +(DECLARE%: DONTEVAL@LOAD DOCOPY - (* ;; - "make sure the face, size, and family really match.") - when (AND (NOT (MEMBER FONTFILE FONTSFOUND)) - (OR (EQ FAMILY '*) - (EQ FAMILY (CAR FONTSPEC))) - (OR (EQ SIZE '*) - (EQ SIZE (CADR FONTSPEC))) - (MATCHFONTFACE FACE THISFACE)) do (push FONTSFOUND FONTFILE))) - finally (RETURN (DREVERSE FONTSFOUND]) +(\UNITWIDTHSVECTOR) ) +(DECLARE%: DONTCOPY +(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE -(RPAQ? \FONTEXISTS?-CACHE NIL) +(DATATYPE FONTCLASS ((PRETTYFONT# BYTE) + DISPLAYFD PRESSFD INTERPRESSFD OTHERFDS FONTCLASSNAME) + (INIT (DEFPRINT 'FONTCLASS (FUNCTION FONTCLASS.DEFPRINT)))) +(DATATYPE FONTDESCRIPTOR ((FONTDEVICE POINTER) + (FONTCOMPLETEP FLAG) + (FONTFAMILY POINTER) + (FONTSIZE POINTER) + (FONTFACE POINTER) + (\SFAscent WORD) + (\SFDescent WORD) + (\SFHeight WORD) + (ROTATION WORD) + (FONTSLUGWIDTH WORD) (* ; "Was FBBOX. The width of the slug character in the font, used by the generic \BUILDSLUGCSINFO to create the slug charsetinfo") + (NIL SIGNEDWORD) (* ; + "Was FBBOY. Can be removed if all references are recompiled.") + (NIL SIGNEDWORD) (* ; "Was FBBDX") + (NIL SIGNEDWORD) (* ; "Was FBBDY") + (FONTTOMCCSFN POINTER) (* ; "Was \SFLKerns. Function that translates codes in the font's pre-MCCS encoding into MCCS (e.g. Hippo A to Greek,Alpha) ") + (NIL POINTER) (* ; "Was \SFRWidths") + (FONTDEVICESPEC POINTER) (* ; + "Holds the spec by which the font is known to the printing device, if coercion has been done") + (OTHERDEVICEFONTPROPS POINTER) (* ; + "For individual devices to hang special information") + (FONTSCALE POINTER) + (\SFFACECODE BITS 8) + (FONTAVGCHARWIDTH WORD) (* ; + "Set in FONTCREATE, used to fix up the linelength when DSPFONT is called") + (FONTCHARENCODING POINTER) (* ; "Was FONTIMAGEWIDTHS: This is the image width, as opposed to the advanced width; initial hack for accents, kerning. Fields is referenced by FONTCREATE.") + (FONTCHARSETVECTOR POINTER) (* ; "A 257-pointer block, with one pointer per 'character set' --each group of 256 character codes. Each pointer is either NIL if there's no info for that charset, or is a CHARSETINFO, containing widths, char bitmap, etc for the characters in that charset. The last cell if not NIL is the %"slug%" charsetinfo that can be shared as the dummy entry for otherwise NIL charsets") + (FONTHASLEFTKERNS FLAG) (* ; + "T if at least one character set has an entry for left kerns") + (FONTEXTRAFIELD2 POINTER)) + FONTCHARSETVECTOR _ (\CREATEFONTCHARSETVECTOR) + (INIT (DEFPRINT 'FONTDESCRIPTOR (FUNCTION FONTDESCRIPTOR.DEFPRINT)))) +(RECORD FONTFACE (WEIGHT SLOPE EXPANSION) + [ACCESSFNS ((COLOR (CDDDR DATUM) + (RPLACD (CDDR DATUM) + NEWVALUE)) + (BACKCOLOR [COND + ((CDDDR DATUM) + (CAR (CDDDR DATUM] + (PROGN [COND + ((NULL (CDDDR DATUM)) + (RPLACD (CDDR DATUM) + (LIST NIL NIL] + (RPLACA (CDDDR DATUM) + NEWVALUE))) + (FORECOLOR [COND + ((CDDDR DATUM) + (CADR (CDDDR DATUM] + (PROGN [COND + ((NULL (CDDDR DATUM)) + (RPLACD (CDDR DATUM) + (LIST NIL NIL] + (RPLACA (CDR (CDDDR DATUM)) + NEWVALUE] + WEIGHT _ 'MEDIUM SLOPE _ 'REGULAR EXPANSION _ 'REGULAR (TYPE? LISTP)) -(* ; "Functions for DISPLAY IMAGESTREAMTYPES ") +(DATATYPE CHARSETINFO (WIDTHS (* ; "The advance-width of each character, an array indexed by charcode. Usually the same as the imagewidth, but can differ for accents, kerns kerns. This is what should be used for stringwidth calculations.") + (CSSLUGP FLAG) (* ; "True if this is a slug charset") + (CSCOMPLETEP FLAG) (* ; + "True if there is no further data to fill in any remaining slug-characters in a non-slug charset") + OFFSETS (* ; + "Offset of each character into the image bitmap; X value of left edge") + IMAGEWIDTHS (* ; "imagewidths is not automagically allocated since it is not always needed. But at least some times the IMAGEWIDTHS and WIDTHS vectors are EQ in this case.") + CHARSETBITMAP (* ; + "Bitmap containing the character images, indexed by OFFSETS") + YWIDTHS + (CHARSETASCENT WORD) (* ; + "Max ascent for all characters in this CHARSET") + (CHARSETDESCENT WORD) (* ; + "Max descent for all characters in this CHARSET") + LEFTKERN CSINFOPROPS (* ; "Alist of extra properties") + (CHARSETNO WORD)) (* ; + "The number of this CSINFO in its font--MAX.SMALLP if not initialized") + WIDTHS _ (\CREATECSINFOELEMENT) + OFFSETS _ (\CREATECSINFOELEMENT) + CHARSETNO _ MAX.SMALLP) -(DEFINEQ +(RECORD FONTSPEC (FSFAMILY FSSIZE FSFACE FSROTATION FSDEVICE)) +) -(\CREATEDISPLAYFONT - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 13-Jun-2025 22:58 by rmk") - (* ; "Edited 9-Jun-2025 17:42 by rmk") - (* ; "Edited 7-Jun-2025 15:11 by rmk") - (* ; "Edited 23-May-2025 14:59 by rmk") - (* ; "Edited 22-May-2025 09:52 by rmk") +(/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) + '((FONTCLASS 0 (BITS . 7)) + (FONTCLASS 2 POINTER) + (FONTCLASS 4 POINTER) + (FONTCLASS 6 POINTER) + (FONTCLASS 8 POINTER) + (FONTCLASS 10 POINTER)) + '12) - (* ;; "FONTCREATE1 has determined that there is at least one source file for this font, so the font exists in at least some character sets, although maybe not CHARSET.") - - (* ;; "This would be the right place to do DISPLAYFONTCOERCIONS, but that doesn't work if the target font is only partially instantiated. \GETCHARSETINFO has to know how to do the font coercion.") - (* gbn%: "25-Jan-86 18:02") - (LET [(FONTDESC (create FONTDESCRIPTOR - FONTDEVICE _ DEVICE - FONTFAMILY _ FAMILY - FONTSIZE _ SIZE - FONTFACE _ FACE - \SFAscent _ 0 - \SFDescent _ 0 - \SFHeight _ 0 - ROTATION _ ROTATION - FONTDEVICESPEC _ (LIST FAMILY SIZE FACE ROTATION DEVICE] - (\CREATECHARSET CHARSET FONTDESC) - FONTDESC]) +(DEFPRINT 'FONTCLASS (FUNCTION FONTCLASS.DEFPRINT)) -(\CREATECHARSET.DISPLAY - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC)(* ; "Edited 22-Jul-2025 22:04 by rmk") - (* ; "Edited 13-Jul-2025 11:44 by rmk") - (* ; "Edited 11-Jul-2025 11:00 by rmk") - (* ; "Edited 8-Jul-2025 08:14 by rmk") - (* ; "Edited 6-Jul-2025 22:55 by rmk") - (* ; "Edited 8-Jun-2025 19:57 by rmk") - (* ; "Edited 20-May-2025 15:00 by rmk") - (* ; "Edited 18-May-2025 23:31 by rmk") - (* ; "Edited 14-Jan-88 23:42 by FS") +(/DECLAREDATATYPE 'FONTDESCRIPTOR + '(POINTER FLAG POINTER POINTER POINTER WORD WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD + SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) + WORD POINTER POINTER FLAG POINTER) + '((FONTDESCRIPTOR 0 POINTER) + (FONTDESCRIPTOR 0 (FLAGBITS . 0)) + (FONTDESCRIPTOR 2 POINTER) + (FONTDESCRIPTOR 4 POINTER) + (FONTDESCRIPTOR 6 POINTER) + (FONTDESCRIPTOR 8 (BITS . 15)) + (FONTDESCRIPTOR 9 (BITS . 15)) + (FONTDESCRIPTOR 10 (BITS . 15)) + (FONTDESCRIPTOR 11 (BITS . 15)) + (FONTDESCRIPTOR 12 (BITS . 15)) + (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) + (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) + (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) + (FONTDESCRIPTOR 16 POINTER) + (FONTDESCRIPTOR 18 POINTER) + (FONTDESCRIPTOR 20 POINTER) + (FONTDESCRIPTOR 22 POINTER) + (FONTDESCRIPTOR 24 POINTER) + (FONTDESCRIPTOR 26 (BITS . 7)) + (FONTDESCRIPTOR 27 (BITS . 15)) + (FONTDESCRIPTOR 28 POINTER) + (FONTDESCRIPTOR 30 POINTER) + (FONTDESCRIPTOR 30 (FLAGBITS . 0)) + (FONTDESCRIPTOR 32 POINTER)) + '34) - (* ;; "The first case is simple: A DISPLAYFONTCOERCIONS substitution for one font for another. E.g. Use the information derived for HELVETICA 4 to construct the fontdescriptor for Helvetic 3. ") +(DEFPRINT 'FONTDESCRIPTOR (FUNCTION FONTDESCRIPTOR.DEFPRINT)) - (* ;; "After that, it uses requested source files and/or DISPLAYGLYPHCOERCIONS to produce and complete the CHARSETINFO:") +(/DECLAREDATATYPE 'CHARSETINFO '(POINTER FLAG FLAG POINTER POINTER POINTER POINTER WORD WORD POINTER + POINTER WORD) + '((CHARSETINFO 0 POINTER) + (CHARSETINFO 0 (FLAGBITS . 0)) + (CHARSETINFO 0 (FLAGBITS . 16)) + (CHARSETINFO 2 POINTER) + (CHARSETINFO 4 POINTER) + (CHARSETINFO 6 POINTER) + (CHARSETINFO 8 POINTER) + (CHARSETINFO 10 (BITS . 15)) + (CHARSETINFO 11 (BITS . 15)) + (CHARSETINFO 12 POINTER) + (CHARSETINFO 14 POINTER) + (CHARSETINFO 16 (BITS . 15))) + '18) +(DECLARE%: EVAL@COMPILE - (* ;; "This first tries to find a source file that exactly matches the characteristics of the requested charset. The charset is %"completed%" by filling in any missing characters from further down the coercion chain. Thus, the missing characters for e.g. TERMINAL 357 will be filled in from MODERN357, and then perhaps CLASSIC357.") +(PUTPROPS FONTASCENT MACRO ((FONTSPEC) + (ffetch \SFAscent of (FONTCREATE FONTSPEC)))) - (* ;; "If an exact match file cannot be found for a requested rotation, the rotation 0 charset is obtained and rotated.") +(PUTPROPS FONTDESCENT MACRO ((FONTSPEC) + (ffetch \SFDescent of (FONTCREATE FONTSPEC)))) - (* ;; "If a non-existent Kanji or Chinese charset is requested for a non-MRR face, the MRR charset is used unmodified. We don't try to boldify or italicize Kanji or Chinese.") +(PUTPROPS FONTHEIGHT MACRO ((FONTSPEC) + (ffetch \SFHeight of (FONTCREATE FONTSPEC)))) - (* ;; "When all coercions have been exhausted and FACE is bold and/or italic, the search process repeats with bold/italice changed to Regular, and algorithmic transformations are applied to the first result, if any.") +(PUTPROPS \FGETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE) + (\GETBASE OFFSETSBLOCK CHAR8CODE))) - (* ;; "If all else fails, it looks for the next charset in the coercion list, and fills that in with further coercions for missing characters.") +(PUTPROPS \FSETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE OFFSET) + (\PUTBASE OFFSETSBLOCK CHAR8CODE OFFSET))) - (* ;; "") +(PUTPROPS \FGETWIDTH DMACRO ((WIDTHSBLOCK CHAR8CODE) + (\GETBASE WIDTHSBLOCK CHAR8CODE))) - (* ;; "Maybe nobody cares about Classic 36...let's remove that coercion and see what happens.") +(PUTPROPS \FSETWIDTH DMACRO ((WIDTHSBLOCK CHAR8CODE VAL) + (\PUTBASE WIDTHSBLOCK CHAR8CODE VAL))) - (* ;; "There is a strategy question about the priority of charset coercion with respect to the other transformations. It might seem better to coerce to a real charset, if any, before apply the algorithmic bolding/italicizing. But the glitch is that nonexistent MODERN 36 BOLD would first coerce to CLASSIC 36, which also doesn't exist. But CLASSIC 36 has a font-substitution to CLASSIC 24, and the result would be the glyphs for CLASSIC 24-BRR, which turns out to be much less attractive and appropriate than the boldified version of MODERN36-MRR. So, to get MODERN36 bold, either the CHARSET coercion has to come after the bolding, the coercion of CLASSIC36 to CLASSIC24 has to be removed or refined, or the whole-font substitution should come after the charset coercion. ") +(PUTPROPS \FGETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE) + (\FGETWIDTH (ffetch (CHARSETINFO WIDTHS) of (\INSURECHARSETINFO + FONTDESC + (\CHARSET CHARCODE))) + (\CHAR8CODE CHARCODE)))) - (DECLARE (GLOBALVARS DISPLAYFONTCOERCIONS DISPLAYGLYPHCOERCIONS)) - (LET (CSINFO) +(PUTPROPS \FSETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE WIDTH) + (\FSETWIDTH (ffetch (CHARSETINFO WIDTHS) of (\INSURECHARSETINFO + FONTDESC + (\CHARSET CHARCODE))) + (\CHAR8CODE CHARCODE) + WIDTH))) - (* ;; "If no DISPLAYFONTCOERCIONS, skip that first \COERCECHARSET call--easier debugging of the other case.") +(PUTPROPS \FGETIMAGEWIDTH MACRO ((IMAGEWIDTHSBLOCK CHAR8CODE) + (\GETBASE IMAGEWIDTHSBLOCK CHAR8CODE))) - (SETQ CSINFO (if (AND DISPLAYFONTCOERCIONS (\COERCECHARSET FAMILY SIZE FACE ROTATION DEVICE - CHARSET DISPLAYFONTCOERCIONS)) - elseif (SETQ CSINFO (OR (\READCHARSET FAMILY SIZE FACE ROTATION DEVICE - CHARSET) - (\COERCECHARSET FAMILY SIZE FACE ROTATION DEVICE - CHARSET DISPLAYGLYPHCOERCIONS))) - then - (* ;; "This completes CSINFO with glyphs for all codes from possibly different sources, even if just asking for a single THINCODE. We never return an incomplete CSINFO.") +(PUTPROPS \FSETIMAGEWIDTH DMACRO ((WIDTHSBLOCK INDEX WIDTH) + (\PUTBASE WIDTHSBLOCK INDEX WIDTH))) +) +(DECLARE%: EVAL@COMPILE - (COMPLETE.CHARSET CSINFO FAMILY SIZE FACE ROTATION DEVICE CHARSET - DISPLAYGLYPHCOERCIONS FONTDESC) - elseif (NEQ ROTATION 0) - then (CL:UNLESS (MEMB ROTATION '(90 270)) - (ERROR "only implemented rotations are 0, 90 and 270." ROTATION - )) - (CL:WHEN (SETQ CSINFO (\CREATECHARSET.DISPLAY FAMILY SIZE FACE 0 - DEVICE CHARSET FONTDESC)) - (\SFROTATECSINFO CSINFO ROTATION)) - elseif (OR (KANJICHARSETP CHARSET) - (CHINESECHARSETP CHARSET)) - then (CL:UNLESS (EQUAL FACE '(MEDIUM REGULAR REGULAR)) - (\CREATECHARSET.DISPLAY FAMILY SIZE '(MEDIUM REGULAR REGULAR) - ROTATION DEVICE CHARSET FONTDESC)) - elseif (EQ 'BOLD (fetch (FONTFACE WEIGHT) of FACE)) - then (MAKEBOLD.CHARSET FAMILY SIZE FACE ROTATION DEVICE CHARSET - DISPLAYGLYPHCOERCIONS) - elseif (EQ 'ITALIC (fetch (FONTFACE SLOPE) of FACE)) - then (MAKEITALIC.CHARSET FAMILY SIZE FACE ROTATION DEVICE CHARSET - DISPLAYGLYPHCOERCIONS))) - CSINFO]) +(PUTPROPS \GETCHARSETINFO MACRO ((FONTDESC CHARSET) -(\FONTEXISTS?.DISPLAY - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 25-Jul-2025 21:38 by rmk") - (* ; "Edited 13-Jul-2025 11:45 by rmk") - (* ; "Edited 22-Jun-2025 08:53 by rmk") + (* ;; + "Temporary until other callers of \GETCHARSETINFO are changes to \INSURECHARSETINFO") - (* ;; "Order doesn't matter here, only need one to work") + (* ;; + "Fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. ") - (OR (AND (EQ 'BOLD (fetch (FONTFACE WEIGHT) of FACE)) - (FONTEXISTS? FAMILY SIZE (create FONTFACE using FACE WEIGHT _ 'MEDIUM) - ROTATION DEVICE CHARSET)) - (AND (EQ 'ITALIC (fetch (FONTFACE SLOPE) of FACE)) - (FONTEXISTS? FAMILY SIZE (create FONTFACE using FACE SLOPE _ 'REGULAR) - ROTATION DEVICE CHARSET)) - (for C VAL in (\COERCEFONTSPEC (APPEND DISPLAYFONTCOERCIONS DISPLAYGLYPHCOERCIONS) - FAMILY SIZE FACE ROTATION DEVICE CHARSET) when (SETQ VAL (FONTEXISTS? - C)) - do (RETURN VAL]) -) -(DEFINEQ + (* ;; + "NOTE Current \GETCHARSETINFO takes the vector, not the font, as does current \SETCHARSETINFO") -(STRIKEFONT.FILEP - [LAMBDA (FILE) (* ; "Edited 15-May-2025 17:47 by rmk") + (\GETBASEPTR (ffetch FONTCHARSETVECTOR of FONTDESC) + (UNFOLD CHARSET 2)))) - (* ;; "If high bit of type is on, then must be strike. If 2nd bit is on, must be strike-index, and we punt. We don't care about the 3rd bit") +(PUTPROPS \SETCHARSETINFO MACRO ((FONTDESC CHARSET CSINFO) + (\RPLPTR (fetch (FONTDESCRIPTOR FONTCHARSETVECTOR) of FONTDESC) + (UNFOLD CHARSET 2) + CSINFO))) - (* ;; "first word has high bits (onebit index fixed). Onebit means 'new-style font' , index is 0 for simple strike, 1 for index, and fixed is if all chars have max width. Lisp doesn't care about 'fixed'") +(PUTPROPS \INSURECHARSETINFO MACRO [OPENLAMBDA (FONTDESC CHARSET) - (RESETLST - (CL:UNLESS (OPENP FILE 'INPUT) - [RESETSAVE (SETQ FILE (OPENSTREAM FILE 'INPUT 'OLD)) - `(PROGN (CLOSEF? OLDVALUE]) - (CL:WHEN [MEMB (\WIN FILE) - (CONSTANT (LIST (LLSH 1 15) - (LOGOR (LLSH 1 15) - (LLSH 1 13] - T))]) + (* ;; "fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. If NIL, then creates and installs the required charset, maybe a slug (with CSSLUGP T).") -(STRIKEFONT.GETCHARSET - [LAMBDA (STRM) (* ; "Edited 14-Jul-2025 19:52 by rmk") - (* ; "Edited 9-Jun-2025 14:22 by rmk") - (* ; "Edited 12-Jul-2022 09:19 by rmk") - (* ; "Edited 4-Dec-92 12:11 by jds") + (OR (\GETCHARSETINFO FONTDESC CHARSET) + (\SETCHARSETINFO FONTDESC CHARSET (\CREATECHARSET CHARSET + FONTDESC]) - (* ;; "STRM has already been determined to be a vanilla strike-format file holding only the desired charset.") - (* ; "returns a charsetinfo") - (RESETLST - (CL:UNLESS (\GETSTREAM STRM 'INPUT T) - [RESETSAVE (SETQ STRM (OPENSTREAM STRM 'INPUT 'OLD)) - `(PROGN (CLOSEF? OLDVALUE]) - (SETFILEPTR STRM 0) - (CL:UNLESS (STRIKEFONT.FILEP STRM) - (ERROR "Not a STRIKE font file" STRM)) - (CL:UNLESS (EQ 2 (GETFILEPTR STRM)) - (SETFILEPTR STRM 2)) - (LET (CSINFO NUMBCODES RW BITMAP OFFSETS FIRSTCHAR LASTCHAR HEIGHT WIDTHS) - (SETQ CSINFO (create CHARSETINFO)) - (SETQ FIRSTCHAR (\WIN STRM)) (* ; "minimum ascii code") - (SETQ LASTCHAR (\WIN STRM)) (* ; "maximum ascii code") - (\WIN STRM) (* ; - "MaxWidth which isn't used by anyone.") - (\WIN STRM) (* ; - "number of words in this StrikeBody") - (replace (CHARSETINFO CHARSETASCENT) of CSINFO with (\WIN STRM)) - (* ; - "ascent in scan lines (=FBBdy+FBBoy)") - (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with (\WIN STRM)) - (* ; "descent in scan-lines (=FBBoy)") - (\WIN STRM) (* ; - "offset in bits (<0 for kerning, else 0, =FBBox)") - (SETQ RW (\WIN STRM)) (* ; "raster width of bitmap") - (* ; "height of bitmap") - - (* ;; "JDS 12/4/92: Apparently, these fields can be signed values, if all chars, e.g., ride above the base line.") - - (SETQ HEIGHT (IPLUS (SIGNED (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) - 16) - (SIGNED (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO) - 16))) - (SETQ BITMAP (BITMAPCREATE (UNFOLD RW BITSPERWORD) - HEIGHT)) - (\BINS STRM (fetch BITMAPBASE of BITMAP) - 0 - (UNFOLD (ITIMES RW HEIGHT) - BYTESPERWORD)) (* ; "read bits into bitmap") - (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with BITMAP) - (SETQ NUMBCODES (IPLUS (IDIFFERENCE LASTCHAR FIRSTCHAR) - 3)) (* ; - "(SETQ OFFSETS (ARRAY (IPLUS \MAXCHAR 3) (QUOTE SMALLPOSP) 0 0))") - (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (* ; "initialise the offsets to 0") - (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET OFFSETS I 0)) - (* ; - "(AIN OFFSETS FIRSTCHAR NUMBCODES STRM)") - (for I from FIRSTCHAR as J from 1 to NUMBCODES do (\FSETOFFSET OFFSETS I (\WIN STRM))) - (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETWIDTH WIDTHS I 0)) - (* ; - "(replace WIDTHS of (CHARSETINFO CSINFO) with (ARRAY (IPLUS \MAXCHAR 3) (QUOTE SMALLPOSP) 0 0))") - (\FONTRESETCHARWIDTHS CSINFO FIRSTCHAR LASTCHAR) - (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO WIDTHS) - of CSINFO)) - CSINFO))]) +(PUTPROPS \CREATECSINFOELEMENT MACRO (NIL (\ALLOCBLOCK (FOLDHI (IPLUS \MAXTHINCHAR 3) + WORDSPERCELL)))) -(WRITESTRIKEFONTFILE - [LAMBDA (FONT CHARSET FILE) (* ; "Edited 22-May-2025 09:53 by rmk") - (* ; "Edited 1-Feb-2025 12:27 by mth") - (* ; "Edited 12-Jul-2022 14:36 by rmk") - (* kbr%: "21-Oct-85 15:08") - (* ; - "Write strike FILE using info in FONT. *") - (CL:UNLESS (FONTP FONT) - (LISPERROR "ILLEGAL ARG" FONT)) - (CL:UNLESS CHARSET (SETQ CHARSET 0)) - (CL:UNLESS (AND (IGEQ CHARSET 0) - (ILEQ CHARSET \MAXCHARSET)) - (LISPERROR "ILLEGAL ARG" CHARSET)) - (LET (STREAM CSINFO FIRSTCHAR LASTCHAR WIDTHS MAXWIDTH LENGTH RASTERWIDTH DUMMYCHAR DUMMYOFFSET - PREVIOUSOFFSET OFFSETS) - (SETQ CSINFO (\INSURECHARSETINFO CHARSET FONT T)) - (CL:UNLESS CSINFO (ERROR "Couldn't find charset " CHARSET)) - (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS DUMMYINDEX)) - [SETQ FIRSTCHAR (for I from 0 to MAXCODE thereis (NOT (EQ (\FGETOFFSET OFFSETS I) - DUMMYOFFSET] - [SETQ LASTCHAR (for I from MAXCODE to 0 by -1 thereis (NOT (EQ (\FGETOFFSET OFFSETS I) - DUMMYOFFSET] - (SETQ DUMMYCHAR (ADD1 LASTCHAR)) - [SETQ STREAM (OPENSTREAM FILE 'OUTPUT 'NEW '((TYPE BINARY] - (\WOUT STREAM 32768) (* ; "STRIKE HEADER. *") - (\WOUT STREAM FIRSTCHAR) - (\WOUT STREAM LASTCHAR) - (SETQ MAXWIDTH 0) - [for I from 0 to DUMMYINDEX do (SETQ MAXWIDTH (IMAX MAXWIDTH (\FGETWIDTH WIDTHS I] - (\WOUT STREAM MAXWIDTH) (* ; "STRIKE BODY. *") - (* ; "Length. *") - (SETQ RASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of (fetch (CHARSETINFO CHARSETBITMAP) - of CSINFO))) - (SETQ LENGTH (IPLUS 8 (IDIFFERENCE LASTCHAR FIRSTCHAR) - (ITIMES (fetch (FONTDESCRIPTOR \SFHeight) of FONT) - RASTERWIDTH))) - (\WOUT STREAM LENGTH) (* ; - "Ascent, Descent, Xoffset (no longer used) and Rasterwidth. *") - (\WOUT STREAM (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) - (\WOUT STREAM (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) - (\WOUT STREAM 0) - (\WOUT STREAM RASTERWIDTH) (* ; "Bitmap. *") - [\BOUTS STREAM (fetch (BITMAP BITMAPBASE) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) - 0 - (ITIMES 2 RASTERWIDTH (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) - (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] - (* ; "Offsets. *") - (for I WIDTH OFFSET (CODE _ 0) from FIRSTCHAR to DUMMYCHAR first (\WOUT STREAM CODE) - do (SETQ OFFSET (\FGETOFFSET OFFSETS I)) - (SETQ WIDTH (\FGETWIDTH WIDTHS I)) - (CL:UNLESS (AND (IEQP OFFSET DUMMYOFFSET) - (NOT (IEQP I DUMMYCHAR))) - (ADD CODE WIDTH)) - (\WOUT STREAM CODE)) - (CLOSEF STREAM]) +(PUTPROPS \CREATEFONTCHARSETVECTOR MACRO (NIL -(STRIKECSINFO - [LAMBDA (CSINFO) (* ; "Edited 27-Apr-89 13:39 by atm") + (* ;; "Allocates a block for the character set records, including one extra slot to hold the common slug charsetinfo") - (* ;; "Returns a STRIKE type font descriptor (EQ WIDTHS IMAGEWIDTHS), cause we know how to write those guys out (they read quicker but display slower). If (EQ WIDTHS IMAGEWIDTHS), just return original.") + (\ALLOCBLOCK (IPLUS 2 \MAXCHARSET) + T))) - (PROG (WIDTHS OFFSETS IMWIDTHS OLDBM BMWIDTH BMHEIGHT NEWBM NEWOFFSET NEWWIDTH OLDOFFSET - DUMMYOFFSET NEWOFFSETS) - (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) - (if (EQ WIDTHS IMWIDTHS) - then (RETURN CSINFO)) - (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (SETQ OLDBM (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) - (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS 256)) - (SETQ BMHEIGHT (BITMAPHEIGHT OLDBM)) - [SETQ BMWIDTH (for I from 0 to \MAXTHINCHAR - sum (if (IEQP DUMMYOFFSET (\FGETOFFSET OFFSETS I)) - then 0 - else (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) - (\FGETWIDTH WIDTHS I] +(PUTPROPS CHARSETPROP MACRO [ARGS (if (CDDR ARGS) + then `(PUTMULTI (fetch (CHARSETINFO CSINFOPROPS) + of ,(CAR ARGS)) + ,(CADR ARGS) + ,(CADDR ARGS)) + else `(GETMULTI (fetch (CHARSETINFO CSINFOPROPS) + of ,(CAR ARGS)) + ,(CADR ARGS]) +) - (* ;; "") +(PUTPROPS CHARSETPROP ARGNAMES (CSINFO PROP NEWVALUE)) +(DECLARE%: EVAL@COMPILE - (* ;; "Initialize new offsets vector") +(RPAQ SLUGCHARINDEX (ADD1 \MAXTHINCHAR)) - (* ;; "") +(RPAQ SLUGCHARSET (ADD1 \MAXCHARSET)) - (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) - (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET NEWOFFSETS I 0)) - (\FSETOFFSET NEWOFFSETS (ADD1 \MAXTHINCHAR) - BMWIDTH) - (* ;; "") +(CONSTANTS (SLUGCHARINDEX (ADD1 \MAXTHINCHAR)) + (SLUGCHARSET (ADD1 \MAXCHARSET))) +) +(DECLARE%: EVAL@COMPILE - (* ;; "Adjust bitmap with so width = imagewidth, fill offsets") +(PUTPROPS LEGACYFONT MACRO ((FORM) (* ; + "Execute FORM in a non-medleyfont displayfont environment") + (RESETVARS (\FONTSINCORE \FONTEXISTS?-CACHE DISPLAYFONTCOERCIONS + DISPLAYCHARCOERCIONS (DISPLAYFONTEXTENSIONS + '(DISPLAYFONT)) + (DISPLAYFONTDIRECTORIES (MEDLEYDIR + "fonts>displayfonts>")) + (DISPLAYCHARSETFNS (REMOVE (ASSOC 'MEDLEYFONT + DISPLAYCHARSETFNS) + DISPLAYCHARSETFNS))) + (RETURN FORM)))) +) - (* ;; "") +(* "END EXPORTED DEFINITIONS") - (SETQ NEWBM (BITMAPCREATE BMWIDTH BMHEIGHT 1)) - (SETQ NEWOFFSET 0) - [for I from 0 to 255 - do (SETQ OLDOFFSET (\FGETOFFSET OFFSETS I)) - (if (IEQP DUMMYOFFSET OLDOFFSET) - then (\FSETOFFSET NEWOFFSETS I BMWIDTH) - else (\FSETOFFSET NEWOFFSETS I NEWOFFSET) - (SETQ NEWWIDTH (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) - (\FGETWIDTH WIDTHS I))) - (BITBLT OLDBM OLDOFFSET 0 NEWBM NEWOFFSET 0 (\FGETWIDTH IMWIDTHS I) - BMHEIGHT - 'REPLACE) - (SETQ NEWOFFSET (IPLUS NEWOFFSET NEWWIDTH] - (* ;; "") +(DECLARE%: EVAL@COMPILE - (* ;; "Make new CSInfo record withs IMAGEWIDTHS, WIDTHS the same") +(PUTPROPS INDIRECTCHARSETP MACRO [(CSINFO FONT) - (* ;; "") + (* ;; "An indirect points somewhere else") - (SETQ WIDTHS (COPYALL WIDTHS)) - [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I - (IMAX (\FGETWIDTH WIDTHS I) - (\FGETIMAGEWIDTH IMWIDTHS I] - (RETURN (create CHARSETINFO - WIDTHS _ WIDTHS - OFFSETS _ NEWOFFSETS - IMAGEWIDTHS _ WIDTHS - CHARSETBITMAP _ NEWBM - YWIDTHS _ (fetch (CHARSETINFO YWIDTHS) of CSINFO) - CHARSETASCENT _ (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) - CHARSETDESCENT _ (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO]) + (LET [(SOURCE (CL:UNLESS (fetch (CHARSETINFO CSSLUGP) of CSINFO) + (CHARSETPROP CSINFO 'SOURCE))] + (CL:WHEN SOURCE + [NOT (EQUAL SOURCE (FONTPROP FONT 'DEVICESPEC])]) +) ) - - - -(* ; "Bitmap faking") - (DEFINEQ -(MAKEBOLD.CHARSET - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET COERCIONS) - (* ; "Edited 21-Jun-2025 09:10 by rmk") +(FONTDESCRIPTOR.DEFPRINT + [LAMBDA (FONT STREAM) (* ; "Edited 10-Jul-2025 09:32 by rmk") + (* ; "Edited 14-Dec-2024 09:13 by rmk") + (LET ((LOC (LOC FONT)) + (FACE (fetch (FONTDESCRIPTOR FONTFACE) of FONT))) - (* ;; "BOLD is requested in FACE, so we look for an MRR or MIR that we can bold. If we find one, we presume that it is complete for all characters in its face. But there may be other fonts in the coercion chain that have true information about the bold face that we are after. We look for those before we try to adjust the characters in the non-bold CSINFO that we found.") + (* ;; "Could lowercase the family, but maybe too dangerous if a BREAK on L-CASE.") - (LET ((FONTX (FONTCREATE1 FAMILY SIZE (create FONTFACE using FACE WEIGHT _ 'MEDIUM) - 0 - 'DISPLAY CHARSET)) - CSINFO SOURCECSINFO) - (CL:WHEN (AND FONTX (SETQ CSINFO (\XGETCHARSETINFO FONTX CHARSET)) - (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) - (SETQ CSINFO (create CHARSETINFO copying CSINFO)) - (for THINCODE from 0 to \MAXTHINCHAR - do (if (SLUGCHARP.DISPLAY THINCODE CSINFO) - then - (* ;; "Look for a bold glyph for THINCODE lurking somewhere down the chain, copy it up. There may be different sources for different codes.") + (* ;; "Somehow flag the device too?") - (CL:WHEN (SETQ SOURCECSINFO - (\COERCECHARSET FAMILY SIZE FACE ROTATION DEVICE CHARSET - COERCIONS THINCODE)) - (\MOVEFONTCHAR SOURCECSINFO CSINFO THINCODE THINCODE)) - else (MAKEBOLD.CHAR THINCODE CSINFO))) - (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with T) - CSINFO)]) + (CONS (CONCAT "{" (fetch (FONTDESCRIPTOR FONTFAMILY) of FONT) + (fetch (FONTDESCRIPTOR FONTSIZE) of FONT) + "-" + (SELECTQ (fetch (FONTFACE WEIGHT) of FACE) + (MEDIUM 'M) + (BOLD 'B) + (LIGHT 'L) + (fetch (FONTFACE WEIGHT) of FACE)) + (SELECTQ (fetch (FONTFACE SLOPE) of FACE) + (ITALIC 'I) + (REGULAR 'R) + (fetch (FONTFACE SLOPE) of FACE)) + (SELECTQ (fetch (FONTFACE EXPANSION) of FACE) + (REGULAR 'R) + (COMPRESSED 'C) + (EXPANDED 'E) + (fetch (FONTFACE EXPANSION) of FACE)) + "/" + (OCTALSTRING (CAR LOC)) + "," + (OCTALSTRING (CDR LOC)) + "}"]) -(MAKEBOLD.CHAR - [LAMBDA (THINCODE CSINFO) (* ; "Edited 17-Jun-2025 08:22 by rmk") +(FONTCLASS.DEFPRINT + [LAMBDA (FONTCLASS STREAM) (* ; "Edited 14-Dec-2024 16:51 by rmk") + (LET ((LOC (LOC FONTCLASS))) + (CONS (CONCAT "{" (OR (fetch (FONTCLASS FONTCLASSNAME) of FONTCLASS) + 'FONTCLASS) + "/" + (OCTALSTRING (CAR LOC)) + "," + (OCTALSTRING (CDR LOC)) + "}"]) +) - (* ;; "Replaces the bitmap for THINCODE in CSINFO with a bolder one: overlaps 2 bits to produce the bold effect. Could be iterated for bigger fonts, but eventually the open spaces would be closed up.") +(/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) + '((FONTCLASS 0 (BITS . 7)) + (FONTCLASS 2 POINTER) + (FONTCLASS 4 POINTER) + (FONTCLASS 6 POINTER) + (FONTCLASS 8 POINTER) + (FONTCLASS 10 POINTER)) + '12) - (CL:UNLESS (SLUGCHARP.DISPLAY THINCODE CSINFO) - (LET* [(OLDCHARBITMAP (\GETCHARBITMAP.CSINFO THINCODE CSINFO)) - (NEWCHARBITMAP (BITMAPCREATE (ADD1 (fetch BITMAPWIDTH of OLDCHARBITMAP)) - (fetch BITMAPHEIGHT of OLDCHARBITMAP))) - (CWIDTH (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) - THINCODE)) - (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) - (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] +(DEFPRINT 'FONTCLASS (FUNCTION FONTCLASS.DEFPRINT)) - (* ;; - "Paint in a shifted copy 1 bit over. The new bitmap is 1 bit wider, to keep the margin.") +(/DECLAREDATATYPE 'FONTDESCRIPTOR + '(POINTER FLAG POINTER POINTER POINTER WORD WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD + SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) + WORD POINTER POINTER FLAG POINTER) + '((FONTDESCRIPTOR 0 POINTER) + (FONTDESCRIPTOR 0 (FLAGBITS . 0)) + (FONTDESCRIPTOR 2 POINTER) + (FONTDESCRIPTOR 4 POINTER) + (FONTDESCRIPTOR 6 POINTER) + (FONTDESCRIPTOR 8 (BITS . 15)) + (FONTDESCRIPTOR 9 (BITS . 15)) + (FONTDESCRIPTOR 10 (BITS . 15)) + (FONTDESCRIPTOR 11 (BITS . 15)) + (FONTDESCRIPTOR 12 (BITS . 15)) + (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) + (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) + (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) + (FONTDESCRIPTOR 16 POINTER) + (FONTDESCRIPTOR 18 POINTER) + (FONTDESCRIPTOR 20 POINTER) + (FONTDESCRIPTOR 22 POINTER) + (FONTDESCRIPTOR 24 POINTER) + (FONTDESCRIPTOR 26 (BITS . 7)) + (FONTDESCRIPTOR 27 (BITS . 15)) + (FONTDESCRIPTOR 28 POINTER) + (FONTDESCRIPTOR 30 POINTER) + (FONTDESCRIPTOR 30 (FLAGBITS . 0)) + (FONTDESCRIPTOR 32 POINTER)) + '34) - (BITBLT OLDCHARBITMAP 0 0 NEWCHARBITMAP 0 0 CWIDTH HEIGHT 'INPUT 'REPLACE) - (BITBLT OLDCHARBITMAP 0 0 NEWCHARBITMAP 1 0 CWIDTH HEIGHT 'INPUT 'PAINT) - (\PUTCHARBITMAP.CSINFO THINCODE CSINFO NEWCHARBITMAP)))]) +(DEFPRINT 'FONTDESCRIPTOR (FUNCTION FONTDESCRIPTOR.DEFPRINT)) -(MAKEITALIC.CHARSET - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET COERCIONS) - (* ; "Edited 21-Jun-2025 09:10 by rmk") - - (* ;; "ITALIC is requested, so we look for an MRR or MIR that we can italicize. If we find one, we presume that it is complete for all characters in its face. But there may be other fonts in the coercion chain that have true information about the italic face that we are after. We look for those before we try to adjust the characters in non-italic CSINFO that we found.") +(/DECLAREDATATYPE 'CHARSETINFO '(POINTER FLAG FLAG POINTER POINTER POINTER POINTER WORD WORD POINTER + POINTER WORD) + '((CHARSETINFO 0 POINTER) + (CHARSETINFO 0 (FLAGBITS . 0)) + (CHARSETINFO 0 (FLAGBITS . 16)) + (CHARSETINFO 2 POINTER) + (CHARSETINFO 4 POINTER) + (CHARSETINFO 6 POINTER) + (CHARSETINFO 8 POINTER) + (CHARSETINFO 10 (BITS . 15)) + (CHARSETINFO 11 (BITS . 15)) + (CHARSETINFO 12 POINTER) + (CHARSETINFO 14 POINTER) + (CHARSETINFO 16 (BITS . 15))) + '18) +(ADDTOVAR SYSTEMRECLST - (LET ((FONTX (FONTCREATE1 FAMILY SIZE (create FONTFACE using FACE SLOPE _ 'REGULAR) - 0 - 'DISPLAY CHARSET)) - CSINFO SOURCECSINFO) - (CL:WHEN (AND FONTX (SETQ CSINFO (\XGETCHARSETINFO FONTX CHARSET)) - (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) - (SETQ CSINFO (create CHARSETINFO copying CSINFO)) - (for THINCODE from 0 to \MAXTHINCHAR - do (if (SLUGCHARP.DISPLAY THINCODE CSINFO) - then - (* ;; "Look for an italic glyph for THINCODE lurking somewhere down the chain, copy it up. There may be different sources for different codes.") +(DATATYPE FONTCLASS ((PRETTYFONT# BYTE) + DISPLAYFD PRESSFD INTERPRESSFD OTHERFDS FONTCLASSNAME)) - (CL:WHEN (SETQ SOURCECSINFO - (\COERCECHARSET FAMILY SIZE FACE ROTATION DEVICE CHARSET - COERCIONS THINCODE)) - (\MOVEFONTCHAR SOURCECSINFO CSINFO THINCODE THINCODE)) - else (MAKEITALIC.CHAR THINCODE CSINFO))) - (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with T) - CSINFO)]) +(DATATYPE FONTDESCRIPTOR ((FONTDEVICE POINTER) + (FONTCOMPLETEP FLAG) + (FONTFAMILY POINTER) + (FONTSIZE POINTER) + (FONTFACE POINTER) + (\SFAscent WORD) + (\SFDescent WORD) + (\SFHeight WORD) + (ROTATION WORD) + (FONTSLUGWIDTH WORD) + (NIL SIGNEDWORD) + (NIL SIGNEDWORD) + (NIL SIGNEDWORD) + (FONTTOMCCSFN POINTER) + (NIL POINTER) + (FONTDEVICESPEC POINTER) + (OTHERDEVICEFONTPROPS POINTER) + (FONTSCALE POINTER) + (\SFFACECODE BITS 8) + (FONTAVGCHARWIDTH WORD) + (FONTCHARENCODING POINTER) + (FONTCHARSETVECTOR POINTER) + (FONTHASLEFTKERNS FLAG) + (FONTEXTRAFIELD2 POINTER))) -(MAKEITALIC.CHAR - [LAMBDA (THINCODE CSINFO) (* ; "Edited 18-Jun-2025 14:12 by rmk") - (* ; "Edited 17-Jun-2025 09:54 by rmk") +(DATATYPE CHARSETINFO (WIDTHS (CSSLUGP FLAG) + (CSCOMPLETEP FLAG) + OFFSETS IMAGEWIDTHS CHARSETBITMAP YWIDTHS (CHARSETASCENT WORD) + (CHARSETDESCENT WORD) + LEFTKERN CSINFOPROPS (CHARSETNO WORD))) +) +(DEFINEQ - (* ;; "Replaces the bitmap for THINCODE in CSINFO with a slanted one: It shifts rows to the right as a function of their vertical position. ") +(\CREATEKERNELEMENT + [LAMBDA NIL (* ; "Edited 8-Jul-2025 22:33 by rmk") + (* ; "Edited 17-May-2025 09:36 by rmk") - (CL:UNLESS (SLUGCHARP.DISPLAY THINCODE CSINFO) - (LET* ((OLDBITMAP (\GETCHARBITMAP.CSINFO THINCODE CSINFO)) - (NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) - (fetch BITMAPHEIGHT of OLDBITMAP))) - (WIDTH (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) - THINCODE)) - (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) - (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) - (HEIGHT (IPLUS ASCENT DESCENT))) - [for ROW XX XN YN YX from (IMINUS (IQUOTIENT (IPLUS DESCENT 3) - 4)) to (IQUOTIENT (IPLUS ASCENT 3) - 4) - do (SETQ XN (IMIN WIDTH (IMAX ROW 0))) - (SETQ XX (IMIN WIDTH (IMAX (IPLUS WIDTH ROW) - 0))) - [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES ROW 4] - [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (ITIMES (ADD1 ROW) - 4] - (CL:WHEN (AND (IGREATERP XX XN) - (IGREATERP YX YN)) - (BITBLT OLDBITMAP 0 YN NEWBITMAP XN YN (IDIFFERENCE XX XN) - (IDIFFERENCE YX YN) - 'INPUT - 'REPLACE))] - (\PUTCHARBITMAP.CSINFO THINCODE CSINFO NEWBITMAP)))]) + (* ;; "ARRAY not CL:MAKE-ARRAY for MAKEINIT.") -(\SFMAKEBOLD - [LAMBDA (CSINFO) (* ; "Edited 16-Jun-2025 23:22 by rmk") - (* gbn "25-Jul-85 04:52") - (LET ((OLDCHARBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) - (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) - (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO))) - NEWCHARBITMAP OFFSET SLUGOFFSET SLUGWIDTH) - (SETQ NEWCHARBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDCHARBITMAP) - (fetch BITMAPHEIGHT of OLDCHARBITMAP))) - (SETQ SLUGOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXCHAR))) - (SETQ SLUGWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXCHAR))) - (for I from 0 to \MAXCHAR unless (EQ SLUGOFFSET (SETQ OFFSET (\FGETOFFSET OFFSETS I))) - do (* ; - "overlap two blts to produce bold effect") - (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP OFFSET 0 (\FGETWIDTH WIDTHS I) - HEIGHT - 'INPUT - 'REPLACE) - (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP (ADD1 OFFSET) - 0 - (SUB1 (\FGETWIDTH WIDTHS I)) - HEIGHT - 'INPUT - 'PAINT)) (* ; - "fill in the slug for the magic charcode") - (BITBLT OLDCHARBITMAP SLUGOFFSET 0 NEWCHARBITMAP SLUGOFFSET 0 SLUGWIDTH HEIGHT 'INPUT - 'REPLACE) - (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWCHARBITMAP]) + (ARRAY (IPLUS \MAXTHINCHAR 3) + 'POINTER 0 0]) -(\SFMAKEITALIC - [LAMBDA (CSINFO) (* ; "Edited 16-Jun-2025 23:20 by rmk") - (* gbn "18-Sep-85 17:57") - (LET ((WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) - (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) - (OLDBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) - HEIGHT OFFSET NEWBITMAP WIDTH SLUGOFFSET SLUGWIDTH N M R XN XX YN YX) - (SETQ HEIGHT (IPLUS ASCENT DESCENT)) - (SETQ NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) - (fetch BITMAPHEIGHT of OLDBITMAP))) - (SETQ SLUGOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXTHINCHAR))) - (SETQ SLUGWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXTHINCHAR))) - (SETQ N (IDIFFERENCE 0 (IQUOTIENT (IPLUS DESCENT 3) - 4))) - (SETQ M (IQUOTIENT (IPLUS ASCENT 3) - 4)) - [for I from 0 to \MAXTHINCHAR unless (EQ SLUGOFFSET (SETQ OFFSET (\FGETOFFSET OFFSETS I))) - do (SETQ WIDTH (\FGETWIDTH WIDTHS I)) - (for J from N to M do (SETQ R (IPLUS OFFSET WIDTH)) - (SETQ XN (IMIN R (IMAX (IPLUS OFFSET J) - 0))) - (SETQ XX (IMIN R (IMAX (IPLUS R J) - 0))) - [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES J 4] - [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (IPLUS (ITIMES J 4) - 4] - (CL:WHEN (AND (IGREATERP XX XN) - (IGREATERP YX YN)) - (BITBLT OLDBITMAP OFFSET YN NEWBITMAP XN YN (IDIFFERENCE - XX XN) - (IDIFFERENCE YX YN) - 'INPUT - 'REPLACE))] - (BITBLT OLDBITMAP SLUGOFFSET 0 NEWBITMAP SLUGOFFSET 0 SLUGWIDTH HEIGHT 'INPUT 'REPLACE) - (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWBITMAP]) -) -(DEFINEQ +(\FSETLEFTKERN + [LAMBDA (CSINFO INDEX KERNVALUE) (* ; "Edited 8-Jul-2025 22:50 by rmk") + (* ; "Edited 17-May-2025 09:18 by rmk") + (CL:UNLESS (ARRAYP (ffetch (CHARSETINFO LEFTKERN) of CSINFO)) + (replace (CHARSETINFO LEFTKERN) of CSINFO with (\CREATEKERNELEMENT))) + (SETA (fetch (CHARSETINFO LEFTKERN) of CSINFO) + INDEX KERNVALUE]) -(\SFMAKEROTATEDFONT - [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") +(\FGETLEFTKERN + [LAMBDA (FONT PREVCHARCODE CHARCODE) (* ; "Edited 30-Aug-2025 23:29 by rmk") + (* ; "Edited 8-Jul-2025 22:15 by rmk") + (* ; "Edited 22-May-2025 09:53 by rmk") + (* ; "Edited 18-May-2025 21:30 by rmk") + (* ; "Edited 1-May-2025 11:08 by rmk") + (* ; "Edited 19-Dec-2024 15:25 by rmk") - (* ;; "takes a fontdecriptor and rotates it.") + (* ;; "Returns the kern information for CHARCODE in FONT, given that it is an immediate successor of PREVCHARCODE. Returns 0 if no PREVCHARCODE/CHARCODE kerning is specified. For now, assume that the kerning information is sparse for characters within a character set, stored as a 2-level alist. ") - (* ;; "1/5/86 JDS. Masterscope claims nobody calls this. Let's find out....") + (* ;; "If the kerning information for a character is already a FIXP, then it is an offset no matter what the preceding character might be. This appears to be the way at least AC font files are set up.") - (HELP "ROTATED fonts need to be fixed for NS Chars & New FONTDESCRIPTOR fields") - (* (create FONTDESCRIPTOR using - FONTDESC (SETQ CHARACTERBITMAP - (\SFROTATEFONTCHARACTERS - (fetch (FONTDESCRIPTOR - CHARACTERBITMAP) of FONTDESC) - ROTATION)) (SETQ ROTATION ROTATION) - (SETQ \SFOffsets ( - \SFFIXOFFSETSAFTERROTATION FONTDESC - ROTATION)) (SETQ FONTCHARSETVECTOR - (\ALLOCBLOCK (ADD1 \MAXCHARSET) T)))) + (* ;; "ACFONTFILES STORE A SINGLE NUMBER. LOGIC OF CODES IS UNCLEAR") - (* ;; "If you uncomment out the code above, remove this comment and the NIL below") + (LET [(KERN (AND (fetch (FONTDESCRIPTOR FONTHASLEFTKERNS) of FONT) + (ELT (fetch (CHARSETINFO LEFTKERN) of (\INSURECHARSETINFO FONT (\CHARSET + PREVCHARCODE + ))) + (\CHAR8CODE PREVCHARCODE] + (OR (FIXP KERN) + (FGETMULTI (LISTP KERN) + CHARCODE) + 0]) +) +(DEFINEQ - NIL]) +(\CREATEFONT + [LAMBDA (FONTSPEC) (* ; "Edited 28-Aug-2025 14:30 by rmk") + (* ; "Edited 18-Aug-2025 00:17 by rmk") + (* ; "Edited 16-Aug-2025 20:52 by rmk") + (* ; "Edited 12-Aug-2025 23:36 by rmk") + (* ; "Edited 24-Jul-2025 19:51 by rmk") + (* ; "Edited 20-May-2025 21:10 by rmk") -(\SFROTATECSINFO - [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:38") + (* ;; "Generic font creation. Uses fontcreate method from device to build the font fontdescriptor but doesn't call SETFONTDESCRIPTOR to install it and doesn't instantiate a charset. That's deferred to FONTCREATE1. ") - (* ;; "takes a CHARSETINFO and rotates it and produces a rotated equivalent one.") + (* ;; "") - (create CHARSETINFO using CSINFO CHARSETBITMAP _ (\SFROTATEFONTCHARACTERS - (fetch (CHARSETINFO CHARSETBITMAP) - of CSINFO) - ROTATION) - OFFSETS _ (\SFROTATECSINFOOFFSETS CSINFO ROTATION]) + (LET [(FN (CAR (FGETMULTI IMAGESTREAMTYPES (fetch (FONTSPEC FSDEVICE) of FONTSPEC) + 'FONTCREATE] + (CL:WHEN FN + (if (EQ (NARGS FN) + 1) + then (APPLY* FN FONTSPEC) + else (* ; "Old form: spreading FONTSPEC") + (APPLY FN FONTSPEC)))]) -(\SFROTATEFONTCHARACTERS - [LAMBDA (CHARBITMAP ROTATION) (* ; "Edited 22-Sep-87 10:38 by Snow") +(\CREATECHARSET + [LAMBDA (CHARSET FONT) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 28-Aug-2025 14:31 by rmk") + (* ; "Edited 27-Aug-2025 12:55 by rmk") + (* ; "Edited 25-Aug-2025 22:51 by rmk") + (* ; "Edited 16-Aug-2025 21:06 by rmk") + (* ; "Edited 12-Aug-2025 23:36 by rmk") + (* ; "Edited 5-Aug-2025 22:29 by rmk") + (* ; "Edited 3-Aug-2025 17:41 by rmk") + (* ; "Edited 29-Jul-2025 12:10 by rmk") + (* ; "Edited 22-Jul-2025 22:48 by rmk") + (* ; "Edited 9-Jul-2025 11:12 by rmk") + (* ; "Edited 15-Jun-2025 14:50 by rmk") + (* ; "Edited 13-Jun-2025 20:00 by rmk") + (* ; "Edited 10-Jun-2025 13:55 by rmk") + (* ; "Edited 7-Jun-2025 15:10 by rmk") + (* ; "Edited 18-May-2025 21:40 by rmk") + (* ; "Edited 16-May-2025 21:37 by rmk") + (* ; "Edited 12-Jul-2022 14:37 by rmk") + (* ; "Edited 8-May-93 23:42 by rmk:") + (* ; "Edited 4-Dec-92 11:43 by jds") -(* ;;; "rotate a bitmap either 90 or 270 for fonts.") + (* ;; "Creates and returns the CHARSETINFO for charset CHARSET in fontdesc FONT, installing it in fonts FONTCHARSETVECTOR") - (CASE ROTATION - (0 CHARBITMAP) - (90 (ROTATE-BITMAP-LEFT CHARBITMAP)) - (180 (ROTATE-BITMAP (ROTATE-BITMAP CHARBITMAP))) - (270 (ROTATE-BITMAP CHARBITMAP)))]) + (CL:UNLESS (<= 0 CHARSET \MAXCHARSET) + (\ILLEGAL.ARG CHARSET)) + (LET [(CSINFO (if (fetch (FONTDESCRIPTOR FONTCOMPLETEP) of FONT) + then (\GETCHARSETINFO FONT CHARSET) + else (APPLY* (OR (CAR (FGETMULTI IMAGESTREAMTYPES (fetch (FONTDESCRIPTOR + FONTDEVICE) + of FONT) + 'CREATECHARSET)) + (FUNCTION \READCHARSET)) + (create FONTSPEC using (FONTPROP FONT 'DEVICESPEC)) + FONT CHARSET] + + (* ;; "Create a descriptor of info for that charset. If we got one, the subfunction may have ignored NOSLUG?. But if not, we store it in the vector so that we don't search later. ") + + (if (AND CSINFO (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) + then (\INSTALLCHARSETINFO FONT CSINFO CHARSET) + elseif (SETQ CSINFO (\GETCHARSETINFO FONT SLUGCHARSET)) + else (SETQ CSINFO (\BUILDSLUGCSINFO FONT)) + (\SETCHARSETINFO FONT SLUGCHARSET CSINFO) + (\SETCHARSETINFO FONT CHARSET CSINFO)) + CSINFO]) -(\SFROTATECSINFOOFFSETS - [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:36") - (* ; - "adjusts offsets in case where rotation turned things around.") - (COND - ((EQ ROTATION 270) - (PROG ((OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (BITMAPHEIGHT (BITMAPWIDTH (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) - NEWOFFSETS) - (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) - [for CHARCODE from 0 to \MAXCHAR - do (\FSETOFFSET NEWOFFSETS CHARCODE (IDIFFERENCE BITMAPHEIGHT - (IPLUS (\FGETOFFSET OFFSETS CHARCODE) - (\FGETWIDTH WIDTHS CHARCODE] +(\INSTALLCHARSETINFO + [LAMBDA (FONT CSINFO CHARSET) (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 25-Aug-2025 14:32 by rmk") + (* ; "Edited 24-Aug-2025 11:29 by rmk") + (* ; "Edited 25-May-2025 07:48 by rmk") + (* ; "Edited 23-May-2025 14:44 by rmk") + (* ; "Edited 12-Jul-2022 15:08 by rmk") + (replace \SFAscent of FONT with (IMAX (fetch \SFAscent of FONT) + (SIGNED (fetch CHARSETASCENT of CSINFO) + 16))) + (replace (FONTDESCRIPTOR \SFDescent) of FONT with (IMAX (fetch (FONTDESCRIPTOR \SFDescent) + of FONT) + (SIGNED (fetch (CHARSETINFO + CHARSETDESCENT) + of CSINFO) + 16))) (* ; - "may be some problem with dummy character representation.") - (RETURN NEWOFFSETS))) - (T (fetch (CHARSETINFO OFFSETS) of CSINFO]) -) -(DEFINEQ + "jtm: height = ascent + descent, not (IMAX fontHeight charSetHeight)") + (replace (FONTDESCRIPTOR \SFHeight) of FONT with (IPLUS (fetch (FONTDESCRIPTOR \SFAscent) + of FONT) + (ffetch (FONTDESCRIPTOR \SFDescent) + of FONT))) + (replace (CHARSETINFO CHARSETNO) of CSINFO with CHARSET) (* ; "In case the device didn't do it") + (\INSTALLCHARSETINFO.CHARENCODING FONT CSINFO CHARSET) + (\SETCHARSETINFO FONT CHARSET CSINFO) -(\SFMAKECOLOR - [LAMBDA (BWCSINFO BACKCOLOR FORECOLOR BITSPERPIXEL) (* kbr%: " 6-Feb-86 18:17") + (* ;; "\AVGCHARWIDTH has to be confused after the CSINFO is stuck in.") - (* ;; "makes a csinfo that has a character bitmap that is colorized.") + (CL:WHEN (EQ 0 (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT)) + (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT with (\AVGCHARWIDTH FONT))) + (CL:WHEN (EQ 0 (fetch (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT)) + (* ; "CSINFO is presumably charset 0") + (replace (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT with (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) + of CSINFO) + SLUGCHARINDEX))) + (CL:WHEN (EQ 0 (fetch (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT)) + (* ; "Still 0: try for the average") + (replace (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT with (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) + of FONT))) + CSINFO]) - (PROG (CHARACTERBITMAP COLORCSINFO) - [COND - ((IMAGESTREAMP BITSPERPIXEL) - (OR BACKCOLOR (SETQ BACKCOLOR (DSPBACKCOLOR NIL BITSPERPIXEL))) - (OR FORECOLOR (SETQ FORECOLOR (DSPCOLOR NIL BITSPERPIXEL))) - (SETQ BITSPERPIXEL (IMAGESTREAMTYPE BITSPERPIXEL] - [SETQ BITSPERPIXEL (COND - ((NUMBERP BITSPERPIXEL) - BITSPERPIXEL) - (T (\DISPLAYSTREAMTYPEBPP BITSPERPIXEL] - (SETQ BACKCOLOR (COLORNUMBERP BACKCOLOR BITSPERPIXEL)) - (SETQ FORECOLOR (COLORNUMBERP FORECOLOR BITSPERPIXEL)) - (SETQ CHARACTERBITMAP (COLORIZEBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of - BWCSINFO - ) - BACKCOLOR FORECOLOR BITSPERPIXEL)) - (SETQ COLORCSINFO (create CHARSETINFO using BWCSINFO CHARSETBITMAP _ - CHARACTERBITMAP)) - (RETURN COLORCSINFO]) +(\INSTALLCHARSETINFO.CHARENCODING + [LAMBDA (FONT CSINFO CHARSET) (* ; "Edited 12-Jul-2025 10:57 by rmk") + (* ; "Edited 9-Jul-2025 09:38 by rmk") + (* ; "Edited 6-Jul-2025 21:46 by rmk") + (* ; "Edited 25-May-2025 23:05 by rmk") + (* ; "Edited 24-May-2025 21:42 by rmk") + + (* ;; "The font charencoding is its charset 0 encoding. All higher charsets are MCCS.") + + (CL:WHEN (AND (EQ CHARSET 0) + (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) + (replace (FONTDESCRIPTOR FONTCHARENCODING) of FONT with (CHARSETPROP CSINFO 'CSCHARENCODING))) + ]) ) -(DEFINEQ +(DECLARE%: DONTCOPY +(DECLARE%: EVAL@COMPILE -(FONTDESCRIPTOR.DEFPRINT - [LAMBDA (FONT STREAM) (* ; "Edited 10-Jul-2025 09:32 by rmk") - (* ; "Edited 14-Dec-2024 09:13 by rmk") - (LET ((LOC (LOC FONT)) - (FACE (fetch (FONTDESCRIPTOR FONTFACE) of FONT))) +(PUTPROPS FIRSTCHARSETCODE MACRO ((CHARSET) + (LLSH CHARSET 8))) - (* ;; "Could lowercase the family, but maybe too dangerous if a BREAK on L-CASE.") +(PUTPROPS LASTCHARSETCODE MACRO ((CHARSET) + (LOGOR (LLSH CHARSET 8) + \MAXTHINCHAR))) +) +) +(DEFINEQ - (* ;; "Somehow flag the device too?") +(\FONTRESETCHARWIDTHS + [LAMBDA (CSINFO FIRSTCHAR LASTCHAR) (* ; "Edited 3-Aug-2025 20:59 by rmk") + (* ; "Edited 1-Aug-2025 23:50 by rmk") + (* AJB " 6-Dec-85 14:42") + (for CHARCODE LEFT RIGHT SLUGCHAROFFSET SLUGCHARWIDTH (OFFSETS _ (fetch (CHARSETINFO OFFSETS) + of CSINFO)) + (WIDTHS _ (fetch (CHARSETINFO WIDTHS) of CSINFO)) from 0 to SLUGCHARINDEX + first (SETQ SLUGCHAROFFSET (\FGETOFFSET OFFSETS SLUGCHARINDEX)) + (SETQ SLUGCHARWIDTH (IDIFFERENCE (\FGETOFFSET OFFSETS (ADD1 SLUGCHARINDEX)) + SLUGCHAROFFSET)) + do (SETQ LEFT (\FGETWIDTH OFFSETS CHARCODE)) + (if (EQ SLUGCHAROFFSET LEFT) + then (\FSETWIDTH WIDTHS CHARCODE SLUGCHARWIDTH) + else (SETQ RIGHT (\FGETWIDTH OFFSETS (ADD1 CHARCODE))) + (if (EQ LEFT RIGHT) + then (\FSETOFFSET OFFSETS CHARCODE SLUGCHAROFFSET) + (\FSETWIDTH WIDTHS CHARCODE SLUGCHARWIDTH) + else (\FSETWIDTH WIDTHS CHARCODE (IDIFFERENCE RIGHT LEFT]) +) +(DECLARE%: EVAL@COMPILE - (CONS (CONCAT "{" (fetch (FONTDESCRIPTOR FONTFAMILY) of FONT) - (fetch (FONTDESCRIPTOR FONTSIZE) of FONT) - "-" - (SELECTQ (fetch (FONTFACE WEIGHT) of FACE) - (MEDIUM 'M) - (BOLD 'B) - (LIGHT 'L) - (fetch (FONTFACE WEIGHT) of FACE)) - (SELECTQ (fetch (FONTFACE SLOPE) of FACE) - (ITALIC 'I) - (REGULAR 'R) - (fetch (FONTFACE SLOPE) of FACE)) - (SELECTQ (fetch (FONTFACE EXPANSION) of FACE) - (REGULAR 'R) - (COMPRESSED 'C) - (EXPANDED 'E) - (fetch (FONTFACE EXPANSION) of FACE)) - "/" - (OCTALSTRING (CAR LOC)) - "," - (OCTALSTRING (CDR LOC)) - "}"]) +(PUTPROPS \FGETCHARIMAGEWIDTH MACRO (OPENLAMBDA (FONT CHARCODE) + (\FGETWIDTH (ffetch (CHARSETINFO IMAGEWIDTHS) + of (\INSURECHARSETINFO FONT (\CHARSET CHARCODE)) + ) + (\CHAR8CODE CHARCODE)))) +) +(DECLARE%: DOEVAL@COMPILE DONTCOPY -(FONTCLASS.DEFPRINT - [LAMBDA (FONTCLASS STREAM) (* ; "Edited 14-Dec-2024 16:51 by rmk") - (LET ((LOC (LOC FONTCLASS))) - (CONS (CONCAT "{" (OR (fetch (FONTCLASS FONTCLASSNAME) of FONTCLASS) - 'FONTCLASS) - "/" - (OCTALSTRING (CAR LOC)) - "," - (OCTALSTRING (CDR LOC)) - "}"]) +(LOCALVARS . T) ) -(/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) - '((FONTCLASS 0 (BITS . 7)) - (FONTCLASS 2 POINTER) - (FONTCLASS 4 POINTER) - (FONTCLASS 6 POINTER) - (FONTCLASS 8 POINTER) - (FONTCLASS 10 POINTER)) - '12) +(PUTPROPS FONT FILETYPE :FAKE-COMPILE-FILE) -(DEFPRINT 'FONTCLASS (FUNCTION FONTCLASS.DEFPRINT)) -(/DECLAREDATATYPE 'FONTDESCRIPTOR - '(POINTER FLAG POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD - SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) - WORD POINTER POINTER FLAG POINTER) - '((FONTDESCRIPTOR 0 POINTER) - (FONTDESCRIPTOR 0 (FLAGBITS . 0)) - (FONTDESCRIPTOR 2 POINTER) - (FONTDESCRIPTOR 4 POINTER) - (FONTDESCRIPTOR 6 POINTER) - (FONTDESCRIPTOR 8 (BITS . 15)) - (FONTDESCRIPTOR 9 (BITS . 15)) - (FONTDESCRIPTOR 10 (BITS . 15)) - (FONTDESCRIPTOR 11 (BITS . 15)) - (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 16 POINTER) - (FONTDESCRIPTOR 18 POINTER) - (FONTDESCRIPTOR 20 POINTER) - (FONTDESCRIPTOR 22 POINTER) - (FONTDESCRIPTOR 24 POINTER) - (FONTDESCRIPTOR 26 (BITS . 7)) - (FONTDESCRIPTOR 27 (BITS . 15)) - (FONTDESCRIPTOR 28 POINTER) - (FONTDESCRIPTOR 30 POINTER) - (FONTDESCRIPTOR 30 (FLAGBITS . 0)) - (FONTDESCRIPTOR 32 POINTER)) - '34) -(DEFPRINT 'FONTDESCRIPTOR (FUNCTION FONTDESCRIPTOR.DEFPRINT)) +(* ;; "") -(/DECLAREDATATYPE 'CHARSETINFO '(POINTER FLAG FLAG POINTER POINTER POINTER POINTER WORD WORD POINTER - POINTER) - '((CHARSETINFO 0 POINTER) - (CHARSETINFO 0 (FLAGBITS . 0)) - (CHARSETINFO 0 (FLAGBITS . 16)) - (CHARSETINFO 2 POINTER) - (CHARSETINFO 4 POINTER) - (CHARSETINFO 6 POINTER) - (CHARSETINFO 8 POINTER) - (CHARSETINFO 10 (BITS . 15)) - (CHARSETINFO 11 (BITS . 15)) - (CHARSETINFO 12 POINTER) - (CHARSETINFO 14 POINTER)) - '16) -(ADDTOVAR SYSTEMRECLST -(DATATYPE FONTCLASS ((PRETTYFONT# BYTE) - DISPLAYFD PRESSFD INTERPRESSFD OTHERFDS FONTCLASSNAME)) -(DATATYPE FONTDESCRIPTOR ((FONTDEVICE POINTER) - (FONTCOMPLETEP FLAG) - (FONTFAMILY POINTER) - (FONTSIZE POINTER) - (FONTFACE POINTER) - (\SFAscent WORD) - (\SFDescent WORD) - (\SFHeight WORD) - (ROTATION WORD) - (NIL SIGNEDWORD) - (NIL SIGNEDWORD) - (NIL SIGNEDWORD) - (NIL SIGNEDWORD) - (NIL POINTER) - (NIL POINTER) - (FONTDEVICESPEC POINTER) - (OTHERDEVICEFONTPROPS POINTER) - (FONTSCALE POINTER) - (\SFFACECODE BITS 8) - (FONTAVGCHARWIDTH WORD) - (FONTCHARENCODING POINTER) - (FONTCHARSETVECTOR POINTER) - (FONTHASLEFTKERNS FLAG) - (FONTEXTRAFIELD2 POINTER))) -(DATATYPE CHARSETINFO (WIDTHS (CSSLUGP FLAG) - (CSCOMPLETEP FLAG) - OFFSETS IMAGEWIDTHS CHARSETBITMAP YWIDTHS (CHARSETASCENT WORD) - (CHARSETDESCENT WORD) - LEFTKERN CSINFOPROPS)) -) +(* ;; "DISPLAY") -(RPAQ? \FONTSINCORE ) -(RPAQ? \DEFAULTDEVICEFONTS ) -(RPAQ? \UNITWIDTHSVECTOR ) -(DECLARE%: DOEVAL@COMPILE DONTCOPY -(GLOBALVARS \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR) -) -(DECLARE%: DONTEVAL@LOAD DOCOPY +(* ; "Functions for DISPLAY IMAGESTREAMTYPES ") -(\UNITWIDTHSVECTOR) -) -(* "FOLLOWING DEFINITIONS EXPORTED") -(DEFOPTIMIZER FONTPROP (&REST ARGS) - (SELECTQ (AND (EQ (CAADR ARGS) - 'QUOTE) - (CADADR ARGS)) - (ASCENT (LIST 'FONTASCENT (CAR ARGS))) - (DESCENT (LIST 'FONTDESCENT (CAR ARGS))) - (HEIGHT (LIST 'FONTHEIGHT (CAR ARGS))) - 'IGNOREMACRO)) +(DEFINEQ -(* "END EXPORTED DEFINITIONS") +(\CREATEDISPLAYFONT + [LAMBDA (FONTSPEC) (* ; "Edited 28-Aug-2025 16:00 by rmk") + (* ; "Edited 18-Aug-2025 11:32 by rmk") + (* ; "Edited 16-Aug-2025 18:46 by rmk") + (* ; "Edited 10-Aug-2025 13:24 by rmk") + (* ; "Edited 13-Jun-2025 22:58 by rmk") + (* ; "Edited 9-Jun-2025 17:42 by rmk") + (* ; "Edited 7-Jun-2025 15:11 by rmk") + (* ; "Edited 23-May-2025 14:59 by rmk") + (* ; "Edited 22-May-2025 09:52 by rmk") + (* ; "gbn: 25-Jan-86 18:02") -(DECLARE%: DONTCOPY -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE + (* ;; "FONTEXISTS? has determined that there is at least one source file for this font, so the font exists in at least some character sets, d FONTCREATED1 tells us that the font descriptor is not yet availabe.") -(DATATYPE FONTCLASS ((PRETTYFONT# BYTE) - DISPLAYFD PRESSFD INTERPRESSFD OTHERFDS FONTCLASSNAME) - (INIT (DEFPRINT 'FONTCLASS (FUNCTION FONTCLASS.DEFPRINT)))) + (create FONTDESCRIPTOR + FONTFAMILY _ (fetch (FONTSPEC FSFAMILY) of FONTSPEC) + FONTSIZE _ (fetch (FONTSPEC FSSIZE) of FONTSPEC) + FONTFACE _ (fetch (FONTSPEC FSFACE) of FONTSPEC) + ROTATION _ (fetch (FONTSPEC FSROTATION) of FONTSPEC) + FONTDEVICE _ (fetch (FONTSPEC FSDEVICE) of FONTSPEC) + \SFAscent _ 0 + \SFDescent _ 0 + \SFHeight _ 0 + FONTDEVICESPEC _ (create FONTSPEC using FONTSPEC]) -(DATATYPE FONTDESCRIPTOR ((FONTDEVICE POINTER) - (FONTCOMPLETEP FLAG) - (FONTFAMILY POINTER) - (FONTSIZE POINTER) - (FONTFACE POINTER) - (\SFAscent WORD) - (\SFDescent WORD) - (\SFHeight WORD) - (ROTATION WORD) - (NIL SIGNEDWORD) +(\CREATECHARSET.DISPLAY + [LAMBDA (FONTSPEC FONT CHARSET) (* ; "Edited 2-Sep-2025 23:42 by rmk") + (* ; "Edited 30-Aug-2025 19:42 by rmk") + (* ; "Edited 28-Aug-2025 23:08 by rmk") + (* ; "Edited 26-Aug-2025 23:29 by rmk") + (* ; "Edited 18-Aug-2025 09:12 by rmk") + (* ; "Edited 31-Jul-2025 10:14 by rmk") + (* ; "Edited 13-Jul-2025 11:44 by rmk") + (* ; "Edited 20-May-2025 15:00 by rmk") + (* ; "Edited 18-May-2025 23:31 by rmk") + (* ; "Edited 14-Jan-88 23:42 by FS") - (* ;; "Was FBBOX. The fields are NIL'ed out now because they became irrelevant when multiple charsets were introduced. They remain as a place-holder in the layout pending a recompile of all referring functions.") + (* ;; "The first case is simple: A DISPLAYFONTCOERCIONS substitution for one font for another. E.g. Use the information derived for HELVETICA 4 to construct the fontdescriptor for Helvetic 3. ") - (NIL SIGNEDWORD) (* ; "Was FBBOY") - (NIL SIGNEDWORD) (* ; "Was FBBDX") - (NIL SIGNEDWORD) (* ; "Was FBBDY") - (NIL POINTER) (* ; "Was \SFLKerns") - (NIL POINTER) (* ; "Was \SFRWidths") - (FONTDEVICESPEC POINTER) (* ; - "Holds the spec by which the font is known to the printing device, if coercion has been done") - (OTHERDEVICEFONTPROPS POINTER) (* ; - "For individual devices to hang special information") - (FONTSCALE POINTER) - (\SFFACECODE BITS 8) - (FONTAVGCHARWIDTH WORD) (* ; - "Set in FONTCREATE, used to fix up the linelength when DSPFONT is called") - (FONTCHARENCODING POINTER) (* ; "Was FONTIMAGEWIDTHS: This is the image width, as opposed to the advanced width; initial hack for accents, kerning. Fields is referenced by FONTCREATE.") - (FONTCHARSETVECTOR POINTER) (* ; "A 257-pointer block, with one pointer per 'character set' --each group of 256 character codes. Each pointer is either NIL if there's no info for that charset, or is a CHARSETINFO, containing widths, char bitmap, etc for the characters in that charset. The last cell if not NIL is the %"slug%" charsetinfo that can be shared as the dummy entry for otherwise NIL charsets") - (FONTHASLEFTKERNS FLAG) (* ; - "T if at least one character set has an entry for left kerns") - (FONTEXTRAFIELD2 POINTER)) - FONTCHARSETVECTOR _ (\CREATEFONTCHARSETVECTOR) - (INIT (DEFPRINT 'FONTDESCRIPTOR (FUNCTION FONTDESCRIPTOR.DEFPRINT)))) + (* ;; "After that, it uses requested source files and/or DISPLAYCHARCOERCIONS to produce and complete the CHARSETINFO:") -(RECORD FONTFACE (WEIGHT SLOPE EXPANSION) - [ACCESSFNS ((COLOR (CDDDR DATUM) - (RPLACD (CDDR DATUM) - NEWVALUE)) - (BACKCOLOR [COND - ((CDDDR DATUM) - (CAR (CDDDR DATUM] - (PROGN [COND - ((NULL (CDDDR DATUM)) - (RPLACD (CDDR DATUM) - (LIST NIL NIL] - (RPLACA (CDDDR DATUM) - NEWVALUE))) - (FORECOLOR [COND - ((CDDDR DATUM) - (CADR (CDDDR DATUM] - (PROGN [COND - ((NULL (CDDDR DATUM)) - (RPLACD (CDDR DATUM) - (LIST NIL NIL] - (RPLACA (CDR (CDDDR DATUM)) - NEWVALUE] - WEIGHT _ 'MEDIUM SLOPE _ 'REGULAR EXPANSION _ 'REGULAR (TYPE? LISTP)) + (* ;; "This first tries to find a source file that exactly matches the characteristics of the requested charset. The charset is %"completed%" by filling in any missing characters from further down the coercion chain. Thus, the missing characters for e.g. TERMINAL 357 will be filled in from MODERN357, and then perhaps CLASSIC357.") -(DATATYPE CHARSETINFO (WIDTHS (* ; "The advance-width of each character, an array indexed by charcode. Usually the same as the imagewidth, but can differ for accents, kerns kerns. This is what should be used for stringwidth calculations.") - (CSSLUGP FLAG) (* ; "True if this is a slug charset") - (CSCOMPLETEP FLAG) (* ; - "True if there is no further data to fill in any remaining slug-characters in a non-slug charset") - OFFSETS (* ; - "Offset of each character into the image bitmap; X value of left edge") - IMAGEWIDTHS (* ; "imagewidths is not automagically allocated since it is not always needed. But at least some times the IMAGEWIDTHS and WIDTHS vectors are EQ in this case.") - CHARSETBITMAP (* ; - "Bitmap containing the character images, indexed by OFFSETS") - YWIDTHS - (CHARSETASCENT WORD) (* ; - "Max ascent for all characters in this CHARSET") - (CHARSETDESCENT WORD) (* ; - "Max descent for all characters in this CHARSET") - LEFTKERN CSINFOPROPS (* ; "Alist of extra properties")) - WIDTHS _ (\CREATECSINFOELEMENT) - OFFSETS _ (\CREATECSINFOELEMENT)) + (* ;; "If an exact match file cannot be found for a requested rotation, the rotation 0 charset is obtained and rotated.") + + (* ;; "If a non-existent Kanji or Chinese charset is requested for a non-MRR face, the MRR charset is used unmodified. We don't try to boldify or italicize Kanji or Chinese.") + + (* ;; "When all coercions have been exhausted and FACE is bold and/or italic, the search process repeats with bold/italice changed to Regular, and algorithmic transformations are applied to the first result, if any.") + + (* ;; "If all else fails, it looks for the next charset in the coercion list, and fills that in with further coercions for missing characters.") + + (* ;; "") + + (LET ((ROTATION (fetch (FONTSPEC FSROTATION) of FONTSPEC)) + (FACE (fetch (FONTSPEC FSFACE) of FONTSPEC)) + CSINFO) + + (* ;; + "If no COERCIONS, skip that first \COERCECHARSET call--easier debugging of the other cases.") + + (SETQ CSINFO (if (AND (FONTDEVICEPROP 'DISPLAY 'FONTCOERCIONS) + (CADR (\COERCECHARSET FONTSPEC CHARSET))) + elseif [SETQ CSINFO (OR (\READCHARSET FONTSPEC CHARSET FONT) + (CADR (\COERCECHARSET FONTSPEC CHARSET NIL + 'CHARCOERCIONS] + then + (* ;; "This completes CSINFO with glyphs for all codes from possibly different sources, even if just asking for a single THINCODE. We never return an incomplete CSINFO.") + + (COMPLETE.CHARSET CSINFO FONTSPEC CHARSET FONT) + elseif (NEQ ROTATION 0) + then (CL:UNLESS (MEMB ROTATION '(90 270)) + (ERROR "Only implemented rotations are 0, 90 and 270." ROTATION + )) + (CL:WHEN (SETQ CSINFO (\CREATECHARSET.DISPLAY (create FONTSPEC + using FONTSPEC + FSROTATION _ 0) + FONT CHARSET)) + (\SFROTATECSINFO CSINFO ROTATION)) + elseif (OR (KANJICHARSETP CHARSET) + (CHINESECHARSETP CHARSET)) + then (CL:UNLESS (EQUAL FACE '(MEDIUM REGULAR REGULAR)) + (\CREATECHARSET.DISPLAY (create FONTSPEC + using FONTSPEC FSFACE _ + '(MEDIUM REGULAR REGULAR)) + FONT CHARSET)) + elseif (EQ 'BOLD (fetch (FONTFACE WEIGHT) of FACE)) + then (MAKEBOLD.CHARSET FONTSPEC CHARSET FONT) + elseif (EQ 'ITALIC (fetch (FONTFACE SLOPE) of FACE)) + then (MAKEITALIC.CHARSET FONTSPEC CHARSET FONT) + elseif (EQ 'COMPRESSED (fetch (FONTFACE EXPANSION) of FACE)) + then (\CREATECHARSET.DISPLAY (create FONTSPEC + using FONTSPEC FSFACE _ + '(MEDIUM REGULAR REGULAR)) + FONT CHARSET))) + CSINFO]) + +(\FONTEXISTS?.DISPLAY + [LAMBDA (FONTSPEC) (* ; "Edited 28-Aug-2025 22:12 by rmk") + (* ; "Edited 25-Aug-2025 15:04 by rmk") + (* ; "Edited 17-Aug-2025 09:56 by rmk") + (* ; "Edited 8-Aug-2025 10:03 by rmk") + (* ; "Edited 5-Aug-2025 17:55 by rmk") + (* ; "Edited 29-Jul-2025 22:56 by rmk") + (* ; "Edited 25-Jul-2025 21:38 by rmk") + (* ; "Edited 13-Jul-2025 11:45 by rmk") + (* ; "Edited 22-Jun-2025 08:53 by rmk") + + (* ;; "Order doesn't matter here, only need one to work") + + (LET ((FACE (fetch (FONTSPEC FSFACE) of FONTSPEC))) + (OR [AND (EQ 'BOLD (fetch (FONTFACE WEIGHT) of FACE)) + (FONTEXISTS? (create FONTSPEC using FONTSPEC FSFACE _ + (create FONTFACE using FACE WEIGHT _ + 'MEDIUM] + [AND (EQ 'ITALIC (fetch (FONTFACE SLOPE) of FACE)) + (FONTEXISTS? (create FONTSPEC using FONTSPEC FSFACE _ + (create FONTFACE using FACE SLOPE _ + 'REGULAR] + [AND (EQ 'COMPRESSED (fetch (FONTFACE EXPANSION) of FACE)) + (FONTEXISTS? (create FONTSPEC using FONTSPEC FSFACE _ + (create FONTFACE using FACE EXPANSION _ + 'REGULAR] + (for FS VAL in [COERCEFONTSPEC FONTSPEC (APPEND (FONTDEVICEPROP 'DISPLAY 'FONTCOERCIONS) + (FONTDEVICEPROP 'DISPLAY 'CHARCOERCIONS] + when (SETQ VAL (FONTEXISTS? FS)) do (RETURN VAL]) ) +(DEFINEQ -(/DECLAREDATATYPE 'FONTCLASS '(BYTE POINTER POINTER POINTER POINTER POINTER) - '((FONTCLASS 0 (BITS . 7)) - (FONTCLASS 2 POINTER) - (FONTCLASS 4 POINTER) - (FONTCLASS 6 POINTER) - (FONTCLASS 8 POINTER) - (FONTCLASS 10 POINTER)) - '12) +(STRIKEFONT.FILEP + [LAMBDA (FILE) (* ; "Edited 15-May-2025 17:47 by rmk") + + (* ;; "If high bit of type is on, then must be strike. If 2nd bit is on, must be strike-index, and we punt. We don't care about the 3rd bit") + + (* ;; "first word has high bits (onebit index fixed). Onebit means 'new-style font' , index is 0 for simple strike, 1 for index, and fixed is if all chars have max width. Lisp doesn't care about 'fixed'") + + (RESETLST + (CL:UNLESS (OPENP FILE 'INPUT) + [RESETSAVE (SETQ FILE (OPENSTREAM FILE 'INPUT 'OLD)) + `(PROGN (CLOSEF? OLDVALUE]) + (CL:WHEN [MEMB (\WIN FILE) + (CONSTANT (LIST (LLSH 1 15) + (LOGOR (LLSH 1 15) + (LLSH 1 13] + T))]) + +(STRIKEFONT.GETCHARSET + [LAMBDA (STRM) (* ; "Edited 3-Aug-2025 22:27 by rmk") + (* ; "Edited 1-Aug-2025 23:50 by rmk") + (* ; "Edited 14-Jul-2025 19:52 by rmk") + (* ; "Edited 9-Jun-2025 14:22 by rmk") + (* ; "Edited 12-Jul-2022 09:19 by rmk") + (* ; "Edited 4-Dec-92 12:11 by jds") + + (* ;; "STRM has already been determined to be a vanilla strike-format file holding only the desired charset.") + (* ; "returns a charsetinfo") + (RESETLST + (CL:UNLESS (\GETSTREAM STRM 'INPUT T) + [RESETSAVE (SETQ STRM (OPENSTREAM STRM 'INPUT 'OLD)) + `(PROGN (CLOSEF? OLDVALUE]) + (SETFILEPTR STRM 0) + (CL:UNLESS (STRIKEFONT.FILEP STRM) + (ERROR "Not a STRIKE font file" STRM)) + (CL:UNLESS (EQ 2 (GETFILEPTR STRM)) + (SETFILEPTR STRM 2)) + (LET (CSINFO NUMBCODES RW BITMAP OFFSETS FIRSTCHAR LASTCHAR HEIGHT WIDTHS) + (SETQ CSINFO (create CHARSETINFO)) + (SETQ FIRSTCHAR (\WIN STRM)) (* ; "minimum ascii code") + (SETQ LASTCHAR (\WIN STRM)) (* ; "maximum ascii code") + (\WIN STRM) (* ; + "MaxWidth which isn't used by anyone.") + (\WIN STRM) (* ; + "number of words in this StrikeBody") + (replace (CHARSETINFO CHARSETASCENT) of CSINFO with (\WIN STRM)) + (* ; + "ascent in scan lines (=FBBdy+FBBoy)") + (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with (\WIN STRM)) + (* ; "descent in scan-lines (=FBBoy)") + (\WIN STRM) (* ; + "offset in bits (<0 for kerning, else 0, =FBBox)") + (SETQ RW (\WIN STRM)) (* ; "raster width of bitmap") + (* ; "height of bitmap") + + (* ;; "JDS 12/4/92: Apparently, these fields can be signed values, if all chars, e.g., ride above the base line.") + + (SETQ HEIGHT (IPLUS (SIGNED (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) + 16) + (SIGNED (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO) + 16))) + (SETQ BITMAP (BITMAPCREATE (UNFOLD RW BITSPERWORD) + HEIGHT)) + (\BINS STRM (fetch BITMAPBASE of BITMAP) + 0 + (UNFOLD (ITIMES RW HEIGHT) + BYTESPERWORD)) (* ; "read bits into bitmap") + (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with BITMAP) + (SETQ NUMBCODES (IDIFFERENCE (ADD1 LASTCHAR) + FIRSTCHAR)) + (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + + (* ;; + "Initialize the offsets to 0, all but FIRSTCHAR to be replaced with the slug offset") + + (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET OFFSETS I 0)) + (for I from FIRSTCHAR as J from 1 to NUMBCODES do + (* ;; + "J starts at 1 because we know that the offset of J=0 is 0 ?") + + (\FSETOFFSET OFFSETS I (\WIN STRM))) + (for I (SLUGOFFSET _ (\WIN STRM)) from 0 to \MAXTHINCHAR + when (EQ 0 (\FGETOFFSET OFFSETS I)) unless (EQ I FIRSTCHAR) + do (\FSETOFFSET OFFSETS I SLUGOFFSET) finally (\FSETOFFSET OFFSETS SLUGCHARINDEX + SLUGOFFSET) + + (* ;; + "There's one more so that \FONTRESETCHARWIDTHS can get the slug width, otherwise not necessary") + + (\FSETOFFSET OFFSETS (ADD1 SLUGCHARINDEX) + (\WIN STRM))) + + (* ;; "Initialize the widths to 0") + + (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETWIDTH WIDTHS I 0)) + (\FONTRESETCHARWIDTHS CSINFO 0 SLUGCHARINDEX) + (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO WIDTHS) + of CSINFO)) + CSINFO))]) + +(WRITESTRIKEFONTFILE + [LAMBDA (FONT CHARSET FILE) (* ; "Edited 30-Aug-2025 23:21 by rmk") + (* ; "Edited 28-Aug-2025 15:09 by rmk") + (* ; "Edited 24-Aug-2025 11:39 by rmk") + (* ; "Edited 3-Aug-2025 22:33 by rmk") + (* ; "Edited 22-May-2025 09:53 by rmk") + (* ; "Edited 1-Feb-2025 12:27 by mth") + (* ; "Edited 12-Jul-2022 14:36 by rmk") + (* kbr%: "21-Oct-85 15:08") + (* ; + "Write strike FILE using info in FONT. ") + (CL:UNLESS (FONTP FONT) + (LISPERROR "ILLEGAL ARG" FONT)) + (CL:UNLESS CHARSET (SETQ CHARSET 0)) + (CL:UNLESS (AND (IGEQ CHARSET 0) + (ILEQ CHARSET \MAXCHARSET)) + (LISPERROR "ILLEGAL ARG" CHARSET)) + (LET (STREAM CSINFO FIRSTCHAR LASTCHAR WIDTHS MAXWIDTH LENGTH RASTERWIDTH SLUGOFFSET OFFSETS) + (SETQ CSINFO (\INSURECHARSETINFO FONT CHARSET)) + (CL:UNLESS CSINFO (ERROR "Couldn't find charset " CHARSET)) + (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + (SETQ SLUGOFFSET (\FGETOFFSET OFFSETS SLUGCHARINDEX)) -(DEFPRINT 'FONTCLASS (FUNCTION FONTCLASS.DEFPRINT)) + (* ;; "Find the first and last non-slug characters") -(/DECLAREDATATYPE 'FONTDESCRIPTOR - '(POINTER FLAG POINTER POINTER POINTER WORD WORD WORD WORD SIGNEDWORD SIGNEDWORD SIGNEDWORD - SIGNEDWORD POINTER POINTER POINTER POINTER POINTER (BITS 8) - WORD POINTER POINTER FLAG POINTER) - '((FONTDESCRIPTOR 0 POINTER) - (FONTDESCRIPTOR 0 (FLAGBITS . 0)) - (FONTDESCRIPTOR 2 POINTER) - (FONTDESCRIPTOR 4 POINTER) - (FONTDESCRIPTOR 6 POINTER) - (FONTDESCRIPTOR 8 (BITS . 15)) - (FONTDESCRIPTOR 9 (BITS . 15)) - (FONTDESCRIPTOR 10 (BITS . 15)) - (FONTDESCRIPTOR 11 (BITS . 15)) - (FONTDESCRIPTOR 12 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 13 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 14 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 15 (SIGNEDBITS . 15)) - (FONTDESCRIPTOR 16 POINTER) - (FONTDESCRIPTOR 18 POINTER) - (FONTDESCRIPTOR 20 POINTER) - (FONTDESCRIPTOR 22 POINTER) - (FONTDESCRIPTOR 24 POINTER) - (FONTDESCRIPTOR 26 (BITS . 7)) - (FONTDESCRIPTOR 27 (BITS . 15)) - (FONTDESCRIPTOR 28 POINTER) - (FONTDESCRIPTOR 30 POINTER) - (FONTDESCRIPTOR 30 (FLAGBITS . 0)) - (FONTDESCRIPTOR 32 POINTER)) - '34) + [SETQ FIRSTCHAR (for I from 0 to \MAXTHINCHAR thereis (NEQ SLUGOFFSET (\FGETOFFSET OFFSETS I + ] + [SETQ LASTCHAR (for I from \MAXTHINCHAR to 0 by -1 thereis (NEQ SLUGOFFSET (\FGETOFFSET + OFFSETS I] + [SETQ STREAM (OPENSTREAM FILE 'OUTPUT 'NEW '((TYPE BINARY] + (\WOUT STREAM 32768) (* ; "STRIKE HEADER. ") + (\WOUT STREAM FIRSTCHAR) + (\WOUT STREAM LASTCHAR) + (SETQ MAXWIDTH 0) + [for I from 0 to SLUGCHARINDEX do (SETQ MAXWIDTH (IMAX MAXWIDTH (\FGETWIDTH WIDTHS I] + (\WOUT STREAM MAXWIDTH) (* ; "STRIKE BODY. ") + (* ; "Length. ") + (SETQ RASTERWIDTH (fetch (BITMAP BITMAPRASTERWIDTH) of (fetch (CHARSETINFO CHARSETBITMAP) + of CSINFO))) + (SETQ LENGTH (IPLUS 8 (IDIFFERENCE LASTCHAR FIRSTCHAR) + (ITIMES (fetch (FONTDESCRIPTOR \SFHeight) of FONT) + RASTERWIDTH))) + (\WOUT STREAM LENGTH) (* ; + "Ascent, Descent, Xoffset (no longer used) and Rasterwidth. ") + (\WOUT STREAM (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) + (\WOUT STREAM (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) + (\WOUT STREAM 0) + (\WOUT STREAM RASTERWIDTH) (* ; "Bitmap. ") + [\BOUTS STREAM (fetch (BITMAP BITMAPBASE) of (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) + 0 + (ITIMES 2 RASTERWIDTH (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) + (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] + (* ; "Offsets. ") + [for I (OFFSET _ 0) from FIRSTCHAR to LASTCHAR first (\WOUT STREAM OFFSET) + (* ; "Offset of the first char") + do (CL:UNLESS (EQ SLUGOFFSET (\FGETOFFSET OFFSETS I)) + (* ; + "The slug isn't really here in the bitmap") + (ADD OFFSET (\FGETWIDTH WIDTHS I))) + (\WOUT STREAM OFFSET) finally (* ; + "Offset for the after-slug, for width") + (\WOUT STREAM (IPLUS OFFSET (\FGETWIDTH WIDTHS + SLUGCHARINDEX] + (CLOSEF STREAM]) -(DEFPRINT 'FONTDESCRIPTOR (FUNCTION FONTDESCRIPTOR.DEFPRINT)) +(STRIKECSINFO + [LAMBDA (CSINFO) (* ; "Edited 27-Apr-89 13:39 by atm") -(/DECLAREDATATYPE 'CHARSETINFO '(POINTER FLAG FLAG POINTER POINTER POINTER POINTER WORD WORD POINTER - POINTER) - '((CHARSETINFO 0 POINTER) - (CHARSETINFO 0 (FLAGBITS . 0)) - (CHARSETINFO 0 (FLAGBITS . 16)) - (CHARSETINFO 2 POINTER) - (CHARSETINFO 4 POINTER) - (CHARSETINFO 6 POINTER) - (CHARSETINFO 8 POINTER) - (CHARSETINFO 10 (BITS . 15)) - (CHARSETINFO 11 (BITS . 15)) - (CHARSETINFO 12 POINTER) - (CHARSETINFO 14 POINTER)) - '16) -(DECLARE%: EVAL@COMPILE + (* ;; "Returns a STRIKE type font descriptor (EQ WIDTHS IMAGEWIDTHS), cause we know how to write those guys out (they read quicker but display slower). If (EQ WIDTHS IMAGEWIDTHS), just return original.") -(PUTPROPS FONTASCENT MACRO ((FONTSPEC) - (ffetch \SFAscent of (FONTCREATE FONTSPEC)))) + (PROG (WIDTHS OFFSETS IMWIDTHS OLDBM BMWIDTH BMHEIGHT NEWBM NEWOFFSET NEWWIDTH OLDOFFSET + DUMMYOFFSET NEWOFFSETS) + (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (SETQ IMWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) + (if (EQ WIDTHS IMWIDTHS) + then (RETURN CSINFO)) + (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + (SETQ OLDBM (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) + (SETQ DUMMYOFFSET (\FGETOFFSET OFFSETS 256)) + (SETQ BMHEIGHT (BITMAPHEIGHT OLDBM)) + [SETQ BMWIDTH (for I from 0 to \MAXTHINCHAR + sum (if (IEQP DUMMYOFFSET (\FGETOFFSET OFFSETS I)) + then 0 + else (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) + (\FGETWIDTH WIDTHS I] -(PUTPROPS FONTDESCENT MACRO ((FONTSPEC) - (ffetch \SFDescent of (FONTCREATE FONTSPEC)))) + (* ;; "") -(PUTPROPS FONTHEIGHT MACRO ((FONTSPEC) - (ffetch \SFHeight of (FONTCREATE FONTSPEC)))) + (* ;; "Initialize new offsets vector") -(PUTPROPS \FGETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE) - (\GETBASE OFFSETSBLOCK CHAR8CODE))) + (* ;; "") -(PUTPROPS \FSETOFFSET DMACRO ((OFFSETSBLOCK CHAR8CODE OFFSET) - (\PUTBASE OFFSETSBLOCK CHAR8CODE OFFSET))) + (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) + (for I from 0 to (IPLUS \MAXTHINCHAR 2) do (\FSETOFFSET NEWOFFSETS I 0)) + (\FSETOFFSET NEWOFFSETS (ADD1 \MAXTHINCHAR) + BMWIDTH) -(PUTPROPS \FGETWIDTH DMACRO ((WIDTHSBLOCK CHAR8CODE) - (\GETBASE WIDTHSBLOCK CHAR8CODE))) + (* ;; "") -(PUTPROPS \FSETWIDTH DMACRO ((WIDTHSBLOCK CHAR8CODE VAL) - (\PUTBASE WIDTHSBLOCK CHAR8CODE VAL))) + (* ;; "Adjust bitmap with so width = imagewidth, fill offsets") -(PUTPROPS \FGETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE) - (\FGETWIDTH (ffetch (CHARSETINFO WIDTHS) of (\INSURECHARSETINFO - (\CHARSET CHARCODE) - FONTDESC)) - (\CHAR8CODE CHARCODE)))) + (* ;; "") -(PUTPROPS \FSETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE WIDTH) - (\FSETWIDTH (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO - (\CHARSET CHARCODE) - FONTDESC)) - (\CHAR8CODE CHARCODE) - WIDTH))) + (SETQ NEWBM (BITMAPCREATE BMWIDTH BMHEIGHT 1)) + (SETQ NEWOFFSET 0) + [for I from 0 to 255 + do (SETQ OLDOFFSET (\FGETOFFSET OFFSETS I)) + (if (IEQP DUMMYOFFSET OLDOFFSET) + then (\FSETOFFSET NEWOFFSETS I BMWIDTH) + else (\FSETOFFSET NEWOFFSETS I NEWOFFSET) + (SETQ NEWWIDTH (IMAX (\FGETIMAGEWIDTH IMWIDTHS I) + (\FGETWIDTH WIDTHS I))) + (BITBLT OLDBM OLDOFFSET 0 NEWBM NEWOFFSET 0 (\FGETWIDTH IMWIDTHS I) + BMHEIGHT + 'REPLACE) + (SETQ NEWOFFSET (IPLUS NEWOFFSET NEWWIDTH] -(PUTPROPS \FGETIMAGEWIDTH MACRO ((IMAGEWIDTHSBLOCK CHAR8CODE) - (\GETBASE IMAGEWIDTHSBLOCK CHAR8CODE))) + (* ;; "") -(PUTPROPS \FSETIMAGEWIDTH DMACRO ((WIDTHSBLOCK INDEX WIDTH) - (\PUTBASE WIDTHSBLOCK INDEX WIDTH))) + (* ;; "Make new CSInfo record withs IMAGEWIDTHS, WIDTHS the same") + + (* ;; "") + + (SETQ WIDTHS (COPYALL WIDTHS)) + [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH WIDTHS I + (IMAX (\FGETWIDTH WIDTHS I) + (\FGETIMAGEWIDTH IMWIDTHS I] + (RETURN (create CHARSETINFO + WIDTHS _ WIDTHS + OFFSETS _ NEWOFFSETS + IMAGEWIDTHS _ WIDTHS + CHARSETBITMAP _ NEWBM + YWIDTHS _ (fetch (CHARSETINFO YWIDTHS) of CSINFO) + CHARSETASCENT _ (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) + CHARSETDESCENT _ (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO]) ) -(DECLARE%: EVAL@COMPILE -(PUTPROPS \XGETCHARSETINFO MACRO ((FONTDESC CHARSET) - (* ;; - "Temporary until other callers of \GETCHARSETINFO are changes to \INSURECHARSETINFO") - (* ;; - "Fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. ") +(* ; "Bitmap faking") - (* ;; - "NOTE Current \GETCHARSETINFO takes the vector, not the font, as does current \SETCHARSETINFO") +(DEFINEQ - (\GETBASEPTR (ffetch FONTCHARSETVECTOR of FONTDESC) - (UNFOLD CHARSET 2)))) +(MAKEBOLD.CHARSET + [LAMBDA (FONTSPEC CHARSET FONT) (* ; "Edited 7-Sep-2025 12:02 by rmk") + (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 26-Aug-2025 22:35 by rmk") + (* ; "Edited 18-Aug-2025 09:08 by rmk") + (* ; "Edited 16-Aug-2025 12:53 by rmk") + (* ; "Edited 21-Jun-2025 09:10 by rmk") -(PUTPROPS \GETCHARSETINFO MACRO [(CHARSET FONTDESC) + (* ;; "BOLD is requested in FACE, so we look for an MRR or MIR that we can bold. If we find one, we presume that it is complete for all characters in its face. But there may be other fonts in the coercion chain that have true information about the bold face that we are after. We look for those before we try to adjust the characters in the non-bold CSINFO that we found.") - (* ;; "fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. If NIL, then creates the required charset, maybe a slug (with CSSLUGP T).") + (LET ([MFONT (FONTCREATE1 (create FONTSPEC using FONTSPEC FSFACE _ (create FONTFACE + using (fetch (FONTSPEC + FSFACE) + of FONTSPEC) + WEIGHT _ 'MEDIUM] + CSINFO) - (OR (\GETBASEPTR (ffetch FONTCHARSETVECTOR of FONTDESC) - (UNFOLD CHARSET 2)) - (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of FONTDESC) - CHARSET - (\CREATECHARSET CHARSET FONTDESC]) + (* ;; "MFONT is the corresponding Medium font.") -(PUTPROPS \INSURECHARSETINFO MACRO [(CHARSET FONTDESC) + (CL:WHEN (AND MFONT (SETQ CSINFO (\GETCHARSETINFO MFONT CHARSET)) + (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) + (replace (FONTDESCRIPTOR FONTCHARENCODING) of FONT with (fetch (FONTDESCRIPTOR + FONTCHARENCODING) + of MFONT)) + (replace (FONTDESCRIPTOR FONTTOMCCSFN) of FONT with (fetch (FONTDESCRIPTOR FONTTOMCCSFN) + of MFONT)) + (SETQ CSINFO (COPYALL CSINFO)) (* ; "CSINFO is now the CS to be bolded") + (\SETCHARSETINFO FONT CHARSET CSINFO) + (for CODE SOURCEFONT (CHARCOERCIONS _ (FONTDEVICEPROP FONT 'CHARCOERCIONS)) + from (FIRSTCHARSETCODE CHARSET) to (LASTCHARSETCODE CHARSET) + do (if (SLUGCHARP.DISPLAY CODE FONT) + then + (* ;; "The Medium font doesn't have a glyph for THINCODE. Look for a bold glyph for THINCODE lurking somewhere down the chain, copy it up. There may be different sources for different codes. We're starting from FONT and FONTSPEC, still hoping for BOLD.") - (* ;; "fetches the charsetinfo for charset CHARSET in fontdescriptor FONTDESC. If NIL, then creates the required charset, maybe a slug (with CSSLUGP T).") + (CL:WHEN (SETQ SOURCEFONT (CAR (\COERCECHARSET FONTSPEC CHARSET CODE))) + (\MOVEFONTCHAR (\MOVEFONTCHARS.SOURCEDATA CODE SOURCEFONT) + CODE FONT)) + else + (* ;; "There is Medium glyph, bold it") - (OR (\GETBASEPTR (ffetch FONTCHARSETVECTOR of FONTDESC) - (UNFOLD CHARSET 2)) - (\SETCHARSETINFO (ffetch FONTCHARSETVECTOR of FONTDESC) - CHARSET - (\CREATECHARSET CHARSET FONTDESC]) + (MAKEBOLD.CHAR CODE FONT))) + (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with T) + CSINFO)]) -(PUTPROPS \CREATECSINFOELEMENT MACRO (NIL (\ALLOCBLOCK (FOLDHI (IPLUS \MAXTHINCHAR 3) - WORDSPERCELL)))) +(MAKEBOLD.CHAR + [LAMBDA (CODE FONT) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 27-Aug-2025 23:55 by rmk") + (* ; "Edited 26-Aug-2025 22:36 by rmk") + (* ; "Edited 17-Jun-2025 08:22 by rmk") -(PUTPROPS \CREATEFONTCHARSETVECTOR MACRO (NIL + (* ;; "Replaces the bitmap for CODE in FONT with a bolder one: overlaps 2 bits to produce the bold effect. Could be iterated for bigger fonts, but eventually the open spaces would be closed up.") - (* ;; "Allocates a block for the character set records, including one extra slot to hold the common slug charsetinfo") + (CL:UNLESS (SLUGCHARP.DISPLAY CODE FONT) + (LET* [(THINCODE (\CHAR8CODE CODE)) + (CSINFO (\GETCHARSETINFO FONT (\CHARSET CODE))) + (OLDCHARBITMAP (\GETCHARBITMAP.CSINFO THINCODE CSINFO)) + (NEWCHARBITMAP (BITMAPCREATE (ADD1 (fetch BITMAPWIDTH of OLDCHARBITMAP)) + (fetch BITMAPHEIGHT of OLDCHARBITMAP))) + (CWIDTH (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) + THINCODE)) + (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) + (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO] - (\ALLOCBLOCK (IPLUS 2 \MAXCHARSET) - T))) + (* ;; + "Paint in a shifted copy 1 bit over. The new bitmap is 1 bit wider, to keep the margin.") -(PUTPROPS CHARSETPROP MACRO [ARGS (if (CDDR ARGS) - then `(PUTMULTI (fetch (CHARSETINFO CSINFOPROPS) - of ,(CAR ARGS)) - ,(CADR ARGS) - ,(CADDR ARGS)) - else `(GETMULTI (fetch (CHARSETINFO CSINFOPROPS) - of ,(CAR ARGS)) - ,(CADR ARGS]) -) -(DECLARE%: EVAL@COMPILE + (BITBLT OLDCHARBITMAP 0 0 NEWCHARBITMAP 0 0 CWIDTH HEIGHT 'INPUT 'REPLACE) + (BITBLT OLDCHARBITMAP 0 0 NEWCHARBITMAP 1 0 CWIDTH HEIGHT 'INPUT 'PAINT) + (\PUTCHARBITMAP.CSINFO THINCODE CSINFO NEWCHARBITMAP)))]) -(RPAQQ \MAXNSCHAR 65535) +(MAKEITALIC.CHARSET + [LAMBDA (FONTSPEC CHARSET FONT) (* ; "Edited 7-Sep-2025 12:03 by rmk") + (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 31-Aug-2025 14:36 by rmk") + (* ; "Edited 26-Aug-2025 22:35 by rmk") + (* ; "Edited 18-Aug-2025 09:10 by rmk") + (* ; "Edited 16-Aug-2025 12:53 by rmk") + (* ; "Edited 21-Jun-2025 09:10 by rmk") + (* ;; "ITALIC is requested, so we look for an MRR or MIR that we can italicize. If we find one, we presume that it is complete for all characters in its face. But there may be other fonts in the coercion chain that have true information about the italic face that we are after. We look for those before we try to adjust the characters in non-italic CSINFO that we found.") -(CONSTANTS (\MAXNSCHAR 65535)) -) + (LET ([RFONT (FONTCREATE1 (create FONTSPEC using FONTSPEC FSFACE _ (create FONTFACE + using (fetch (FONTSPEC + FSFACE) + of FONTSPEC) + SLOPE _ 'REGULAR] + CSINFO) -(* "END EXPORTED DEFINITIONS") + (* ;; "RFONT is the corresponding Regular font.") + (CL:WHEN (AND RFONT (SETQ CSINFO (\GETCHARSETINFO RFONT CHARSET)) + (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) + (replace (FONTDESCRIPTOR FONTCHARENCODING) of FONT with (fetch (FONTDESCRIPTOR + FONTCHARENCODING) + of RFONT)) + (replace (FONTDESCRIPTOR FONTTOMCCSFN) of FONT with (fetch (FONTDESCRIPTOR FONTTOMCCSFN) + of RFONT)) + (SETQ CSINFO (COPYALL CSINFO)) (* ; + "CSINFO is now the CS to be italicized") + (\SETCHARSETINFO FONT CHARSET CSINFO) + (for CODE SOURCEFONT (CHARCOERCIONS _ (FONTDEVICEPROP FONT 'CHARCOERCIONS)) + from (FIRSTCHARSETCODE CHARSET) to (LASTCHARSETCODE CHARSET) + do (if (SLUGCHARP.DISPLAY CODE FONT) + then + (* ;; "The regular font doesn't have a glyph for THINCODE. Look for an italic glyph for THINCODE lurking somewhere down the chain, copy it up. There may be different sources for different codes.") -(DECLARE%: EVAL@COMPILE + (CL:WHEN (SETQ SOURCEFONT (CAR (\COERCECHARSET FONTSPEC CHARSET CODE))) + (\MOVEFONTCHAR (\MOVEFONTCHARS.SOURCEDATA CODE SOURCEFONT) + CODE FONT)) + else + (* ;; "There is a Regular glyph, Italicize it.") -(PUTPROPS INDIRECTCHARSETP MACRO [(CSINFO FONT CHARSET) + (MAKEITALIC.CHAR CODE FONT))) + (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with T) + CSINFO)]) - (* ;; "An indirect points somewhere else") +(MAKEITALIC.CHAR + [LAMBDA (CODE FONT) (* ; "Edited 2-Sep-2025 22:59 by rmk") + (* ; "Edited 26-Aug-2025 22:36 by rmk") + (* ; "Edited 18-Jun-2025 14:12 by rmk") + (* ; "Edited 17-Jun-2025 09:54 by rmk") - (LET ([SOURCE (CL:UNLESS (fetch (CHARSETINFO CSSLUGP) of CSINFO) - (CHARSETPROP CSINFO 'SOURCE))] - (FONTSPEC (fetch (FONTDESCRIPTOR FONTDEVICESPEC) of FONT))) - (NOT (AND SOURCE (EQ (pop SOURCE) - (pop FONTSPEC)) - (EQ (pop SOURCE) - (pop FONTSPEC)) - (EQUAL (pop SOURCE) - (pop FONTSPEC)) - (EQ (pop SOURCE) - (pop FONTSPEC)) - (EQ (pop SOURCE) - (pop FONTSPEC)) - (EQ (pop SOURCE) - CHARSET]) - -(PUTPROPS MAKECSSOURCE MACRO ((FAMILY SIZE FACE ROTATION DEVICE CHARSET) - (* ; - "Corresponds to order of \READCHARSET arguments") + (* ;; "Replaces the bitmap for CODE in FONT with a slanted one: It shifts rows to the right as a function of their vertical position. ") + + (CL:UNLESS (SLUGCHARP.DISPLAY CODE FONT) + (LET* ((THINCODE (\CHAR8CODE CODE)) + (CSINFO (\GETCHARSETINFO FONT (\CHARSET CODE))) + (OLDBITMAP (\GETCHARBITMAP.CSINFO THINCODE CSINFO)) + (NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) + (fetch BITMAPHEIGHT of OLDBITMAP))) + (WIDTH (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO) + THINCODE)) + (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) + (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) + (HEIGHT (IPLUS ASCENT DESCENT))) + [for ROW XX XN YN YX from (IMINUS (IQUOTIENT (IPLUS DESCENT 3) + 4)) to (IQUOTIENT (IPLUS ASCENT 3) + 4) + do (SETQ XN (IMIN WIDTH (IMAX ROW 0))) + (SETQ XX (IMIN WIDTH (IMAX (IPLUS WIDTH ROW) + 0))) + [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES ROW 4] + [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (ITIMES (ADD1 ROW) + 4] + (CL:WHEN (AND (IGREATERP XX XN) + (IGREATERP YX YN)) + (BITBLT OLDBITMAP 0 YN NEWBITMAP XN YN (IDIFFERENCE XX XN) + (IDIFFERENCE YX YN) + 'INPUT + 'REPLACE))] + (\PUTCHARBITMAP.CSINFO THINCODE CSINFO NEWBITMAP)))]) - (* ;; - "If FAMILY is a font, the uses its properties, and SIZE is the charset.") +(\SFMAKEBOLD + [LAMBDA (CSINFO) (* ; "Edited 28-Aug-2025 15:10 by rmk") + (* ; "Edited 24-Aug-2025 11:41 by rmk") + (* ; "Edited 16-Jun-2025 23:22 by rmk") + (* gbn "25-Jul-85 04:52") + (LET ((OLDCHARBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) + (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + (HEIGHT (IPLUS (fetch (CHARSETINFO CHARSETASCENT) of CSINFO) + (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO))) + NEWCHARBITMAP OFFSET SLUGOFFSET SLUGWIDTH) + (SETQ NEWCHARBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDCHARBITMAP) + (fetch BITMAPHEIGHT of OLDCHARBITMAP))) + (SETQ SLUGOFFSET (\FGETOFFSET OFFSETS SLUGCHARINDEX)) + (SETQ SLUGWIDTH (\FGETWIDTH WIDTHS SLUGCHARINDEX)) + (for I from 0 to \MAXTHINCHAR unless (EQ SLUGOFFSET (SETQ OFFSET (\FGETOFFSET OFFSETS I))) + do (* ; + "overlap two blts to produce bold effect") + (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP OFFSET 0 (\FGETWIDTH WIDTHS I) + HEIGHT + 'INPUT + 'REPLACE) + (BITBLT OLDCHARBITMAP OFFSET 0 NEWCHARBITMAP (ADD1 OFFSET) + 0 + (SUB1 (\FGETWIDTH WIDTHS I)) + HEIGHT + 'INPUT + 'PAINT)) (* ; + "fill in the slug for the magic charcode") + (BITBLT OLDCHARBITMAP SLUGOFFSET 0 NEWCHARBITMAP SLUGOFFSET 0 SLUGWIDTH HEIGHT 'INPUT + 'REPLACE) + (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWCHARBITMAP]) - (CL:IF (type? FONTDESCRIPTOR FAMILY) - (APPEND (fetch (FONTDESCRIPTOR FONTDEVICESPEC) of FAMILY) - (CONS SIZE)) - (LIST FAMILY SIZE FACE ROTATION DEVICE CHARSET)))) -) +(\SFMAKEITALIC + [LAMBDA (CSINFO) (* ; "Edited 16-Jun-2025 23:20 by rmk") + (* gbn "18-Sep-85 17:57") + (LET ((WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + (ASCENT (fetch (CHARSETINFO CHARSETASCENT) of CSINFO)) + (DESCENT (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) + (OLDBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO)) + HEIGHT OFFSET NEWBITMAP WIDTH SLUGOFFSET SLUGWIDTH N M R XN XX YN YX) + (SETQ HEIGHT (IPLUS ASCENT DESCENT)) + (SETQ NEWBITMAP (BITMAPCREATE (fetch BITMAPWIDTH of OLDBITMAP) + (fetch BITMAPHEIGHT of OLDBITMAP))) + (SETQ SLUGOFFSET (\FGETOFFSET OFFSETS (ADD1 \MAXTHINCHAR))) + (SETQ SLUGWIDTH (\FGETWIDTH WIDTHS (ADD1 \MAXTHINCHAR))) + (SETQ N (IDIFFERENCE 0 (IQUOTIENT (IPLUS DESCENT 3) + 4))) + (SETQ M (IQUOTIENT (IPLUS ASCENT 3) + 4)) + [for I from 0 to \MAXTHINCHAR unless (EQ SLUGOFFSET (SETQ OFFSET (\FGETOFFSET OFFSETS I))) + do (SETQ WIDTH (\FGETWIDTH WIDTHS I)) + (for J from N to M do (SETQ R (IPLUS OFFSET WIDTH)) + (SETQ XN (IMIN R (IMAX (IPLUS OFFSET J) + 0))) + (SETQ XX (IMIN R (IMAX (IPLUS R J) + 0))) + [SETQ YN (IMAX 0 (IPLUS DESCENT (ITIMES J 4] + [SETQ YX (IMIN HEIGHT (IPLUS DESCENT (IPLUS (ITIMES J 4) + 4] + (CL:WHEN (AND (IGREATERP XX XN) + (IGREATERP YX YN)) + (BITBLT OLDBITMAP OFFSET YN NEWBITMAP XN YN (IDIFFERENCE + XX XN) + (IDIFFERENCE YX YN) + 'INPUT + 'REPLACE))] + (BITBLT OLDBITMAP SLUGOFFSET 0 NEWBITMAP SLUGOFFSET 0 SLUGWIDTH HEIGHT 'INPUT 'REPLACE) + (create CHARSETINFO using CSINFO CHARSETBITMAP _ NEWBITMAP]) ) (DEFINEQ -(\CREATEKERNELEMENT - [LAMBDA NIL (* ; "Edited 8-Jul-2025 22:33 by rmk") - (* ; "Edited 17-May-2025 09:36 by rmk") - - (* ;; "ARRAY not CL:MAKE-ARRAY for MAKEINIT.") - - (ARRAY (IPLUS \MAXTHINCHAR 3) - 'POINTER 0 0]) +(\SFMAKEROTATEDFONT + [LAMBDA (FONTDESC ROTATION) (* ; "Edited 30-Mar-87 20:35 by FS") -(\FSETLEFTKERN - [LAMBDA (CSINFO INDEX KERNVALUE) (* ; "Edited 8-Jul-2025 22:50 by rmk") - (* ; "Edited 17-May-2025 09:18 by rmk") - (CL:UNLESS (ARRAYP (ffetch (CHARSETINFO LEFTKERN) of CSINFO)) - (replace (CHARSETINFO LEFTKERN) of CSINFO with (\CREATEKERNELEMENT))) - (SETA (fetch (CHARSETINFO LEFTKERN) of CSINFO) - INDEX KERNVALUE]) + (* ;; "takes a fontdecriptor and rotates it.") -(\FGETLEFTKERN - [LAMBDA (FONT PREVCHARCODE CHARCODE) (* ; "Edited 8-Jul-2025 22:15 by rmk") - (* ; "Edited 22-May-2025 09:53 by rmk") - (* ; "Edited 18-May-2025 21:30 by rmk") - (* ; "Edited 1-May-2025 11:08 by rmk") - (* ; "Edited 19-Dec-2024 15:25 by rmk") + (* ;; "1/5/86 JDS. Masterscope claims nobody calls this. Let's find out....") - (* ;; "Returns the kern information for CHARCODE in FONT, given that it is an immediate successor of PREVCHARCODE. Returns 0 if no PREVCHARCODE/CHARCODE kerning is specified. For now, assume that the kerning information is sparse for characters within a character set, stored as a 2-level alist. ") + (HELP "ROTATED fonts need to be fixed for NS Chars & New FONTDESCRIPTOR fields") + (* (create FONTDESCRIPTOR using + FONTDESC (SETQ CHARACTERBITMAP + (\SFROTATEFONTCHARACTERS + (fetch (FONTDESCRIPTOR + CHARACTERBITMAP) of FONTDESC) + ROTATION)) (SETQ ROTATION ROTATION) + (SETQ \SFOffsets ( + \SFFIXOFFSETSAFTERROTATION FONTDESC + ROTATION)) (SETQ FONTCHARSETVECTOR + (\ALLOCBLOCK (ADD1 \MAXCHARSET) T)))) - (* ;; "If the kerning information for a character is already a FIXP, then it is an offset no matter what the preceding character might be. This appears to be the way at least AC font files are set up.") + (* ;; "If you uncomment out the code above, remove this comment and the NIL below") - (* ;; "ACFONTFILES STORE A SINGLE NUMBER. LOGIC OF CODES IS UNCLEAR") + NIL]) - (LET [(KERN (AND (fetch (FONTDESCRIPTOR FONTHASLEFTKERNS) of FONT) - (ELT (fetch (CHARSETINFO LEFTKERN) of (\INSURECHARSETINFO (\CHARSET PREVCHARCODE - ) - FONT)) - (\CHAR8CODE PREVCHARCODE] - (OR (FIXP KERN) - (FGETMULTI (LISTP KERN) - CHARCODE) - 0]) -) -(DEFINEQ +(\SFROTATECSINFO + [LAMBDA (CSINFO ROTATION) (* gbn "15-Sep-85 14:38") -(\CREATEFONT - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET) (* ; "Edited 24-Jul-2025 19:51 by rmk") - (* ; "Edited 20-May-2025 21:10 by rmk") + (* ;; "takes a CHARSETINFO and rotates it and produces a rotated equivalent one.") - (* ;; "Generic font creation. Uses fontcreate method from device, build a fontdescriptor but doesn't call SETFONTDESCRIPTOR to install it.") + (create CHARSETINFO using CSINFO CHARSETBITMAP _ (\SFROTATEFONTCHARACTERS + (fetch (CHARSETINFO CHARSETBITMAP) + of CSINFO) + ROTATION) + OFFSETS _ (\SFROTATECSINFOOFFSETS CSINFO ROTATION]) - (* ;; "\DEFAULTCHARSET is kind of foolish, since \AVGCHARWIDTH wants the width of A=0,101 and therefore forces charset 0. (A may be some random character in Symbol, Math, but...).") +(\SFROTATEFONTCHARACTERS + [LAMBDA (CHARBITMAP ROTATION) (* ; "Edited 22-Sep-87 10:38 by Snow") - (LET (FN FONT) - (CL:WHEN (AND [SETQ FN (CADR (ASSOC 'FONTCREATE (CDR (ASSOC DEVICE IMAGESTREAMTYPES] - (SETQ FONT (APPLY* FN FAMILY SIZE FACE ROTATION DEVICE CHARSET))) - (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT with (\AVGCHARWIDTH FONT)) - FONT)]) +(* ;;; "rotate a bitmap either 90 or 270 for fonts.") -(\CREATECHARSET - [LAMBDA (CHARSET FONT NOSLUG?) (* ; "Edited 22-Jul-2025 22:48 by rmk") - (* ; "Edited 9-Jul-2025 11:12 by rmk") - (* ; "Edited 15-Jun-2025 14:50 by rmk") - (* ; "Edited 13-Jun-2025 20:00 by rmk") - (* ; "Edited 10-Jun-2025 13:55 by rmk") - (* ; "Edited 7-Jun-2025 15:10 by rmk") - (* ; "Edited 18-May-2025 21:40 by rmk") - (* ; "Edited 16-May-2025 21:37 by rmk") - (* ; "Edited 12-Jul-2022 14:37 by rmk") - (* ; "Edited 8-May-93 23:42 by rmk:") - (* ; "Edited 4-Dec-92 11:43 by jds") + (CASE ROTATION + (0 CHARBITMAP) + (90 (ROTATE-BITMAP-LEFT CHARBITMAP)) + (180 (ROTATE-BITMAP (ROTATE-BITMAP CHARBITMAP))) + (270 (ROTATE-BITMAP CHARBITMAP)))]) - (* ;; "Creates and returns the CHARSETINFO for charset CHARSET in fontdesc FONT, installing it in fonts FONTCHARSETVECTOR") +(\SFROTATECSINFOOFFSETS + [LAMBDA (CSINFO ROTATION) (* ; "Edited 28-Aug-2025 15:10 by rmk") + (* ; "Edited 24-Aug-2025 11:42 by rmk") + (* gbn "15-Sep-85 14:36") (* ; - "NOSLUG? means don't create an empty (slug) csinfo if the charset is not found, just return NIL") - (CL:UNLESS (<= 0 CHARSET \MAXCHARSET) - (\ILLEGAL.ARG CHARSET)) - (LET [(CSINFO (if (fetch (FONTDESCRIPTOR FONTCOMPLETEP) of FONT) - then (\XGETCHARSETINFO FONT CHARSET) - else (APPLY [CADR (ASSOC 'CREATECHARSET (CDR (ASSOC (fetch (FONTDESCRIPTOR - FONTDEVICE) - of FONT) - IMAGESTREAMTYPES] - (APPEND (FONTPROP FONT 'DEVICESPEC) - (LIST CHARSET FONT NOSLUG?] - - (* ;; "Create a descriptor of info for that charset. If we got one, the subfunction may have ignored NOSLUG?. But if not, we store it in the vector so that we don't search later. But we don't return a slug: higher ups recognize NIL as a doesn't-exist error. ") - - (CL:WHEN CSINFO (\INSTALLCHARSETINFO FONT CSINFO CHARSET)) - CSINFO]) - -(\INSTALLCHARSETINFO - [LAMBDA (FONT CSINFO CHARSET) (* ; "Edited 25-May-2025 07:48 by rmk") - (* ; "Edited 23-May-2025 14:44 by rmk") - (* ; "Edited 12-Jul-2022 15:08 by rmk") - (replace \SFAscent of FONT with (IMAX (fetch \SFAscent of FONT) - (SIGNED (fetch CHARSETASCENT of CSINFO) - 16))) - (replace (FONTDESCRIPTOR \SFDescent) of FONT with (IMAX (fetch (FONTDESCRIPTOR \SFDescent) - of FONT) - (SIGNED (fetch (CHARSETINFO - CHARSETDESCENT) - of CSINFO) - 16))) + "adjusts offsets in case where rotation turned things around.") + (COND + ((EQ ROTATION 270) + (PROG ((OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) + (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (BITMAPHEIGHT (BITMAPWIDTH (fetch (CHARSETINFO CHARSETBITMAP) of CSINFO))) + NEWOFFSETS) + (SETQ NEWOFFSETS (\CREATECSINFOELEMENT)) + [for CHARCODE from 0 to \MAXTHINCHAR do (\FSETOFFSET NEWOFFSETS CHARCODE + (IDIFFERENCE BITMAPHEIGHT + (IPLUS (\FGETOFFSET OFFSETS + CHARCODE) + (\FGETWIDTH WIDTHS + CHARCODE] (* ; - "jtm: height = ascent + descent, not (IMAX fontHeight charSetHeight)") - (replace (FONTDESCRIPTOR \SFHeight) of FONT with (IPLUS (fetch (FONTDESCRIPTOR \SFAscent) - of FONT) - (ffetch (FONTDESCRIPTOR \SFDescent) - of FONT))) - (\SETCHARSETINFO (fetch (FONTDESCRIPTOR FONTCHARSETVECTOR) of FONT) - CHARSET CSINFO) - - (* ;; "\AVGCHARWIDTH has to be confused after the CSINFO is stuck in.") - - (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT with (\AVGCHARWIDTH FONT)) - (\INSTALLCHARSETINFO.CHARENCODING FONT CSINFO CHARSET) - CSINFO]) + "may be some problem with dummy character representation.") + (RETURN NEWOFFSETS))) + (T (fetch (CHARSETINFO OFFSETS) of CSINFO]) +) +(DEFINEQ -(\INSTALLCHARSETINFO.CHARENCODING - [LAMBDA (FONT CSINFO CHARSET) (* ; "Edited 12-Jul-2025 10:57 by rmk") - (* ; "Edited 9-Jul-2025 09:38 by rmk") - (* ; "Edited 6-Jul-2025 21:46 by rmk") - (* ; "Edited 25-May-2025 23:05 by rmk") - (* ; "Edited 24-May-2025 21:42 by rmk") +(\SFMAKECOLOR + [LAMBDA (BWCSINFO BACKCOLOR FORECOLOR BITSPERPIXEL) (* kbr%: " 6-Feb-86 18:17") - (* ;; "The font charencoding is its charset 0 encoding. All higher charsets are MCCS.") + (* ;; "makes a csinfo that has a character bitmap that is colorized.") - (CL:WHEN (AND (EQ CHARSET 0) - (NOT (fetch (CHARSETINFO CSSLUGP) of CSINFO))) - (replace (FONTDESCRIPTOR FONTCHARENCODING) of FONT with (CHARSETPROP CSINFO 'CSCHARENCODING))) - ]) + (PROG (CHARACTERBITMAP COLORCSINFO) + [COND + ((IMAGESTREAMP BITSPERPIXEL) + (OR BACKCOLOR (SETQ BACKCOLOR (DSPBACKCOLOR NIL BITSPERPIXEL))) + (OR FORECOLOR (SETQ FORECOLOR (DSPCOLOR NIL BITSPERPIXEL))) + (SETQ BITSPERPIXEL (IMAGESTREAMTYPE BITSPERPIXEL] + [SETQ BITSPERPIXEL (COND + ((NUMBERP BITSPERPIXEL) + BITSPERPIXEL) + (T (\DISPLAYSTREAMTYPEBPP BITSPERPIXEL] + (SETQ BACKCOLOR (COLORNUMBERP BACKCOLOR BITSPERPIXEL)) + (SETQ FORECOLOR (COLORNUMBERP FORECOLOR BITSPERPIXEL)) + (SETQ CHARACTERBITMAP (COLORIZEBITMAP (fetch (CHARSETINFO CHARSETBITMAP) of + BWCSINFO + ) + BACKCOLOR FORECOLOR BITSPERPIXEL)) + (SETQ COLORCSINFO (create CHARSETINFO using BWCSINFO CHARSETBITMAP _ + CHARACTERBITMAP)) + (RETURN COLORCSINFO]) ) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY -(GLOBALVARS DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS DISPLAYGLYPHCOERCIONS DISPLAYFONTCOERCIONS) +(GLOBALVARS DISPLAYFONTDIRECTORIES DISPLAYFONTEXTENSIONS DISPLAYCHARCOERCIONS DISPLAYFONTCOERCIONS + DISPLAYCHARSETFNS) ) (* "END EXPORTED DEFINITIONS") +(DECLARE%: DONTEVAL@LOAD DOCOPY +(RPAQ? DISPLAYFONTDIRECTORIES NIL) -(* ;; -"Removed ((CLASSIC 36) (CLASSIC 24)) so that TIMESROMAN 36 BOLD boldifies rather than coercing to CLASSIC 24 BOLD." -) +(ADDTOVAR DISPLAYCHARSETFNS (STRIKE STRIKEFONT.FILEP STRIKEFONT.GETCHARSET)) +(ADDTOVAR DISPLAYFONTEXTENSIONS MEDLEYDISPLAYFONT DISPLAYFONT) +) + (RPAQ? DISPLAYFONTCOERCIONS - '(((HELVETICA 1) - (HELVETICA 4)) - ((HELVETICA 2) + '(((HELVETICA (<= * 2)) (HELVETICA 4)) - ((MODERN 60) - (MODERN 48)) - ((MODERN 96) - (MODERN 72)) - ((MODERN 120) - (MODERN 72)) + ((MODERN (<= 15 * 16)) + (* 14)) + ((MODERN (<= 17 * 21)) + (* 18)) + ((MODERN (<= 22 * 28)) + (* 24)) + ((MODERN (<= 29 * 33)) + (* 30)) + ((MODERN (<= 34 * 40)) + (* 36)) + ((MODERN (<= 41 * 65)) + (* 48)) + ((MODERN (<= 66 *)) + (* 72)) ((PALATINO 9) (PALATINO 12)) - ((PALATINO 8) + ((PALATINO (<= * 8)) (PALATINO 10)) - ((PALATINO 6) - (PALATINO 10)) - ((TITAN 6) + ((TITAN (<= * 9)) (TITAN 10)) - ((TITAN 9 (TITAN 10))) - ((LPT) - (AMTEX)))) - -(RPAQ? DISPLAYGLYPHCOERCIONS '(((GACHA) - (TERMINAL)) - ((MODERN) - (CLASSIC)) - ((TIMESROMAN) - (CLASSIC)) - ((HELVETICA) - (MODERN)) - ((TERMINAL) - (MODERN)))) + (LPT AMTEX))) + +(RPAQ? DISPLAYCHARCOERCIONS + '((GACHA TERMINAL) + (MODERN CLASSIC) + (TIMESROMAN CLASSIC) + (HELVETICA MODERN) + (TERMINAL MODERN) + (HIPPO CLASSIC) + (CYRILLIC CLASSIC) + (MATH CLASSIC) + (SIGMA MODERN) + (SYMBOL MODERN) + (TITAN CLASSIC) + (OPTIMA MODERN) + (BOLDPS CLASSIC) + (PCTERMINAL) + (TITANLEGAL CLASSIC))) + +(RPAQ? \DEFAULTCHARSET 0) + + + +(* ;; "") + + + + +(* ;; "Defunct coercions? Mapping for DOS filenames, Adobe equivalences") + (RPAQ? ADOBEDISPLAYFONTCOERCIONS '(((HELVETICABLACK 16) @@ -3883,13 +4548,6 @@ ((HELVETICA 24) (ADOBEHELVETICA 24)))) -(RPAQ? \DEFAULTCHARSET 0) - - - -(* ; "MAPPING FOR DOS FILENAMES ") - - (RPAQ? *DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) (HELVETICA . HV) @@ -3908,83 +4566,6 @@ (MATH . MA) (OLDENGLISH . OE) (SYMBOL . SY))) -(DEFINEQ - -(\FONTRESETCHARWIDTHS - [LAMBDA (CSINFO FIRSTCHAR LASTCHAR) (* AJB " 6-Dec-85 14:42") - (* ; - "sets the widths array from the offsets array") - (PROG ((mincharcode FIRSTCHAR) - (maxcharcode LASTCHAR) - (offsets (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (widths (fetch (CHARSETINFO WIDTHS) of CSINFO)) - left right charoffset dummycharoffset dummycharwidth) - (SETQ dummycharoffset (\FGETOFFSET offsets (ADD1 maxcharcode))) - (SETQ dummycharwidth (IDIFFERENCE (\FGETOFFSET offsets (IPLUS maxcharcode 2)) - dummycharoffset)) - [for charcode from 0 to \MAXCHAR - do (COND - ((OR (ILESSP charcode mincharcode) - (IGREATERP charcode maxcharcode)) - (\FSETOFFSET offsets charcode dummycharoffset) - (\FSETWIDTH widths charcode dummycharwidth)) - (T (SETQ left (\FGETWIDTH offsets charcode)) - (SETQ right (\FGETWIDTH offsets (ADD1 charcode))) - (COND - ((EQ left right) - (\FSETOFFSET offsets charcode dummycharoffset) - (\FSETWIDTH widths charcode dummycharwidth)) - (T (\FSETWIDTH widths charcode (IDIFFERENCE right left] - (\FSETWIDTH widths (ADD1 \MAXCHAR) - dummycharwidth) - (\FSETOFFSET offsets (ADD1 \MAXCHAR) - dummycharoffset]) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS DISPLAYCHARSETFNS) -) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(RPAQ? DISPLAYFONTDIRECTORIES NIL) - - -(ADDTOVAR DISPLAYCHARSETFNS (STRIKE STRIKEFONT.FILEP STRIKEFONT.GETCHARSET)) -) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(ADDTOVAR DISPLAYFONTEXTENSIONS MEDLEYDISPLAYFONT DISPLAYFONT) -) -(DECLARE%: EVAL@COMPILE DONTCOPY -(DECLARE%: EVAL@COMPILE - -(RPAQQ MAXCODE 255) - -(RPAQQ DUMMYINDEX 256) - - -(CONSTANTS (MAXCODE 255) - (DUMMYINDEX 256)) -) -) -(DECLARE%: EVAL@COMPILE - -(PUTPROPS \FGETCHARIMAGEWIDTH MACRO (OPENLAMBDA (FONT CHARCODE) - (\FGETWIDTH (ffetch (CHARSETINFO IMAGEWIDTHS) - of (\INSURECHARSETINFO (\CHARSET CHARCODE) - FONT)) - (\CHAR8CODE CHARCODE)))) - -(PUTPROPS \SETCHARSETINFO MACRO ((CHARSETVECTOR CHARSET CSINFO) - (\RPLPTR CHARSETVECTOR (UNFOLD CHARSET 2) - CSINFO))) -) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(LOCALVARS . T) -) - -(PUTPROPS FONT FILETYPE :FAKE-COMPILE-FILE) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) @@ -3994,41 +4575,43 @@ (ADDTOVAR LAMA FONTCOPY) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (11262 20708 (CHARWIDTH 11272 . 12057) (CHARWIDTHY 12059 . 13532) (STRINGWIDTH 13534 . -14627) (\CHARWIDTH.DISPLAY 14629 . 15042) (\STRINGWIDTH.DISPLAY 15044 . 15468) (\STRINGWIDTH.GENERIC -15470 . 20706)) (20709 27229 (DEFAULTFONT 20719 . 22004) (FONTCLASS 22006 . 24168) (FONTCLASSUNPARSE -24170 . 25069) (FONTCLASSCOMPONENT 25071 . 25659) (SETFONTCLASSCOMPONENT 25661 . 26103) ( -GETFONTCLASSCOMPONENT 26105 . 27227)) (28959 53120 (FONTCREATE 28969 . 31552) (FONTCREATE1 31554 . -33547) (FONTCREATE.SLUGFD 33549 . 35165) (\FONT.CHECKARGS 35167 . 41194) (\FONT.CHECKARGS1 41196 . -45719) (\FONTCREATE1.NOFN 45721 . 45935) (FONTFILEP 45937 . 46716) (\READCHARSET 46718 . 50970) ( -\COERCEFONTSPEC 50972 . 53118)) (53121 54300 (\COERCEFONTDESC 53131 . 54298)) (54951 60242 ( -COMPLETE.FONT 54961 . 56942) (COMPLETEFONTP 56944 . 57459) (COMPLETE.CHARSET 57461 . 59628) ( -PRUNEFONTSLUGS 59630 . 60240)) (60281 67749 (FONTASCENT 60291 . 60675) (FONTDESCENT 60677 . 61162) ( -FONTHEIGHT 61164 . 61566) (FONTPROP 61568 . 67026) (\AVGCHARWIDTH 67028 . 67747)) (67796 68445 ( -EDITCHAR 67806 . 68443)) (68491 80057 (GETCHARBITMAP 68501 . 69323) (PUTCHARBITMAP 69325 . 71402) ( -\GETCHARBITMAP.CSINFO 71404 . 73311) (\PUTCHARBITMAP.CSINFO 73313 . 80055)) (80058 93233 ( -MOVECHARBITMAP 80068 . 81962) (MOVEFONTCHARS 81964 . 87336) (\MOVEFONTCHAR 87338 . 90845) ( -SLUGCHARP.DISPLAY 90847 . 91745) (\GETCHARINFO 91747 . 93231)) (94162 113415 (FONTFILES 94172 . 95641) - (\FINDFONTFILE 95643 . 97360) (\FONTFILENAMES 97362 . 98236) (\FONTFILENAME 98238 . 102221) ( -\FONTFILENAME.OLD 102223 . 105172) (\FONTFILENAME.NEW 105174 . 107431) (\FONTINFOFROMFILENAME 107433 - . 111134) (\FONTINFOFROMFILENAME.OLD 111136 . 113413)) (113682 148361 (FONTCOPY 113692 . 118755) ( -FONTP 118757 . 119056) (FONTUNPARSE 119058 . 121622) (SETFONTDESCRIPTOR 121624 . 122870) ( -\STREAMCHARWIDTH 122872 . 127036) (\UNITWIDTHSVECTOR 127038 . 127401) (\COERCECHARSET 127403 . 128857) - (\BUILDSLUGCSINFO 128859 . 131615) (\FONTSYMBOL 131617 . 132267) (\DEVICESYMBOL 132269 . 133138) ( -\FONTFACE 133140 . 140330) (\FONTFACE.COLOR 140332 . 147252) (SETFONTCHARENCODING 147254 . 148359)) ( -148362 163750 (FONTSAVAILABLE 148372 . 150317) (FONTEXISTS? 150319 . 154810) (\FONTSAVAILABLE.INCORE -154812 . 156360) (\SEARCHFONTFILES 156362 . 159390) (FLUSHFONTSINCORE 159392 . 160540) (MATCHFONTFACE -160542 . 161357) (FINDFONTFILES 161359 . 163748)) (163843 172559 (\CREATEDISPLAYFONT 163853 . 165449) -(\CREATECHARSET.DISPLAY 165451 . 171385) (\FONTEXISTS?.DISPLAY 171387 . 172557)) (172560 185761 ( -STRIKEFONT.FILEP 172570 . 173458) (STRIKEFONT.GETCHARSET 173460 . 178295) (WRITESTRIKEFONTFILE 178297 - . 182301) (STRIKECSINFO 182303 . 185759)) (185792 197502 (MAKEBOLD.CHARSET 185802 . 187633) ( -MAKEBOLD.CHAR 187635 . 188965) (MAKEITALIC.CHARSET 188967 . 190804) (MAKEITALIC.CHAR 190806 . 192839) -(\SFMAKEBOLD 192841 . 194847) (\SFMAKEITALIC 194849 . 197500)) (197503 201208 (\SFMAKEROTATEDFONT -197513 . 198914) (\SFROTATECSINFO 198916 . 199553) (\SFROTATEFONTCHARACTERS 199555 . 199935) ( -\SFROTATECSINFOOFFSETS 199937 . 201206)) (201209 202590 (\SFMAKECOLOR 201219 . 202588)) (202591 204658 - (FONTDESCRIPTOR.DEFPRINT 202601 . 204180) (FONTCLASS.DEFPRINT 204182 . 204656)) (225140 227684 ( -\CREATEKERNELEMENT 225150 . 225508) (\FSETLEFTKERN 225510 . 226001) (\FGETLEFTKERN 226003 . 227682)) ( -227685 234183 (\CREATEFONT 227695 . 228604) (\CREATECHARSET 228606 . 231242) (\INSTALLCHARSETINFO -231244 . 233270) (\INSTALLCHARSETINFO.CHARENCODING 233272 . 234181)) (236577 238329 ( -\FONTRESETCHARWIDTHS 236587 . 238327))))) + (FILEMAP (NIL (11678 21391 (CHARWIDTH 11688 . 12473) (CHARWIDTHY 12475 . 13992) (STRINGWIDTH 13994 . +15087) (\CHARWIDTH.DISPLAY 15089 . 15502) (\STRINGWIDTH.DISPLAY 15504 . 15928) (\STRINGWIDTH.GENERIC +15930 . 21389)) (21392 27912 (DEFAULTFONT 21402 . 22687) (FONTCLASS 22689 . 24851) (FONTCLASSUNPARSE +24853 . 25752) (FONTCLASSCOMPONENT 25754 . 26342) (SETFONTCLASSCOMPONENT 26344 . 26786) ( +GETFONTCLASSCOMPONENT 26788 . 27910)) (29510 53778 (FONTCREATE 29520 . 32765) (FONTCREATE1 32767 . +35269) (FONTCREATE.SLUGFD 35271 . 36753) (\FONT.CHECKARGS 36755 . 43345) (\FONT.CHECKARGS1 43347 . +47870) (\FONTCREATE1.NOFN 47872 . 48086) (FONTFILEP 48088 . 48976) (\READCHARSET 48978 . 53776)) ( +53779 60696 (\FONT.CHECKARGS 53789 . 60379) (\CHARSET.CHECK 60381 . 60694)) (60697 63603 ( +COERCEFONTSPEC 60707 . 63601)) (65673 66463 (MAKEFONTSPEC 65683 . 66461)) (66464 73129 (COMPLETE.FONT +66474 . 68888) (COMPLETEFONTP 68890 . 69513) (COMPLETE.CHARSET 69515 . 72200) (PRUNESLUGCSINFOS 72202 + . 73127)) (73168 81089 (FONTASCENT 73178 . 73562) (FONTDESCENT 73564 . 74049) (FONTHEIGHT 74051 . +74453) (FONTPROP 74455 . 80366) (\AVGCHARWIDTH 80368 . 81087)) (81746 82654 (FONTDEVICEPROP 81756 . +82652)) (82700 83554 (EDITCHAR 82710 . 83552)) (83600 95790 (GETCHARBITMAP 83610 . 84734) ( +PUTCHARBITMAP 84736 . 86894) (\GETCHARBITMAP.CSINFO 86896 . 88912) (\PUTCHARBITMAP.CSINFO 88914 . +95788)) (95791 116172 (MOVECHARBITMAP 95801 . 97695) (MOVEFONTCHARS 97697 . 101657) (\MOVEFONTCHAR +101659 . 106403) (\MOVEFONTCHARS.SOURCEDATA 106405 . 112510) (\MAKESLUGCHAR 112512 . 115047) ( +SLUGCHARP.DISPLAY 115049 . 116170)) (117106 137123 (FONTFILES 117116 . 118949) (\FINDFONTFILE 118951 + . 120668) (\FONTFILENAMES 120670 . 121544) (\FONTFILENAME 121546 . 125529) (\FONTFILENAME.OLD 125531 + . 128480) (\FONTFILENAME.NEW 128482 . 130739) (FONTSPECFROMFILENAME 130741 . 134842) ( +\FONTINFOFROMFILENAME.OLD 134844 . 137121)) (137390 172537 (FONTCOPY 137400 . 142463) (FONTP 142465 . +142764) (FONTUNPARSE 142766 . 144485) (SETFONTDESCRIPTOR 144487 . 145951) (\STREAMCHARWIDTH 145953 . +150117) (\COERCECHARSET 150119 . 152058) (\BUILDSLUGCSINFO 152060 . 155683) (\FONTSYMBOL 155685 . +156335) (\DEVICESYMBOL 156337 . 157206) (\FONTFACE 157208 . 164398) (\FONTFACE.COLOR 164400 . 171320) +(SETFONTCHARENCODING 171322 . 172535)) (172538 191523 (FONTSAVAILABLE 172548 . 177294) (FONTEXISTS? +177296 . 181153) (\SEARCHFONTFILES 181155 . 184240) (FLUSHFONTSINCORE 184242 . 186079) (FINDFONTFILES +186081 . 189295) (SORTFONTSPECS 189297 . 191521)) (191524 194947 (MATCHFONTFACE 191534 . 192349) ( +MAKEFONTFACE 192351 . 193191) (FONTFACETOATOM 193193 . 194945)) (195175 195667 (\UNITWIDTHSVECTOR +195185 . 195665)) (211267 213334 (FONTDESCRIPTOR.DEFPRINT 211277 . 212856) (FONTCLASS.DEFPRINT 212858 + . 213332)) (217163 219845 (\CREATEKERNELEMENT 217173 . 217531) (\FSETLEFTKERN 217533 . 218024) ( +\FGETLEFTKERN 218026 . 219843)) (219846 229268 (\CREATEFONT 219856 . 221187) (\CREATECHARSET 221189 . +225019) (\INSTALLCHARSETINFO 225021 . 228355) (\INSTALLCHARSETINFO.CHARENCODING 228357 . 229266)) ( +229590 230954 (\FONTRESETCHARWIDTHS 229600 . 230952)) (231584 241498 (\CREATEDISPLAYFONT 231594 . +233443) (\CREATECHARSET.DISPLAY 233445 . 239021) (\FONTEXISTS?.DISPLAY 239023 . 241496)) (241499 +256364 (STRIKEFONT.FILEP 241509 . 242397) (STRIKEFONT.GETCHARSET 242399 . 247991) (WRITESTRIKEFONTFILE + 247993 . 252904) (STRIKECSINFO 252906 . 256362)) (256395 272712 (MAKEBOLD.CHARSET 256405 . 260054) ( +MAKEBOLD.CHAR 260056 . 261808) (MAKEITALIC.CHARSET 261810 . 265483) (MAKEITALIC.CHAR 265485 . 267831) +(\SFMAKEBOLD 267833 . 270057) (\SFMAKEITALIC 270059 . 272710)) (272713 276862 (\SFMAKEROTATEDFONT +272723 . 274124) (\SFROTATECSINFO 274126 . 274763) (\SFROTATEFONTCHARACTERS 274765 . 275145) ( +\SFROTATECSINFOOFFSETS 275147 . 276860)) (276863 278244 (\SFMAKECOLOR 276873 . 278242))))) STOP diff --git a/sources/FONT.LCOM b/sources/FONT.LCOM index 30747eeb5fe7414ba457eae5c397afa710888970..88e8a0e44ea33ba054c6a9e1ea091f347c7d2a41 100644 GIT binary patch literal 68727 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 H+0?%PRpL~! delta 26658 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 JXEn)%{|CP~Aie+q diff --git a/sources/MEDLEYFONTFORMAT b/sources/MEDLEYFONTFORMAT index d7acd0bb4..c4ff4d8e0 100644 --- a/sources/MEDLEYFONTFORMAT +++ b/sources/MEDLEYFONTFORMAT @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Jul-2025 22:22:23" {WMEDLEY}MEDLEYFONTFORMAT.;218 57699 +(FILECREATED " 4-Sep-2025 11:43:26" {WMEDLEY}MEDLEYFONTFORMAT.;240 58467 :EDIT-BY rmk - :CHANGES-TO (FNS MEDLEYFONT.READ.ITEM) + :CHANGES-TO (FNS MEDLEYFONT.WRITE.CHARSET MEDLEYFONT.READ.CHARSET MEDLEYFONT.FILENAME) - :PREVIOUS-DATE "24-Jul-2025 22:07:35" {WMEDLEY}MEDLEYFONTFORMAT.;217) + :PREVIOUS-DATE " 3-Sep-2025 11:32:20" {WMEDLEY}MEDLEYFONTFORMAT.;235) (PRETTYCOMPRINT MEDLEYFONTFORMATCOMS) @@ -59,7 +59,8 @@ (DEFINEQ (MEDLEYFONT.WRITE.FONT - [LAMBDA (FONT FILE CHARSETNOS OTHERFONTPROPS NOINDIRECTS) (* ; "Edited 15-Jul-2025 16:43 by rmk") + [LAMBDA (FONT FILE CHARSETNOS OTHERFONTPROPS NOINDIRECTS) (* ; "Edited 2-Sep-2025 23:01 by rmk") + (* ; "Edited 15-Jul-2025 16:43 by rmk") (* ; "Edited 9-Jul-2025 09:32 by rmk") (* ; "Edited 19-Jun-2025 10:59 by rmk") (* ; "Edited 9-Jun-2025 12:17 by rmk") @@ -84,7 +85,7 @@ (SETQ FILECHARSETS (for CSNO CSINFO from 0 to \MAXCHARSET when (OR (NULL CHARSETNOS) (MEMB CSNO CHARSETNOS)) - when (SETQ CSINFO (\XGETCHARSETINFO FONT CSNO)) + when (SETQ CSINFO (\GETCHARSETINFO FONT CSNO)) unless (fetch (CHARSETINFO CSSLUGP) of CSINFO) collect CSNO)) (CL:UNLESS FILECHARSETS (ERROR "No character sets to write" FONT)) @@ -128,11 +129,12 @@ (FULLNAME STREAM]) (MEDLEYFONT.GETCHARSET - [LAMBDA (STREAM CHARSET) (* ; "Edited 15-Jul-2025 17:09 by rmk") + [LAMBDA (STREAM CHARSET FONT) (* ; "Edited 3-Sep-2025 11:32 by rmk") + (* ; "Edited 15-Jul-2025 17:09 by rmk") (* ; "Edited 9-Jul-2025 15:45 by rmk") (* ; "Edited 14-May-2025 17:46 by rmk") - (* ;; "If open, assume its a medleyfont stream, that the initial Me etc. has been checked, and we are positioned after the header information") + (* ;; "If open, assume its a medleyfont stream, that the initial Me etc. has been checked, and we are positioned after the header information. FONT is provided so that properties of the fontdescriptor can be read through this interface--ottherwise the fontcreate function of each device might have to also have a list of functions to try.") (CL:UNLESS (<= 0 CHARSET \MAXCHARSET) (\ILLEGAL.ARG CHARSET)) @@ -145,6 +147,12 @@ (ERROR "NOT A MEDLEYFONT FILE" (FULLNAME STREAM)))) (LET ((CSVECTORLOC (\FIXPIN STREAM)) CSLOC) + (MEDLEYFONT.READ.VERIFIEDFONT STREAM FONT) (* ; + "Maybe only for the first character set?") + (replace (FONTDESCRIPTOR FONTCOMPLETEP) of FONT with NIL) + + (* ;; + "One charset doesn't %"complete%" a complete font--maybe that's only an incore property? ") (* ;; "We know now that this file has information about the requested charset, including NIL entries for empty/slugglish ones in the middle of populated ones. A file that would have contain a single empty/sluggish charset cannot be created--the caller would recognize the case of a missing file and provide either NIL or a slug-vector.") @@ -186,7 +194,8 @@ CHARSET]) (MEDLEYFONT.GETFILEPROP - [LAMBDA (FILE PROP) (* ; "Edited 15-Jul-2025 20:21 by rmk") + [LAMBDA (FILE PROP) (* ; "Edited 27-Aug-2025 17:12 by rmk") + (* ; "Edited 15-Jul-2025 20:21 by rmk") (* ; "Edited 10-Jul-2025 17:50 by rmk") (* ; "Edited 25-May-2025 20:53 by rmk") (* ; "Edited 21-May-2025 11:36 by rmk") @@ -194,9 +203,8 @@ (* ; "Edited 14-May-2025 17:46 by rmk") (CL:UNLESS (OR (LITATOM FILE) (STRINGP FILE)) - [SETQ FILE (CAR (APPLY (FUNCTION FONTFILES) - (FONTPROP (FONTCREATE FILE) - 'SPEC]) + [SETQ FILE (CAR (FONTFILES (FONTPROP (FONTCREATE FILE) + 'SPEC]) (CL:WITH-OPEN-FILE (STREAM FILE :DIRECTION :INPUT) (LET (HEADERPROPS CSVECTORLOC) (CL:UNLESS (SETQ HEADERPROPS (MEDLEYFONT.FILEP STREAM)) @@ -255,7 +263,8 @@ (DEFINEQ (MEDLEYFONT.READ.FONT - [LAMBDA (FILE CHARSETNOS FONT) (* ; "Edited 15-Jul-2025 20:20 by rmk") + [LAMBDA (FILE CHARSETNOS FONT) (* ; "Edited 31-Aug-2025 14:42 by rmk") + (* ; "Edited 15-Jul-2025 20:20 by rmk") (* ; "Edited 9-Jul-2025 00:06 by rmk") (* ; "Edited 6-Jul-2025 11:45 by rmk") (CL:UNLESS FILE (SETQ FILE FONT)) @@ -267,14 +276,13 @@ (CL:UNLESS (MEDLEYFONT.FILEP STREAM) (ERROR "NOT A MEDLEYFONT FILE" (FULLNAME STREAM))) (LET ((*READTABLE* (FIND-READTABLE "INTERLISP")) - FONTCHARSETVECTOR CSVECTORLOC NOTFOUND SINGLECS) + CSVECTORLOC NOTFOUND SINGLECSNO) (SETQ CSVECTORLOC (\FIXPIN STREAM)) (* ;  "Byte location of the charset dispatch vector") (* ;; "We know now that this file has information about all requested charsets, including NIL entries for empty/slugglish ones in the middle of populated ones. A file that would have contain a single empty/sluggish charset cannot be created--the caller would recognize the case of a missing file and provide either NIL or a slug-vector.") (SETQ FONT (MEDLEYFONT.READ.VERIFIEDFONT STREAM FONT)) - (SETQ FONTCHARSETVECTOR (fetch (FONTDESCRIPTOR FONTCHARSETVECTOR) of FONT)) (CL:UNLESS (EQ CSVECTORLOC 0) (* ; "Not empty") [if (ILESSP CSVECTORLOC 0) then @@ -284,15 +292,15 @@ (* ;; "If the intended charset is empty/sluggish, the file would not have been constructed and we wouldn't be here.") (SETFILEPTR STREAM (IMINUS CSVECTORLOC)) - (SETQ SINGLECS (BIN STREAM)) + (SETQ SINGLECSNO (BIN STREAM)) (CL:WHEN CHARSETNOS - (CL:UNLESS (AND (EQ SINGLECS (CAR CHARSETNOS)) + (CL:UNLESS (AND (EQ SINGLECSNO (CAR CHARSETNOS)) (NULL (CDR CHARSETNOS))) (ERROR (CONCAT FILE - " does not contain information for charsets ÿ4ÿ" - (REMOVE SINGLECS CHARSETNOS))))) - (\SETCHARSETINFO FONTCHARSETVECTOR SINGLECS (MEDLEYFONT.READ.CHARSET - STREAM SINGLECS)) + " does not contain information for charsets " + (REMOVE SINGLECSNO CHARSETNOS))))) + (\SETCHARSETINFO FONT SINGLECSNO (MEDLEYFONT.READ.CHARSET STREAM + SINGLECSNO)) else (* ;;  "Gather all of the CSLOCS before reading, so that we always move forward") @@ -311,13 +319,17 @@ (DREVERSE NOTFOUND)))) (for X CS in $$VAL do (SETQ CSNO (CAR X)) (SETFILEPTR STREAM (CDR X)) - (\SETCHARSETINFO FONTCHARSETVECTOR CSNO - (MEDLEYFONT.READ.CHARSET STREAM CSNO - ]) + (\SETCHARSETINFO FONT CSNO ( + MEDLEYFONT.READ.CHARSET + STREAM CSNO]) FONT]) (MEDLEYFONT.READ.CHARSET - [LAMBDA (STREAM CHARSET) (* ; "Edited 15-Jul-2025 11:27 by rmk") + [LAMBDA (STREAM CHARSET) (* ; "Edited 4-Sep-2025 10:39 by rmk") + (* ; "Edited 28-Aug-2025 15:27 by rmk") + (* ; "Edited 26-Aug-2025 23:36 by rmk") + (* ; "Edited 17-Aug-2025 13:01 by rmk") + (* ; "Edited 15-Jul-2025 11:27 by rmk") (* ; "Edited 9-Jul-2025 19:33 by rmk") (* ; "Edited 6-Jul-2025 10:11 by rmk") (* ; "Edited 25-May-2025 20:54 by rmk") @@ -331,12 +343,12 @@ (LET (CSNO INDIRECT) (CL:UNLESS [EQ CHARSET (SETQ CSNO (MEDLEYFONT.READ.ITEM STREAM 'CHARSET] (ERROR "Charset mismatch" (LIST CHARSET CSNO))) - (if [EQ 'INDIRECTCHARSET (CAR (SETQ INDIRECT (MEDLEYFONT.PEEK.ITEM STREAM] - then (* ; - "Read a complete charset from another file (e.g. shared Kanji)") - (MEDLEYFONT.READ.ITEM STREAM 'INDIRECTCHARSET) - (APPLY (FUNCTION \READCHARSET) - (CADR INDIRECT)) + (if (EQ 'INDIRECTCHARSET (CAR (MEDLEYFONT.PEEK.ITEM STREAM))) + then + (* ;; "Read what we peeked and use it to create a complete charset from another file (e.g. shared Kanji). ") + + (SETQ INDIRECT (MEDLEYFONT.READ.ITEM STREAM 'INDIRECTCHARSET)) + (\READCHARSET INDIRECT CHARSET) else (bind PAIR LABEL ITEM (CSINFO _ (create CHARSETINFO WIDTHS _ NIL OFFSETS _ NIL)) eachtime (SETQ PAIR @@ -366,10 +378,11 @@ of CSINFO with ITEM)) (CSCOMPLETEP (replace (CHARSETINFO CSCOMPLETEP) of CSINFO with ITEM)) - (HELP "Unrecognized charsetinfo label'" LABEL)) + (HELP "Unrecognized charsetinfo label" LABEL)) finally (CL:UNLESS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO) (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO WIDTHS) of CSINFO))) + (replace (CHARSETINFO CHARSETNO) of CSINFO with CHARSET) (RETURN CSINFO]) (MEDLEYFONT.READ.ITEM @@ -481,64 +494,65 @@ (bind PAIR until [EQ 'STOP (CAR (SETQ PAIR (MEDLEYFONT.READ.ITEM STREAM] collect PAIR]) (MEDLEYFONT.READ.VERIFIEDFONT - [LAMBDA (STREAM FONT) (* ; "Edited 10-Jun-2025 20:57 by rmk") + [LAMBDA (STREAM FONT) (* ; "Edited 2-Sep-2025 23:52 by rmk") + (* ; "Edited 12-Aug-2025 17:57 by rmk") + (* ; "Edited 10-Jun-2025 20:57 by rmk") (* ; "Edited 21-May-2025 22:55 by rmk") (* ; "Edited 19-May-2025 17:42 by rmk") (* ; "Edited 16-May-2025 10:28 by rmk") + (CL:UNLESS FONT + (SETQ FONT (create FONTDESCRIPTOR))) (LET ((FONTPROPS (MEDLEYFONT.READ.FONTPROPS STREAM))) - [if FONT - then (* ; "compare/verify") - (for P in FONTPROPS unless (EQUAL (CADR P) - (RECORDACCESS (CAR P) - FONT NIL 'FETCH)) - do (ERROR "Mismatching font property" P)) - else (SETQ FONT (create FONTDESCRIPTOR)) (* ; "Construct") - (for P VAL in FONTPROPS do (SETQ VAL (CADR P)) - (SELECTQ (CAR P) - (FONTDEVICE (replace (FONTDESCRIPTOR FONTDEVICE) - of FONT with VAL)) - (FONTCOMPLETEP (replace (FONTDESCRIPTOR FONTCOMPLETEP) - of FONT with VAL)) - (FONTFAMILY (replace (FONTDESCRIPTOR FONTFAMILY) - of FONT with VAL)) - (FONTSIZE (replace (FONTDESCRIPTOR FONTSIZE) - of FONT with VAL)) - (FONTFACE (replace (FONTDESCRIPTOR FONTFACE) - of FONT with VAL)) - (\SFAscent (replace (FONTDESCRIPTOR \SFAscent) - of FONT with VAL)) - (\SFDescent (replace (FONTDESCRIPTOR \SFDescent) - of FONT with VAL)) - (\SFHeight (replace (FONTDESCRIPTOR \SFHeight) - of FONT with VAL)) - (ROTATION (replace (FONTDESCRIPTOR ROTATION) - of FONT with VAL)) - (FONTDEVICESPEC - (replace (FONTDESCRIPTOR FONTDEVICESPEC) - of FONT with VAL)) - (OTHERDEVICEFONTPROPS - (replace (FONTDESCRIPTOR OTHERDEVICEFONTPROPS) - of FONT with VAL)) - (FONTSCALE (replace (FONTDESCRIPTOR FONTSCALE) - of FONT with VAL)) - (\SFFACECODE (replace (FONTDESCRIPTOR \SFFACECODE) - of FONT with VAL)) - (FONTAVGCHARWIDTH - (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) - of FONT with VAL)) - (FONTCHARENCODING - (replace (FONTDESCRIPTOR FONTCHARENCODING) - of FONT with VAL)) - (FONTCHARSETVECTOR - (replace (FONTDESCRIPTOR FONTCHARSETVECTOR) - of FONT with VAL)) - (FONTHASLEFTKERNS - (replace (FONTDESCRIPTOR FONTHASLEFTKERNS) - of FONT with VAL)) - (FONTEXTRAFIELD2 - (replace (FONTDESCRIPTOR FONTEXTRAFIELD2) - of FONT with VAL)) - (HELP "UNKNOWN FONTDESCRIPTOR PROPERTY: P"] + (for P VAL in FONTPROPS do (SETQ VAL (CADR P)) + (SELECTQ (CAR P) + (FONTDEVICE (replace (FONTDESCRIPTOR FONTDEVICE) of FONT + with VAL)) + (FONTCOMPLETEP (replace (FONTDESCRIPTOR FONTCOMPLETEP) + of FONT with VAL)) + (FONTFAMILY (replace (FONTDESCRIPTOR FONTFAMILY) of FONT + with VAL)) + (FONTSIZE (replace (FONTDESCRIPTOR FONTSIZE) of FONT + with VAL)) + (FONTFACE (replace (FONTDESCRIPTOR FONTFACE) of FONT + with VAL)) + (\SFAscent (replace (FONTDESCRIPTOR \SFAscent) of FONT + with VAL)) + (\SFDescent (replace (FONTDESCRIPTOR \SFDescent) of FONT + with VAL)) + (\SFHeight (replace (FONTDESCRIPTOR \SFHeight) of FONT + with VAL)) + (ROTATION (replace (FONTDESCRIPTOR ROTATION) of FONT + with VAL)) + (FONTSLUGWIDTH (replace (FONTDESCRIPTOR FONTSLUGWIDTH) + of FONT with VAL)) + (FONTTOMCCSFN (replace (FONTDESCRIPTOR FONTTOMCCSFN) + of FONT with VAL)) + (FONTDEVICESPEC + (replace (FONTDESCRIPTOR FONTDEVICESPEC) of FONT + with VAL)) + (OTHERDEVICEFONTPROPS + (replace (FONTDESCRIPTOR OTHERDEVICEFONTPROPS) + of FONT with VAL)) + (FONTSCALE (replace (FONTDESCRIPTOR FONTSCALE) of FONT + with VAL)) + (\SFFACECODE (replace (FONTDESCRIPTOR \SFFACECODE) + of FONT with VAL)) + (FONTAVGCHARWIDTH + (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FONT + with VAL)) + (FONTCHARENCODING + (replace (FONTDESCRIPTOR FONTCHARENCODING) of FONT + with VAL)) + (FONTCHARSETVECTOR + (replace (FONTDESCRIPTOR FONTCHARSETVECTOR) of FONT + with VAL)) + (FONTHASLEFTKERNS + (replace (FONTDESCRIPTOR FONTHASLEFTKERNS) of FONT + with VAL)) + (FONTEXTRAFIELD2 + (replace (FONTDESCRIPTOR FONTEXTRAFIELD2) of FONT + with VAL)) + (HELP "UNKNOWN FONTDESCRIPTOR PROPERTY: P"))) FONT]) ) @@ -549,15 +563,15 @@ (DEFINEQ (MEDLEYFONT.WRITE.CHARSET - [LAMBDA (FONT CHARSET STREAM NOINDIRECTS) (* ; "Edited 9-Jul-2025 19:14 by rmk") + [LAMBDA (FONT CHARSET STREAM NOINDIRECTS) (* ; "Edited 4-Sep-2025 11:41 by rmk") + (* ; "Edited 30-Aug-2025 23:44 by rmk") + (* ; "Edited 28-Aug-2025 21:00 by rmk") + (* ; "Edited 9-Jul-2025 19:14 by rmk") (* ; "Edited 25-May-2025 20:49 by rmk") (* ; "Edited 22-May-2025 09:58 by rmk") (* ; "Edited 16-May-2025 20:18 by rmk") (* ; "Edited 13-May-2025 23:26 by rmk") - - (* ;; "This outputs the characterset info for CHARSET in FONT.") - - (LET ((CSINFO (\INSURECHARSETINFO CHARSET FONT)) + (LET ((CSINFO (\INSURECHARSETINFO FONT CHARSET)) CSCHARENCODING) (MEDLEYFONT.WRITE.ITEM STREAM 'CHARSETSTRING (MKSTRING CHARSET)) (* ; "For human file-scan") @@ -569,15 +583,12 @@ (* ;; "Copy the fonts charencoding down to each charset info so that it is available when the charsetinfo is read. The fontdescriptor isn't available at that point and coercion could lead to fonts of different encodings. At least this would make it possible to fix things up.") - (if (CL:UNLESS NOINDIRECTS (INDIRECTCHARSETP CSINFO FONT CHARSET)) + (if (CL:UNLESS NOINDIRECTS (INDIRECTCHARSETP CSINFO FONT)) then (* ;;  "This charset is is taken entirely from on another file, no need to copy it to this file.") - (MEDLEYFONT.WRITE.ITEM STREAM 'INDIRECTCHARSET (GETMULTI (fetch (CHARSETINFO - CSINFOPROPS) - of CSINFO) - 'SOURCE) + (MEDLEYFONT.WRITE.ITEM STREAM 'INDIRECTCHARSET (CHARSETPROP CSINFO 'SOURCE) NIL 'PRINT) else (MEDLEYFONT.WRITE.ITEM STREAM 'CSINFOPROPS (fetch (CHARSETINFO CSINFOPROPS) @@ -742,7 +753,8 @@ (TERPRI STREAM))]) (MEDLEYFONT.WRITE.FONTPROPS - [LAMBDA (STREAM FONT) (* ; "Edited 10-Jun-2025 20:50 by rmk") + [LAMBDA (STREAM FONT) (* ; "Edited 12-Aug-2025 17:55 by rmk") + (* ; "Edited 10-Jun-2025 20:50 by rmk") (* ; "Edited 25-May-2025 20:50 by rmk") (* ; "Edited 22-May-2025 10:31 by rmk") (* ; "Edited 19-May-2025 10:42 by rmk") @@ -774,6 +786,10 @@ T) (MEDLEYFONT.WRITE.ITEM STREAM 'ROTATION (fetch (FONTDESCRIPTOR ROTATION) of FONT) T) + (MEDLEYFONT.WRITE.ITEM STREAM 'FONTSLUGWIDTH (fetch (FONTDESCRIPTOR FONTSLUGWIDTH) of FONT) + T) + (MEDLEYFONT.WRITE.ITEM STREAM 'FONTTOMCCSFN (fetch (FONTDESCRIPTOR FONTTOMCCSFN) of FONT) + T) (MEDLEYFONT.WRITE.ITEM STREAM 'FONTDEVICESPEC (fetch (FONTDESCRIPTOR FONTDEVICESPEC) of FONT) T) (MEDLEYFONT.WRITE.ITEM STREAM 'OTHERDEVICEFONTPROPS (fetch (FONTDESCRIPTOR OTHERDEVICEFONTPROPS) @@ -810,36 +826,18 @@ (DEFINEQ (MEDLEYFONT.FILENAME - [LAMBDA (FONT CHARSET EXTENSION FILE) (* ; "Edited 10-Jun-2025 11:02 by rmk") + [LAMBDA (FONT CHARSET EXTENSION FILE) (* ; "Edited 4-Sep-2025 08:48 by rmk") + (* ; "Edited 10-Jun-2025 11:02 by rmk") (* ; "Edited 25-May-2025 21:25 by rmk") (* ; "Edited 19-May-2025 17:42 by rmk") (* ; "Edited 16-May-2025 14:09 by rmk") (* ;; "If EXTENSION and FILE are NIL, puts the file in the MEDLEYDIR fonts/medley[device]fonts/ directory with extension MEDLEY[device]FONT. If CHARSET, goes in the CHARSET subdirectory.") - (CL:WHEN (AND (LISTP CHARSET) - (NULL (CDR CHARSET))) - (SETQ CHARSET (CAR CHARSET))) (* ; "Edited 14-May-2025 12:02 by rmk") - (LET (FAMILY SIZE FACE DEVICE FILENAME) - [if (LISTP FONT) - then (SETQ FAMILY (CAR FONT)) - (SETQ SIZE (CADR FONT)) - (SETQ FACE (OR (CADDR FONT) - 'MRR)) - (SETQ DEVICE (OR (CADDDR FONT) - 'DISPLAY)) - elseif (type? FONTDESCRIPTOR FONT) - then (SETQ FAMILY (FONTPROP FONT 'FAMILY)) - (SETQ SIZE (FONTPROP FONT 'SIZE)) - (SETQ FACE (FONTPROP FONT 'FACE)) - (SETQ DEVICE (FONTPROP FONT 'DEVICE] - (CL:WHEN (LISTP FACE) - (SETQ FACE (CONCAT (NTHCHAR (CAR FACE) - 1) - (NTHCHAR (CADR FACE) - 1) - (NTHCHAR (CADDR FACE) - 1)))) + (LET (FAMILY SIZE FACE DEVICE ROTATION FILENAME) + (SPREADFONTSPEC (CL:IF (type? FONTDESCRIPTOR FONT) + (FONTPROP FONT 'SPEC) + (\FONT.CHECKARGS FONT))) (CL:UNLESS EXTENSION (SETQ EXTENSION (CONCAT "MEDLEY" (U-CASE DEVICE) "FONT")) @@ -849,9 +847,10 @@ (SETQ FILENAME (PACK* FAMILY (CL:IF (ILEQ SIZE 9) "0" "") - SIZE "-" FACE (CL:IF (SMALLP CHARSET) - (CONCAT "-C" (OCTALSTRING CHARSET)) - "") + SIZE "-" (FONTFACETOATOM FACE) + (CL:IF (SMALLP CHARSET) + (CONCAT "-C" (OCTALSTRING CHARSET)) + "") "." EXTENSION)) (PACKFILENAME 'BODY FILE 'BODY FILENAME]) ) @@ -904,11 +903,11 @@ ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2127 14772 (MEDLEYFONT.WRITE.FONT 2137 . 6995) (MEDLEYFONT.GETCHARSET 6997 . 9296) ( -MEDLEYFONT.CHARSET? 9298 . 10767) (MEDLEYFONT.GETFILEPROP 10769 . 12804) (MEDLEYFONT.FILEP 12806 . -14770)) (14798 36689 (MEDLEYFONT.READ.FONT 14808 . 19241) (MEDLEYFONT.READ.CHARSET 19243 . 24137) ( -MEDLEYFONT.READ.ITEM 24139 . 30288) (MEDLEYFONT.PEEK.ITEM 30290 . 31152) (MEDLEYFONT.READ.FONTPROPS -31154 . 31619) (MEDLEYFONT.READ.VERIFIEDFONT 31621 . 36687)) (36715 54244 (MEDLEYFONT.WRITE.CHARSET -36725 . 41330) (MEDLEYFONT.WRITE.ITEM 41332 . 50385) (MEDLEYFONT.WRITE.FONTPROPS 50387 . 53589) ( -MEDLEYFONT.WRITE.HEADER 53591 . 54242)) (54245 56814 (MEDLEYFONT.FILENAME 54255 . 56812))))) + (FILEMAP (NIL (2175 15697 (MEDLEYFONT.WRITE.FONT 2185 . 7151) (MEDLEYFONT.GETCHARSET 7153 . 10156) ( +MEDLEYFONT.CHARSET? 10158 . 11627) (MEDLEYFONT.GETFILEPROP 11629 . 13729) (MEDLEYFONT.FILEP 13731 . +15695)) (15723 37913 (MEDLEYFONT.READ.FONT 15733 . 20165) (MEDLEYFONT.READ.CHARSET 20167 . 25525) ( +MEDLEYFONT.READ.ITEM 25527 . 31676) (MEDLEYFONT.PEEK.ITEM 31678 . 32540) (MEDLEYFONT.READ.FONTPROPS +32542 . 33007) (MEDLEYFONT.READ.VERIFIEDFONT 33009 . 37911)) (37939 55776 (MEDLEYFONT.WRITE.CHARSET +37949 . 42511) (MEDLEYFONT.WRITE.ITEM 42513 . 51566) (MEDLEYFONT.WRITE.FONTPROPS 51568 . 55121) ( +MEDLEYFONT.WRITE.HEADER 55123 . 55774)) (55777 57582 (MEDLEYFONT.FILENAME 55787 . 57580))))) STOP diff --git a/sources/MEDLEYFONTFORMAT.LCOM b/sources/MEDLEYFONTFORMAT.LCOM index c6da3118131bbb9ccf0f088f21d5d4f0fbf82aab..f933c5043d3f28bfd7129a2dc79fff3b82d1c917 100644 GIT binary patch delta 5493 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 C-fuhr delta 5414 zcmZu#Ym6J!750q1o5ULyuh(ogo89Eb3CV6CiRb09S3GuNkF$P`v7I;}X&1-_HV;Ue zO&_RGqqaXlMOBkarAmZW(25_WRqb`QA|c??{vk*aL866LLdwq~wW@hk6`HJwfazNI1roMf0ryP*c{-m|9xHFEq zn5uT1CZta*T9A0pJ$3~dS4o~o8YdM-s+^SRb7Ir2>QenF z_rKkYpueBEm;Nf!PiI8W?PNM0@lHaUD@*l1uOedq6mdN(y6LBDGPLBK5fz2jg!Q^4 z%cN+Q*x~Y}0+A$%98M$;-VhvkJ}T{6}7(G zCyH)R^mh~Y(Eee+3|?za)~qZ%1pC9IkU!v|LWv1_OSCRr>IT*`U>*j|Z*L&VCPIiiM$k-?K&m4`U1Hsr7ePaQ`LvUzQ|@q?4E}&sjw_j_^5*!cMVE zP%U!QmKY8=`kh~^0pZ$C(+pq@xLl3OA2HneZusV@m8e`Tfu#n~^_*8pk%Qv+7 zc5BSN?EWG4H9TD2>gOs8MezhU{7hb;fX*qm=}u#r3Q!8fZHEdRDSU!(ek zFgMaDlaw`bbo!X#_PGv+}SIJ@YZ!fioGQJh(l9Jw`1R!G6jTKi2BiO}5m z;%Hdm4j4C!u|hHrS4Nb;xI#Bg>~>3%hVM@AO;Nq+3VN}5`oP3NH+&OWtH8c>apNBa z;m7pSCcSb{;Ax<_v|(l?A8;xu3jDHs4>51rG{1mb!;jb)lKSifa!9z67KJx6^Nxv) zjTHCYtDZmDgfnynJSm^8^PMVRZ3qbBbBFZ!3D>} zHE*MK^H^)~ms%#S4S-$fR1K^J@4g<@KtI^qyHp3k8_w9wrGT^6xf9PE55DK}HELgd zX-AsvR<*A_aZM@_nar9QBq93#=5=dH1XY9QN7M-vLHdi$rHU49rI2JUVIgydkcMJb zHlHy|CLBz;m11nU41HvB^VCke61LN!is@^haAlq8_HpTZpi|{?{%4T7A1p_8S>qH}d!m(d&0_ zuKcf$)l!~ehK2-VNuC`Va;MzOeZ$qHa7Yx=g0aAzW-asRFJ9wblD54hB|cdF@FB+E zbW%Kd^P^*&eQ7=!*w}bPY|IXA_P~dKv%e;ccQdc8t_iC;nH5*&+M1f{vraCU-kR&<9_B#J^-ec4 z5U9E8Jz6&u(VFYIE@mpeP`!cuX@VGBSV)d+>jnXs!GV5Cqs_72-xLW)_Qt-aoWq z25DH0gt~GwQFWQK%mbx@kw}`ExJ*<{?@?2A`q1vcz2P2#Z0kBcYhx6mO1+99oz`{- z09{x`S*Z?0iP#p5{d<`a9&kj_ZOGQHhX^@bOeBmLjutnOrqmu&sy(Y1Gk|*()T{2b zduH9<@%0a_$6hb}EBSq~w>~eqrd+u1$?J31% z2;jy>@hdGr)6#5N+cwy-GWg=+#LA#~(dP`B z7yGm0g3(-PKC`eixrZ;*u^Rn>@;LEYK5Ovv`nct{eAnM`SpoiOzP#|PzHx$Nqy`bZFR18Px+llq`fz+s5+DjZrM3PmyG)MTRwIUeM^D)UgW5rtNl#K;f|6Lpjlox6>5Xi=fbHXgnM? zFW4GyfL6Rk1-xvRt5Kze5?EU55CIt6LJ1WW0n{NyhsL6Zp#)V$$JAD_RqVz=2`YeT zhX~%yb(ux&AxFgnJ_ z;w|)ofH8PqDn8&ojt-Vu?k z)9*a8geZ0_M8lof4ts6i`wDU-D=%St3q6+{p{KOI`fnpmuW*3A7`sZJkN;d$xl7V~ zYP|?2g|pUQF;57)kPf&TDR8o`?J4-92V=FBDEgDV%!(WMmy))d1;vokd Date: Thu, 11 Sep 2025 23:43:07 -0700 Subject: [PATCH 05/40] Unicode to MCCS See new Unicode documentation --- library/UNICODE | 725 +++++++++++------- library/UNICODE.LCOM | Bin 30651 -> 34301 bytes ...PINGS.TXT => MCCS-TO-UNICODE-MAPPINGS.TXT} | 24 +- ...PINGS.TXT => UNICODE-TO-MCCS-MAPPINGS.TXT} | 41 +- unicode/xerox/XCCS-0=LATIN.TXT | 21 +- 5 files changed, 485 insertions(+), 326 deletions(-) rename unicode/xerox/{UNICODE-MAPPINGS.TXT => MCCS-TO-UNICODE-MAPPINGS.TXT} (99%) rename unicode/xerox/{INVERTED-UNICODE-MAPPINGS.TXT => UNICODE-TO-MCCS-MAPPINGS.TXT} (98%) diff --git a/library/UNICODE b/library/UNICODE index 3c917000f..ef8e809b6 100644 --- a/library/UNICODE +++ b/library/UNICODE @@ -1,13 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "31-Jan-2025 17:47:03" {WMEDLEY}UNICODE.;128 98991 +(FILECREATED " 9-Sep-2025 08:59:44" {WMEDLEY}UNICODE.;171 111736 :EDIT-BY rmk - :CHANGES-TO (FNS READ-UNICODE-MAPPING MERGE-UNICODE-TRANSLATION-TABLES - MAKE-UNICODE-TRANSLATION-TABLES ALL-UNICODE-MAPPINGS) + :CHANGES-TO (FNS MTOUTF8STRING N-MCHARS UTF8TOMSTRING) + (VARS UNICODECOMS) - :PREVIOUS-DATE "27-Jan-2025 16:46:36" {WMEDLEY}UNICODE.;127) + :PREVIOUS-DATE " 7-Sep-2025 20:30:24" {WMEDLEY}UNICODE.;170) (PRETTYCOMPRINT UNICODECOMS) @@ -24,10 +24,11 @@ (P (MAKE-UNICODE-FORMATS EXTERNALEOL)) (ADDVARS (*DEFAULT-EXTERNALFORMATS* (UNIX :UTF-8))) (FNS UTF8.BINCODE \UTF8.FETCHCODE) - (FNS UTF8.VALIDATE UTF8-SIZE-FROM-BYTE1 NUTF8-BYTE1-BYTES NUTF8-CODE-BYTES - NUTF8-STRING-BYTES) + (FNS UTF8.VALIDATE NUTF8-BYTE1-BYTES NUTF8-CODE-BYTES NUTF8-STRING-BYTES N-MCHARS) (DECLARE%: EVAL@COMPILE DONTCOPY (MACROS UNICODE.TRANSLATE \UTF8.GETBASEBYTE)) - (FNS XTOUCODE UTOXCODE XTOUCODE? UTOXCODE?)) + (FNS MTOUCODE UTOMCODE MTOUCODE? UTOMCODE? MTOUSTRING UTOMSTRING MTOUTF8STRING + UTF8TOMSTRING) + (FNS XTOUCODE UTOXCODE XTOUCODE? UTOXCODE? XTOUSTRING UTOXSTRING XTOUTF8STRING)) (* ;; "") @@ -39,21 +40,21 @@  "Make translation tables for UTF external formats") (FNS MAKE-UNICODE-TRANSLATION-TABLES MERGE-UNICODE-TRANSLATION-TABLES UNICODE.UNMAPPED UNICODE-EXTEND-TRANSLATION?) - (FNS ALL-UNICODE-MAPPINGS) - (INITVARS (*XCCSTOUNICODE*) - (*UNICODETOXCCS*) - (*XCCS-LOADED-CHARSETS*) + (FNS ALL-UNICODE-MAPPINGS XCCSJAPANESECHARSETS) + (INITVARS (*MCCSTOUNICODE*) + (*UNICODETOMCCS*) + (*MCCS-LOADED-CHARSETS*) (*UNICODE-LOADED-CHARSETS*)) - (GLOBALVARS *XCCSTOUNICODE* *UNICODETOXCCS* *NEXT-PRIVATE-UNICODE* - *NEXT-PRIVATE-XCCSCODE* *XCCS-LOADED-CHARSETS* *UNICODE-LOADED-CHARSETS*) + (GLOBALVARS *MCCSTOUNICODE* *UNICODETOMCCS* *NEXT-PRIVATE-UNICODE* + *NEXT-PRIVATE-MCCSCODE* *MCCS-LOADED-CHARSETS* *UNICODE-LOADED-CHARSETS*) (DECLARE%: EVAL@COMPILE DONTCOPY (* ;; "There are 6400 private Unicodes in 25 256-code charsets. For XCCS we map to a contiguous region of unused/reserved--private isn't big enough.") (CONSTANTS (FIRST-PRIVATE-UNICODE (HEXNUM? "E000")) (LAST-PRIVATE-UNICODE (HEXNUM? "F8FF")) - (FIRST-PRIVATE-XCCSCODE (CHARCODE "200,0")) - (LAST-PRIVATE-XCCSCODE (CHARCODE "230,377"))) + (FIRST-PRIVATE-MCCSCODE (CHARCODE "200,0")) + (LAST-PRIVATE-MCCSCODE (CHARCODE "230,377"))) (MACROS TRUECODEP)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MAKE-UNICODE-TRANSLATION-TABLES 'ALL] @@ -61,7 +62,7 @@ (COMS (* ; "Write Unicode mapping files") (FNS WRITE-UNICODE-MAPPING WRITE-UNICODE-INCLUDED WRITE-UNICODE-MAPPING-HEADER - WRITE-UNICODE-MAPPING-FILENAME HEXSTRING) + WRITE-UNICODE-MAPPING-FILENAME) (FNS XCCS-UTF8-AFTER-OPEN) (* ;; "Automate dumping of a documentation prefix") @@ -71,7 +72,7 @@ (UNDEFINEDCODE (CL:PARSE-INTEGER "FFFF" :RADIX 16] (VARS UNICODE-MAPPING-HEADER)) - (FNS UTF8HEXSTRING XTOUSTRING XCCSSTRING) + (FNS UTF8HEXSTRING) (COMS (* ; "debugging") (FNS SHOWCHARS) (DECLARE%: DOEVAL@LOAD DONTCOPY (MACROS HEXCHAR OCTALCHAR))) @@ -87,7 +88,8 @@ (DEFINEQ (UTF8.OUTCHARFN - [LAMBDA (STREAM CHARCODE RAW) (* ; "Edited 20-Jan-2025 20:45 by rmk") + [LAMBDA (STREAM CHARCODE RAW) (* ; "Edited 24-Apr-2025 15:43 by rmk") + (* ; "Edited 20-Jan-2025 20:45 by rmk") (* ; "Edited 31-Jan-2024 00:32 by rmk") (* ; "Edited 8-Aug-2021 13:02 by rmk:") (* ; "Edited 17-Aug-2020 08:45 by rmk:") @@ -95,7 +97,7 @@ (* ;; "Perhaps the translation table should already do the mapping for EOL to LF, but that seems to be a separate property of the stream. Also, CRLF=2 bytes.") - (* ;; "Print UTF8 sequence for CHARCODE. Do not do XCCS to Unicode translation if RAW.") + (* ;; "Print UTF8 sequence for CHARCODE. Do not do MCCS to Unicode translation if RAW.") (IF (EQ CHARCODE (CHARCODE EOL)) THEN (FREPLACE (STREAM CHARPOSITION) OF STREAM WITH 0) @@ -104,7 +106,7 @@ (IPLUS16 1 DATUM)) (FOR C INSIDE (CL:IF RAW CHARCODE - (UNICODE.TRANSLATE CHARCODE *XCCSTOUNICODE*)) + (UNICODE.TRANSLATE CHARCODE *MCCSTOUNICODE*)) DO (IF (ILESSP C 128) THEN (\BOUT STREAM C) ELSEIF (ILESSP C 2048) @@ -134,10 +136,11 @@ ELSE (ERROR "CHARCODE too big for UTF8" C]) (UTF8.SLUG.OUTCHARFN - [LAMBDA (STREAM CODE RAW) (* ; "Edited 21-Jan-2025 18:37 by rmk") + [LAMBDA (STREAM CODE RAW) (* ; "Edited 24-Apr-2025 15:43 by rmk") + (* ; "Edited 21-Jan-2025 18:37 by rmk") (* ; "Edited 14-Jan-2025 12:39 by rmk") - (* ;; "Produces Unicode Representative FFFD as a slug for XCCS unmapped characters") + (* ;; "Produces Unicode Representative FFFD as a slug for MCCS unmapped characters") (UTF8.OUTCHARFN STREAM (OR (CL:IF RAW CODE @@ -146,12 +149,13 @@ T]) (UTF8.INCCODEFN - [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 2-Feb-2024 11:44 by rmk") + [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 24-Apr-2025 15:44 by rmk") + (* ; "Edited 2-Feb-2024 11:44 by rmk") (* ; "Edited 30-Jan-2024 22:56 by rmk") (* ; "Edited 6-Aug-2021 16:02 by rmk:") (* ; "Edited 6-Aug-2020 17:13 by rmk:") - (* ;; "Do not do UNICODE to XCSS translation if RAW.") + (* ;; "Do not do UNICODE to MCSS translation if RAW.") (* ;; "Test for smallp because the stream's End-of-file operation may suppress the error") @@ -231,19 +235,20 @@ 6) (LOADBYTE BYTE4 0 6]) (CL:UNLESS (OR RAW (NOT (SMALLP CODE))) - (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOXCCS*))) + (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOMCCS*))) (CL:WHEN COUNTP (SETQ *BYTECOUNTER* COUNT)) CODE]) (UTF8.PEEKCCODEFN - [LAMBDA (STREAM NOERROR RAW) (* ; "Edited 2-Feb-2024 11:48 by rmk") + [LAMBDA (STREAM NOERROR RAW) (* ; "Edited 24-Apr-2025 15:44 by rmk") + (* ; "Edited 2-Feb-2024 11:48 by rmk") (* ; "Edited 14-Jun-2021 22:53 by rmk:") (* ;; "Modeled this after \EUCPEEK on LLREAD. In the multi-byte (non-ASCII) case, backs the file pointer to the beginning by the proper number of \BACKFILEPTRs, and returns a count of 0. Returns NIL if NOERROR and either invalid UTF8 or end of file.") (* ;; "Could be that the caller takes care of backing up the file position if the number of binned-bytes is returned.") - (* ;; "Do not do UNICODE to XCCS translation if RAW") + (* ;; "Do not do UNICODE to MCCS translation if RAW") (PROG (BYTE1 BYTE2 BYTE3 BYTE4 CODE) (SETQ BYTE1 (\PEEKBIN STREAM NOERROR)) @@ -318,7 +323,7 @@ elseif NOERROR else (ERROR "INVALID UTF8 SEQUENCE" (LIST BYTE1 BYTE2 BYTE3 BYTE4] (CL:WHEN (AND CODE (NOT RAW)) - (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOXCCS*))) + (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOMCCS*))) (RETURN CODE]) (\UTF8.BACKCCODEFN @@ -340,11 +345,12 @@ (DEFINEQ (UTF16BE.OUTCHARFN - [LAMBDA (STREAM CHARCODE RAW) (* ; "Edited 31-Jan-2024 00:32 by rmk") + [LAMBDA (STREAM CHARCODE RAW) (* ; "Edited 24-Apr-2025 15:44 by rmk") + (* ; "Edited 31-Jan-2024 00:32 by rmk") (* ; "Edited 8-Aug-2021 13:09 by rmk:") (* ; "Edited 30-Jan-2020 23:08 by rmk:") - (* ;; "PRINT UTF16 sequence for CHARCODE. Do not do XCCS to UNICODE translation if RAW.") + (* ;; "PRINT UTF16 sequence for CHARCODE. Do not do MCCS to UNICODE translation if RAW.") (* ;; "Not sure about EOL conversion if truly %"raw%"") @@ -354,14 +360,15 @@ (IPLUS16 1 DATUM))) (FOR C INSIDE (CL:IF RAW CHARCODE - (UNICODE.TRANSLATE CHARCODE *XCCSTOUNICODE*)) DO (\WOUT STREAM C]) + (UNICODE.TRANSLATE CHARCODE *MCCSTOUNICODE*)) DO (\WOUT STREAM C]) (UTF16BE.INCCODEFN - [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 10-Mar-2024 12:00 by rmk") + [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 24-Apr-2025 15:45 by rmk") + (* ; "Edited 10-Mar-2024 12:00 by rmk") (* ; "Edited 6-Aug-2021 16:05 by rmk:") (* ;; - "Do not do UNICODE to XCCS translation if RAW. Test for SMALLPin case of funky EOF behavior") + "Do not do UNICODE to MCCS translation if RAW. Test for SMALLPin case of funky EOF behavior") (DECLARE (USEDFREE *BYTECOUNTER*)) (LET (CODE BYTE1 BYTE2 COUNT) @@ -372,18 +379,19 @@ HIBYTE _ (\BIN STREAM) LOBYTE _ (\BIN STREAM))) (CL:UNLESS RAW - (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOXCCS*))) + (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOMCCS*))) (CL:WHEN COUNTP (SETQ *BYTECOUNTER* COUNT)) CODE ELSE (ERROR "ODD NUMBER OF BYTES IN UTF16 FILE" STREAM]) (UTF16BE.PEEKCCODEFN - [LAMBDA (STREAM NOERROR RAW) (* ; "Edited 10-Mar-2024 12:01 by rmk") + [LAMBDA (STREAM NOERROR RAW) (* ; "Edited 24-Apr-2025 15:45 by rmk") + (* ; "Edited 10-Mar-2024 12:01 by rmk") (* ; "Edited 14-Jun-2021 22:58 by rmk:") (* ;; "Could be that the caller takes care of backing up the file position if the number of binned-bytes is returned.") - (* ;; "Do not do UNICODE to XCCS translation if RAW") + (* ;; "Do not do UNICODE to MCCS translation if RAW") (LET (BYTE1 BYTE2 CODE) (SETQ BYTE1 (\PEEKBIN STREAM NOERROR)) @@ -397,7 +405,7 @@ LOBYTE _ BYTE2)) (CL:IF RAW CODE - (UNICODE.TRANSLATE CODE *UNICODETOXCCS*)) + (UNICODE.TRANSLATE CODE *UNICODETOMCCS*)) ELSEIF NOERROR THEN NIL) ELSEIF NOERROR @@ -405,7 +413,8 @@ ELSE (ERROR "INVALID UTF16 CHARACTER" (LIST BYTE1 BYTE2]) (\UTF16BE.BACKCCODEFN - [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 10-Mar-2024 12:02 by rmk") + [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 24-Apr-2025 15:28 by rmk") + (* ; "Edited 10-Mar-2024 12:02 by rmk") (* ; "Edited 19-Jul-2022 15:14 by rmk") (* ; "Edited 6-Aug-2021 16:07 by rmk:") @@ -421,7 +430,7 @@ LOBYTE _ BYTE2)) (CL:IF RAW CODE - (UNICODE.TRANSLATE CODE *UNICODETOXCCS*)) + (UNICODE.TRANSLATE CODE *UNICODETOMCCS*)) ELSEIF COUNTP THEN (SETQ *BYTECOUNTER* -1) NIL)))]) @@ -429,11 +438,12 @@ (DEFINEQ (UTF16LE.OUTCHARFN - [LAMBDA (STREAM CHARCODE RAW) (* ; "Edited 10-Mar-2024 11:58 by rmk") + [LAMBDA (STREAM CHARCODE RAW) (* ; "Edited 24-Apr-2025 15:45 by rmk") + (* ; "Edited 10-Mar-2024 11:58 by rmk") (* ; "Edited 8-Aug-2021 13:09 by rmk:") (* ; "Edited 30-Jan-2020 23:08 by rmk:") - (* ;; "PRINT UTF16 sequence for CHARCODE. Do not do XCCS to UNICODE translation if RAW.") + (* ;; "PRINT UTF16 sequence for CHARCODE. Do not do MCCS to UNICODE translation if RAW.") (* ;; "Not sure about EOL conversion if truly %"raw%"") @@ -443,16 +453,17 @@ (IPLUS16 1 DATUM))) (FOR C INSIDE (CL:IF RAW CHARCODE - (UNICODE.TRANSLATE CHARCODE *XCCSTOUNICODE*)) + (UNICODE.TRANSLATE CHARCODE *MCCSTOUNICODE*)) DO (BOUT STREAM (fetch LOBYTE of CHARCODE)) (BOUT STREAM (fetch HIBYTE of CHARCODE]) (UTF16LE.INCCODEFN - [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 10-Mar-2024 12:03 by rmk") + [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 24-Apr-2025 15:45 by rmk") + (* ; "Edited 10-Mar-2024 12:03 by rmk") (* ; "Edited 6-Aug-2021 16:05 by rmk:") (* ;; - "Do not do UNICODE to XCCS translation if RAW. Test for SMALLPin case of funky EOF behavior") + "Do not do UNICODE to MCCS translation if RAW. Test for SMALLPin case of funky EOF behavior") (DECLARE (USEDFREE *BYTECOUNTER*)) (LET (CODE BYTE1 BYTE2 COUNT) @@ -463,18 +474,19 @@ LOBYTE _ (\BIN STREAM) HIBYTE _ (\BIN STREAM))) (CL:UNLESS RAW - (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOXCCS*))) + (SETQ CODE (UNICODE.TRANSLATE CODE *UNICODETOMCCS*))) (CL:WHEN COUNTP (SETQ *BYTECOUNTER* COUNT)) CODE ELSE (ERROR "ODD NUMBER OF BYTES IN UTF16 FILE" STREAM]) (UTF16LE.PEEKCCODEFN - [LAMBDA (STREAM NOERROR RAW) (* ; "Edited 10-Mar-2024 11:43 by rmk") + [LAMBDA (STREAM NOERROR RAW) (* ; "Edited 24-Apr-2025 15:46 by rmk") + (* ; "Edited 10-Mar-2024 11:43 by rmk") (* ; "Edited 14-Jun-2021 22:58 by rmk:") (* ;; "Could be that the caller takes care of backing up the file position if the number of binned-bytes is returned.") - (* ;; "Do not do UNICODE to XCCS translation if RAW") + (* ;; "Do not do UNICODE to MCCS translation if RAW") (LET (BYTE1 BYTE2 CODE) (SETQ BYTE1 (\PEEKBIN STREAM NOERROR)) @@ -487,7 +499,7 @@ BYTE1)) (CL:IF RAW CODE - (UNICODE.TRANSLATE CODE *UNICODETOXCCS*)) + (UNICODE.TRANSLATE CODE *UNICODETOMCCS*)) ELSEIF NOERROR THEN NIL) ELSEIF NOERROR @@ -495,7 +507,8 @@ ELSE (ERROR "INVALID UTF16 CHARACTER" (LIST BYTE1 BYTE2]) (\UTF16LE.BACKCCODEFN - [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 10-Mar-2024 12:04 by rmk") + [LAMBDA (STREAM COUNTP RAW) (* ; "Edited 24-Apr-2025 15:28 by rmk") + (* ; "Edited 10-Mar-2024 12:04 by rmk") (* ; "Edited 19-Jul-2022 15:14 by rmk") (* ; "Edited 6-Aug-2021 16:07 by rmk:") @@ -511,7 +524,7 @@ LOBYTE _ (\PEEKBIN STREAM))) (CL:IF RAW CODE - (UNICODE.TRANSLATE CODE *UNICODETOXCCS*)) + (UNICODE.TRANSLATE CODE *UNICODETOMCCS*)) ELSEIF COUNTP THEN (SETQ *BYTECOUNTER* -1) NIL)))]) @@ -647,7 +660,8 @@ (DEFINEQ (UTF8.BINCODE - [LAMBDA (STREAM RAW) (* ; "Edited 4-Feb-2024 01:06 by rmk") + [LAMBDA (STREAM RAW) (* ; "Edited 24-Apr-2025 15:28 by rmk") + (* ; "Edited 4-Feb-2024 01:06 by rmk") (* ; "Edited 1-Feb-2024 11:21 by rmk") (* ; "Edited 28-Dec-2023 13:32 by rmk") (* ; "Edited 6-Aug-2021 16:02 by rmk:") @@ -691,7 +705,7 @@ 0 6] (CL:IF RAW CODE - (UNICODE.TRANSLATE CODE *UNICODETOXCCS*))]) + (UNICODE.TRANSLATE CODE *UNICODETOMCCS*))]) (\UTF8.FETCHCODE [LAMBDA (CODESIZE BUFFER BYTEOFFSET) (* ; "Edited 28-Dec-2023 13:32 by rmk") @@ -775,19 +789,6 @@ (ILESSP BYTE 128))) 4)))]) -(UTF8-SIZE-FROM-BYTE1 - [LAMBDA (BYTE1) (* ; "Edited 2-Feb-2024 11:50 by rmk") - - (* ;; "Returns the number of bytes of a UTF-8 code, given that BYTE1 is the first (header) byte of the sequence.") - - (if (ILEQ BYTE1 127) - then 1 - elseif (ILEQ BYTE1 223) - then 2 - elseif (ILEQ BYTE1 239) - then 3 - else 4]) - (NUTF8-BYTE1-BYTES [LAMBDA (BYTE1) (* ; "Edited 3-Feb-2024 15:00 by rmk") (* ; "Edited 8-Jan-2024 10:57 by rmk") @@ -826,14 +827,23 @@ ELSE (ERROR "INVALID UTF-8 CODE"]) (NUTF8-STRING-BYTES - [LAMBDA (STRING RAW) (* ; "Edited 3-Feb-2024 21:32 by rmk") + [LAMBDA (STRING RAW) (* ; "Edited 2-Sep-2025 10:40 by rmk") + (* ; "Edited 24-Apr-2025 15:37 by rmk") + (* ; "Edited 3-Feb-2024 21:32 by rmk") (* ; "Edited 10-Aug-2020 09:06 by rmk:") - (* ;; "Returns the number of bytes it would take to represent STRING in UTF8, assuming it is an XCCS string unless RAWFLG. ") + (* ;; "Returns the number of bytes it would take to represent STRING in UTF8, assuming it is an MCCS string unless RAWFLG. ") - (FOR I C FROM 1 WHILE (SETQ C (NTHCHARCODE STRING I)) SUM (NUTF8-CODE-BYTES (CL:IF RAW + (for I C from 1 while (SETQ C (NTHCHARCODE STRING I)) sum (NUTF8-CODE-BYTES (CL:IF RAW C - (XTOUCODE C))]) + (MTOUCODE C))]) + +(N-MCHARS + [LAMBDA (UTF8STRING) (* ; "Edited 9-Sep-2025 08:35 by rmk") + + (* ;; "Returns the number of MCCS characters coded in UTF8STRING") + + (for I B from 1 while (SETQ B (NTHCHARCODE UTF8STRING I)) by (NUTF8-BYTE1-BYTES B) count T]) ) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE @@ -865,17 +875,168 @@ ) (DEFINEQ +(MTOUCODE + [LAMBDA (MCODE) (* ; "Edited 4-Sep-2025 15:10 by rmk") + (* ; "Edited 24-Apr-2025 10:19 by rmk") + (* ; "Edited 9-Aug-2020 09:04 by rmk:") + (UNICODE.TRANSLATE MCODE *MCCSTOUNICODE*]) + +(UTOMCODE + [LAMBDA (UNNICODE) (* ; "Edited 24-Apr-2025 10:17 by rmk") + (* ; "Edited 16-Jan-2025 23:46 by rmk") + (* ; "Edited 9-Aug-2020 09:04 by rmk:") + (UNICODE.TRANSLATE UNNICODE *UNICODETOMCCS*]) + +(MTOUCODE? + [LAMBDA (MCODE) (* ; "Edited 4-Sep-2025 15:09 by rmk") + (* ; "Edited 24-Apr-2025 10:18 by rmk") + (* ; "Edited 20-Jan-2025 20:38 by rmk") + (* ; "Edited 18-Jan-2025 11:44 by rmk") + (* ; "Edited 15-Jan-2025 19:51 by rmk") + (* ; "Edited 14-Jan-2025 13:14 by rmk") + (* ; "Edited 9-Aug-2020 09:04 by rmk:") + + (* ;; "Returns the Unix range-code(s) corresponding to MCODE if there are true mapppings, otherwise NIL. Alternative codes are returned in a list, the code itself is returned for a singleton.") + + (UNICODE.TRANSLATE MCODE *MCCSTOUNICODE* T T]) + +(UTOMCODE? + [LAMBDA (UNICODE) (* ; "Edited 24-Apr-2025 10:18 by rmk") + (* ; "Edited 19-Jan-2025 21:14 by rmk") + (* ; "Edited 18-Jan-2025 11:46 by rmk") + (* ; "Edited 15-Jan-2025 19:51 by rmk") + (* ; "Edited 14-Jan-2025 13:14 by rmk") + (* ; "Edited 9-Aug-2020 09:04 by rmk:") + + (* ;; "Returns the MCCS range-code(s) corresponding to UNICODE if there are true mapppings, otherwise NIL. ") + + (* ;; + " NOTE: Alternative codes are returned in a list, the code itself is returned for a singleton.") + + (UNICODE.TRANSLATE UNICODE *UNICODETOMCCS* T T]) + +(MTOUSTRING + [LAMBDA (MSTRING DESTRUCTIVE) (* ; "Edited 2-Sep-2025 12:19 by rmk") + (* ; "Edited 29-Apr-2025 12:01 by rmk") + + (* ;; "Converts MCCS codes in MSTRING to Unicodes.") + + (for I MCODE (USTRING _ (CL:IF DESTRUCTIVE + MSTRING + (CONCAT MSTRING))) from 1 while (SETQ MCODE (NTHCHARCODE MSTRING I)) + do (RPLCHARCODE USTRING I (MTOUCODE MCODE)) finally (RETURN USTRING]) + +(UTOMSTRING + [LAMBDA (USTRING DESTRUCTIVE) (* ; "Edited 2-Sep-2025 12:18 by rmk") + (* ; "Edited 29-Apr-2025 12:00 by rmk") + + (* ;; "Converts Unicodes to MCCS codes in USTRING.") + + (for I UCODE (MSTRING _ (CL:IF DESTRUCTIVE + USTRING + (CONCAT USTRING))) from 1 while (SETQ UCODE (NTHCHARCODE USTRING I)) + do (RPLCHARCODE MSTRING I (UTOMCODE UCODE)) finally (RETURN MSTRING]) + +(MTOUTF8STRING + [LAMBDA (MSTRING) (* ; "Edited 9-Sep-2025 07:51 by rmk") + (* ; "Edited 4-Sep-2025 15:13 by rmk") + (* ; "Edited 2-Sep-2025 11:12 by rmk") + (* ; "Edited 24-Apr-2025 15:37 by rmk") + (* ; "Edited 3-Feb-2024 14:55 by rmk") + (* ; "Edited 10-Aug-2020 21:42 by rmk:") + + (* ;; + "Produces a string that contains the UTF8 bytes that represent the characters in MSTRING. ") + + (* ;; "The resulting string will not be directly interpretable inside Medley.") + + (if (if (STRINGP MSTRING) + then (OR (ffetch (STRINGP FATSTRINGP) of MSTRING) + (thereis C instring MSTRING suchthat (IGEQ C 128))) + elseif (LITATOM MSTRING) + then (OR (ffetch (LITATOM FATPNAMEP) of MSTRING) + (thereis C inatom MSTRING suchthat (IGEQ C 128))) + else T) + then (LET [(USTR (ALLOCSTRING (NUTF8-STRING-BYTES MSTRING] + (for I UCODE MCODE (SINDEX _ 0) from 1 while (SETQ MCODE (NTHCHARCODE MSTRING I)) + do (SETQ UCODE (MTOUCODE MCODE)) + (if (ILESSP UCODE 128) + then (RPLCHARCODE USTR (ADD SINDEX 1) + UCODE) + elseif (ILESSP UCODE 2048) + then (* ; "x800") + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 3 6) + (LRSH UCODE 6))) + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 2 6) + (LOADBYTE UCODE 0 6))) + elseif (ILESSP UCODE 65536) + then (* ; "x10000") + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 7 5) + (LRSH UCODE 12))) + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 2 6) + (LOADBYTE UCODE 6 6))) + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 2 6) + (LOADBYTE UCODE 0 6))) + elseif (ILESSP UCODE 2097152) + then (* ; "x200000") + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 15 4) + (LRSH UCODE 18))) + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 2 6) + (LOADBYTE UCODE 12 6))) + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 2 6) + (LOADBYTE UCODE 6 6))) + (RPLCHARCODE USTR (ADD SINDEX 1) + (LOGOR (LLSH 2 6) + (LOADBYTE UCODE 0 6))) + else (SHOULDNT))) + USTR) + else MSTRING]) + +(UTF8TOMSTRING + [LAMBDA (UTF8STRING) (* ; "Edited 9-Sep-2025 08:59 by rmk") + (CL:UNLESS (OR (STRINGP UTF8STRING) + (LITATOM UTF8STRING)) + (SETQ UTF8STRING (MKSTRING UTF8STRING))) + (CL:WHEN (ffetch (STRINGP FATSTRINGP) of UTF8STRING) + (\ILLEGAL.ARG UTF8STRING)) + (LET* ((NMCHARS (N-MCHARS UTF8STRING)) + (MSTRING (ALLOCSTRING NMCHARS))) + [for M NBYTES BYTE1 (BASE _ (ffetch (STRINGP BASE) of UTF8STRING)) from 1 to NMCHARS + as OFFSET from (fetch (STRINGP OFFST) of MSTRING) by NBYTES + do (SETQ BYTE1 (\GETBASEBYTE BASE OFFSET)) + (SETQ NBYTES (NUTF8-BYTE1-BYTES BYTE1)) + (RPLCHARCODE MSTRING M (UTOMCODE (\UTF8.FETCHCODE NBYTES BASE OFFSET] + MSTRING]) +) +(DEFINEQ + (XTOUCODE - [LAMBDA (XCCSCODE) (* ; "Edited 9-Aug-2020 09:04 by rmk:") - (UNICODE.TRANSLATE XCCSCODE *XCCSTOUNICODE*]) + [LAMBDA (XCODE) (* ; "Edited 4-Sep-2025 15:09 by rmk") + (* ; "Edited 24-May-2025 23:16 by rmk") + (* ; "Edited 24-Apr-2025 15:27 by rmk") + (* ; "Edited 9-Aug-2020 09:04 by rmk:") + (UNICODE.TRANSLATE (XTOMCODE XCODE) + *MCCSTOUNICODE*]) (UTOXCODE - [LAMBDA (UNNICODE) (* ; "Edited 16-Jan-2025 23:46 by rmk") + [LAMBDA (UNICODE) (* ; "Edited 24-May-2025 23:17 by rmk") + (* ; "Edited 24-Apr-2025 15:28 by rmk") + (* ; "Edited 16-Jan-2025 23:46 by rmk") (* ; "Edited 9-Aug-2020 09:04 by rmk:") - (UNICODE.TRANSLATE UNNICODE *UNICODETOXCCS*]) + (MTOXCODE (UNICODE.TRANSLATE UNICODE *UNICODETOMCCS*]) (XTOUCODE? - [LAMBDA (XCCSCODE) (* ; "Edited 20-Jan-2025 20:38 by rmk") + [LAMBDA (XCCSCODE) (* ; "Edited 24-May-2025 23:18 by rmk") + (* ; "Edited 24-Apr-2025 15:27 by rmk") + (* ; "Edited 20-Jan-2025 20:38 by rmk") (* ; "Edited 18-Jan-2025 11:44 by rmk") (* ; "Edited 15-Jan-2025 19:51 by rmk") (* ; "Edited 14-Jan-2025 13:14 by rmk") @@ -883,10 +1044,13 @@ (* ;; "Returns the Unix range-code(s) corresponding to XCCSCODE if there are true mapppings, otherwise NIL. Alternative codes are returned in a list, the code itself is returned for a singleton.") - (UNICODE.TRANSLATE XCCSCODE *XCCSTOUNICODE* T T]) + (UNICODE.TRANSLATE (XTOMCODE XCCSCODE) + *MCCSTOUNICODE* T T]) (UTOXCODE? - [LAMBDA (UNICODE) (* ; "Edited 19-Jan-2025 21:14 by rmk") + [LAMBDA (UNICODE) (* ; "Edited 24-May-2025 23:19 by rmk") + (* ; "Edited 24-Apr-2025 15:28 by rmk") + (* ; "Edited 19-Jan-2025 21:14 by rmk") (* ; "Edited 18-Jan-2025 11:46 by rmk") (* ; "Edited 15-Jan-2025 19:51 by rmk") (* ; "Edited 14-Jan-2025 13:14 by rmk") @@ -897,7 +1061,47 @@ (* ;;  " NOTE: Alternative codes are returned in a list, the code itself is returned for a singleton.") - (UNICODE.TRANSLATE UNICODE *UNICODETOXCCS* T T]) + (MTOXCODE (UNICODE.TRANSLATE UNICODE *UNICODETOMCCS* T T]) + +(XTOUSTRING + [LAMBDA (XSTRING DESTRUCTIVE) (* ; "Edited 2-Sep-2025 12:00 by rmk") + (* ; "Edited 29-Apr-2025 12:01 by rmk") + + (* ;; "Converts XCCS codes in XSTRING to Unicodes.") + + (for I UCODE XCODE (USTRING _ (CL:IF DESTRUCTIVE + XSTRING + (CONCAT XSTRING))) from 1 while (SETQ XCODE (NTHCHARCODE + XSTRING I)) + do (RPLCHARCODE USTRING I (XTOUCODE XCODE)) finally (RETURN USTRING]) + +(UTOXSTRING + [LAMBDA (USTRING DESTRUCTIVE) (* ; "Edited 2-Sep-2025 11:54 by rmk") + (* ; "Edited 29-Apr-2025 12:00 by rmk") + + (* ;; "Converts Unicodes in USTRING to XCCS codes.") + + (for I XCODE UCODE (XSTRING _ (CL:IF DESTRUCTIVE + USTRING + (CONCAT USTRING))) from 1 while (SETQ UCODE (NTHCHARCODE + USTRING I)) + unless (EQ UCODE (SETQ XCODE (UTOXCODE UCODE))) do (RPLCHARCODE XSTRING I XCODE) + finally (RETURN XSTRING]) + +(XTOUTF8STRING + [LAMBDA (XSTRING) (* ; "Edited 4-Sep-2025 18:37 by rmk") + (* ; "Edited 2-Sep-2025 11:37 by rmk") + (* ; "Edited 29-Apr-2025 12:53 by rmk") + (* ; "Edited 24-Apr-2025 15:42 by rmk") + (* ; "Edited 3-Feb-2024 14:55 by rmk") + (* ; "Edited 10-Aug-2020 21:42 by rmk:") + + (* ;; "Produces a string that contains the UTF8 bytes that represent the characters in XSTRING. Applies the ") + + (* ;; "The resulting string will not be interpretable inside Medley.") + + (for I C (MSTRING _ (CONCAT XSTRING)) from 1 while (SETQ C (NTHCHARCODE XSTRING I)) + do (RPLCHARCODE MSTRING I (XTOMCODE C)) finally (RETURN (MTOUTF8STRING MSTRING]) ) @@ -954,7 +1158,8 @@ (DEFINEQ (READ-UNICODE-MAPPING-FILENAMES - [LAMBDA (FILESPEC) (* ; "Edited 27-Jan-2025 16:46 by rmk") + [LAMBDA (FILESPEC) (* ; "Edited 4-Sep-2025 00:11 by rmk") + (* ; "Edited 27-Jan-2025 16:46 by rmk") (* ; "Edited 21-Jan-2025 22:51 by rmk") (* ; "Edited 19-Jan-2025 12:21 by rmk") (* ; "Edited 3-Feb-2024 11:00 by rmk") @@ -1005,7 +1210,9 @@ (FUNCTION STRING.EQUAL]) (READ-UNICODE-MAPPING - [LAMBDA (FILESPEC PRINT NOERROR) (* ; "Edited 31-Jan-2025 17:43 by rmk") + [LAMBDA (FILESPEC PRINT NOERROR) (* ; "Edited 4-Sep-2025 00:17 by rmk") + (* ; "Edited 24-Apr-2025 15:32 by rmk") + (* ; "Edited 31-Jan-2025 17:43 by rmk") (* ; "Edited 17-Jan-2025 16:41 by rmk") (* ; "Edited 3-Feb-2024 00:21 by rmk") (* ; "Edited 5-Jan-2024 12:26 by rmk") @@ -1013,7 +1220,7 @@ (* ;; "Combines the char-mapping tables from FILES coded in the Uncode-CDROM format. Comments prefixed by # and") - (* ;; " Column 1: Input hex code in the format 0xXXXX") + (* ;; " Column 1: XCCS input hex code in the format 0xXXXX") (* ;; " Column 2: Corresponding Unicode code-sequence in the format") @@ -1025,15 +1232,15 @@ (* ;; "") - (* ;; "Result is a list of (fromcode tocode1 ... tocoden) integer lists (almost always with only a single tocode") + (* ;; "Result is a list of (fromcode tocode1 ... tocoden) integer lists (almost always with only a single tocode, where fromcode is an MCCS code and the tocodes are corresponding Unicodes.") - (FOR FILE [SEPBITTABLE _ (MAKEBITTABLE (CHARCODE (TAB SPACE] IN (READ-UNICODE-MAPPING-FILENAMES + (for FILE [SEPBITTABLE _ (MAKEBITTABLE (CHARCODE (TAB SPACE] in (READ-UNICODE-MAPPING-FILENAMES FILESPEC) - JOIN + join (* ;; "External format :THROUGH means read as bytes, so the Unicode UTF-8 comments cannot cause reading problems.") (CL:WITH-OPEN-FILE (STREAM FILE :DIRECTION :INPUT :EXTERNAL-FORMAT `(:THROUGH LF)) - (bind LINE NAME CHARSET START + (bind LINE NAME CHARSET START MAP first (CL:UNLESS (FILEPOS "Name:" STREAM NIL NIL NIL T) (ERROR "NOT A UNICODE MAPPING FILE" (FULLNAME STREAM))) (SETQ NAME (CL:STRING-TRIM " " (CL:READ-LINE STREAM NIL NIL))) @@ -1047,16 +1254,22 @@ when (SETQ START (STRPOSL SEPBITTABLE LINE 1 T)) unless (EQ (CHARCODE %#) (NTHCHARCODE LINE START)) - collect (bind END CODES while [SETQ END (OR (STRPOSL SEPBITTABLE LINE START) - (ADD1 (NCHARS LINE] - collect [CHARCODE.DECODE (SUBSTRING LINE START (SUB1 END) - (CONSTANT (CONCAT] - repeatwhile (AND (SETQ START (STRPOSL SEPBITTABLE LINE END T)) - (NEQ (CHARCODE %#) - (NTHCHARCODE LINE START))) - finally (CL:WHEN (CDDR $$VAL) + collect [SETQ MAP (bind END CODES while [SETQ END (OR (STRPOSL SEPBITTABLE LINE + START) + (ADD1 (NCHARS LINE] + collect [CHARCODE.DECODE (SUBSTRING LINE START + (SUB1 END) + (CONSTANT (CONCAT] + repeatwhile (AND (SETQ START (STRPOSL SEPBITTABLE LINE END + T)) + (NEQ (CHARCODE %#) + (NTHCHARCODE LINE START))) + finally (CL:WHEN (CDDR $$VAL) (* ; "Combiners go into a CADR list") - (RPLACD $$VAL (CONS (CDR $$VAL))))]) + (RPLACD $$VAL (CONS (CDR $$VAL))))] + (change (CAR MAP) + (XTOMCODE DATUM)) + MAP]) ) @@ -1066,7 +1279,9 @@ (DEFINEQ (MAKE-UNICODE-TRANSLATION-TABLES - [LAMBDA (MAPPING REINSTALL) (* ; "Edited 31-Jan-2025 17:46 by rmk") + [LAMBDA (MAPPING REINSTALL) (* ; "Edited 4-Sep-2025 00:30 by rmk") + (* ; "Edited 24-Apr-2025 15:47 by rmk") + (* ; "Edited 31-Jan-2025 17:46 by rmk") (* ; "Edited 26-Jan-2025 19:36 by rmk") (* ; "Edited 22-Jan-2025 14:22 by rmk") (* ; "Edited 19-Jan-2025 15:08 by rmk") @@ -1097,22 +1312,23 @@ (* ;; "") (if REINSTALL - then (SETQ *XCCS-LOADED-CHARSETS* (SETQ *UNICODE-LOADED-CHARSETS* NIL)) - (SETQ *NEXT-PRIVATE-XCCSCODE* FIRST-PRIVATE-XCCSCODE) + then (SETQ *MCCS-LOADED-CHARSETS* (SETQ *UNICODE-LOADED-CHARSETS* NIL)) + (SETQ *NEXT-PRIVATE-MCCSCODE* FIRST-PRIVATE-MCCSCODE) (SETQ *NEXT-PRIVATE-UNICODE* FIRST-PRIVATE-UNICODE) (LET [(TABLE (HASHARRAY (LENGTH MAPPING))) (INVERSETABLE (HASHARRAY (LENGTH MAPPING] (MERGE-UNICODE-TRANSLATION-TABLES NIL MAPPING TABLE INVERSETABLE) - (SETQ *XCCSTOUNICODE* TABLE) - (SETQ *UNICODETOXCCS* INVERSETABLE) - (LIST *XCCSTOUNICODE* *UNICODETOXCCS*)) - else (CL:UNLESS (BOUNDP '*NEXT-PRIVATE-XCCSCODE*) - (SETQ *NEXT-PRIVATE-XCCSCODE* FIRST-PRIVATE-XCCSCODE) + (SETQ *MCCSTOUNICODE* TABLE) + (SETQ *UNICODETOMCCS* INVERSETABLE) + (LIST *MCCSTOUNICODE* *UNICODETOMCCS*)) + else (CL:UNLESS (BOUNDP '*NEXT-PRIVATE-MCCSCODE*) + (SETQ *NEXT-PRIVATE-MCCSCODE* FIRST-PRIVATE-MCCSCODE) (SETQ *NEXT-PRIVATE-UNICODE* FIRST-PRIVATE-UNICODE)) (MERGE-UNICODE-TRANSLATION-TABLES NIL MAPPING]) (MERGE-UNICODE-TRANSLATION-TABLES - [LAMBDA (INVERSE MAPPING TABLE INVERSETABLE) (* ; "Edited 31-Jan-2025 17:45 by rmk") + [LAMBDA (INVERSE MAPPING TABLE INVERSETABLE) (* ; "Edited 24-Apr-2025 15:28 by rmk") + (* ; "Edited 1-Feb-2025 21:42 by rmk") (* ; "Edited 26-Jan-2025 12:58 by rmk") (* ; "Edited 22-Jan-2025 08:20 by rmk") (* ; "Edited 19-Jan-2025 15:58 by rmk") @@ -1124,33 +1340,32 @@ (* ;; "MAPPINGS is a list of pairs that map domain codes to range codes. TABLE and INVERSETABLE default to *XCCSTOUNICODE* *UNICODETOXCCS* respectively. ") (CL:UNLESS TABLE - [SETQ TABLE (OR *XCCSTOUNICODE* (SETQ *XCCSTOUNICODE* (HASHARRAY (LENGTH MAPPING]) + [SETQ TABLE (OR *MCCSTOUNICODE* (SETQ *MCCSTOUNICODE* (HASHARRAY (LENGTH MAPPING]) (CL:UNLESS INVERSETABLE - [SETQ INVERSETABLE (OR *UNICODETOXCCS* (SETQ *UNICODETOXCCS* (HASHARRAY (LENGTH MAPPING]) + [SETQ INVERSETABLE (OR *UNICODETOMCCS* (SETQ *UNICODETOMCCS* (HASHARRAY (LENGTH MAPPING]) (for M D R OLDR in MAPPING first (CL:IF INVERSE (swap TABLE INVERSETABLE)) eachtime (SETQ D (CAR M)) (SETQ R (CADR M)) - (* ;; "We don't do combiners and we don't go outside of SMALLP's") + (* ;; "We don't do combiners, but we are allowing non-SMALLP's") unless (OR (LISTP D) - (LISTP R)) when (AND (SMALLP D) - (SMALLP R)) do - - (* ;; "The (CONS R OLDR) deals with alternatives: (U X1) (U X2) => (U (X1 X2)), lowest code first. Those are only possible in the U-to-X direction when the tables contain (X1 U) and (X2 U). There are no duplicates/alternative table entries in the X-to-U direction.") - - (SETQ OLDR (GETHASH D TABLE)) - (CL:UNLESS (MEMB R OLDR) - (PUTHASH D (SORT (CONS R OLDR)) - TABLE)) - (swap D R) - (SETQ OLDR (GETHASH D INVERSETABLE)) - (CL:UNLESS (MEMB R OLDR) - (PUTHASH D (SORT (CONS R OLDR)) - INVERSETABLE))) + (LISTP R)) do + (* ;; "The (CONS R OLDR) deals with alternatives: (U X1) (U X2) => (U (X1 X2)), lowest code first. Those are only possible in the U-to-X direction when the tables contain (X1 U) and (X2 U). There are no duplicates/alternative table entries in the X-to-U direction.") + + (SETQ OLDR (GETHASH D TABLE)) + (CL:UNLESS (MEMB R OLDR) + (PUTHASH D (SORT (CONS R OLDR)) + TABLE)) + (swap D R) + (SETQ OLDR (GETHASH D INVERSETABLE)) + (CL:UNLESS (MEMB R OLDR) + (PUTHASH D (SORT (CONS R OLDR)) + INVERSETABLE))) (LIST TABLE INVERSETABLE]) (UNICODE.UNMAPPED - [LAMBDA (CODE TABLE DONTFAKE) (* ; "Edited 22-Jan-2025 08:19 by rmk") + [LAMBDA (CODE TABLE DONTFAKE) (* ; "Edited 24-Apr-2025 15:48 by rmk") + (* ; "Edited 22-Jan-2025 08:19 by rmk") (* ; "Edited 19-Jan-2025 22:02 by rmk") (* ; "Edited 18-Jan-2025 12:02 by rmk") (* ; "Edited 2-Feb-2024 23:52 by rmk") @@ -1165,7 +1380,7 @@ (* ;; "") - (PROG ((INVERSE (EQ TABLE *UNICODETOXCCS*)) + (PROG ((INVERSE (EQ TABLE *UNICODETOMCCS*)) RANGE HASH) (* ;; "If we already looked up CODE's character set in a file, then we have already filled in its information in the translation table. If it didn't have a code for a particular character, then we fake it here. Faked codes are negative, so we can detect them easily, and interpret them with IABS.") @@ -1183,15 +1398,15 @@ (* ;; "Our attempt at extending the known tables did not provide a mapping for CODE. So we fake it up with the next unused private code in the code space. ") - (* ;; "The number of possible faked mappings is determined by the number of private-use Unicodes, since the XCCS character space is pretty sparse. The codes don't have to come from the same part of the code space, and the NEXTCODEs are saved in global variables. The last available codes are constants.") + (* ;; "The number of possible faked mappings is determined by the number of private-use Unicodes, since the MCCS character space is pretty sparse. The codes don't have to come from the same part of the code space, and the NEXTCODEs are saved in global variables. The last available codes are constants.") - (CL:WHEN (IEQP *NEXT-PRIVATE-XCCSCODE* LAST-PRIVATE-XCCSCODE) + (CL:WHEN (IEQP *NEXT-PRIVATE-MCCSCODE* LAST-PRIVATE-MCCSCODE) (* ;  "Same number of available codes both ways") (ERROR "EXHAUSTED RANGE FOR UNMAPPED CODES")) (if INVERSE - then (SETQ RANGE *NEXT-PRIVATE-XCCSCODE*) - (add *NEXT-PRIVATE-XCCSCODE* 1) + then (SETQ RANGE *NEXT-PRIVATE-MCCSCODE*) + (add *NEXT-PRIVATE-MCCSCODE* 1) else (SETQ RANGE *NEXT-PRIVATE-UNICODE*) (add *NEXT-PRIVATE-UNICODE* 1)) (MERGE-UNICODE-TRANSLATION-TABLES INVERSE (CONS (LIST CODE RANGE))) @@ -1201,7 +1416,10 @@ (RETURN (CONS RANGE)))]) (UNICODE-EXTEND-TRANSLATION? - [LAMBDA (CODE TABLE) (* ; "Edited 26-Jan-2025 11:26 by rmk") + [LAMBDA (CODE TABLE) (* ; "Edited 4-Sep-2025 00:34 by rmk") + (* ; "Edited 29-Jun-2025 16:44 by rmk") + (* ; "Edited 24-Apr-2025 15:49 by rmk") + (* ; "Edited 26-Jan-2025 11:26 by rmk") (* ; "Edited 21-Jan-2025 22:31 by rmk") (* ; "Edited 18-Jan-2025 12:40 by rmk") (* ; "Edited 13-Jan-2025 23:50 by rmk") @@ -1210,28 +1428,28 @@ (* ; "Edited 5-Feb-2024 13:48 by rmk") (* ; "Edited 3-Feb-2024 12:40 by rmk") - (* ;; "There is currently no mapping for CODE in TABLE, hopefully just because the relevant character-set mapping has not been installed. We infer from TABLE whether CODE is an XCCS or UNICODE code and look for the proper mapping table (forward or inverted) for its character set. ") + (* ;; "There is currently no mapping for CODE in TABLE, hopefully just because the relevant character-set mapping has not been installed. We infer from TABLE whether CODE is an MCCS or UNICODE code and look for the proper mapping table (forward or inverted) for its character set. ") (* ;; "We record which character sets we have already expanded so we don't do them again.") (LET ((CHARSET (\CHARSET CODE)) - (INVERSE (EQ TABLE *UNICODETOXCCS*)) + (INVERSE (EQ TABLE *UNICODETOMCCS*)) MAPPING FILE) (* ;; "If we already looked for CHARSET in the file and found anything, it has already been merged. Otherwise, it would just fail again") (CL:UNLESS (MEMB CHARSET (CL:IF INVERSE *UNICODE-LOADED-CHARSETS* - *XCCS-LOADED-CHARSETS*)) + *MCCS-LOADED-CHARSETS*)) (* ;; "Don't try this charset again.") (CL:IF INVERSE (push *UNICODE-LOADED-CHARSETS* CHARSET) - (push *XCCS-LOADED-CHARSETS* CHARSET)) + (push *MCCS-LOADED-CHARSETS* CHARSET)) (SETQ FILE (FINDFILE (CL:IF INVERSE - 'INVERTED-UNICODE-MAPPINGS.TXT - 'UNICODE-MAPPINGS.TXT) + 'UNICODE-TO-MCCS-MAPPINGS + MCCS-TO-UNICODE-MAPPINGS) T UNICODEDIRECTORIES)) (* ;; "The mappings files are indexed by CHARSET.") @@ -1250,7 +1468,8 @@ (DEFINEQ (ALL-UNICODE-MAPPINGS - [LAMBDA (INVERTED FILE) (* ; "Edited 31-Jan-2025 17:46 by rmk") + [LAMBDA (INVERTED FILE) (* ; "Edited 24-Apr-2025 15:51 by rmk") + (* ; "Edited 31-Jan-2025 17:46 by rmk") (* ; "Edited 26-Jan-2025 13:40 by rmk") (* ; "Edited 22-Jan-2025 14:07 by rmk") (* ; "Edited 19-Jan-2025 12:20 by rmk") @@ -1260,16 +1479,16 @@ (* ; "Edited 5-Feb-2024 13:14 by rmk") (* ; "Edited 3-Feb-2024 09:16 by rmk") - (* ;; "Reads all the XCCS-to-UNICODE mapping files that we know about, and produces a 2-level index that maps between XCCS codes and UNICODE codes, depending on INVERTED.") + (* ;; "Reads all the XCCS-to-UNICODE mapping files that we know about, and produces a 2-level index that maps between MCCS codes and UNICODE codes, depending on INVERTED.") (* ;; "The first index level segments all the domain codes according to their character sets. The segments are sorted by character set, the pairs within each segment are sorted by their domain codes. ") (* ;;  "E.g. if INVERTED=NIL and given a XCCS code, the lookup for the corresponding Unicode(s) is") - (* ;; " (CADR (ASSOC XCCSCODE (\CHARSET XCCSCODE) INDEX)))).") + (* ;; " (CADR (ASSOC MCCSCODE (\CHARSET MCCSCODE) INDEX)))).") - (* ;; "If FILE is not NIL, the result is written to a file. If FILE is T, the file is either UNICODE-MAPPINGS.TXT or INVERTED-UNICODED-MAPPINGS.TXT, depending on INVERTED.") + (* ;; "If FILE is not NIL, the result is written to a file. If FILE is T, the file is either MCCS-TO-UNICODE-MAPPINGS.TXT or UNICODE-TO-MCCS-MAPPINGS.TXT, depending on INVERTED.") (LET (INDEX) (for PAIR DOMAIN RANGE CHARSET in (READ-UNICODE-MAPPING 'ALL) eachtime (SETQ DOMAIN @@ -1287,7 +1506,7 @@ INDEX) (CAR (push INDEX (CONS (\CHARSET DOMAIN] - (* ;; "For alternative mappings (in the U-to-X direction) we end up with (D R1 R2 ...). (CADR is the first (and almost always) the only one.") + (* ;; "For alternative mappings (in the U-to-M direction) we end up with (D R1 R2 ...). (CADR is the first (and almost always) the only one.") (pushnew [CDR (OR (ASSOC DOMAIN (CDR CHARSET)) (CAR (push (CDR CHARSET) @@ -1312,8 +1531,8 @@ then (SETQ FILE (PACKFILENAME 'BODY (if (NEQ FILE T) then FILE elseif INVERTED - then 'INVERTED-UNICODE-MAPPINGS - else 'UNICODE-MAPPINGS) + then 'UNICODE-TO-MCCS-MAPPINGS + else 'MCCS-TO-UNICODE-MAPPINGS) 'DIRECTORY (CAR (MKLIST UNICODEDIRECTORIES)) 'EXTENSION @@ -1330,19 +1549,43 @@ (PRINTOUT STREAM "STOP" T) (FULLNAME STREAM)) else INDEX]) + +(XCCSJAPANESECHARSETS + [LAMBDA (OCTAL FILE) (* ; "Edited 11-Jun-2025 23:00 by rmk") + + (* ;; "Returns the list of numbers for the Japanese character sets.") + + (for F POS CS in (READ-UNICODE-MAPPING-FILENAMES "JIS") + when (SETQ POS (STRPOS "XCCS-" F 1 NIL NIL T)) + collect [SETQ CS (SUBSTRING F POS (SUB1 (STRPOS '=JIS F POS] + (CL:IF OCTAL + CS + (MKATOM (CONCAT CS "Q"))) + finally (SORT $$VAL) + (CL:WHEN FILE + (RETURN (CL:WITH-OPEN-FILE (STREAM (PACKFILENAME 'BODY (CL:IF (EQ FILE T) + "JAPANESECHARSETS" + FILE) + 'DIRECTORY + (CAR (MKLIST UNICODEDIRECTORIES)) + 'EXTENSION + 'TXT) + :DIRECTION :OUTPUT :IF-EXISTS :NEW-VERSION) + (PRINT $$VAL STREAM) + (FULLNAME STREAM))))]) ) -(RPAQ? *XCCSTOUNICODE* ) +(RPAQ? *MCCSTOUNICODE* ) -(RPAQ? *UNICODETOXCCS* ) +(RPAQ? *UNICODETOMCCS* ) -(RPAQ? *XCCS-LOADED-CHARSETS* ) +(RPAQ? *MCCS-LOADED-CHARSETS* ) (RPAQ? *UNICODE-LOADED-CHARSETS* ) (DECLARE%: DOEVAL@COMPILE DONTCOPY -(GLOBALVARS *XCCSTOUNICODE* *UNICODETOXCCS* *NEXT-PRIVATE-UNICODE* *NEXT-PRIVATE-XCCSCODE* - *XCCS-LOADED-CHARSETS* *UNICODE-LOADED-CHARSETS*) +(GLOBALVARS *MCCSTOUNICODE* *UNICODETOMCCS* *NEXT-PRIVATE-UNICODE* *NEXT-PRIVATE-MCCSCODE* + *MCCS-LOADED-CHARSETS* *UNICODE-LOADED-CHARSETS*) ) (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE @@ -1351,15 +1594,15 @@ (RPAQ LAST-PRIVATE-UNICODE (HEXNUM? "F8FF")) -(RPAQ FIRST-PRIVATE-XCCSCODE (CHARCODE "200,0")) +(RPAQ FIRST-PRIVATE-MCCSCODE (CHARCODE "200,0")) -(RPAQ LAST-PRIVATE-XCCSCODE (CHARCODE "230,377")) +(RPAQ LAST-PRIVATE-MCCSCODE (CHARCODE "230,377")) (CONSTANTS (FIRST-PRIVATE-UNICODE (HEXNUM? "E000")) (LAST-PRIVATE-UNICODE (HEXNUM? "F8FF")) - (FIRST-PRIVATE-XCCSCODE (CHARCODE "200,0")) - (LAST-PRIVATE-XCCSCODE (CHARCODE "230,377"))) + (FIRST-PRIVATE-MCCSCODE (CHARCODE "200,0")) + (LAST-PRIVATE-MCCSCODE (CHARCODE "230,377"))) ) (DECLARE%: EVAL@COMPILE @@ -1368,11 +1611,11 @@ (* ;; "Return NIL if RANGE is a fake range in TABLE, otherwise RANGE.") - (CL:UNLESS (CL:IF (EQ TABLE *XCCSTOUNICODE*) + (CL:UNLESS (CL:IF (EQ TABLE *MCCSTOUNICODE*) (AND (IGEQ RANGE FIRST-PRIVATE-UNICODE) (ILEQ RANGE LAST-PRIVATE-UNICODE)) - (AND (IGEQ RANGE FIRST-PRIVATE-XCCSCODE) - (ILEQ RANGE LAST-PRIVATE-XCCSCODE))) + (AND (IGEQ RANGE FIRST-PRIVATE-MCCSCODE) + (ILEQ RANGE LAST-PRIVATE-MCCSCODE))) RANGE))) ) ) @@ -1581,29 +1824,6 @@ (CAR UNICODEDIRECTORIES) 'EXTENSION 'TXT]) - -(HEXSTRING - [LAMBDA (N WIDTH) (* ; "Edited 23-Jul-2020 08:28 by rmk:") - (* ; "Edited 20-Dec-93 17:51 by rmk:") - - (* ;; - "Converts positive numbers to Hex strings, padding on the right with 0 up to WIDTH if given.") - - (CL:UNLESS (FIXP N) - (SETQ N (CHARCODE.DECODE N))) - (LET [CHAR (STR (ALLOCSTRING [IMAX (OR WIDTH 0) - (FOR I (LEFT _ N) FROM 0 UNTIL (EQ LEFT 0) - DO (SETQ LEFT (LRSH LEFT 4)) - FINALLY (RETURN (MAX I 1] - (CHARCODE 0] - (FOR I FROM -1 BY -1 UNTIL (EQ N 0) - DO (SETQ CHAR (LOGAND N 15)) - [RPLCHARCODE STR I (IF (ILESSP CHAR 10) - THEN (+ CHAR (CHARCODE 0)) - ELSE (+ (- CHAR 10) - (CHARCODE A] - (SETQ N (LRSH N 4))) - STR]) ) (DEFINEQ @@ -1705,68 +1925,6 @@ (LOGOR (LLSH 2 6) (LOADBYTE CHARCODE 0 6))) ELSE (ERROR "CHARCODE too big for UTF8" CHARCODE]) - -(XTOUSTRING - [LAMBDA (XCCSSTRING RAWFLG) (* ; "Edited 3-Feb-2024 14:55 by rmk") - (* ; "Edited 10-Aug-2020 21:42 by rmk:") - - (* ;; "Produces a string that contains the UTF8 bytes that represent the characters in XCCSSTRING. Applies the XCCSTOUNICODE translation unless RAWFLG. ") - - (* ;; "The resulting string will not be readable inside Medley.") - - (LET [(USTR (ALLOCSTRING (NUTF8-STRING-BYTES XCCSSTRING RAWFLG] - (FOR I CHARCODE (SINDEX _ 0) FROM 1 WHILE (SETQ CHARCODE (NTHCHARCODE XCCSSTRING I)) - DO (CL:UNLESS RAWFLG - (SETQ CHARCODE (XTOUCODE CHARCODE))) - (IF (ILESSP CHARCODE 128) - THEN (RPLCHARCODE USTR (ADD SINDEX 1) - CHARCODE) - ELSEIF (ILESSP CHARCODE 2048) - THEN (* ; "x800") - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 3 6) - (LRSH CHARCODE 6))) - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 2 6) - (LOADBYTE CHARCODE 0 6))) - ELSEIF (ILESSP CHARCODE 65536) - THEN (* ; "x10000") - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 7 5) - (LRSH CHARCODE 12))) - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 2 6) - (LOADBYTE CHARCODE 6 6))) - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 2 6) - (LOADBYTE CHARCODE 0 6))) - ELSEIF (ILESSP CHARCODE 2097152) - THEN (* ; "x200000") - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 15 4) - (LRSH CHARCODE 18))) - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 2 6) - (LOADBYTE CHARCODE 12 6))) - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 2 6) - (LOADBYTE CHARCODE 6 6))) - (RPLCHARCODE USTR (ADD SINDEX 1) - (LOGOR (LLSH 2 6) - (LOADBYTE CHARCODE 0 6))) - ELSE (SHOULDNT))) - USTR]) - -(XCCSSTRING - [LAMBDA (CODE) (* ; "Edited 13-Aug-2020 12:16 by rmk:") - - (* ;; "Returns XCCS character representation of string %"cset,char%"") - - (CL:UNLESS (FIXP CODE) - (SETQ CODE (CHCON1 CODE))) - (CONCAT (OCTALSTRING (LRSH CODE 8)) - "," - (OCTALSTRING (LOGAND CODE 255]) ) @@ -1776,40 +1934,39 @@ (DEFINEQ (SHOWCHARS - [LAMBDA (FROMCHAR TOCHAR FONT) (* ; "Edited 26-Jan-2024 14:18 by mth") + [LAMBDA (FONT FROMCHAR TOCHAR ONELINE) (* ; "Edited 7-Sep-2025 20:29 by rmk") + (* ; "Edited 2-Sep-2025 10:26 by rmk") + (* ; "Edited 24-Jul-2025 11:30 by rmk") + (* ; "Edited 8-Jun-2025 20:05 by rmk") + (* ; "Edited 26-Jan-2024 14:18 by mth") (* ; "Edited 1-Aug-2020 09:27 by rmk:") - (RESETFORM (DSPFONT (OR FONT '(CLASSIC 12)) - T) - (CL:WHEN (AND (SMALLP FROMCHAR) - (NOT TOCHAR)) - - (* ;; - "If a small number, assume it's an octal (in decimal) character set, no need for string quotes") - - (SETQ TOCHAR (CONCAT FROMCHAR "," 376)) - (SETQ FROMCHAR (CONCAT FROMCHAR "," 41))) - (CL:UNLESS (SMALLP FROMCHAR) - (SETQ FROMCHAR (CHARCODE.DECODE FROMCHAR))) - (CL:UNLESS (SMALLP TOCHAR) - (SETQ TOCHAR (CL:IF TOCHAR - (CHARCODE.DECODE TOCHAR) - FROMCHAR))) - (for C from FROMCHAR to TOCHAR unless (AND (IGEQ (LOGAND C 255) - 127) - (ILEQ (LOGAND C 255) - (PLUS 128 33))) - do (PRINTOUT T .P2 (CONCAT (OCTALSTRING (LRSH C 8)) - "," - (OCTALSTRING (LOGAND C 255))) - 10 - (CHARACTER C) - T]) + [SETQ FONT (FONTCREATE (OR FONT '(CLASSIC 12] + (RESETLST + [LET ((OLDFONT (DSPFONT NIL T)) + CHARS) + (CL:UNLESS (CHARCODEP FROMCHAR) + (SETQ FROMCHAR (OR (CHARCODE.DECODE FROMCHAR T) + FROMCHAR))) + (SETQ CHARS (if (CHARCODEP FROMCHAR) + then (CL:UNLESS (CHARCODEP TOCHAR) + (SETQ TOCHAR (OR (CHARCODE.DECODE FROMCHAR) + FROMCHAR))) + (for C from FROMCHAR to TOCHAR collect C) + else (CHCON FROMCHAR))) + [RESETSAVE OLDFONT '(PROGN (DSPFONT OLDVALUE] + (TERPRI) + (for C in CHARS do (PRINTOUT T .FONT OLDFONT (CONCAT (OCTALSTRING (\CHARSET C)) + "," + (OCTALSTRING (\CHAR8CODE C))) + 10 .FONT FONT (CHARACTER C)) + (CL:UNLESS ONELINE (PRINTOUT T T]) + (TERPRI]) ) (DECLARE%: DOEVAL@LOAD DONTCOPY (DECLARE%: EVAL@COMPILE (PUTPROPS HEXCHAR MACRO ((CODE) - (HEXSTRING CODE))) + (HEXSTRING CODE))) (PUTPROPS OCTALCHAR MACRO [(CODE) (CONCAT (OCTALSTRING (\CHARSET CODE)) @@ -1825,23 +1982,25 @@ (PUTPROPS UNICODE FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4369 19181 (UTF8.OUTCHARFN 4379 . 7286) (UTF8.SLUG.OUTCHARFN 7288 . 7843) ( -UTF8.INCCODEFN 7845 . 13457) (UTF8.PEEKCCODEFN 13459 . 18199) (\UTF8.BACKCCODEFN 18201 . 19179)) ( -19182 23436 (UTF16BE.OUTCHARFN 19192 . 20102) (UTF16BE.INCCODEFN 20104 . 21120) (UTF16BE.PEEKCCODEFN -21122 . 22353) (\UTF16BE.BACKCCODEFN 22355 . 23434)) (23437 27724 (UTF16LE.OUTCHARFN 23447 . 24454) ( -UTF16LE.INCCODEFN 24456 . 25472) (UTF16LE.PEEKCCODEFN 25474 . 26641) (\UTF16LE.BACKCCODEFN 26643 . -27722)) (27725 30772 (READBOM 27735 . 29804) (WRITEBOM 29806 . 30770)) (30802 34367 ( -MAKE-UNICODE-FORMATS 30812 . 34365)) (34464 38849 (UTF8.BINCODE 34474 . 37053) (\UTF8.FETCHCODE 37055 - . 38847)) (38850 44371 (UTF8.VALIDATE 38860 . 41457) (UTF8-SIZE-FROM-BYTE1 41459 . 41891) ( -NUTF8-BYTE1-BYTES 41893 . 42630) (NUTF8-CODE-BYTES 42632 . 43689) (NUTF8-STRING-BYTES 43691 . 44369)) -(46099 48246 (XTOUCODE 46109 . 46281) (UTOXCODE 46283 . 46564) (XTOUCODE? 46566 . 47387) (UTOXCODE? -47389 . 48244)) (49483 56904 (READ-UNICODE-MAPPING-FILENAMES 49493 . 53181) (READ-UNICODE-MAPPING -53183 . 56902)) (56971 68830 (MAKE-UNICODE-TRANSLATION-TABLES 56981 . 60073) ( -MERGE-UNICODE-TRANSLATION-TABLES 60075 . 62788) (UNICODE.UNMAPPED 62790 . 66005) ( -UNICODE-EXTEND-TRANSLATION? 66007 . 68828)) (68831 74210 (ALL-UNICODE-MAPPINGS 68841 . 74208)) (75801 -88232 (WRITE-UNICODE-MAPPING 75811 . 79561) (WRITE-UNICODE-INCLUDED 79563 . 84285) ( -WRITE-UNICODE-MAPPING-HEADER 84287 . 85535) (WRITE-UNICODE-MAPPING-FILENAME 85537 . 87067) (HEXSTRING -87069 . 88230)) (88233 88909 (XCCS-UTF8-AFTER-OPEN 88243 . 88907)) (91434 96936 (UTF8HEXSTRING 91444 - . 93649) (XTOUSTRING 93651 . 96571) (XCCSSTRING 96573 . 96934)) (96963 98473 (SHOWCHARS 96973 . 98471 -))))) + (FILEMAP (NIL (4433 19681 (UTF8.OUTCHARFN 4443 . 7459) (UTF8.SLUG.OUTCHARFN 7461 . 8125) ( +UTF8.INCCODEFN 8127 . 13848) (UTF8.PEEKCCODEFN 13850 . 18699) (\UTF8.BACKCCODEFN 18701 . 19679)) ( +19682 24372 (UTF16BE.OUTCHARFN 19692 . 20711) (UTF16BE.INCCODEFN 20713 . 21838) (UTF16BE.PEEKCCODEFN +21840 . 23180) (\UTF16BE.BACKCCODEFN 23182 . 24370)) (24373 29096 (UTF16LE.OUTCHARFN 24383 . 25499) ( +UTF16LE.INCCODEFN 25501 . 26626) (UTF16LE.PEEKCCODEFN 26628 . 27904) (\UTF16LE.BACKCCODEFN 27906 . +29094)) (29097 32144 (READBOM 29107 . 31176) (WRITEBOM 31178 . 32142)) (32174 35739 ( +MAKE-UNICODE-FORMATS 32184 . 35737)) (35836 40330 (UTF8.BINCODE 35846 . 38534) (\UTF8.FETCHCODE 38536 + . 40328)) (40331 45958 (UTF8.VALIDATE 40341 . 42938) (NUTF8-BYTE1-BYTES 42940 . 43677) ( +NUTF8-CODE-BYTES 43679 . 44736) (NUTF8-STRING-BYTES 44738 . 45634) (N-MCHARS 45636 . 45956)) (47686 +56555 (MTOUCODE 47696 . 48083) (UTOMCODE 48085 . 48475) (MTOUCODE? 48477 . 49510) (UTOMCODE? 49512 . +50476) (MTOUSTRING 50478 . 51063) (UTOMSTRING 51065 . 51650) (MTOUTF8STRING 51652 . 55658) ( +UTF8TOMSTRING 55660 . 56553)) (56556 62258 (XTOUCODE 56566 . 57084) (UTOXCODE 57086 . 57594) ( +XTOUCODE? 57596 . 58657) (UTOXCODE? 58659 . 59742) (XTOUSTRING 59744 . 60437) (UTOXSTRING 60439 . +61180) (XTOUTF8STRING 61182 . 62256)) (63495 71791 (READ-UNICODE-MAPPING-FILENAMES 63505 . 67302) ( +READ-UNICODE-MAPPING 67304 . 71789)) (71858 84200 (MAKE-UNICODE-TRANSLATION-TABLES 71868 . 75178) ( +MERGE-UNICODE-TRANSLATION-TABLES 75180 . 77724) (UNICODE.UNMAPPED 77726 . 81050) ( +UNICODE-EXTEND-TRANSLATION? 81052 . 84198)) (84201 91037 (ALL-UNICODE-MAPPINGS 84211 . 89700) ( +XCCSJAPANESECHARSETS 89702 . 91035)) (92628 103896 (WRITE-UNICODE-MAPPING 92638 . 96388) ( +WRITE-UNICODE-INCLUDED 96390 . 101112) (WRITE-UNICODE-MAPPING-HEADER 101114 . 102362) ( +WRITE-UNICODE-MAPPING-FILENAME 102364 . 103894)) (103897 104573 (XCCS-UTF8-AFTER-OPEN 103907 . 104571) +) (107098 109315 (UTF8HEXSTRING 107108 . 109313)) (109342 111222 (SHOWCHARS 109352 . 111220))))) STOP diff --git a/library/UNICODE.LCOM b/library/UNICODE.LCOM index b081f62401872b32cfb5f0c223fd55eddf29051e..c9729778b2089dba3498b0258dc44b0abc8b3723 100644 GIT binary patch delta 7463 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 R673$kdw2c!=fAu4{{fP4a%cbm delta 4096 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 Date: Thu, 11 Sep 2025 23:45:34 -0700 Subject: [PATCH 06/40] MCCS as default format -- see docs/internal/MCCS.TEDIT --- internal/loadups/LOADUP-FULL | 11 +- internal/loadups/LOADUP-FULL.LCOM | Bin 3030 -> 3034 bytes sources/BOOTSTRAP | 147 ++- sources/BOOTSTRAP.LCOM | Bin 14652 -> 14452 bytes sources/EXTERNALFORMAT | 28 +- sources/FILESETS | 8 +- sources/LLKEY | 76 +- sources/LLKEY.LCOM | Bin 66413 -> 66413 bytes sources/MCCS | 1379 +++++++++++++++++++++++++++++ sources/MCCS.LCOM | Bin 0 -> 21214 bytes sources/PRETTY | 42 +- sources/PRETTY.LCOM | Bin 30501 -> 30333 bytes 12 files changed, 1528 insertions(+), 163 deletions(-) create mode 100644 sources/MCCS create mode 100644 sources/MCCS.LCOM diff --git a/internal/loadups/LOADUP-FULL b/internal/loadups/LOADUP-FULL index ed1583f58..3c1734ada 100644 --- a/internal/loadups/LOADUP-FULL +++ b/internal/loadups/LOADUP-FULL @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 1-Sep-2025 11:59:41" {WMEDLEY}loadups>LOADUP-FULL.;31 5430 +(FILECREATED " 2-Sep-2025 20:07:20" {WMEDLEY}loadups>LOADUP-FULL.;33 5541 :EDIT-BY rmk - :CHANGES-TO (FNS LOADUP-FULL) + :CHANGES-TO (FNS LOADFULLFONTS) - :PREVIOUS-DATE "18-Aug-2025 12:09:49" {WMEDLEY}loadups>LOADUP-FULL.;29) + :PREVIOUS-DATE " 1-Sep-2025 11:59:41" {WMEDLEY}loadups>LOADUP-FULL.;31) (PRETTYCOMPRINT LOADUP-FULLCOMS) @@ -16,7 +16,8 @@ (DEFINEQ (LOADFULLFONTS - [LAMBDA NIL (* ; "Edited 13-Jul-2025 11:40 by rmk") + [LAMBDA NIL (* ; "Edited 2-Sep-2025 20:06 by rmk") + (* ; "Edited 13-Jul-2025 11:40 by rmk") (* ; "Edited 30-Jun-2025 00:04 by rmk") (* ; "Edited 20-Jun-2025 11:16 by rmk") (* ; "Edited 16-Jun-2025 15:34 by rmk") @@ -98,5 +99,5 @@ (FIXMETA) (DECLARE%: DONTCOPY - (FILEMAP (NIL (456 5392 (LOADFULLFONTS 466 . 2371) (LOADUP-FULL 2373 . 5142) (FIXMETA 5144 . 5390))))) + (FILEMAP (NIL (458 5503 (LOADFULLFONTS 468 . 2482) (LOADUP-FULL 2484 . 5253) (FIXMETA 5255 . 5501))))) STOP diff --git a/internal/loadups/LOADUP-FULL.LCOM b/internal/loadups/LOADUP-FULL.LCOM index e28b50b4377f37a6a0e900de6bb56a4fdff8d3f7..11857189730218d4dd38462589a2fd968bbe1b3d 100644 GIT binary patch delta 238 zcmca6eoK5pgs_oraB6|Bk%5t^f{}rhfw`5D!NhE9Nn=d~E+qvdNkdaBLlY|_%ZdA? z(%nLReBAu~LV^`C^AwaoJOyN>dU|?F3Mq*tsVP{^Ft$+A=IP_=9OUX4;_5Pa4WqWMsMd IJ>zRm0B=Gv#{d8T diff --git a/sources/BOOTSTRAP b/sources/BOOTSTRAP index c81fa6554..6dc3543d1 100644 --- a/sources/BOOTSTRAP +++ b/sources/BOOTSTRAP @@ -1,16 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Sep-2021 10:25:31"  -{DSK}kaplan>Local>medley3.5>git-medley>sources>BOOTSTRAP.;60 47698 - changes to%: (FNS PRINT-READER-ENVIRONMENT READ-READER-ENVIRONMENT) +(FILECREATED "23-Apr-2025 23:39:10" {WMEDLEY}BOOTSTRAP.;61 47417 - previous date%: "17-Aug-2021 00:08:39" -{DSK}kaplan>Local>medley3.5>git-medley>sources>BOOTSTRAP.;58) + :EDIT-BY rmk + :CHANGES-TO (FNS PRINT-READER-ENVIRONMENT \DO-DEFINE-FILE-INFO) + + :PREVIOUS-DATE "27-Sep-2021 10:25:31" {WMEDLEY}BOOTSTRAP.;59) -(* ; " -Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT BOOTSTRAPCOMS) @@ -19,7 +16,7 @@ Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. (FNS GETPROP SETATOMVAL RPAQQ RPAQ RPAQ? MOVD MOVD? SELECTQ SELECTQ1 NCONC1 PUTPROP PROPNAMES ADDPROP REMPROP MEMB CLOSEF?)) (COMS (* ; - "Need these in order to load even compiled files SYSLOAD") + "Need these in order to load even compiled files SYSLOAD") (FNS LOAD \LOAD-STREAM FILECREATED FILECREATED1 PRETTYCOMPRINT BOOTSTRAP-NAMEFIELD PUTPROPS DECLARE%: DECLARE%:1 ROOTFILENAME)) [COMS (* ; "For DEFINE-FILE-INFO") @@ -714,66 +711,64 @@ Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. (SET-READER-ENVIRONMENT (\DO-DEFINE-FILE-INFO NIL ARGS]) (\DO-DEFINE-FILE-INFO - [LAMBDA (STREAM ARGS) (* ; "Edited 17-Aug-2021 00:05 by rmk:") + [LAMBDA (STREAM ARGS) (* ; "Edited 23-Apr-2025 23:12 by rmk") + (* ; "Edited 17-Aug-2021 00:05 by rmk:") -(* ;;; "Processes the (DEFINE-FILE-INFO . ARGS) at the front of STREAM. This converts the ARGS list to a READER-ENVIRONMENT, and also imposes the external format on STREAM, if non-NIL.") +(* ;;; "Processes the (DEFINE-FILE-INFO . ARGS) at the front of STREAM. This converts the ARGS list to a READER-ENVIRONMENT, and also imposes the external format on STREAM, if non-NIL.") - (* ;; "Include the :PACKAGE... for bootstrapping before in sysouts without an updated version of \LOAD-STREAM") + (* ;; "Include the :PACKAGE... for bootstrapping before in sysouts without an updated version of \LOAD-STREAM") -(* ;;; "") +(* ;;; "") -(* ;;; "The LISTP forms for package and readtable are to allow for those to be created if they don't already exist. If they do exist, the forms should not make any incompatiblel changes--those should be in a file command somewhere.") +(* ;;; "The LISTP forms for package and readtable are to allow for those to be created if they don't already exist. If they do exist, the forms should not make any incompatiblel changes--those should be in a file command somewhere.") -(* ;;; "It doesn't make sense to produce an a new number base by evaluation in a particular runtime environment. I'm leaving this in for reading, for backward compatibility. Presumably future writing will instantiate to the particular number.") +(* ;;; "It doesn't make sense to produce an a new number base by evaluation in a particular runtime environment. I'm leaving this in for reading, for backward compatibility. Presumably future writing will instantiate to the particular number.") (LET (PACKAGE READTABLE BASE FORMAT VALUE PACKAGEFORM READTABLEFORM) [for TAIL on ARGS by (CDDR TAIL) do (SETQ VALUE (CADR TAIL)) - (SELECTQ (CAR TAIL) - ((:PACKAGE %:PACKAGE) - (SETQ PACKAGE (if (LISTP VALUE) - then (SETQ PACKAGEFORM VALUE) - (EVAL VALUE) - ELSE VALUE)) - (IF (TYPEP PACKAGE 'PACKAGE) - ELSEIF (SETQ PACKAGE (CL:FIND-PACKAGE PACKAGE)) - ELSE - - (* ;; "Better message than just \DTEST") - - (ERROR - "Can't find package for DEFINE-FILE-INFO reader environment" - VALUE))) - ((:READTABLE %:READTABLE) - (SETQ READTABLE (if (LISTP VALUE) - then (SETQ READTABLEFORM VALUE) - (EVAL VALUE) - ELSE VALUE)) - (IF (TYPEP READTABLE 'READTABLEP) - ELSEIF (SETQ READTABLE (FIND-READTABLE READTABLE)) - ELSE - - (* ;; "Better message than just \DTEST") - - (ERROR - "Can't find read table for DEFINE-FILE-INFO reader environment" - VALUE))) - ((:BASE %:BASE) (* ; - "RMK: An EVAL form here makes no sense. ") - (SETQ BASE (OR (\CHECKRADIX (if (LISTP VALUE) - then (EVAL VALUE) - else VALUE)) - (ERROR - "Bad read base for DEFINE-FILE-INFO reader environment" - VALUE)))) - ((:FORMAT FORMAT %:FORMAT) - (SETQ FORMAT (FETCH (EXTERNALFORMAT NAME) OF (FIND-FORMAT - VALUE)))) - (ERROR "Unrecognized file info key" (CAR TAIL] - - (* ;; "Set the defaults. Is this essentially ignoring the *DEFAULT-MAKEFILE-ENVIRONMENT*? Maybe the defaults should be take from there?") - - (CL:UNLESS FORMAT (SETQ FORMAT :XCCS)) + (SELECTQ (CAR TAIL) + ((:PACKAGE %:PACKAGE) + (SETQ PACKAGE (if (LISTP VALUE) + then (SETQ PACKAGEFORM VALUE) + (EVAL VALUE) + ELSE VALUE)) + (IF (TYPEP PACKAGE 'PACKAGE) + ELSEIF (SETQ PACKAGE (CL:FIND-PACKAGE PACKAGE)) + ELSE + (* ;; "Better message than just \DTEST") + + (ERROR "Can't find package for DEFINE-FILE-INFO reader environment" + VALUE))) + ((:READTABLE %:READTABLE) + (SETQ READTABLE (if (LISTP VALUE) + then (SETQ READTABLEFORM VALUE) + (EVAL VALUE) + ELSE VALUE)) + (IF (TYPEP READTABLE 'READTABLEP) + ELSEIF (SETQ READTABLE (FIND-READTABLE READTABLE)) + ELSE + (* ;; "Better message than just \DTEST") + + (ERROR "Can't find read table for DEFINE-FILE-INFO reader environment" + VALUE))) + ((:BASE %:BASE) (* ; + "RMK: An EVAL form here makes no sense. ") + (SETQ BASE (OR (\CHECKRADIX (if (LISTP VALUE) + then (EVAL VALUE) + else VALUE)) + (ERROR "Bad read base for DEFINE-FILE-INFO reader environment" + VALUE)))) + ((:FORMAT FORMAT %:FORMAT) + (SETQ FORMAT (FETCH (EXTERNALFORMAT NAME) OF (FIND-FORMAT VALUE)))) + (ERROR "Unrecognized file info key" (CAR TAIL] + + (* ;; "Set the defaults. Is this essentially ignoring the *DEFAULT-MAKEFILE-ENVIRONMENT*? Maybe the defaults should be take from there?") + + (CL:UNLESS FORMAT + (SETQ FORMAT (CL:IF (FIND-FORMAT :MCCS T) + :MCCS + :XCCS))) (CL:WHEN STREAM (\EXTERNALFORMAT STREAM FORMAT)) (create READER-ENVIRONMENT REPACKAGE _ (OR PACKAGE *INTERLISP-PACKAGE*) @@ -784,7 +779,8 @@ Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. REREADTABLEFORM _ READTABLEFORM]) (PRINT-READER-ENVIRONMENT - [LAMBDA (ENV STREAM) (* ; "Edited 27-Sep-2021 10:24 by rmk:") + [LAMBDA (ENV STREAM) (* ; "Edited 23-Apr-2025 23:38 by rmk") + (* ; "Edited 27-Sep-2021 10:24 by rmk:") (* ;;; "If ENV is not the old default interlisp reader environment, writes a DEFINE-FILE-INFO expression on STREAM that will produce this environment when the file is loaded.") @@ -798,13 +794,14 @@ Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. [SETQ RDTBL (IF (FETCH REREADTABLEFORM OF ENV) ELSEIF (fetch REREADTABLE of ENV) THEN (READTABLEPROP (fetch REREADTABLE of ENV) - 'NAME] + 'NAME] (PRINT [CONS 'DEFINE-FILE-INFO `(,@[AND PKG `(:PACKAGE ,PKG] ,@[AND RDTBL `(:READTABLE ,RDTBL] :BASE ,(fetch REBASE of ENV) - ,@(CL:UNLESS (EQ :XCCS (FETCH REFORMAT OF ENV)) + ,@(CL:UNLESS (EQMEMB (FETCH REFORMAT OF ENV) + '(:MCCS :XCCS)) `(:FORMAT ,(FETCH REFORMAT OF ENV)))] STREAM (FETCH (READER-ENVIRONMENT REREADTABLE) OF *DEFINE-FILE-INFO-ENV*)) @@ -953,8 +950,8 @@ Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. (FUNCTION (LAMBDA (X) (OR (CCODEP (CDR X)) (MOVD (CAR X) - (CDR X) - NIL T] + (CDR X) + NIL T] (AND (CCODEP 'BOOTSTRAP-NAMEFIELD) (PUTD 'BOOTSTRAP-NAMEFIELD)) @@ -979,16 +976,14 @@ Copyright (c) 1983-1990, 1992, 2021 by Venue & Xerox Corporation. (ADDTOVAR LAMA ) ) -(PUTPROPS BOOTSTRAP COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989 1990 -1992 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4751 14423 (GETPROP 4761 . 5333) (SETATOMVAL 5335 . 5464) (RPAQQ 5466 . 5519) (RPAQ -5521 . 5833) (RPAQ? 5835 . 6205) (MOVD 6207 . 8071) (MOVD? 8073 . 8503) (SELECTQ 8505 . 8692) ( -SELECTQ1 8694 . 9036) (NCONC1 9038 . 9234) (PUTPROP 9236 . 10720) (PROPNAMES 10722 . 10913) (ADDPROP -10915 . 12978) (REMPROP 12980 . 13834) (MEMB 13836 . 14095) (CLOSEF? 14097 . 14421)) (14496 35060 ( -LOAD 14506 . 15675) (\LOAD-STREAM 15677 . 28751) (FILECREATED 28753 . 30171) (FILECREATED1 30173 . -31281) (PRETTYCOMPRINT 31283 . 31768) (BOOTSTRAP-NAMEFIELD 31770 . 32730) (PUTPROPS 32732 . 33100) ( -DECLARE%: 33102 . 33234) (DECLARE%:1 33236 . 34108) (ROOTFILENAME 34110 . 35058)) (35098 45530 ( -DEFINE-FILE-INFO 35108 . 35543) (\DO-DEFINE-FILE-INFO 35545 . 39891) (PRINT-READER-ENVIRONMENT 39893 - . 41475) (READ-READER-ENVIRONMENT 41477 . 44252) (MAKE-DEFINE-FILE-INFO-ENV 44254 . 45528))))) + (FILEMAP (NIL (4617 14289 (GETPROP 4627 . 5199) (SETATOMVAL 5201 . 5330) (RPAQQ 5332 . 5385) (RPAQ +5387 . 5699) (RPAQ? 5701 . 6071) (MOVD 6073 . 7937) (MOVD? 7939 . 8369) (SELECTQ 8371 . 8558) ( +SELECTQ1 8560 . 8902) (NCONC1 8904 . 9100) (PUTPROP 9102 . 10586) (PROPNAMES 10588 . 10779) (ADDPROP +10781 . 12844) (REMPROP 12846 . 13700) (MEMB 13702 . 13961) (CLOSEF? 13963 . 14287)) (14362 34926 ( +LOAD 14372 . 15541) (\LOAD-STREAM 15543 . 28617) (FILECREATED 28619 . 30037) (FILECREATED1 30039 . +31147) (PRETTYCOMPRINT 31149 . 31634) (BOOTSTRAP-NAMEFIELD 31636 . 32596) (PUTPROPS 32598 . 32966) ( +DECLARE%: 32968 . 33100) (DECLARE%:1 33102 . 33974) (ROOTFILENAME 33976 . 34924)) (34964 45363 ( +DEFINE-FILE-INFO 34974 . 35409) (\DO-DEFINE-FILE-INFO 35411 . 39554) (PRINT-READER-ENVIRONMENT 39556 + . 41308) (READ-READER-ENVIRONMENT 41310 . 44085) (MAKE-DEFINE-FILE-INFO-ENV 44087 . 45361))))) STOP diff --git a/sources/BOOTSTRAP.LCOM b/sources/BOOTSTRAP.LCOM index a431b0c730486e8a08286a079d2fa4b64677958e..ea5f87950da76400b8009cd26cd2eed938ed76c6 100644 GIT binary patch delta 1843 zcmah}&2QXP5RcQeN;gv2q-oU{lukFa*(`GKv!6d{qj>GN$r7*a+TLs;_E6MBZA40< zv>Z@{R!E#UK`s6OZhTw{%aIEw#1S|l!GU8D5;-7F9GGWs=mt>n#c$@#n~&ejZ@xVI z{ouW|Ua8t>`pk`)lQIt~iYhq=hms;I8YrqwEt?n>s8(+6-#ysf+u4Tw*P#LrIxXh; zZ0oIS_x9g7ytQ+0xgLgTlEzN7^pZ{%p>)!bVr#0c(F)w>e)bl&VHe#r+P>ezC{H3T zEiF}G`_=mx=f517mBpv0t75wH|E34jpu_;1dChcIs&B#J-Pgc&*PLLLB~ltfwbTfb z_kR<+T`!b8)@TMy;wVYYpb;*D9mQ;;8MYJ2L(ni&LrQiIIA#QhY%7|rk_wcb3X*2^ z-yGeV$UZL5$q<2JLDIDCTHq%vz0vTU)f(5DP>bTwWz3UYCt*phG%}bx-(R2nTDVSt zrxmTQHvCm+fU2Oqw6Bz2kM3J1=+q&T{{8c}@@-+4%Ie zQ&VGNe|`F0Vd2@rY)#zV&+P+o>eO6l=02uxbJfuoW1*h?dG2wK0*m7?Mo5VXt1Qh+ zO=GYu1#nzFuuS!YUYAdZ)PmFv0~aiM@&dt*;%1P7MF{v#6r(Gd48Juk0=;7lz|_wUB4*y5SSbX48V7qK~&&fVL4Vlj<6vc|Ip|N(McN}^Dp`_po~ti z8(RtY%;A-v2%3rD9p7lWl1tnhXgDefb{Z(vpuqD6P(F36k=A3RDoc@0W`BHE5JnX% zn-DJxv@eODo)LQeAK-#8(-(7E?3Oq=KFH7SWJi}@dCoAQ%QjOM2aez10HnAtc;$g7 zWu3~~RfL!)8+&Qp2Nf}`;mos`Gg!4| delta 1887 zcmbtVOKcle6wTyQTDKKWo3@DyfnS zf`AAawn&u_vxOxq*dTXV30M}`vS$mcE>PFpH{-NP#0FuF@4Wl&d-rqhXZ}8X*7|b! zTCQBNh~W`EAZGLpGup{zx0;U+_x8hWXdXZoQYWUr^69-=J8ZQ}A2bg48wVw;xz*S& zJr1|`!;gi6RNC1)$|qc@-8^n>h3(R!;{<-->2Bd&nVp3!FXjF4Fwe6*2Rv64czjU# z`>pVmxvkyC!OmdVo+?J~F`4MM{3zK&56U&mg0t5Pg+dm#8%N=G>REurd$- ze-I!lvZg}pW!Q$J=2Q`KW!r~nVv>4$r#=gZt?9wTfj{b+@-6NAtN!ML^XTyugbp=%(qr#IkyaHLxnaTVJmD0V)<*3%^7_KMwQjF3bm!CWFwAmf58r#knR|YDc<65T$?zA<%v;IP2bsNQ ze8@7%u?^6~^8&=m^(uA%8Yh9JyB?}yrL%WcO@huT4xq|1U{X%)tCG}HtcnV_wOD}Q zg35BRX*s%?#~vbjRcBe22St+4s#bUb=22VVxR_&5@J^Lf7eQ84sJSL~G_`~3Iv^`p z60hybGJn>ZEV49J^fbskdRW!{Wy%>&)d!gqVAH1I^B^H$u?Cjk(CaQ1oPtcU7Bs1=-Yzg>Qe6BA<_Z*T+8BtX zqD7rMnGOOIR!EGMg=MU8+=U$(Av%9XM*ow1^!i5TFdG{_)r|16;%i3I z5WG`~q~NSXj%ou5OU1`bgD7f{;JFGStvXT;7Cr1&5@3XU_rWN`^b0~%9h<3?Ekq~53=Y37CI7<5{VL-5`_|#5)FyQLJBDl^y@Y|o3blb>L2(v B=OO?A diff --git a/sources/EXTERNALFORMAT b/sources/EXTERNALFORMAT index 4efd98db8..1b1889194 100644 --- a/sources/EXTERNALFORMAT +++ b/sources/EXTERNALFORMAT @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "19-Mar-2024 18:24:39" {WMEDLEY}EXTERNALFORMAT.;88 38921 +(FILECREATED "24-Apr-2025 08:43:01" {WMEDLEY}EXTERNALFORMAT.;91 38905 :EDIT-BY rmk - :CHANGES-TO (FNS \FORMATBYTESTRING \FORMATBYTESTREAM) + :CHANGES-TO (VARS EXTERNALFORMATCOMS) - :PREVIOUS-DATE "12-Jan-2024 10:59:18" {WMEDLEY}EXTERNALFORMAT.;86) + :PREVIOUS-DATE "19-Mar-2024 18:24:39" {WMEDLEY}EXTERNALFORMAT.;90) (PRETTYCOMPRINT EXTERNALFORMATCOMS) @@ -22,7 +22,7 @@ (FNS SYSTEM-EXTERNALFORMAT) (GLOBALVARS *EXTERNALFORMATS* *DEFAULT-EXTERNALFORMAT*) (INITVARS (*EXTERNALFORMATS* NIL) - (*DEFAULT-EXTERNALFORMAT* :XCCS)) + (*DEFAULT-EXTERNALFORMAT* :MCCS)) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (DEFPRINT 'EXTERNALFORMAT (FUNCTION \EXTERNALFORMAT.DEFPRINT ] @@ -311,7 +311,7 @@ (RPAQ? *EXTERNALFORMATS* NIL) -(RPAQ? *DEFAULT-EXTERNALFORMAT* :XCCS) +(RPAQ? *DEFAULT-EXTERNALFORMAT* :MCCS) (DECLARE%: DONTEVAL@LOAD DOCOPY (DEFPRINT 'EXTERNALFORMAT (FUNCTION \EXTERNALFORMAT.DEFPRINT)) @@ -737,13 +737,13 @@ (\CREATE.THROUGH.EXTERNALFORMAT) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (6726 13559 (\EXTERNALFORMAT 6736 . 10514) (MAKE-EXTERNALFORMAT 10516 . 13086) ( -\EXTERNALFORMAT.DEFPRINT 13088 . 13557)) (13560 16601 (\INSTALL.EXTERNALFORMAT 13570 . 15019) ( -\REMOVE.EXTERNALFORMAT 15021 . 15852) (FIND-FORMAT 15854 . 16599)) (16602 17014 (SYSTEM-EXTERNALFORMAT - 16612 . 17012)) (17363 33340 (\OUTCHAR 17373 . 18590) (\INCCODE 18592 . 19745) (\BACKCCODE 19747 . -21426) (\BACKCCODE.EOLC 21428 . 23618) (\PEEKCCODE 23620 . 23945) (\PEEKCCODE.EOLC 23947 . 24326) ( -\INCCODE.EOLC 24328 . 26127) (\FORMATBYTESTREAM 26129 . 28573) (\FORMATBYTESTRING 28575 . 30275) ( -\CHECKEOLC.CRLF 30277 . 33338)) (34622 36858 (\NULLDEVICE 34632 . 36534) (\NULL.OPENFILE 36536 . 36856 -)) (36998 38825 (\CREATE.THROUGH.EXTERNALFORMAT 37008 . 37794) (\THROUGHIN 37796 . 38216) ( -\THROUGHBACKCCODE 38218 . 38485) (\THROUGHOUTCHARFN 38487 . 38823))))) + (FILEMAP (NIL (6710 13543 (\EXTERNALFORMAT 6720 . 10498) (MAKE-EXTERNALFORMAT 10500 . 13070) ( +\EXTERNALFORMAT.DEFPRINT 13072 . 13541)) (13544 16585 (\INSTALL.EXTERNALFORMAT 13554 . 15003) ( +\REMOVE.EXTERNALFORMAT 15005 . 15836) (FIND-FORMAT 15838 . 16583)) (16586 16998 (SYSTEM-EXTERNALFORMAT + 16596 . 16996)) (17347 33324 (\OUTCHAR 17357 . 18574) (\INCCODE 18576 . 19729) (\BACKCCODE 19731 . +21410) (\BACKCCODE.EOLC 21412 . 23602) (\PEEKCCODE 23604 . 23929) (\PEEKCCODE.EOLC 23931 . 24310) ( +\INCCODE.EOLC 24312 . 26111) (\FORMATBYTESTREAM 26113 . 28557) (\FORMATBYTESTRING 28559 . 30259) ( +\CHECKEOLC.CRLF 30261 . 33322)) (34606 36842 (\NULLDEVICE 34616 . 36518) (\NULL.OPENFILE 36520 . 36840 +)) (36982 38809 (\CREATE.THROUGH.EXTERNALFORMAT 36992 . 37778) (\THROUGHIN 37780 . 38200) ( +\THROUGHBACKCCODE 38202 . 38469) (\THROUGHOUTCHARFN 38471 . 38807))))) STOP diff --git a/sources/FILESETS b/sources/FILESETS index ca9d76041..0cc75efbc 100644 --- a/sources/FILESETS +++ b/sources/FILESETS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "13-Aug-2025 16:22:29" {MEDLEY}FILESETS.;2 6206 +(FILECREATED " 7-Aug-2025 10:11:01" {WMEDLEY}FILESETS.;24 6210 :EDIT-BY rmk :CHANGES-TO (VARS 0LISPSET) - :PREVIOUS-DATE "17-Jul-2025 12:07:14" {MEDLEY}FILESETS.;1) + :PREVIOUS-DATE "10-Jun-2025 18:00:09" {WMEDLEY}FILESETS.;23) (PRETTYCOMPRINT FILESETSCOMS) @@ -50,7 +50,7 @@ (RPAQQ 0LISPSET (PACKAGE-CONVERSION-TABLE LLFAULT LLSUBRS LLBFS LLNEW FILEIO EXTERNALFORMAT IMAGEIO LLBASIC LLGC LLARRAYELT LLINTERP LLMVS DEFSTRUCT-RUN-TIME SETF-RUNTIME - CMLSEQBASICS LLARITH LLFLOAT LLBIGNUM LLREAD IOCHAR XCCS LLCHAR LLSTK + CMLSEQBASICS LLARITH LLFLOAT LLBIGNUM LLREAD IOCHAR MCCS LLCHAR LLSTK LLDATATYPE LLKEY LLTIMER)) (RPAQQ 1LISPSET @@ -68,7 +68,7 @@ (IOCHAR MODARITH LLPARAMS LLCODE AERROR AOFD APRINT ATERM LLARRAYELT LLDATATYPE LLNEW LLBASIC LLCHAR LLSTK PMAP LLGC ATBL FILEIO EXTERNALFORMAT LLARITH LLFLOAT FONT LLKEY LLDISPLAY ADISPLAY AINTERRUPT RENAMEMACROS HLDISPLAY WINDOW MACROAUX ADDARITH LLFAULT LLTIMER - IMAGEIO PROC XCCS PASSWORDS INTERPRESS HARDCOPY CMLARRAY LLSUBRS LLETHER PUP UFS + IMAGEIO PROC MCCS PASSWORDS INTERPRESS HARDCOPY CMLARRAY LLSUBRS LLETHER PUP UFS DTDECLARE)) (RPAQQ MAKEINITFILES (MAKEINIT MEM I-NEW)) diff --git a/sources/LLKEY b/sources/LLKEY index ad5216cfd..032f719b6 100644 --- a/sources/LLKEY +++ b/sources/LLKEY @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 4-Apr-2025 17:10:10" {WMEDLEY}LLKEY.;11 199518 +(FILECREATED " 5-May-2025 20:57:08" {WMEDLEY}LLKEY.;15 199508 :EDIT-BY rmk - :CHANGES-TO (VARS LLKEYCOMS) - (FNS \DECODETRANSITION) + :CHANGES-TO (VARS \MAIKOKEYACTIONS \KEYNAMES) - :PREVIOUS-DATE "13-Feb-2025 08:22:19" {WMEDLEY}LLKEY.;8) + :PREVIOUS-DATE " 4-Apr-2025 17:10:10" {WMEDLEY}LLKEY.;11) (PRETTYCOMPRINT LLKEYCOMS) @@ -1522,7 +1521,7 @@ (UTIL0 SUN-KEYPAD=) (UTIL1 SUN-KEYPAD/) (UTIL2 SUPER/SUB) - (UTIL3 CASE) + (UTIL3 CASE SUN-F4) (UTIL4 STRIKEOUT) (UTIL5 KEYPAD2 DOWNARROW) (UTIL6 KEYPAD3 PGDN) @@ -1556,7 +1555,7 @@ (K52 KEYPAD0 INS) (BOLD) (ITALICS) - (UNDERLINE) + (UNDERLINE SUN-F6) (SUPERSCRIPT) (SUBSCRIPT) (LARGER SMALLER) @@ -1766,9 +1765,9 @@ (97 ("Function,A" "Function,a" NOLOCKSHIFT)) (99 ("Function,B" "Function,b" NOLOCKSHIFT)) (100 ("Function,C" "Function,c" NOLOCKSHIFT)) - (67 ("Function,D" "Function,d" NOLOCKSHIFT)) + (67 ("0,244" "0,244")) (68 ("Function,E" "Function,e" NOLOCKSHIFT)) - (101 ("Function,F" "Function,f" NOLOCKSHIFT)) + (101 ("0,255" "0,255" NOLOCKSHIFT)) (66 ("Function,G" "Function,g" NOLOCKSHIFT)) (104 ("Function,H" "Function,h" NOLOCKSHIFT)) (80 ("Function,I" "Function,i" NOLOCKSHIFT)) @@ -1784,7 +1783,8 @@ (14 METADOWN . METAUP) (71 ("LF" "LF" NOLOCKSHIFT)) (47 ("Function,^R" "Function,62" NOLOCKSHIFT)) - (105 ("\" "|" NOLOCKSHIFT)))) + (105 ("\" "|" NOLOCKSHIFT)) + (106 ("0,254" "0,254")))) (RPAQQ \MAIKOKEYACTIONST4 ((61 ("^E" "Bell" NOLOCKSHIFT)) @@ -3916,33 +3916,33 @@ (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (14626 21942 (BKSYSCHARCODE 14636 . 14985) (\CLEARSYSBUF 14987 . 15545) (\GETKEY 15547 - . 16722) (\NSYSBUFCHARS 16724 . 17466) (\SAVESYSBUF 17468 . 19077) (\SYSBUFP 19079 . 19383) ( -\GETSYSBUF 19385 . 19565) (\PUTSYSBUF 19567 . 20780) (\PEEKSYSBUF 20782 . 21940)) (23227 60785 ( -\KEYBOARDINIT 23237 . 24957) (\KEYBOARDEVENTFN 24959 . 29659) (\ALLOCLOCKED 29661 . 30251) ( -\SETIOPOINTERS 30253 . 34789) (\KEYBOARDOFF 34791 . 35205) (\KEYBOARDON 35207 . 35586) (\KEYHANDLER -35588 . 35719) (\KEYHANDLER1 35721 . 43167) (\RESETKEYBOARD 43169 . 44817) (\DOMOUSECHORDING 44819 . -48639) (\DOTRANSITIONS 48641 . 49318) (\DECODETRANSITION 49320 . 56733) (MOUSECHORDWAIT 56735 . 57399) - (\TRACKCURSOR 57401 . 60783)) (95237 117110 (KEYACTION 95247 . 96100) (KEYACTIONTABLE 96102 . 97284) -(KEYBOARDTYPE 97286 . 98388) (RESETKEYACTION 98390 . 100149) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS -100151 . 102053) (\KEYACTION1 102055 . 112171) (KEYDOWNP 112173 . 112508) (KEYNUMBERP 112510 . 112708) - (\KEYNAMETONUMBER 112710 . 113404) (\KEYNUMBERTONAME 113406 . 113596) (MODIFY.KEYACTIONS 113598 . -114459) (METASHIFT 114461 . 115405) (SHIFTDOWNP 115407 . 117108)) (117173 117469 ( -SETUP.OFFICE.KEYBOARD 117183 . 117467)) (120448 122160 (\INIT.KEYBOARD.STREAM 120458 . 122158)) ( -122425 138802 (\DOBUFFEREDTRANSITIONS 122435 . 137865) (\TIMER.INTERRUPTFRAME 137867 . 138592) ( -\PERIODIC.INTERRUPTFRAME 138594 . 138800)) (139056 143133 (\HARDCURSORUP 139066 . 140948) ( -\HARDCURSORPOSITION 140950 . 142986) (\HARDCURSORDOWN 142988 . 143131)) (143134 167194 (CURSOR.INIT -143144 . 146844) (\CURSORDESTINATION 146846 . 149164) (\SOFTCURSORUP 149166 . 154420) ( -\SOFTCURSORUPCURRENT 154422 . 161458) (\SOFTCURSORPOSITION 161460 . 162225) (\SOFTCURSORDOWN 162227 . -162935) (CURSORPROP 162937 . 163279) (GETCURSORPROP 163281 . 163469) (PUTCURSORPROP 163471 . 164626) ( -\CURSORBITSPERPIXEL 164628 . 166744) (\CURSORIMAGEPROPNAME 166746 . 166970) (\CURSORMASKPROPNAME -166972 . 167192)) (167195 185145 (CURSORCREATE 167205 . 169880) (CURSOR 169882 . 171694) ( -\CURSOR-VALID-P 171696 . 172783) (\CURSORUP 172785 . 174500) (\CURSORPOSITION 174502 . 177030) ( -\CURSORDOWN 177032 . 177265) (ADJUSTCURSORPOSITION 177267 . 177845) (CURSORPOSITION 177847 . 179389) ( -CURSORSCREEN 179391 . 180047) (CURSOREXIT 180049 . 181440) (FLIPCURSOR 181442 . 182568) (FLIPCURSORBAR - 182570 . 183550) (LASTMOUSEX 183552 . 183806) (LASTMOUSEY 183808 . 184062) (CREATEPOSITION 184064 . -184270) (POSITIONP 184272 . 184556) (CURSORHOTSPOT 184558 . 185143)) (186383 187931 (GETMOUSESTATE -186393 . 187052) (\EVENTKEYS 187054 . 187929)) (194130 194926 (MACHINETYPE 194140 . 194540) ( -SETMAINTPANEL 194542 . 194924)) (194956 196095 (BEEPON 194966 . 195619) (BEEPOFF 195621 . 196093)) ( -196546 196809 (WITHOUT-INTERRUPTS 196556 . 196807))))) + (FILEMAP (NIL (14602 21918 (BKSYSCHARCODE 14612 . 14961) (\CLEARSYSBUF 14963 . 15521) (\GETKEY 15523 + . 16698) (\NSYSBUFCHARS 16700 . 17442) (\SAVESYSBUF 17444 . 19053) (\SYSBUFP 19055 . 19359) ( +\GETSYSBUF 19361 . 19541) (\PUTSYSBUF 19543 . 20756) (\PEEKSYSBUF 20758 . 21916)) (23203 60761 ( +\KEYBOARDINIT 23213 . 24933) (\KEYBOARDEVENTFN 24935 . 29635) (\ALLOCLOCKED 29637 . 30227) ( +\SETIOPOINTERS 30229 . 34765) (\KEYBOARDOFF 34767 . 35181) (\KEYBOARDON 35183 . 35562) (\KEYHANDLER +35564 . 35695) (\KEYHANDLER1 35697 . 43143) (\RESETKEYBOARD 43145 . 44793) (\DOMOUSECHORDING 44795 . +48615) (\DOTRANSITIONS 48617 . 49294) (\DECODETRANSITION 49296 . 56709) (MOUSECHORDWAIT 56711 . 57375) + (\TRACKCURSOR 57377 . 60759)) (95227 117100 (KEYACTION 95237 . 96090) (KEYACTIONTABLE 96092 . 97274) +(KEYBOARDTYPE 97276 . 98378) (RESETKEYACTION 98380 . 100139) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS +100141 . 102043) (\KEYACTION1 102045 . 112161) (KEYDOWNP 112163 . 112498) (KEYNUMBERP 112500 . 112698) + (\KEYNAMETONUMBER 112700 . 113394) (\KEYNUMBERTONAME 113396 . 113586) (MODIFY.KEYACTIONS 113588 . +114449) (METASHIFT 114451 . 115395) (SHIFTDOWNP 115397 . 117098)) (117163 117459 ( +SETUP.OFFICE.KEYBOARD 117173 . 117457)) (120438 122150 (\INIT.KEYBOARD.STREAM 120448 . 122148)) ( +122415 138792 (\DOBUFFEREDTRANSITIONS 122425 . 137855) (\TIMER.INTERRUPTFRAME 137857 . 138582) ( +\PERIODIC.INTERRUPTFRAME 138584 . 138790)) (139046 143123 (\HARDCURSORUP 139056 . 140938) ( +\HARDCURSORPOSITION 140940 . 142976) (\HARDCURSORDOWN 142978 . 143121)) (143124 167184 (CURSOR.INIT +143134 . 146834) (\CURSORDESTINATION 146836 . 149154) (\SOFTCURSORUP 149156 . 154410) ( +\SOFTCURSORUPCURRENT 154412 . 161448) (\SOFTCURSORPOSITION 161450 . 162215) (\SOFTCURSORDOWN 162217 . +162925) (CURSORPROP 162927 . 163269) (GETCURSORPROP 163271 . 163459) (PUTCURSORPROP 163461 . 164616) ( +\CURSORBITSPERPIXEL 164618 . 166734) (\CURSORIMAGEPROPNAME 166736 . 166960) (\CURSORMASKPROPNAME +166962 . 167182)) (167185 185135 (CURSORCREATE 167195 . 169870) (CURSOR 169872 . 171684) ( +\CURSOR-VALID-P 171686 . 172773) (\CURSORUP 172775 . 174490) (\CURSORPOSITION 174492 . 177020) ( +\CURSORDOWN 177022 . 177255) (ADJUSTCURSORPOSITION 177257 . 177835) (CURSORPOSITION 177837 . 179379) ( +CURSORSCREEN 179381 . 180037) (CURSOREXIT 180039 . 181430) (FLIPCURSOR 181432 . 182558) (FLIPCURSORBAR + 182560 . 183540) (LASTMOUSEX 183542 . 183796) (LASTMOUSEY 183798 . 184052) (CREATEPOSITION 184054 . +184260) (POSITIONP 184262 . 184546) (CURSORHOTSPOT 184548 . 185133)) (186373 187921 (GETMOUSESTATE +186383 . 187042) (\EVENTKEYS 187044 . 187919)) (194120 194916 (MACHINETYPE 194130 . 194530) ( +SETMAINTPANEL 194532 . 194914)) (194946 196085 (BEEPON 194956 . 195609) (BEEPOFF 195611 . 196083)) ( +196536 196799 (WITHOUT-INTERRUPTS 196546 . 196797))))) STOP diff --git a/sources/LLKEY.LCOM b/sources/LLKEY.LCOM index 0fc5012ce4d61e3a031aab473c0fe3da6decfd3d..aba3cfe8d386dc1fbab732dd63b15a700e970837 100644 GIT binary patch delta 546 zcmZurziSgw94C-c`%q(O!K%@FeNecRT)15BMRSWh?q1q!?pN6(@?XU9EHM&}@61=hg=K01*f2~2vNN(81 zZefB)Exs#_Q(S8{sR~Yx%&oc1Zu@PXFf+D&FT!gAd(7og85=>!muID;ZQJC%g`elQO||4ip=x(NLmm@s$n d5ME!532Ely?o>@}V0qYnwMcc+O^&A?{Rdh~pjH3? delta 468 zcmaFc#`3m}WkQ6oiLPTok*<+}k*R{Axs{;-5KYY1ku=m);8IdRmNd08Ft9Q*nYcm2 z8cA4BPftl9C9xzm1*>{vLnTcv4L468SLYyC#}HSS$uk&@*%S;dElmw4`!Fi;`uKRe zMmqcZ25Ty4xJ_QTOhipn!73ogHO$jLG+5UKs6|1^&{)?kH3{NI0}Cr7BP&D8$?F)U z87(%SW}JO=a_(_yPM|3PjxI(DT$3jr59Rl9bqn$JbaC-<1&Ra3z8;U@4G#6w4R8z% zb_LqRH96`;2){4T3fD+iA0Pj4u-M)cL4qKijzK|S5pNSypk9TOUX!y=N-}ayZaL{X z`P4~iAnWN#4H=-8;LrfqpkU`9&wvmx&k4q!Ykaplan>Local>medley3.5>working-medley>sources>MCCS.;137 51129 + + :EDIT-BY rmk + + :CHANGES-TO (FNS \MCCS.24BITENCODING.ERROR \MCCSINCCODE \MCCSPEEKCCODE) + + :PREVIOUS-DATE " 7-Sep-2025 22:43:03" +{DSK}kaplan>Local>medley3.5>working-medley>sources>MCCS.;136) + + +(PRETTYCOMPRINT MCCSCOMS) + +(RPAQQ MCCSCOMS + [ + (* ;; "Stringlet number encoding common to MCCS and XCCS") + + (FNS \MCCSINCCODE \MCCSPEEKCCODE \MCCSOUTCHAR \MCCSBACKCCODE \MCCSFORMATBYTESTREAM + \MCCSCHARSETFN) + (FNS \CREATE.MCCS.EXTERNALFORMAT) + (FNS \MCCS.24BITENCODING.ERROR) + (INITVARS (*SIGNAL-MCCS.24BITENCODING.ERROR*)) + (DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (CONSTANTS (\NORUNCODE 255) + (NSCHARSETSHIFT 255)) + (MACROS \RUNCODED))) + (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\CREATE.MCCS.EXTERNALFORMAT :MCCS) + (\CREATE.MCCS.EXTERNALFORMAT :XCCS))) + + (* ;; "") + + + (* ;; "Assignment of MCCS characters") + + (ALISTS (CHARACTERNAMES Lowline Circumflex Currency Leftarrow Uparrow Dollar Underline)) + + (* ;; "Mapping between true XCCS and MCCS codes") + + (FNS MTOXCODE XTOMCODE XTOMSTRING MTOXSTRING) + (FNS MTOX$CODE X$TOMCODE) + (FNS KANJICHARSETP CHINESECHARSETP) + (COMS (* ; " Mapping functions to MCCS") + + (* ;; "Used by \TEDIT.MCCS.TRANSLATE .") + + (VARS ALTOTEXT2MCCS SYMBOLTOMCCS SIGMATOMCCS HIPPOTOMCCS CYRILLICTOMCCS MATHTOMCCS) + (FNS MCCSCODEMAPARRAY) + (GLOBALVARS ALTOTOMCCSARRAY SYMBOLTOMCCSARRAY HIPPOTOMCCSARRAY CYRILLICTOMCCSARRAY + MATHTOMCCSARRAY SIGMATOMCCSARRAY) + (INITVARS (ALTOTOMCCSARRAY (MCCSCODEMAPARRAY 'MCCS)) + (SYMBOLTOMCCSARRAY (MCCSCODEMAPARRAY SYMBOLTOMCCS)) + (HIPPOTOMCCSARRAY (MCCSCODEMAPARRAY HIPPOTOMCCS)) + (CYRILLICTOMCCSARRAY (MCCSCODEMAPARRAY CYRILLICTOMCCS)) + (MATHTOMCCSARRAY (MCCSCODEMAPARRAY MATHTOMCCS)) + (SIGMATOMCCSARRAY (MCCSCODEMAPARRAY SIGMATOMCCS))) + (FNS MCCSMAPFN MCCSMAPPAIRS XCCSUNDEFINEDPAIRS) + (COMS (* ; + "Mappings into MCCS: needed for hardcopy and Tedit coercion") + (FNS GACHATOMCODE SYMBOLTOMCODE SIGMATOMCODE ATOMCODE MATHTOMCODE HIPPOTOMCODE + CYRILLICTOMCODE]) + + + +(* ;; "Stringlet number encoding common to MCCS and XCCS") + +(DEFINEQ + +(\MCCSINCCODE + [LAMBDA (STREAM COUNTP) (* ; "Edited 9-Sep-2025 22:42 by rmk") + (* ; "Edited 8-Dec-2023 15:28 by rmk") + (* ; "Edited 6-Aug-2021 15:57 by rmk:") + +(* ;;; "Returns a 16 bit character code. SHIFTEDCSET is STREAM's char set left shifted 8.") + +(* ;;; "If COUNTP is non-NIL, the variable *BYTECOUNTER* is set freely to the number of bytes read.") + +(* ;;; "This doesn't do EOL conversion, \INCHAR does that") + + (DECLARE (USEDFREE *BYTECOUNTER*)) + (\DTEST STREAM 'STREAM) + (LET (NUMBYTES (CSET (ffetch (STREAM CHARSET) of STREAM)) + (CHAR (\BIN STREAM))) (* ; + "Error on EOF unless ENDOFSTREAMOP does something else.") + + (* ;; " NUMBYTES tracks the number of \BINs. ") + + (IF (EQ CHAR NSCHARSETSHIFT) + THEN (* ; + "Shifting character sets, toss CHAR") + (SETQ CSET (\BIN STREAM)) + (IF (NEQ NSCHARSETSHIFT CSET) + THEN (* ; + "Shift to new runcode CSET: SH CS CH") + (SETQ CHAR (\BIN STREAM)) + (SETQ NUMBYTES 3) + (freplace (STREAM CHARSET) of STREAM with CSET) + ELSEIF (EQ 0 (\BIN STREAM)) + THEN (* ; "SH SH CSH CS CH where CSH is 0") + + (* ;; + "The high-order character set byte must be 0, because we don't support obese characters (24 bit)") + + (SETQ CSET (\BIN STREAM)) + (SETQ CHAR (\BIN STREAM)) (* ; "To align with below") + (SETQ NUMBYTES 5) + (freplace (STREAM CHARSET) of STREAM with \NORUNCODE) + ELSE (\MCCS.24BITENCODING.ERROR STREAM)) + + (* ;; "The stream now knows the new character set, runcoded or not.") + + ELSEIF (EQ CSET \NORUNCODE) + THEN (* ; "2-bytes") + (SETQ CSET CHAR) + (SETQ CHAR (\BIN STREAM)) + (SETQ NUMBYTES 2) + ELSE + (* ;; "Runcoded CSET and CHAR") + + (SETQ NUMBYTES 1)) + (CL:WHEN COUNTP (SETQ *BYTECOUNTER* NUMBYTES)) + (CL:WHEN CHAR (* ; + "Typically NIL if ENDOFSTREAMOP returned NIL at EOF ") + (LOGOR (UNFOLD CSET 256) + CHAR))]) + +(\MCCSPEEKCCODE + [LAMBDA (STREAM NOERROR) (* ; "Edited 9-Sep-2025 22:43 by rmk") + (* ; "Edited 23-Apr-2025 14:16 by rmk") + (* ; "Edited 8-Dec-2023 15:32 by rmk") + (* ; "Edited 21-Jun-2021 23:44 by rmk:") + + (* ;; + "Modeled on \MCCSINCCODE, but peeks at the last byte in the sequence, leaves the stream unchanged") + + (\DTEST STREAM 'STREAM) + (LET ((CSET (ffetch (STREAM CHARSET) of STREAM)) + (CHAR (\PEEKBIN STREAM NOERROR))) + + (* ;; "Returns a 16 bit character code. Doesn't do EOL conversion--\PEEKCCODE does that. ") + + (* ;; "We don't change the charset in the stream, put the file ptr back the way it was.") + + (CL:WHEN CHAR + (IF (EQ CHAR NSCHARSETSHIFT) + THEN (\BIN STREAM) (* ; "Read the peeked shifting byte") + (SETQ CSET (\BIN STREAM)) (* ; "Consume the char shift byte") + (IF (NEQ CSET NSCHARSETSHIFT) + THEN + (* ;; + "Shift to new runcode CSET: SH CS CH. We have to BIN what we peeked, BIN, and peek again") + + (SETQ CHAR (\PEEKBIN STREAM NOERROR)) + (\BACKFILEPTR STREAM) + (\BACKFILEPTR STREAM) + ELSEIF (EQ 0 (\BIN STREAM)) + THEN (* ; "SH SH CSH CS CH where CSH is 0") + + (* ;; + "Note: no eof error check on this \BIN -- an eof in the middle of a charset shift is an error") + + (SETQ CSET (\BIN STREAM)) + (SETQ CHAR (\PEEKBIN STREAM NOERROR)) + (\BACKFILEPTR STREAM) + (\BACKFILEPTR STREAM) + (\BACKFILEPTR STREAM) + (\BACKFILEPTR STREAM) + ELSE (\MCCS.24BITENCODING.ERROR STREAM)) + ELSEIF (EQ CSET \NORUNCODE) + THEN (* ; "2 byte runs, BIN/PEEK/BACK") + (SETQ CSET CHAR) + (\BIN STREAM) + (SETQ CHAR (\PEEKBIN STREAM NOERROR)) (* ; "One BACKFILEPTR seems OK") + (\BACKFILEPTR STREAM)) + + (* ;; "No need to back up for the runcoded case") + + (CL:WHEN CHAR + (LOGOR (UNFOLD CSET 256) + CHAR)))]) + +(\MCCSOUTCHAR + [LAMBDA (STREAM CHARCODE) (* ; "Edited 23-Apr-2025 14:16 by rmk") + (* ; "Edited 13-Aug-2021 10:24 by rmk:") + + (* ;; "Closed function for the :MCCS external format") + + (COND + ((EQ CHARCODE (CHARCODE EOL)) + (FREPLACE (STREAM CHARPOSITION) OF STREAM WITH 0) + [COND + [(NOT (\RUNCODED STREAM)) (* ; + "Charset is a constant 0, we put out the high-order byte.") + (\BOUT STREAM (\CHARSET (CHARCODE EOL] + ((EQ (\CHARSET (CHARCODE EOL)) + (ffetch (STREAM CHARSET) of STREAM))) + (T (* ; + "We are runcoded, and not in character set 0, have to shift.") + (\BOUT STREAM NSCHARSETSHIFT) + (\BOUT STREAM (freplace (STREAM CHARSET) of STREAM with (\CHARSET (CHARCODE EOL] + + (* ;; "We are now in the right charset (0) for the first EOL byte. For CRLF, the CR is immediately followed by the LF byte, without the prefix 0 byte even if not runcoded, i.e. the 2 bytes are though of as a composite. The stream is left in CSET0 (the freplace above), read for another shift according to the next shift in a runcoded file.") + + (\BOUTEOL STREAM)) + (T (CHANGE (FFETCH (STREAM CHARPOSITION) OF STREAM) + (IPLUS16 1 DATUM)) + (COND + ((NOT (\RUNCODED STREAM)) + (\BOUT STREAM (\CHARSET CHARCODE)) + (\BOUT STREAM (\CHAR8CODE CHARCODE))) + ((EQ (\CHARSET CHARCODE) + (ffetch (STREAM CHARSET) of STREAM)) + (\BOUT STREAM (\CHAR8CODE CHARCODE))) + (T (\BOUT STREAM NSCHARSETSHIFT) + (\BOUT STREAM (freplace (STREAM CHARSET) of STREAM with (\CHARSET CHARCODE))) + (\BOUT STREAM (\CHAR8CODE CHARCODE]) + +(\MCCSBACKCCODE + [LAMBDA (STREAM COUNTP) (* ; "Edited 8-Dec-2023 15:34 by rmk") + (* ; "Edited 19-Jul-2022 17:12 by rmk") + (* ; "Edited 13-Aug-2021 14:08 by rmk:") + (DECLARE (USEDFREE *BYTECOUNTER*)) + (LET ((BYTE (AND (\BACKFILEPTR STREAM) + (\PEEKBIN STREAM))) + (CSET (fetch (STREAM CHARSET) of STREAM))) + (CL:WHEN BYTE + + (* ;; "The immediately preceding byte must be a character byte. If it is a byte in a runcode, then we are done, even if the byte before is part of a shift sequence.") + + (* ;; "But if we are currently in a nonruncoded file, we have to go back one more to get the character set byte.") + + (* ;; "If we can't back up, we are already at the beginning.") + + (IF (EQ \NORUNCODE CSET) + THEN (IF (\BACKFILEPTR STREAM) + THEN (CL:WHEN COUNTP (SETQ *BYTECOUNTER* -2)) + (LOGOR (UNFOLD (\PEEKBIN STREAM) + 256) + BYTE) + ELSE (CL:WHEN COUNTP (SETQ *BYTECOUNTER* -1)) + NIL) + ELSE (CL:WHEN COUNTP (SETQ *BYTECOUNTER* -1)) + (LOGOR (UNFOLD CSET 256) + BYTE)))]) + +(\MCCSFORMATBYTESTREAM + [LAMBDA (STREAM BYTESTREAM) (* ; "Edited 27-May-2025 23:42 by rmk") + (* ; "Edited 26-Mar-2024 11:00 by rmk") + (* ; "Edited 19-Mar-2024 16:02 by rmk") + (\EXTERNALFORMAT BYTESTREAM (\EXTERNALFORMAT STREAM)) + + (* ;; "This stream may be read as a continuation of STREAM (TTYIN, LAFITE?), and we want to make sure that the bytes are encoded properly. So let's assert (and possibly mark) that that's its current situation.") + + (\MCCSCHARSETFN BYTESTREAM (fetch (STREAM CHARSET) of STREAM)) + BYTESTREAM]) + +(\MCCSCHARSETFN + [LAMBDA (STREAM CHARSET DONTMARKSTREAM) (* ; "Edited 9-Dec-2023 11:18 by rmk") + + (* ;; "This differs from \GENERIC.CHARSET in that it actually writes the shifting bytes into an output stream, unless DONTMARKSTREAM. It will do write the shifts, even if it just replicates the situation that is already there (presumably CHARSET = the old CHARSET). The client should test and avoid calling if useless shifts are not desired.") + + (LET [(CSET (ffetch (STREAM CHARSET) of (\DTEST STREAM 'STREAM] + (CL:WHEN CHARSET + (CL:WHEN (EQ CHARSET T) + (SETQ CHARSET \NORUNCODE)) + (CL:UNLESS (EQ CHARSET CSET) + (freplace (STREAM CHARSET) of STREAM with CHARSET) + (CL:UNLESS DONTMARKSTREAM + (CL:WHEN (\IOMODEP STREAM 'OUTPUT T) + (\BOUT STREAM NSCHARSETSHIFT) + (if (EQ CHARSET \NORUNCODE) + then (\BOUT STREAM \NORUNCODE) + (\BOUT STREAM 0) + else (\BOUT STREAM CHARSET)))))) + CSET]) +) +(DEFINEQ + +(\CREATE.MCCS.EXTERNALFORMAT + [LAMBDA (NAME EOL) (* ; "Edited 23-Apr-2025 14:19 by rmk") + (* ; "Edited 7-Dec-2023 23:03 by rmk") + (* ; "Edited 30-Jun-2022 18:08 by rmk") + (* ; "Edited 10-Sep-2021 19:49 by rmk:") + +(* ;;; "Create the :MCCS external format. Stream's EOL overrides the (vacuous) default here") + + (MAKE-EXTERNALFORMAT (OR NAME :MCCS) + (FUNCTION \MCCSINCCODE) + (FUNCTION \MCCSPEEKCCODE) + (FUNCTION \MCCSBACKCCODE) + (FUNCTION \MCCSOUTCHAR) + (FUNCTION \MCCSFORMATBYTESTREAM) + (OR EOL 'LF) + T NIL NIL (FUNCTION \MCCSCHARSETFN]) +) +(DEFINEQ + +(\MCCS.24BITENCODING.ERROR + [LAMBDA (STREAM) (* ; "Edited 9-Sep-2025 22:41 by rmk") + (* ; "Edited 23-Apr-2025 14:34 by rmk") + (* bvm%: "12-Mar-86 15:35") + (DECLARE (USEDFREE *SIGNAL-MCCS.24BITENCODING.ERROR*)) + +(* ;;; "Called if we see the sequence shift,shift on STREAM -- means shift to 24-bit character set, which we don't support. Usually this just means we're erroneously reading a binary file as text. If this function returns, its value is taken as a character set to shift to") + + (CL:WHEN *SIGNAL-MCCS.24BITENCODING.ERROR* (* ; + "Only cause error if user/reader cares") + (ERROR "24-bit MCCS encoding not supported" STREAM)) (* ; "Return charset zero") + 0]) +) + +(RPAQ? *SIGNAL-MCCS.24BITENCODING.ERROR* ) +(DECLARE%: EVAL@COMPILE DONTCOPY +(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE + +(RPAQQ \NORUNCODE 255) + +(RPAQQ NSCHARSETSHIFT 255) + + +(CONSTANTS (\NORUNCODE 255) + (NSCHARSETSHIFT 255)) +) +(DECLARE%: EVAL@COMPILE + +(PUTPROPS \RUNCODED MACRO (OPENLAMBDA (STREAM) + + (* ;; "returns NIL is the stream is not runcoded, that is, if the stream has 16 bit bytes explicitly represented") + (* ; + "note that neq is ok since charsets are known to be SMALLP's") + (NEQ (fetch CHARSET of STREAM) + \NORUNCODE))) +) + +(* "END EXPORTED DEFINITIONS") + +) +(DECLARE%: DONTEVAL@LOAD DOCOPY + +(\CREATE.MCCS.EXTERNALFORMAT :MCCS) + +(\CREATE.MCCS.EXTERNALFORMAT :XCCS) +) + + + +(* ;; "") + + + + +(* ;; "Assignment of MCCS characters") + + +(ADDTOVAR CHARACTERNAMES (Lowline "0,254") + (Circumflex "0,255") + (Currency "0,244") + (Leftarrow "0,137") + (Uparrow "0,136") + (Dollar "0,44") + (Underline Lowline)) + + + +(* ;; "Mapping between true XCCS and MCCS codes") + +(DEFINEQ + +(MTOXCODE + [LAMBDA (MCODE) (* ; "Edited 7-Sep-2025 22:36 by rmk") + (* ; "Edited 31-Aug-2025 14:24 by rmk") + (* ; "Edited 1-May-2025 20:05 by rmk") + (* ; "Edited 27-Apr-2025 13:42 by rmk") + + (* ;; "Inverts XTOMCODE. Presumably for the \OUTCHAR function of hardcopy devices (like Interpress) that want XCCS codes.") + + (OR [CDR (ASSOC MCODE (CONSTANT (for X M from 0 to \MAXTHINCHAR when (SETQ M (XTOMCODE X)) + unless (EQ M X) collect (CONS M X] + MCODE]) + +(XTOMCODE + [LAMBDA (XCODE) (* ; "Edited 7-Sep-2025 22:36 by rmk") + (* ; "Edited 4-Sep-2025 00:25 by rmk") + (OR [CDR (ASSOC XCODE (CONSTANT (APPEND (CHARCODE ((Currency . Dollar) + (Dollar . Currency))) + (for X M from 0 to \MAXTHINCHAR + when (SETQ M (X$TOMCODE X)) + unless (EQ X M) collect (CONS X M] + XCODE]) + +(XTOMSTRING + [LAMBDA (XSTRING DESTRUCTIVE) (* ; "Edited 2-Sep-2025 12:14 by rmk") + (* ; "Edited 29-Apr-2025 13:08 by rmk") + + (* ;; "Converts Unicodes to MCCS codes in XSTRING.") + + (for I XCODE (MSTRING _ (CL:IF DESTRUCTIVE + XSTRING + (CONCAT XSTRING))) from 1 while (SETQ XCODE (NTHCHARCODE XSTRING I)) + do (RPLCHARCODE MSTRING I (XTOMCODE XCODE)) finally (RETURN MSTRING]) + +(MTOXSTRING + [LAMBDA (MSTRING DESTRUCTIVE) (* ; "Edited 2-Sep-2025 12:22 by rmk") + (* ; "Edited 29-Apr-2025 13:08 by rmk") + + (* ;; "Converts XCCS to MCCS codes in XSTRING.") + + (for I MCODE (XSTRING _ (CL:IF DESTRUCTIVE + MSTRING + (CONCAT MSTRING))) from 1 while (SETQ MCODE (NTHCHARCODE MSTRING I)) + do (RPLCHARCODE XSTRING I (MTOXCODE MCODE)) finally (RETURN XSTRING]) +) +(DEFINEQ + +(MTOX$CODE + [LAMBDA (MCODE) (* ; "Edited 7-Sep-2025 22:37 by rmk") + (* ; "Edited 31-Aug-2025 14:23 by rmk") + (* ; "Edited 7-Aug-2025 08:13 by rmk") + (* ; "Edited 11-May-2025 16:54 by rmk") + + (* ;; "Inverts X$TOMCODE. Only worries about charset 0") + + (OR [CDR (ASSOC MCODE (CONSTANT (for X M from 0 to \MAXTHINCHAR when (SETQ M (X$TOMCODE X)) + unless (EQ M X) collect (CONS X M] + MCODE]) + +(X$TOMCODE + [LAMBDA (X$CODE) (* ; "Edited 7-Sep-2025 22:37 by rmk") + (* ; "Edited 3-Sep-2025 17:26 by rmk") + (* ; "Edited 31-Aug-2025 11:49 by rmk") + (* ; "Edited 7-Aug-2025 08:14 by rmk") + + (* ;; "Swaps arrows with lowline and cirumflex") + (* ; "Edited 11-May-2025 16:54 by rmk") + (OR [CAR (find PAIR in (CHARCODE ((Uparrow Circumflex) + (Circumflex Uparrow) + (Leftarrow Lowline) + (Lowline Leftarrow))) suchthat (EQ X$CODE (CADR PAIR] + X$CODE]) +) +(DEFINEQ + +(KANJICHARSETP + [LAMBDA (CHARSET) (* ; "Edited 13-Jun-2025 16:33 by rmk") + + (* ;; "Returns CHARSET if it is a charset with MCCS Kanji characters") + + (AND (<= 48 CHARSET 118) + CHARSET]) + +(CHINESECHARSETP + [LAMBDA (CHARSET) (* ; "Edited 18-Jun-2025 23:09 by rmk") + (* ; "Edited 13-Jun-2025 16:33 by rmk") + + (* ;; "Returns CHARSET if it is a charset with MCCS Chinese characters") + + (AND (<= 161 CHARSET 212) + CHARSET]) +) + + + +(* ; " Mapping functions to MCCS") + + + + +(* ;; "Used by \TEDIT.MCCS.TRANSLATE .") + + +(RPAQQ ALTOTEXT2MCCS + ( + (* ;; "From bravo doc") + + (^N "356,055" MINUS) + (^V "357,44" ENDASH) + (^S EMDASH) + (^O EMQUAD) + (^X "356,055" MINUS) + (^Y FIGURESPACE ENQUAD) + + (* ;; "Fom current Helvetica/Timesroman fonts") + + ("0,1" "0,317" HACHEK) + ("0,3" "361,255" DIARESIS) + ("0,4" "0,310" CCEDILLA) + ("0,5" "0,301" GRAVE) + ("0,6" "360,41" ff) + ("0,7" "0,271" LSQ) + ("0,10" "0,241" SPANISHEXCL) + ("0,13" "0,302" ACUTE) + ("0,20" "0,304" TILDE) + ("0,21" "360,42" ffi) + ("0,22" "360,43" ffl) + ("0,24" "360,44" fi) + ("0,25" "360,45" fl) + ("0,26" "357,44" ENDASH) + ("0,27" "0,306" BREVE) + ("0,34" ENQUAD) + ("0,36" "0,304" TILDE) + ("0,140" "0,251") + ("0,200" "361,47" A-umlaut) + ("0,201" "361,124" O-umlaut) + ("0,202" "361,47" A-ring) + ("0,233" "357,44" ENDASH) + ("0,234" EMDASH) + ("0,240" "361,247" a-umlaut) + ("0,241" "361,324" o-umlaut) + ("0,242" "361,250" a-ring) + ("0,243" "361,345" u-umlaut) + ("0,254" Circumflex) + ("0,260" "0,242" CENTS) + ("0,261" "0,243" POUND) + ("0,265" "41,172" STAR) + ("0,266" "0,247" SECTION) + ("0,267" "357,146" BULLET) + ("0,270" "357,60" DAGGER) + ("0,271" "357,061" DOUBLEDAGGER) + ("0,272" "0,266" PARAGRAPH) + ("0,274" "0,261" PLUSMINUS) + ("0,275" "0,241" SPANISHEXCL) + ("0,276" "0,277" SPANISHQUES) + ("0,277" Lowline))) + +(RPAQQ SYMBOLTOMCCS + (("0,1" Null) + ("0,2" "0,264") + ("0,3" "41,142") + ("0,4" Null) + ("0,5" "41,176") + ("0,6" "0,261") + (Bell "357,175") + (Backspace "357,142") + (Tab "357,143") + (Linefeed "357,144") + ("0,13" "357,145") + (Page Null) + (Newline "0,270") + ("0,16" Null) + ("0,17" Null) + ("0,20" "357,160") + ("0,21" "357,162") + ("0,22" "357,131") + ("0,23" "357,130") + ("0,24" "41,145") + ("0,25" "41,146") + ("0,26" Null) + ("0,27" Null) + ("0,30" "356,176") + ("0,31" "357,171") + ("0,32" "357,133") + (Escape "357,132") + ("0,34" "41,142") + ("0,35" "357,163") + ("0,36" Null) + (Tenexeol Null) + (Space Null) + ("0,41" "0,256") + ("0,42" Circumflex) + ("0,43" "0,257") + (Dollar "357,122") + ("0,45" "357,102") + ("0,46" "357,103") + ("0,47" "357,167") + ("0,50" "357,115") + ("0,51" "357,117") + ("0,52" Null) + ("0,53" Null) + ("0,54" "357,116") + ("0,55" Null) + ("0,56" Null) + ("0,57" Null) + (Zero Null) + (One INFINITY) + (Two "357,112") + (Three "357,113") + (Four "357,141") + (Five Null) + (Six "357,154") + (Seven Lowline) + (Eight "357,265") + (Nine "357,264") + ("0,72" "357,152") + ("0,73" "357,247") + ("0,74" Null) + ("0,75" Null) + ("0,76" Null) + ("0,77" "0,57") + ("0,100" Null) + ("0,133" "357,127") + ("0,134" "357,126") + ("0,135" Null) + (Uparrow "357,266") + (Leftarrow "357,267") + ("0,140" "357,66") + ("0,141" "357,67") + ("0,142" "357,262") + ("0,143" "357,263") + ("0,144" "357,260") + ("0,145" "357,261") + ("0,146" "0,173") + ("0,147" "0,175") + ("0,150" "357,62") + ("0,151" "357,63") + ("0,152" "356,174") + ("0,153" "41,102") + ("0,154" "357,73") + ("0,155" "357,72") + ("0,156" "42,44") + ("0,157" "42,46") + ("0,160" "357,174") + ("0,161" "41,142") + ("0,162" Null) + ("0,163" "357,165") + ("0,164" Null) + ("0,165" Null) + ("0,166" Null) + ("0,167" Null) + ("0,170" "0,247") + ("0,171" "357,60") + ("0,172" "357,61") + ("0,173" "0,266") + ("0,174" "0,100") + ("0,175" "0,323") + ("0,176" "0,243") + (Rubout Dollar) + ("0,200" Null) + ("0,201" Null) + ("0,202" Null) + ("0,203" Null) + ("0,204" Null) + ("0,205" Null) + ("0,206" Null) + ("0,207" Null) + ("0,210" Null) + ("0,211" Null) + ("0,212" Null) + ("0,213" Null) + ("0,214" Null) + ("0,215" Null) + ("0,216" Null) + ("0,217" Null) + ("0,220" Null) + ("0,221" Null) + ("0,222" Null) + ("0,223" Null) + ("0,224" Null) + ("0,225" Null) + ("0,226" Null) + ("0,227" Null) + ("0,230" Null) + ("0,231" Null) + ("0,232" Null) + ("0,233" Null) + ("0,234" Null) + ("0,235" Null) + ("0,236" Null) + ("0,237" Null) + ("0,240" Null) + ("0,241" Null) + ("0,242" Null) + ("0,243" Null) + (Currency Null) + ("0,245" Null) + ("0,246" Null) + ("0,247" Null) + ("0,250" Null) + ("0,251" Null) + (LEFT-DOUBLEQUOTE Null) + ("0,253" Null) + (Lowline Null) + (Circumflex Null) + ("0,256" Null) + ("0,257" Null) + ("0,260" Null) + ("0,261" Null) + ("0,262" Null) + ("0,263" Null) + ("0,264" Null) + ("0,265" Null) + ("0,266" Null) + ("0,267" Null) + ("0,270" Null) + ("0,271" Null) + (RIGHT-DOUBLEQUOTE Null) + ("0,273" Null) + ("0,274" Null) + ("0,275" Null) + ("0,276" Null) + ("0,277" Null) + ("0,300" Null) + ("0,301" Null) + ("0,302" Null) + ("0,303" Null) + ("0,304" Null) + ("0,305" Null) + ("0,306" Null) + ("0,307" Null) + ("0,310" Null) + ("0,311" Null) + ("0,312" Null) + ("0,313" Null) + ("0,314" Null) + ("0,315" Null) + ("0,316" Null) + ("0,317" Null) + ("0,320" Null) + ("0,321" Null) + ("0,322" Null) + ("0,323" Null) + ("0,324" Null) + ("0,325" Null) + ("0,326" Null) + ("0,327" Null) + ("0,330" Null) + ("0,331" Null) + ("0,332" Null) + ("0,333" Null) + ("0,334" Null) + ("0,335" Null) + ("0,336" Null) + ("0,337" Null) + ("0,340" Null) + ("0,341" Null) + ("0,342" Null) + ("0,343" Null) + ("0,344" Null) + ("0,345" Null) + ("0,346" Null) + ("0,347" Null) + ("0,350" Null) + ("0,351" Null) + ("0,352" Null) + ("0,353" Null) + ("0,354" Null) + ("0,355" Null) + ("0,356" Null) + ("0,357" Null) + ("0,360" Null) + ("0,361" Null) + ("0,362" Null) + ("0,363" Null) + ("0,364" Null) + ("0,365" Null) + ("0,366" Null) + ("0,367" Null) + ("0,370" Null) + ("0,371" Null) + ("0,372" Null) + ("0,373" Null) + ("0,374" Null) + ("0,375" Null) + ("0,376" Null) + ("0,377" Null))) + +(RPAQQ SIGMATOMCCS + (("0,101" "0,101" low squaredot not in XCCS) + ("0,103" "357,166" contourintegral) + ("0,111" "357,126" intersection) + ("0,114" "357,266" and) + ("0,115" "357,172" Summation) + ("0,120" "357,173" Product) + ("0,122" "357,174" radical) + ("0,123" "357,165" integral) + ("0,125" "357,127" union) + ("0,126" "357,267" or))) + +(RPAQQ HIPPOTOMCCS + (("0,16" "356,55") + ("0,17" EMQUAD) + ("0,23" EMDASH) + ("0,26" "357,44") + ("0,30" "356,55") + ("0,31" ENQUAD) + ("0,101" "Greek,101") + ("0,102" "Greek,102") + ("0,103" "Greek,121") + ("0,104" "Greek,105") + ("0,105" "Greek,106") + ("0,106" "Greek,132") + ("0,107" "Greek,104") + ("0,110" "Greek,112") + ("0,111" "Greek,114") + ("0,113" "Greek,115") + ("0,114" "Greek,116") + ("0,115" "Greek,117") + ("0,116" "Greek,120") + ("0,117" "Greek,122") + ("0,120" "Greek,123") + ("0,121" "Greek,113") + ("0,122" "Greek,125") + ("0,123" "Greek,126") + ("0,124" "Greek,130") + ("0,125" "Greek,131") + ("0,127" "Greek,135") + ("0,130" "Greek,133") + ("0,131" "Greek,134") + ("0,132" "Greek,111") + (Uparrow Circumflex) + (Leftarrow Lowline) + ("0,141" "Greek,141") + ("0,142" "Greek,142") + ("0,143" "Greek,161") + ("0,144" "Greek,145") + ("0,145" "Greek,146") + ("0,146" "Greek,172") + ("0,147" "Greek,144") + ("0,150" "Greek,152") + ("0,151" "Greek,154") + ("0,153" "Greek,155") + ("0,154" "Greek,156") + ("0,155" "Greek,157") + ("0,156" "Greek,160") + ("0,157" "Greek,162") + ("0,160" "Greek,163") + ("0,161" "Greek,153") + ("0,162" "Greek,165") + ("0,163" "Greek,166") + ("0,164" "Greek,170") + ("0,165" "Greek,171") + ("0,167" "Greek,175") + ("0,170" "Greek,173") + ("0,171" "Greek,174") + ("0,172" "Greek,151") + ("0,233" "357,44") + ("0,234" EMDASH) + ("0,267" "357,146"))) + +(RPAQQ CYRILLICTOMCCS + ((Dollar "Cyrillic,47") + ("0,52" "Cyrillic,71") + ("0,55" "41,76") + (Two "Cyrillic,157") + (Four "Cyrillic,127") + (Six "Cyrillic,150") + (Eight "Cyrillic,151") + ("0,74" "0,253") + ("0,76" "0,273") + ("0,100" "Cyrillic,77") + ("0,101" "Cyrillic,41") + ("0,102" "Cyrillic,42") + ("0,103" "Cyrillic,76") + ("0,104" "Cyrillic,45") + ("0,105" "Cyrillic,46") + ("0,106" "Cyrillic,66") + ("0,107" "Cyrillic,44") + ("0,110" "Cyrillic,101") + ("0,111" "Cyrillic,52") + ("0,112" "Cyrillic,53") + ("0,113" "Cyrillic,54") + ("0,114" "Cyrillic,55") + ("0,115" "Cyrillic,56") + ("0,116" "Cyrillic,57") + ("0,117" "Cyrillic,60") + ("0,120" "Cyrillic,61") + ("0,121" "Cyrillic,67") + ("0,122" "Cyrillic,62") + ("0,123" "Cyrillic,63") + ("0,124" "Cyrillic,64") + ("0,125" "Cyrillic,65") + ("0,126" "Cyrillic,43") + ("0,127" "Cyrillic,50") + ("0,130" "Cyrillic,75") + ("0,131" "Cyrillic,100") + ("0,132" "Cyrillic,51") + ("0,133" "Cyrillic,152") + ("0,134" "Cyrillic,0") + ("0,135" "Cyrillic,153") + (Uparrow "Cyrillic,74") + (Leftarrow "Cyrillic,154") + ("0,140" "Cyrillic,0") + ("0,141" "Cyrillic,121") + ("0,142" "Cyrillic,122") + ("0,143" "Cyrillic,176") + ("0,144" "Cyrillic,125") + ("0,145" "Cyrillic,126") + ("0,146" "Cyrillic,146") + ("0,147" "Cyrillic,124") + ("0,150" "Cyrillic,161") + ("0,151" "Cyrillic,132") + ("0,152" "Cyrillic,133") + ("0,153" "Cyrillic,134") + ("0,154" "Cyrillic,135") + ("0,155" "Cyrillic,136") + ("0,156" "Cyrillic,137") + ("0,157" "Cyrillic,140") + ("0,160" "Cyrillic,141") + ("0,161" "Cyrillic,147") + ("0,162" "Cyrillic,142") + ("0,163" "Cyrillic,143") + ("0,164" "Cyrillic,144") + ("0,165" "Cyrillic,145") + ("0,166" "Cyrillic,123") + ("0,167" "Cyrillic,130") + ("0,170" "Cyrillic,155") + ("0,171" "Cyrillic,160") + ("0,172" "Cyrillic,131") + ("0,173" "Cyrillic,72") + ("0,174" "Cyrillic,0") + ("0,175" "Cyrillic,73") + ("0,176" "Cyrillic,70") + (Rubout "Cyrillic,0") + ("0,217" "Cyrillic,156") + ("0,233" "357,44") + ("0,234" EMDASH) + ("0,267" "357,146"))) + +(RPAQQ MATHTOMCCS + (("0,1" "357,173") + ("0,2" "357,62") + ("0,3" "357,63") + ("0,4" Null) + ("0,5" "0,243") + ("0,6" "357,165") + (Bell "357,166") + (Backspace Null) + (Tab Null) + (Linefeed Null) + ("0,13" "0,266") + (Page Null) + (Newline Null) + ("0,16" Null) + ("0,17" "357,146") + ("0,20" Null) + ("0,21" Null) + ("0,22" Null) + ("0,23" "357,172") + ("0,24" Null) + ("0,25" Null) + ("0,26" "357,157") + ("0,27" Null) + ("0,30" Null) + ("0,31" Null) + ("0,32" Null) + (Escape Null) + ("0,34" Null) + ("0,35" Null) + ("0,36" Null) + (Tenexeol Null) + ("0,41" "357,60") + ("0,42" "357,147") + ("0,43" INFINITY) + (Dollar "0,242") + ("0,45" "0,270") + ("0,46" "357,266") + ("0,47" "357,163") + ("0,50" "0,302") + ("0,51" "357,174") + ("0,52" "0,307") + ("0,53" "0,261") + ("0,54" "357,114") + ("0,55" "357,175") + ("0,56" "41,150") + ("0,57" "357,145") + (Zero "357,147") + (One "42,42") + (Two "42,44") + (Three "41,176") + (Four "357,142") + (Five "357,143") + (Six "357,144") + (Seven "357,154") + (Eight "41,172") + (Nine "0,307") + ("0,72" "0,247") + ("0,73" Null) + ("0,74" "41,145") + ("0,75" "41,142") + ("0,76" "41,146") + ("0,77" "0,277") + ("0,100" "357,100") + ("0,101" "357,265") + ("0,102" "357,112") + ("0,103" "357,254") + ("0,104" "357,271") + ("0,105" "357,264") + ("0,106" "357,61") + ("0,107" "357,133") + ("0,110" "357,137") + ("0,111" "357,131") + ("0,112" "357,132") + ("0,113" "357,136") + ("0,114" "357,130") + ("0,115" "360,275") + ("0,116" "357,113") + ("0,117" "357,141") + ("0,120" "357,161") + ("0,121" "357,121") + ("0,122" "357,256") + ("0,123" "357,171") + ("0,124" "357,160") + ("0,125" "357,127") + ("0,126" "357,267") + ("0,127" "357,162") + ("0,130" "0,264") + ("0,131" "360,272") + ("0,132" "357,270") + ("0,133" Null) + ("0,134" Null) + ("0,135" Null) + (Uparrow "0,257") + (Leftarrow "0,256") + ("0,140" Null) + ("0,141" "357,247") + ("0,142" "357,123") + ("0,143" "0,323") + ("0,144" "357,272") + ("0,145" "357,167") + ("0,146" "357,122") + ("0,147" "357,117") + ("0,150" "357,150") + ("0,151" "357,260") + ("0,152" "357,261") + ("0,153" "357,262") + ("0,154" "357,263") + ("0,155" "357,110") + ("0,156" "357,152") + ("0,157" "357,147") + ("0,160" "357,66") + ("0,161" "357,70") + ("0,162" "0,322") + ("0,163" "357,76") + ("0,164" "357,74") + ("0,165" "357,77") + ("0,166" "357,75") + ("0,167" "357,102") + ("0,170" "357,103") + ("0,171" "357,126") + ("0,172" "357,67") + ("0,173" "0,274") + ("0,174" "0,275") + ("0,175" "0,276") + ("0,176" "357,120") + (Rubout Null) + ("0,200" Null) + ("0,201" Null) + ("0,202" Null) + ("0,203" Null) + ("0,204" Null) + ("0,205" Null) + ("0,206" Null) + ("0,207" Null) + ("0,210" Null) + ("0,211" Null) + ("0,212" Null) + ("0,213" Null) + ("0,214" Null) + ("0,215" Null) + ("0,216" Null) + ("0,217" Null) + ("0,220" Null) + ("0,221" Null) + ("0,222" Null) + ("0,223" Null) + ("0,224" Null) + ("0,225" Null) + ("0,226" Null) + ("0,227" Null) + ("0,230" Null) + ("0,231" Null) + ("0,232" Null) + ("0,233" Null) + ("0,234" Null) + ("0,235" Null) + ("0,236" Null) + ("0,237" Null) + ("0,240" Null) + ("0,241" Null) + ("0,242" Null) + ("0,243" Null) + (Currency Null) + ("0,245" Null) + ("0,246" Null) + ("0,247" Null) + ("0,250" Null) + ("0,251" Null) + (LEFT-DOUBLEQUOTE Null) + ("0,253" Null) + (Lowline Null) + (Circumflex Null) + ("0,256" Null) + ("0,257" Null) + ("0,260" Null) + ("0,261" Null) + ("0,262" Null) + ("0,263" Null) + ("0,264" Null) + ("0,265" Null) + ("0,266" Null) + ("0,267" Null) + ("0,270" Null) + ("0,271" Null) + (RIGHT-DOUBLEQUOTE Null) + ("0,273" Null) + ("0,274" Null) + ("0,275" Null) + ("0,276" Null) + ("0,277" Null) + ("0,300" Null) + ("0,301" Null) + ("0,302" Null) + ("0,303" Null) + ("0,304" Null) + ("0,305" Null) + ("0,306" Null) + ("0,307" Null) + ("0,310" Null) + ("0,311" Null) + ("0,312" Null) + ("0,313" Null) + ("0,314" Null) + ("0,315" Null) + ("0,316" Null) + ("0,317" Null) + ("0,320" Null) + ("0,321" Null) + ("0,322" Null) + ("0,323" Null) + ("0,324" Null) + ("0,325" Null) + ("0,326" Null) + ("0,327" Null) + ("0,330" Null) + ("0,331" Null) + ("0,332" Null) + ("0,333" Null) + ("0,334" Null) + ("0,335" Null) + ("0,336" Null) + ("0,337" Null) + ("0,340" Null) + ("0,341" Null) + ("0,342" Null) + ("0,343" Null) + ("0,344" Null) + ("0,345" Null) + ("0,346" Null) + ("0,347" Null) + ("0,350" Null) + ("0,351" Null) + ("0,352" Null) + ("0,353" Null) + ("0,354" Null) + ("0,355" Null) + ("0,356" Null) + ("0,357" Null) + ("0,360" Null) + ("0,361" Null) + ("0,362" Null) + ("0,363" Null) + ("0,364" Null) + ("0,365" Null) + ("0,366" Null) + ("0,367" Null) + ("0,370" Null) + ("0,371" Null) + ("0,372" Null) + ("0,373" Null) + ("0,374" Null) + ("0,375" Null) + ("0,376" Null) + ("0,377" Null))) +(DEFINEQ + +(MCCSCODEMAPARRAY + [LAMBDA (MAP) (* ; "Edited 6-Sep-2025 18:26 by rmk") + (* ; "Edited 31-Aug-2025 16:15 by rmk") + (* ; "Edited 7-Aug-2025 08:55 by rmk") + (* ; "Edited 2-Jun-2025 11:45 by rmk") + (* ; "Edited 1-Jun-2025 07:26 by rmk") + (* ; "Edited 24-May-2025 12:22 by rmk") + (* ; "Edited 21-Dec-2024 18:57 by rmk") + + (* ;; "Atom cases for loadup") + + (SELECTQ MAP + (XCCS (SETQ MAP (APPEND MTOXCODEMAP ALTOTEXT2MCCS))) + (MCCS (SETQ MAP ALTOTEXT2MCCS)) + NIL) + (LET ((TABLE (ARRAY (ADD1 \MAXTHINCHAR) + 'WORD 0 0))) + (for I from 0 to \MAXTHINCHAR do (SETA TABLE I I)) + [for PAIR FROMCODE in MAP when (LISTP PAIR) unless (EQ '* (CAR PAIR)) + when (SETQ FROMCODE (CL:IF (CHARCODEP (CAR PAIR)) + (CAR PAIR) + (CHARCODE.DECODE (CAR PAIR) + T))) do (SETA TABLE FROMCODE (CL:IF (CHARCODEP + (CADR PAIR)) + (CADR PAIR) + (CHARCODE.DECODE + (CADR PAIR)))] + TABLE]) +) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS ALTOTOMCCSARRAY SYMBOLTOMCCSARRAY HIPPOTOMCCSARRAY CYRILLICTOMCCSARRAY MATHTOMCCSARRAY + SIGMATOMCCSARRAY) +) + +(RPAQ? ALTOTOMCCSARRAY (MCCSCODEMAPARRAY 'MCCS)) + +(RPAQ? SYMBOLTOMCCSARRAY (MCCSCODEMAPARRAY SYMBOLTOMCCS)) + +(RPAQ? HIPPOTOMCCSARRAY (MCCSCODEMAPARRAY HIPPOTOMCCS)) + +(RPAQ? CYRILLICTOMCCSARRAY (MCCSCODEMAPARRAY CYRILLICTOMCCS)) + +(RPAQ? MATHTOMCCSARRAY (MCCSCODEMAPARRAY MATHTOMCCS)) + +(RPAQ? SIGMATOMCCSARRAY (MCCSCODEMAPARRAY SIGMATOMCCS)) +(DEFINEQ + +(MCCSMAPFN + [LAMBDA (FROMENCODING) (* ; "Edited 6-Sep-2025 12:40 by rmk") + (* ; "Edited 4-Sep-2025 08:06 by rmk") + (* ; "Edited 24-May-2025 10:55 by rmk") + + (* ;; "Returns the function that maps a FROMENCODING code to the corresponding MCCS code") + + (CL:WHEN (LISTP FROMENCODING) + + (* ;; "Assume it's a FONTSPEC") + + (SETQ FROMENCODING (fetch (FONTSPEC FSFAMILY) of FROMENCODING))) + (if (MEMB FROMENCODING NSFONTFAMILIES) + then (SETQ FROMENCODING 'XCCS$) + elseif (MEMB FROMENCODING ALTOFONTFAMILIES) + then (SETQ FROMENCODING 'ALTOTEXT)) + (SELECTQ FROMENCODING + (XCCS$ (FUNCTION X$TOMCODE)) + (ALTOTEXT (FUNCTION ATOMCODE)) + (SYMBOL (FUNCTION SYMBOLTOMCODE)) + (SIGMA (FUNCTION SIGMATOMCODE)) + (MATH (FUNCTION MATHTOMCODE)) + (HIPPO (FUNCTION HIPPOTOMCODE)) + (CYRILLIC (FUNCTION CYRILLICTOMCODE)) + (XCCS (FUNCTION XTOMCODE)) + (GACHA (FUNCTION GACHATOMCODE)) + (MCCS NIL) + NIL]) + +(MCCSMAPPAIRS + [LAMBDA (FROMENCODING NONIDENTITY) (* ; "Edited 6-Sep-2025 16:43 by rmk") + (* ; "Edited 31-Aug-2025 16:16 by rmk") + + (* ;; "Returns the pairs for MOVEFONTCHARS to use to move charset-0 glyphs into their MCCS positions. For example, the Leftarrow and Lowline glyphs switch positions in an XCCS$ font.") + + (LET (PAIRS) + [SETQ PAIRS (SELECTQ FROMENCODING + (GACHA (* ; "ctrl and upper are slugged") + [APPEND (XCCSUNDEFINEDPAIRS) + '(((Uparrow TERMINAL) + Circumflex) + (^X Lowline]) + (ALTOTEXT (APPEND (XCCSUNDEFINEDPAIRS) + ALTOTEXT2MCCS)) + (XCCS$ '((Uparrow Circumflex) + (Leftarrow Lowline) + (Lowline Leftarrow) + (Circumflex Uparrow))) + (for C M (FN _ (MCCSMAPFN FROMENCODING)) from 0 to \MAXTHINCHAR + when (SETQ M (APPLY* FN C NONIDENTITY)) collect (LIST C M] + + (* ;; "Weed out interspersed comments") + + (for P in PAIRS when (LISTP P) unless (EQ '* (CAR P)) + collect (LIST (if (LISTP (CAR P)) + then + (* ;; + "Allows for the (Uparrow TERMINAL) case above, for MOVEFONTCHARS") + + (CONS (CL:IF (CHARCODEP (CAAR P)) + (CAAR P) + (CHARCODE.DECODE (CAAR P))) + (CDAR P)) + elseif (CHARCODEP (CAR P)) + then (CAR P) + else (CHARCODE.DECODE (CAR P))) + (CL:IF (CHARCODEP (CADR P)) + (CADR P) + (CHARCODE.DECODE (CADR P)))]) + +(XCCSUNDEFINEDPAIRS + [LAMBDA NIL (* ; "Edited 2-Sep-2025 13:14 by rmk") + (APPEND (for I from 0 to (SUB1 (CHARCODE SPACE)) collect (LIST NIL I)) + (for I from 127 to \MAXTHINCHAR collect (LIST NIL I]) +) + + + +(* ; "Mappings into MCCS: needed for hardcopy and Tedit coercion") + +(DEFINEQ + +(GACHATOMCODE + [LAMBDA (GCODE) (* ; "Edited 7-Sep-2025 22:38 by rmk") + (* ; "Edited 3-Sep-2025 23:23 by rmk") + (* ; "Edited 30-Aug-2025 21:58 by rmk") + + (* ;; "Gacha did not have a code for circumflex, so there is nothing to map") + + (CL:IF (EQ GCODE (CHARCODE ^X)) + (CHARCODE Lowline) + GCODE)]) + +(SYMBOLTOMCODE + [LAMBDA (SCODE) (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 7-Aug-2025 09:37 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (OR (CL:WHEN (ILEQ SCODE \MAXTHINCHAR) + (LET ((MCODE (ELT SYMBOLTOMCCSARRAY SCODE))) + (CL:UNLESS (EQ MCODE SCODE) + MCODE))) + SCODE]) + +(SIGMATOMCODE + [LAMBDA (SCODE) (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (* ; "Edited 24-May-2025 10:54 by rmk") + (OR (CL:WHEN (ILEQ SCODE \MAXTHINCHAR) + (LET ((MCODE (ELT SIGMATOMCCSARRAY SCODE))) + (CL:UNLESS (EQ MCODE SCODE) + MCODE))) + SCODE]) + +(ATOMCODE + [LAMBDA (ACODE) (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 24-May-2025 09:41 by rmk") + (OR (CL:WHEN (ILEQ ACODE \MAXTHINCHAR) + (LET ((MCODE (ELT ALTOTOMCCSARRAY ACODE))) + (CL:UNLESS (EQ MCODE ACODE) + MCODE))) + ACODE]) + +(MATHTOMCODE + [LAMBDA (MATHCODE) (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 4-Sep-2025 08:18 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (* ; "Edited 24-May-2025 10:58 by rmk") + (OR (CL:WHEN (ILEQ MATHCODE \MAXTHINCHAR) + (LET ((MCODE (ELT MATHTOMCCSARRAY MATHCODE))) + (CL:UNLESS (EQ MCODE MATHCODE) + MCODE))) + MATHCODE]) + +(HIPPOTOMCODE + [LAMBDA (HCODE) (* ; "Edited 7-Sep-2025 22:40 by rmk") + (* ; "Edited 3-Sep-2025 10:22 by rmk") + (* ; "Edited 24-May-2025 09:40 by rmk") + (OR (CL:WHEN (ILEQ HCODE \MAXTHINCHAR) + (LET ((MCODE (ELT HIPPOTOMCCSARRAY HCODE))) + (CL:UNLESS (EQ MCODE HCODE) + MCODE))) + HCODE]) + +(CYRILLICTOMCODE + [LAMBDA (CCODE) (* ; "Edited 7-Sep-2025 22:40 by rmk") + (* ; "Edited 24-May-2025 09:38 by rmk") + (OR (CL:WHEN (ILEQ CCODE \MAXTHINCHAR) + (LET ((MCODE (ELT CYRILLICTOMCCSARRAY CCODE))) + (CL:UNLESS (EQ MCODE CCODE) + MCODE))) + CCODE]) +) +(DECLARE%: DONTCOPY + (FILEMAP (NIL (2914 14485 (\MCCSINCCODE 2924 . 6012) (\MCCSPEEKCCODE 6014 . 8901) (\MCCSOUTCHAR 8903 + . 11002) (\MCCSBACKCCODE 11004 . 12548) (\MCCSFORMATBYTESTREAM 12550 . 13280) (\MCCSCHARSETFN 13282 + . 14483)) (14486 15368 (\CREATE.MCCS.EXTERNALFORMAT 14496 . 15366)) (15369 16346 ( +\MCCS.24BITENCODING.ERROR 15379 . 16344)) (17722 20360 (MTOXCODE 17732 . 18529) (XTOMCODE 18531 . +19188) (XTOMSTRING 19190 . 19775) (MTOXSTRING 19777 . 20358)) (20361 22021 (MTOX$CODE 20371 . 21103) ( +X$TOMCODE 21105 . 22019)) (22022 22662 (KANJICHARSETP 22032 . 22288) (CHINESECHARSETP 22290 . 22660)) +(40783 42657 (MCCSCODEMAPARRAY 40793 . 42655)) (43186 47041 (MCCSMAPFN 43196 . 44408) (MCCSMAPPAIRS +44410 . 46733) (XCCSUNDEFINEDPAIRS 46735 . 47039)) (47117 51106 (GACHATOMCODE 47127 . 47639) ( +SYMBOLTOMCODE 47641 . 48289) (SIGMATOMCODE 48291 . 48937) (ATOMCODE 48939 . 49471) (MATHTOMCODE 49473 + . 50129) (HIPPOTOMCODE 50131 . 50668) (CYRILLICTOMCODE 50670 . 51104))))) +STOP diff --git a/sources/MCCS.LCOM b/sources/MCCS.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..c59ae01b85d5ba5ae2377917c6e7de5a1d9ed47d GIT binary patch literal 21214 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.;3 65500 +(FILECREATED "24-Apr-2025 22:19:43" {WMEDLEY}PRETTY.;25 65037 - :EDIT-BY "lmm" + :EDIT-BY rmk - :CHANGES-TO (FNS PRINTDATE1) + :CHANGES-TO (VARS PRETTYCOMS) - :PREVIOUS-DATE "19-Jan-2022 20:35:18" {DSK}larry>il>medley>sources>PRETTY.;1) + :PREVIOUS-DATE " 8-Feb-2023 16:21:26" {WMEDLEY}PRETTY.;24) -(* ; " -Copyright (c) 1984-1990, 1999, 2018, 2023 by Venue & Xerox Corporation. -The following program was created in 1984 but has not been published -within the meaning of the copyright law, is furnished under license, -and may not be used, copied and/or disclosed except in accordance -with the terms of said license. -") - (PRETTYCOMPRINT PRETTYCOMS) (RPAQQ PRETTYCOMS @@ -46,7 +38,7 @@ with the terms of said license. " EXPLAINSTRING "] - no copyright notice now" NOECHOFLG T RETURN NIL] (COPYRIGHTSRESERVED T) (*NEW-INTERLISP-MAKEFILE-ENVIRONMENT* '(:READTABLE "INTERLISP" :PACKAGE - "INTERLISP" :FORMAT :XCCS)) + "INTERLISP" :FORMAT :MCCS)) (*DEFAULT-MAKEFILE-ENVIRONMENT*)) (GLOBALVARS COPYRIGHTOWNERS DEFAULTCOPYRIGHTKEYLST COPYRIGHTPRETTYFLG COMMENTFLG *DEFAULT-MAKEFILE-ENVIRONMENT* *NEW-INTERLISP-MAKEFILE-ENVIRONMENT*)) @@ -640,7 +632,7 @@ must replace the declare: by a nop addvars.") (SETQ PRTTYCOM (SUBPAIR (QUOTE (NL (RPAQ? COPYRIGHTSRESERVED T) (RPAQ? *NEW-INTERLISP-MAKEFILE-ENVIRONMENT* '(:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :FORMAT - :XCCS)) + :MCCS)) (RPAQ? *DEFAULT-MAKEFILE-ENVIRONMENT* ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -729,17 +721,15 @@ must replace the declare: by a nop addvars.") (SETQ PRTTYCOM (SUBPAIR (QUOTE (NL (ADDTOVAR LAMA ) ) -(PUTPROPS PRETTY COPYRIGHT ("Venue & Xerox Corporation" T 1984 1985 1986 1987 1988 1989 1990 1999 2018 - 2023)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (5917 48569 (PRETTYDEF 5927 . 21600) (PRETTYDEFCOMS 21602 . 22284) (PRETTYDEF0 22286 . -22477) (PRETTYDEF1 22479 . 24242) (PRINTDATE 24244 . 25480) (PRINTDATE1 25482 . 27260) (PRINTFNS 27262 - . 27831) (PRETTYCOM 27833 . 34174) (PRETTYVAR 34176 . 35214) (PRETTYVAR1 35216 . 37434) (PRETTYCOM1 -37436 . 38140) (ENDFILE 38142 . 38238) (MAKEDEFLIST 38240 . 38644) (PP 38646 . 38922) (PP* 38924 . -39237) (PPT 39239 . 39558) (PRETTYPRINT 39560 . 42712) (PRETTYPRINT1 42714 . 44600) (PRETTYPRINT2 -44602 . 45918) (PRETTYPRINT3 45920 . 46875) (PRINTDEF1 46877 . 47813) (SUPERPRINTEQ 47815 . 47909) ( -SUPERPRINTGETPROP 47911 . 48055) (CHANGEFONT 48057 . 48567)) (48570 53916 (READARRAY 48580 . 49506) ( -PRINTARRAY 49508 . 51248) (READARRAY-FROM-LIST 51250 . 52355) (PRINTARRAY-TO-LIST 52357 . 53914)) ( -54043 61561 (PRINTCOPYRIGHT 54053 . 58130) (PRINTCOPYRIGHT1 58132 . 61256) (SAVECOPYRIGHT 61258 . -61559))))) + (FILEMAP (NIL (5565 48217 (PRETTYDEF 5575 . 21248) (PRETTYDEFCOMS 21250 . 21932) (PRETTYDEF0 21934 . +22125) (PRETTYDEF1 22127 . 23890) (PRINTDATE 23892 . 25128) (PRINTDATE1 25130 . 26908) (PRINTFNS 26910 + . 27479) (PRETTYCOM 27481 . 33822) (PRETTYVAR 33824 . 34862) (PRETTYVAR1 34864 . 37082) (PRETTYCOM1 +37084 . 37788) (ENDFILE 37790 . 37886) (MAKEDEFLIST 37888 . 38292) (PP 38294 . 38570) (PP* 38572 . +38885) (PPT 38887 . 39206) (PRETTYPRINT 39208 . 42360) (PRETTYPRINT1 42362 . 44248) (PRETTYPRINT2 +44250 . 45566) (PRETTYPRINT3 45568 . 46523) (PRINTDEF1 46525 . 47461) (SUPERPRINTEQ 47463 . 47557) ( +SUPERPRINTGETPROP 47559 . 47703) (CHANGEFONT 47705 . 48215)) (48218 53564 (READARRAY 48228 . 49154) ( +PRINTARRAY 49156 . 50896) (READARRAY-FROM-LIST 50898 . 52003) (PRINTARRAY-TO-LIST 52005 . 53562)) ( +53691 61209 (PRINTCOPYRIGHT 53701 . 57778) (PRINTCOPYRIGHT1 57780 . 60904) (SAVECOPYRIGHT 60906 . +61207))))) STOP diff --git a/sources/PRETTY.LCOM b/sources/PRETTY.LCOM index 02e7d893ab0d06249d421da162082c2592724834..e71a4c9cc15c1e6eecb4be4ec466771766ef99c1 100644 GIT binary patch delta 391 zcmZ4bj`8ms#t9MiCc2IVMY=`?My3izMplNFRwl+u3K~ku`MCv|IjJcM`FRRT3f1Ah zt}Z^Vk+n9(`K3k4sl|2yL9QVok$TofrkV;|N=8Vg7+P2v7+aYdC@CZrrNWI#&PdEl zPc2rpQpn3M$;ix0SI7h!>=s(@V@;Jbxis87eO#S`TpdGP zT@+C4M)&}qixtdF4UEkdtXy3@Lris@A{B~qvlXnIJskbqU4wN){1r699D{-txFCLX z_V*3eRImba!aV&$gLPei)=t)Cl$6FDCMKJIFq$Vb`ffHzb>!yrb#@Nc)C4*^D8Mn$ TezJk8{N{NDB5W*vo<3XvV+UK~BOz6o%7{i+TcgFS9UoQPP=GprdI-C{V@Hlo4TBVG>E&4k?h>7{dYFn0N+H zzyZ9FaqG&&nT?vb(akr>TYT@I|9!k_&u`k}WJ}D8q%?^|Y``vcZ0ghyRM1Rh%SFoP zAaX!(*BPDPAK!?KdudV>rMF1EjL%bEdMmLhW_;yEvCr7FdPE!pbc7q$|ZO4snyQLR=H%#*bY^h-`^6gQBeSGvK#Z^wR% z`JJZ+?O^-&&^FW^$FhL>oq(CAQ$T5!A<${N-wJ#F$YevPbi)xuaS*bO+<*DPSynE3aGi|bapSSkq<1SD3R+Z?IMe#6F+f~QV z9!AqR==GVr)0pQQ4u>$|g}8;bD3+o~)(ep%VDg~Nnu4QHS7<0S6 Date: Thu, 11 Sep 2025 23:48:01 -0700 Subject: [PATCH 07/40] Hardcopy stuff (includes files from HARDCOPY PR) --- library/PDFSTREAM | 27 +- library/PDFSTREAM.LCOM | Bin 6048 -> 5935 bytes library/POSTSCRIPTSTREAM | 664 ++++++++++++------------ library/POSTSCRIPTSTREAM.LCOM | Bin 92871 -> 93204 bytes sources/COREIO | 71 ++- sources/COREIO.LCOM | Bin 17045 -> 16778 bytes sources/EXTERNALFORMAT.LCOM | Bin 11052 -> 11028 bytes sources/FILEIO | 120 ++--- sources/FILEIO.LCOM | Bin 45833 -> 45945 bytes sources/HARDCOPY | 871 ++++++++++++++----------------- sources/HARDCOPY.LCOM | Bin 47628 -> 45595 bytes sources/INTERPRESS | 932 ++++++++++++++++------------------ sources/INTERPRESS.LCOM | Bin 62098 -> 57300 bytes 13 files changed, 1254 insertions(+), 1431 deletions(-) diff --git a/library/PDFSTREAM b/library/PDFSTREAM index 49a6393c0..bde1d1e29 100644 --- a/library/PDFSTREAM +++ b/library/PDFSTREAM @@ -1,14 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "30-Jul-2025 18:01:04"  -{DSK}kaplan>Local>medley3.5>working-medley>library>PDFSTREAM.;68 15635 +(FILECREATED "23-Aug-2025 10:53:33" {WMEDLEY}PDFSTREAM.;70 15659 :EDIT-BY rmk - :CHANGES-TO (FNS SEE-PDF) + :CHANGES-TO (FNS PDF.FONTSAVAILABLE) - :PREVIOUS-DATE "16-Jun-2025 00:52:44" -{DSK}kaplan>Local>medley3.5>working-medley>library>PDFSTREAM.;67) + :PREVIOUS-DATE "30-Jul-2025 18:01:04" {WMEDLEY}PDFSTREAM.;68) (PRETTYCOMPRINT PDFSTREAMCOMS) @@ -129,12 +127,11 @@ (CLOSEF TSTREAM]) (PDF.FONTSAVAILABLE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 16-Jun-2025 00:46 by rmk") - (* ; "Edited 12-Jan-88 13:04 by Matt Heffron") - - (* ;; "") - - (POSTSCRIPT.FONTSAVAILABLE FAMILY SIZE FACE ROTATION 'PDF]) + [LAMBDA (FONTSPEC) (* ; "Edited 23-Aug-2025 10:53 by rmk") + (* ; "Edited 16-Jun-2025 00:46 by rmk") + (LET ((FA (FONTSAVAILABLE FONTSPEC NIL NIL NIL 'POSTSCRIPT T))) + (for FS in FA do (replace (FONTSPEC FSDEVICE) of FS with 'PDF)) + FA]) ) (FONTPROFILE.ADDDEVICE 'PDF 'POSTSCRIPT) @@ -308,8 +305,8 @@ thereis (ShellWhich (CAR TEMPLATE]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3492 6433 (PDFFILEP 3502 . 4416) (PDF.HARDCOPYW 4418 . 5016) (PDF.TEXT 5018 . 5735) ( -PDF.TEDIT 5737 . 6104) (PDF.FONTSAVAILABLE 6106 . 6431)) (6873 14518 (OPEN-PDF-STREAM 6883 . 9604) ( -CLOSE-PDF-STREAM 9606 . 10893) (PS-TO-PDF 10895 . 14516)) (14519 15277 (SEE-PDF 14529 . 15275)) (15328 - 15612 (PDFCONVERTER 15338 . 15610))))) + (FILEMAP (NIL (3421 6457 (PDFFILEP 3431 . 4345) (PDF.HARDCOPYW 4347 . 4945) (PDF.TEXT 4947 . 5664) ( +PDF.TEDIT 5666 . 6033) (PDF.FONTSAVAILABLE 6035 . 6455)) (6897 14542 (OPEN-PDF-STREAM 6907 . 9628) ( +CLOSE-PDF-STREAM 9630 . 10917) (PS-TO-PDF 10919 . 14540)) (14543 15301 (SEE-PDF 14553 . 15299)) (15352 + 15636 (PDFCONVERTER 15362 . 15634))))) STOP diff --git a/library/PDFSTREAM.LCOM b/library/PDFSTREAM.LCOM index 7c6ef662f8cd7e86f29cc25dfab821c9bed4d831..ed13f5a97ab040243ffd46e004dbcb2521f64ebb 100644 GIT binary patch delta 451 zcmaJ-TT8-V7~T}T7!(;4UcP(~Y!_QQFb`kHxqZvQ)ZwP$UFyU}nz9Ot2=9ZS@DKD4 z3Z(0PQ~#h(h4MmrZeDodIlk?`OE1lds)@#JUsPpP2SvuZhP46$9(6~MT+(_x97LVC9p4{&mhA^MVw9zWoGbu`l>Ca2ij^#uWdxnL_p8*q8^_ms7${Y; ztChev8pgzNjiO5+qAqsbbzxOTk|YFS`-Y}it6x9@$J>reOd2F07N9k4w13kJ^Z20X zS-k+5SWX}oTM!Q~0h=YGaz=bHr~=Q~6@PlZy|anE8fiGyx-VMPaC*XKxW8#$KXzwF ziKk>&hDAM(m;x{Y%P{QeMHu!OifAJ>KWUaJJ%?<9V)4#=C6b@tr7eb6^d*^Yvz&%j W)Rg&VkO!~o2fkTzykM3~Md=^NXLE@F delta 575 zcmb`Eze>YU6vk7eOF*!T=ynJQ&5)R+No=D8)8q!CX%ceNid`gagM_AONfj+3-JOKK zfZ_u<^jREy8*eR&gJYNb=ewNy`@VDD`Ip1zi^W@McV1=s~AKhE?~GRTryjaT%$aWPEuYi_ORS=uY&Vx|X{jiV45E&f=ov%p9V z?(8<>BtcR@5;aB9ga!fhisToW;QL82JgsjDDY0ukK4iFW!rYx>X`*RwqwugVLvY-Va>NtKIa~8n@BdR2CzRoKM znj&ekys?HJvCGfW)7D%Di$F~T4%8s@BO`Krk6a|Mjc-*1>~vSp0#RCyd&vS-p(v_+ zYBbGja-g=$t96H}iZTQ~j<6XzLB!j>7h$7gIIhuj5ou{1$VAA_(td!v)p$6({3v%T EU)`monE(I) diff --git a/library/POSTSCRIPTSTREAM b/library/POSTSCRIPTSTREAM index 3b96c4ae3..925b8b1a9 100644 --- a/library/POSTSCRIPTSTREAM +++ b/library/POSTSCRIPTSTREAM @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "14-Jul-2025 22:21:34" {WMEDLEY}POSTSCRIPTSTREAM.;24 258986 +(FILECREATED "10-Sep-2025 14:51:53" {WMEDLEY}POSTSCRIPTSTREAM.;42 258973 :EDIT-BY rmk - :CHANGES-TO (FNS \DSPFONT.PSC) + :CHANGES-TO (FNS POSTSCRIPTFILEP POSTSCRIPT.INIT) - :PREVIOUS-DATE "16-Jun-2025 00:04:32" {WMEDLEY}POSTSCRIPTSTREAM.;23) + :PREVIOUS-DATE " 8-Sep-2025 09:51:34" {WMEDLEY}POSTSCRIPTSTREAM.;39) (PRETTYCOMPRINT POSTSCRIPTSTREAMCOMS) @@ -43,10 +43,6 @@ PSCFONTFROMCACHE.COERCEFILE PSCFONT.WRITEFONT READ-AFM-FILE CONVERT-AFM-FILES POSTSCRIPT.GETFONTID POSTSCRIPT.FONTCREATE \POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS POSTSCRIPT.FONTSAVAILABLE POSTSCRIPT.FONTEXISTS?) - (COMS - (* ;; "Until macro in FONT is exported") - - (MACROS \FSETCHARWIDTH)) (FNS OPENPOSTSCRIPTSTREAM CLOSEPOSTSCRIPTSTREAM) (INITVARS (*POSTSCRIPT-FILE-TYPE* 'BINARY)) (FNS POSTSCRIPT.HARDCOPYW POSTSCRIPT.TEDIT POSTSCRIPT.TEXT POSTSCRIPTFILEP MAKEEPSFILE) @@ -131,6 +127,7 @@ (CONSTANTS (GOLDEN.RATIO 1.618034) (\PS.SCALE0 100) (\PS.TEMPARRAYLEN 20)) + (GLOBALVARS POSTSCRIPTFONTEXTENSIONS POSTSCRIPTFONTDIRECTORIES) (INITVARS (POSTSCRIPT.BITMAP.SCALE 1) (POSTSCRIPT.EOL 'CR) (POSTSCRIPT.IMAGESIZEFACTOR 1) @@ -142,6 +139,21 @@ 'MAIKO) "{dsk}/USR/LOCAL/LDE/FONTS/POSTSCRIPT/") (T "{DSK}POSTSCRIPT>"] + (POSTSCRIPTFONTEXTENSIONS '(PSCFONT PF PSC)) + [POSTSCRIPTFONTCOERCIONS '((HELVETICA (HELVETICA 1)) + (HELVETICAD (HELVETICA 1)) + (TIMESROMAN (TIMES 1)) + (TIMESROMAND (TIMES 1)) + (COURIER (COURIER 1)) + (GACHA (COURIER 1)) + (CLASSIC (NEWCENTURYSCHLBK 1)) + (MODERN (HELVETICA 1)) + (CREAM (HELVETICA 1)) + (TERMINAL (COURIER 1)) + (LOGO (HELVETICA 1)) + (OPTIMA (PALATINO 1)) + (TITAN (COURIER 1)) + (* (* 1] (\POSTSCRIPT.MAX.WILD.FONTSIZE 72)) [COMS (FNS POSTSCRIPTSEND) (ADDVARS (PRINTERTYPES ((POSTSCRIPT) @@ -377,7 +389,9 @@ (DEFINEQ (POSTSCRIPT.INIT - [LAMBDA NIL (* ; "Edited 14-May-2018 10:48 by rmk:") + [LAMBDA NIL (* ; "Edited 9-Sep-2025 21:57 by rmk") + (* ; "Edited 22-Aug-2025 21:34 by rmk") + (* ; "Edited 14-May-2018 10:48 by rmk:") (* ; "Edited 4-Feb-93 21:08 by jds") (DECLARE (GLOBALVARS \POSTSCRIPT.CHARTYPE)) @@ -385,9 +399,8 @@ [MAPC [CL:REMOVE-DUPLICATES (NCONC (for FD in FONTDEFS - join (for FP in (CDR (ASSOC 'FONTPROFILE - (CDR FD))) - collect (CAR FP))) + join (for FP in (CDR (ASSOC 'FONTPROFILE (CDR FD))) + collect (CAR FP))) '(FONT7 FONT6 FONT5 FONT4 FONT3 FONT2 FONT1 BOLDFONT LITTLEFONT BIGFONT PRETTYCOMFONT COMMENTFONT USERFONT SYSTEMFONT CLISPFONT LAMBDAFONT CHANGEFONT DEFAULTFONT] @@ -395,41 +408,35 @@ (LET (COPYFD OLDPSCFD) (if (BOUNDP CLASS) - then - (SETQ CLASS (EVALV CLASS)) - (if (TYPEP CLASS 'FONTCLASS) - then (SETQ COPYFD (OR (fetch (FONTCLASS INTERPRESSFD) of CLASS) - (fetch (FONTCLASS PRESSFD) of CLASS) - (fetch (FONTCLASS DISPLAYFD) of CLASS))) - (if (SETQ OLDPSCFD (ASSOC 'POSTSCRIPT (fetch (FONTCLASS - OTHERFDS) + then (SETQ CLASS (EVALV CLASS)) + (if (TYPEP CLASS 'FONTCLASS) + then (SETQ COPYFD (OR (fetch (FONTCLASS INTERPRESSFD) of CLASS) + (fetch (FONTCLASS DISPLAYFD) of CLASS))) + (if (SETQ OLDPSCFD (ASSOC 'POSTSCRIPT (fetch (FONTCLASS OTHERFDS) of CLASS))) - then [if (NOT (CDR OLDPSCFD)) + then [if (NOT (CDR OLDPSCFD)) then (RPLACD OLDPSCFD (if (LISTP COPYFD) - then COPYFD - else (FONTUNPARSE - COPYFD] - else (push (fetch (FONTCLASS OTHERFDS) of CLASS) - (CONS 'POSTSCRIPT (if (LISTP COPYFD) - then COPYFD - else (FONTUNPARSE COPYFD] + then COPYFD + else (FONTUNPARSE COPYFD] + else (push (fetch (FONTCLASS OTHERFDS) of CLASS) + (CONS 'POSTSCRIPT (if (LISTP COPYFD) + then COPYFD + else (FONTUNPARSE COPYFD] [FOR FD IN FONTDEFS DO (FOR FP IN (CDR (ASSOC 'FONTPROFILE (CDR FD))) - DO (COND - ((ASSOC 'POSTSCRIPT (CL:NTHCDR 5 FP)) + DO (COND + ((ASSOC 'POSTSCRIPT (CL:NTHCDR 5 FP)) - (* ;; "There's already a postscript spec, so leave it be.") + (* ;; "There's already a postscript spec, so leave it be.") - ) - (T (NCONC1 FP `(POSTSCRIPT ,(OR (CL:FIFTH FP) - (CL:FOURTH FP) - (CL:THIRD FP] + ) + (T (NCONC1 FP `(POSTSCRIPT ,(OR (CL:FIFTH FP) + (CL:FOURTH FP) + (CL:THIRD FP] (* ;; "Eliminate any existing postscript fonts, to start with a clean slate if reinitializing.") - (FOR FD IN (FONTSAVAILABLE '* '* '* '* 'POSTSCRIPT) - DO (APPLY (FUNCTION SETFONTDESCRIPTOR) - FD)) + (FLUSHFONTSINCORE '* '* '* '* 'POSTSCRIPT) (SETQ POSTSCRIPTFONTCACHE NIL) (SETQ \POSTSCRIPT.CHARTYPE (CL:MAKE-ARRAY 256 :INITIAL-ELEMENT T)) @@ -437,7 +444,7 @@ (for x from (CHARCODE SP) to 126 unless (FMEMB x (CHARCODE (%( %) \))) do (CL:SETF (CL:AREF \POSTSCRIPT.CHARTYPE x) - NIL)) + NIL)) (* ;; "RMK: Maybe the following is equivalent to alot of the stuff above??") @@ -616,7 +623,8 @@ PF]) (PSCFONT.SPELLFILE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 15-Jun-2025 23:31 by rmk") + [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 16-Aug-2025 23:50 by rmk") + (* ; "Edited 15-Jun-2025 23:31 by rmk") (* ; "Edited 5-Oct-93 22:15 by rmk:") (* ; "Edited 5-Oct-92 15:23 by jds") @@ -626,7 +634,7 @@ (CL:WHEN POSTSCRIPTFONTDIRECTORIES (\FINDFONTFILE (OR (CDR (FASSOC FAMILY POSTSCRIPT.FONT.ALIST)) FAMILY) - SIZE FACE 0 DEVICE 0 POSTSCRIPTFONTDIRECTORIES '(PSCFONT PF PSC)))]) + SIZE FACE 0 DEVICE 0 POSTSCRIPTFONTDIRECTORIES POSTSCRIPTFONTEXTENSIONS))]) (PSCFONT.COERCEFILE [LAMBDA (FAMILY SIZE WEIGHT SLOPE EXPANSION ROTATION DEVICE) @@ -881,198 +889,203 @@ FONTID]) (POSTSCRIPT.FONTCREATE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 15-Jun-2025 23:40 by rmk") + [LAMBDA (FONTSPEC) (* ; "Edited 7-Sep-2025 23:44 by rmk") + (* ; "Edited 30-Aug-2025 23:24 by rmk") + (* ; "Edited 21-Aug-2025 18:21 by rmk") + (* ; "Edited 15-Jun-2025 23:40 by rmk") (* ; "Edited 29-Oct-93 16:39 by rmk:") (* ; "Edited 3-Feb-93 17:22 by jds") - (LET (UNITFONT FULLNAME SCALEFONTP PSCFD ASCENT DESCENT FIXPWIDTHS PSCWIDTHSBLOCK WIDTHSBLOCK FD - FACECHANGED (WEIGHT (CAR FACE)) - (SLOPE (CADR FACE)) - (EXPANSION (CADDR FACE))) + (LET* (UNITFONT FULLNAME SCALEFONTP PSCFD ASCENT DESCENT FIXPWIDTHS PSCWIDTHSBLOCK WIDTHSBLOCK FD + FACECHANGED FAMILY SIZE FACE ROTATION DEVICE (WEIGHT (CAR FACE)) + (SLOPE (CADR FACE)) + (EXPANSION (CADDR FACE))) + (SPREADFONTSPEC FONTSPEC) - (* ;; + (* ;;  "Ignore rotations, it is **MUCH** easier to rotate the Postscript stream user space coordinates.") - [COND - [(EQ SIZE 1) + [COND + [(EQ SIZE 1) - (* ;; "Since a 1 point font is ridiculously small, and it is the standard size for Postscript font info, a 1 point font is presumed to be the unit size Postscript font info") + (* ;; "Since a 1 point font is ridiculously small, and it is the standard size for Postscript font info, a 1 point font is presumed to be the unit size Postscript font info") - (COND - ((SETQ PSCFD (PSCFONTFROMCACHE.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE)) + (COND + ((SETQ PSCFD (PSCFONTFROMCACHE.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE)) - (* ;; "Check in-core cache for exact match first") + (* ;; "Check in-core cache for exact match first") - (SETQ FACECHANGED NIL)) - ((SETQ FULLNAME (PSCFONT.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE)) + (SETQ FACECHANGED NIL)) + ((SETQ FULLNAME (PSCFONT.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE)) - (* ;; "Check file for exact match next") + (* ;; "Check file for exact match next") - (SETQ PSCFD (PSCFONT.READFONT FULLNAME)) - (SETQ FACECHANGED NIL)) - ((SETQ PSCFD (PSCFONTFROMCACHE.COERCEFILE FAMILY SIZE WEIGHT SLOPE EXPANSION ROTATION - DEVICE)) + (SETQ PSCFD (PSCFONT.READFONT FULLNAME)) + (SETQ FACECHANGED NIL)) + ((SETQ PSCFD (PSCFONTFROMCACHE.COERCEFILE FAMILY SIZE WEIGHT SLOPE EXPANSION + ROTATION DEVICE)) - (* ;; "Then check cache for coerced match") + (* ;; "Then check cache for coerced match") - (SETQ FACECHANGED T)) - ((SETQ FULLNAME (PSCFONT.COERCEFILE FAMILY SIZE WEIGHT SLOPE EXPANSION ROTATION - DEVICE)) + (SETQ FACECHANGED T)) + ((SETQ FULLNAME (PSCFONT.COERCEFILE FAMILY SIZE WEIGHT SLOPE EXPANSION ROTATION + DEVICE)) - (* ;; "Check file for coerced match") + (* ;; "Check file for coerced match") - (SETQ PSCFD (PSCFONT.READFONT FULLNAME)) - (SETQ FACECHANGED T))) - (COND - (PSCFD (SETQ ASCENT (FIXR (TIMES (fetch (PSCFONT ASCENT) of PSCFD) - 0.1))) - (SETQ DESCENT (FIXR (TIMES (fetch (PSCFONT DESCENT) of PSCFD) + (SETQ PSCFD (PSCFONT.READFONT FULLNAME)) + (SETQ FACECHANGED T))) + (COND + (PSCFD (SETQ ASCENT (FIXR (TIMES (fetch (PSCFONT ASCENT) of PSCFD) 0.1))) - (COND - (FACECHANGED (replace (PSCFONT IL-FONTID) of PSCFD - with (POSTSCRIPT.GETFONTID (fetch (PSCFONT FID) - of PSCFD) - WEIGHT SLOPE EXPANSION] - ((SETQ UNITFONT (FONTCREATE FAMILY 1 FACE ROTATION DEVICE T)) - (SETQ PSCFD (LISTGET (fetch (FONTDESCRIPTOR OTHERDEVICEFONTPROPS) of UNITFONT) - 'PSCFONT)) - - (* ;; "Scale the ASCENT and DESCENT") - - (SETQ ASCENT (FIXR (TIMES SIZE (fetch (PSCFONT ASCENT) of PSCFD) - 0.1))) - (SETQ DESCENT (FIXR (TIMES SIZE (fetch (PSCFONT DESCENT) of PSCFD) + (SETQ DESCENT (FIXR (TIMES (fetch (PSCFONT DESCENT) of PSCFD) + 0.1))) + (COND + (FACECHANGED (replace (PSCFONT IL-FONTID) of PSCFD + with (POSTSCRIPT.GETFONTID (fetch (PSCFONT FID) + of PSCFD) + WEIGHT SLOPE EXPANSION] + ((SETQ UNITFONT (FONTCREATE FAMILY 1 FACE ROTATION DEVICE T)) + (SETQ PSCFD (LISTGET (fetch (FONTDESCRIPTOR OTHERDEVICEFONTPROPS) of UNITFONT) + 'PSCFONT)) + + (* ;; "Scale the ASCENT and DESCENT") + + (SETQ ASCENT (FIXR (TIMES SIZE (fetch (PSCFONT ASCENT) of PSCFD) 0.1))) - (SETQ SCALEFONTP T)) - (T - (* ;; "Here for fonts that only come in specific sizes. Their info is not scaled like built-in Postscript fonts, it is already correct for this pointsize.") - - (COND - ([SETQ PSCFD (COND - ((PSCFONTFROMCACHE.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE)) - ((SETQ FULLNAME (PSCFONT.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE - )) - (PSCFONT.READFONT FULLNAME] - (SETQ ASCENT (fetch (PSCFONT ASCENT) of PSCFD)) - (SETQ DESCENT (fetch (PSCFONT DESCENT) of PSCFD)) - (SETQ SCALEFONTP NIL] - (COND - (PSCFD - (* ;; "Set up the Charset descriptions and Widths vectors for character set 0:") - - (SETQ FD - (create FONTDESCRIPTOR - OTHERDEVICEFONTPROPS _ (LIST 'PSCFONT PSCFD) - FONTSCALE _ 100 - FONTDEVICE _ DEVICE - FONTFAMILY _ FAMILY - FONTSIZE _ SIZE - FONTFACE _ FACE - ROTATION _ 0 - \SFHeight _ (IPLUS ASCENT DESCENT) - \SFAscent _ ASCENT - \SFDescent _ DESCENT)) - (SETQ WIDTHSBLOCK (fetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO 0 FD))) - (SETQ FIXPWIDTHS (fetch (PSCFONT WIDTHS) of PSCFD)) - [COND - [SCALEFONTP (for CH from 0 to 255 - do (\FSETWIDTH WIDTHSBLOCK CH (FIXR (TIMES SIZE (ELT FIXPWIDTHS - CH) - 0.1] - (T (for CH from 0 to 255 do (\FSETWIDTH WIDTHSBLOCK CH (ELT FIXPWIDTHS CH] - (SETQ PSCWIDTHSBLOCK (\CREATECSINFOELEMENT)) - - (* ;; "PSCWIDTHSBLOCK preserves the scaled widths from the original postscript metrics, not the NS mapping of them, which goes into WIDTHSBLOCK.") - - (for CH from 0 to 255 do (\FSETWIDTH PSCWIDTHSBLOCK CH (\FGETWIDTH WIDTHSBLOCK CH) - )) - [LET [(TMP (COND - (FULLNAME (\FONTINFOFROMFILENAME FULLNAME DEVICE)) - (UNITFONT (fetch FONTDEVICESPEC of UNITFONT] - - (* ;; "If face got coerced (possibly in recursive call for unit font) then set FONTDEVICESPEC to describe what we really got") + (SETQ DESCENT (FIXR (TIMES SIZE (fetch (PSCFONT DESCENT) of PSCFD) + 0.1))) + (SETQ SCALEFONTP T)) + (T + (* ;; "Here for fonts that only come in specific sizes. Their info is not scaled like built-in Postscript fonts, it is already correct for this pointsize.") - (COND - ((AND TMP (NEQ FAMILY (CAR TMP))) - (replace FONTDEVICESPEC of FD with (LIST (CAR TMP) - SIZE - (COPY FACE) - 0 DEVICE] - [LET ((SYMWIDTHS (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 'SYMBOL FD ROTATION DEVICE) - ) - (DINGWIDTHS (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 'ZAPFDINGBATS FD ROTATION - DEVICE))) - - (* ;; + (COND + ([SETQ PSCFD (COND + ((PSCFONTFROMCACHE.SPELLFILE FAMILY SIZE FACE ROTATION DEVICE)) + ((SETQ FULLNAME (PSCFONT.SPELLFILE FAMILY SIZE FACE ROTATION + DEVICE)) + (PSCFONT.READFONT FULLNAME] + (SETQ ASCENT (fetch (PSCFONT ASCENT) of PSCFD)) + (SETQ DESCENT (fetch (PSCFONT DESCENT) of PSCFD)) + (SETQ SCALEFONTP NIL] + (COND + (PSCFD + (* ;; "Set up the Charset descriptions and Widths vectors for character set 0:") + + (SETQ FD + (create FONTDESCRIPTOR + OTHERDEVICEFONTPROPS _ (LIST 'PSCFONT PSCFD) + FONTSCALE _ 100 + FONTDEVICE _ DEVICE + FONTFAMILY _ FAMILY + FONTSIZE _ SIZE + FONTFACE _ FACE + ROTATION _ 0 + \SFHeight _ (IPLUS ASCENT DESCENT) + \SFAscent _ ASCENT + \SFDescent _ DESCENT + FONTTOMCCSFN _ (MCCSMAPFN FONTSPEC))) + (FONTPROP FD 'CHARENCODING) + (SETQ WIDTHSBLOCK (fetch (CHARSETINFO WIDTHS) of (\INSURECHARSETINFO FD 0))) + (SETQ FIXPWIDTHS (fetch (PSCFONT WIDTHS) of PSCFD)) + [COND + [SCALEFONTP (for CH from 0 to 255 + do (\FSETWIDTH WIDTHSBLOCK CH (FIXR (TIMES SIZE + (ELT FIXPWIDTHS CH) + 0.1] + (T (for CH from 0 to 255 do (\FSETWIDTH WIDTHSBLOCK CH (ELT FIXPWIDTHS CH] + (SETQ PSCWIDTHSBLOCK (\CREATECSINFOELEMENT)) + + (* ;; "PSCWIDTHSBLOCK preserves the scaled widths from the original postscript metrics, not the NS mapping of them, which goes into WIDTHSBLOCK.") + + (for CH from 0 to 255 do (\FSETWIDTH PSCWIDTHSBLOCK CH (\FGETWIDTH WIDTHSBLOCK CH + ))) + [LET [(TMP (COND + (FULLNAME (FONTSPECFROMFILENAME FULLNAME DEVICE)) + (UNITFONT (fetch FONTDEVICESPEC of UNITFONT] + + (* ;; "If face got coerced (possibly in recursive call for unit font) then set FONTDEVICESPEC to describe what we really got") + + (COND + ((AND TMP (NEQ FAMILY (CAR TMP))) + (replace FONTDEVICESPEC of FD with (LIST (CAR TMP) + SIZE + (COPY FACE) + 0 DEVICE] + [LET ((SYMWIDTHS (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 'SYMBOL FD ROTATION DEVICE + )) + (DINGWIDTHS (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 'ZAPFDINGBATS FD ROTATION + DEVICE))) + + (* ;;  "Now run thru the mapping table, filling in the new font from whatever source is specified:") - [MAPHASH *POSTSCRIPT-NS-HASH* - (FUNCTION (LAMBDA (MAPPING CODE) - (DESTRUCTURING-BIND - (KIND CODE2 BASECHAR) - MAPPING + [MAPHASH *POSTSCRIPT-NS-HASH* + (FUNCTION (LAMBDA (MAPPING CODE) + (DESTRUCTURING-BIND + (KIND CODE2 BASECHAR) + MAPPING - (* ;; "Depending on what kind of item it is, process it:") + (* ;; + "Depending on what kind of item it is, process it:") - (SELECTQ KIND - (NIL - (* ;; + (SELECTQ KIND + (NIL + (* ;;  "Translating an NS character to a PSC char in CS 0.") - (\FSETCHARWIDTH FD CODE (\FGETWIDTH - PSCWIDTHSBLOCK - (\CHAR8CODE - CODE2)))) - (SYMBOL [AND SYMWIDTHS (\FSETCHARWIDTH - FD CODE (ELT SYMWIDTHS - (\CHAR8CODE - CODE2]) - (DINGBAT [AND DINGWIDTHS (\FSETCHARWIDTH - FD CODE (ELT DINGWIDTHS - (\CHAR8CODE - CODE2]) - (FUNCTION - (* ;; + (\FSETCHARWIDTH FD CODE (\FGETWIDTH + PSCWIDTHSBLOCK + (\CHAR8CODE CODE2)))) + (SYMBOL [AND SYMWIDTHS (\FSETCHARWIDTH + FD CODE (ELT SYMWIDTHS + (\CHAR8CODE + CODE2]) + (DINGBAT [AND DINGWIDTHS (\FSETCHARWIDTH + FD CODE + (ELT DINGWIDTHS + (\CHAR8CODE CODE2]) + (FUNCTION + (* ;;  "This is fake and only works for the fractions. Need a better case.") - [\FSETCHARWIDTH - FD CODE - (IPLUS (\FGETWIDTH PSCWIDTHSBLOCK 164) - (FIXR (FTIMES 1.3 - (\FGETWIDTH - PSCWIDTHSBLOCK - (CHARCODE 1]) - (ACCENT (* ; + [\FSETCHARWIDTH + FD CODE + (IPLUS (\FGETWIDTH PSCWIDTHSBLOCK 164) + (FIXR (FTIMES 1.3 + (\FGETWIDTH + PSCWIDTHSBLOCK + (CHARCODE 1]) + (ACCENT (* ;  "CODE2 is the rendering character but width comes from width of basechar") - (\FSETCHARWIDTH FD CODE (\FGETWIDTH + (\FSETCHARWIDTH FD CODE (\FGETWIDTH PSCWIDTHSBLOCK - BASECHAR))) - (ACCENTPAIR + BASECHAR))) + (ACCENTPAIR (* ;; "CODE2 and BASECHAR are overprinted, width is taken from CODE2 (the real character), basechar is the accent") - (\FSETCHARWIDTH FD CODE (\FGETWIDTH - PSCWIDTHSBLOCK - CODE2))) - (PROGN + (\FSETCHARWIDTH FD CODE (\FGETWIDTH + PSCWIDTHSBLOCK + CODE2))) + (PROGN (* ;; "Skip APPLY*'s on this pass, waiting until normal characters get set up, so that widths of other NS characters are available. Also skip anything else") - NIL] - - (* ;; "Now do APPLY*'s. MAPPING is of the form ('APPLY* DATA PRINTFN WIDTHFN). WIDTHFN gets applied to FD and DATA (coerced by INITFN)") - - (MAPHASH *POSTSCRIPT-NS-HASH* (FUNCTION (LAMBDA (MAPPING CODE) - (CL:WHEN (EQ (CAR MAPPING) - 'APPLY*) - (\FSETCHARWIDTH - FD CODE (APPLY* (CADDDR - MAPPING - ) - FD - (CADR MAPPING)) - ))] - FD) - (T NIL]) + NIL] + + (* ;; "Now do APPLY*'s. MAPPING is of the form ('APPLY* DATA PRINTFN WIDTHFN). WIDTHFN gets applied to FD and DATA (coerced by INITFN)") + + (MAPHASH *POSTSCRIPT-NS-HASH* (FUNCTION (LAMBDA (MAPPING CODE) + (CL:WHEN (EQ (CAR MAPPING) + 'APPLY*) + (\FSETCHARWIDTH + FD CODE (APPLY* (CADDDR + MAPPING) + FD + (CADR MAPPING) + )))] + FD) + (T NIL]) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS [LAMBDA (TYPE FD ROTATION DEVICE) (* ; "Edited 5-Oct-93 18:21 by rmk:") @@ -1111,66 +1124,46 @@ NEWWIDTHS)]) (POSTSCRIPT.FONTSAVAILABLE - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 12-Jan-88 13:04 by Matt Heffron") - - (* ;; "the filtering code was borrowed from Richard Burton's \SEARCHINTERPRESSFONTS. Note that without it [HELVETICA * (MEDIUM REGULAR REGULAR)] would pick up [HELVETICA-NARROW * (MEDIUM REGULAR REGULAR)] as well.") - - (LET - ((PATTERN (\FONTFILENAME (OR (CDR (ASSOC FAMILY POSTSCRIPT.FONT.ALIST)) - FAMILY) - SIZE FACE 'PSCFONT)) - [INVERSE.ALIST (for PAIR in POSTSCRIPT.FONT.ALIST collect (CONS (CDR PAIR) - (CAR PAIR] - FONTSAVAILABLE) - (SETQ FONTSAVAILABLE - (for FD in [for DIRECTORY in POSTSCRIPTFONTDIRECTORIES - join (for FILE in (DIRECTORY (CONCAT DIRECTORY PATTERN)) - collect (LET* ((RAWFD (\FONTINFOFROMFILENAME FILE DEVICE) - ) - (RAWNAME (CAR RAWFD))) - (RPLACA RAWFD - (OR (CDR (ASSOC RAWNAME - INVERSE.ALIST)) - RAWNAME] - when (AND (OR (EQ FAMILY '*) - (EQ FAMILY (CAR FD))) - (OR (EQ SIZE '*) - (EQ SIZE (CADR FD)) - (EQ (CADR FD) - 1)) - (OR (EQ FACE '*) - (EQUAL FACE (CADDR FD)) - (EQUAL [CDR (ASSOC FACE '((MRR MEDIUM REGULAR REGULAR) - (STANDARD MEDIUM REGULAR REGULAR) - (MIR MEDIUM ITALIC REGULAR) - (ITALIC MEDIUM ITALIC REGULAR) - (BRR BOLD REGULAR REGULAR) - (BOLD BOLD REGULAR REGULAR) - (BIR BOLD ITALIC REGULAR) - (BOLDITALIC BOLD ITALIC REGULAR] - (CADDR FD))) - (NOT (MEMBER FD $$VAL))) collect FD)) - (if (EQ SIZE '*) - then - -(* ;;; "If SIZE was wildcarded, then provide list of pointsizes for Postscript scaled fonts (those with a 1 point descriptor file)") - - (for FD in FONTSAVAILABLE - join (if (EQ 1 (CADR FD)) - then (CONS FD (for NF - in (for S from 2 to - \POSTSCRIPT.MAX.WILD.FONTSIZE - collect (LET ((NFD (COPY FD))) - (RPLACA (CDR NFD) - S) - NFD)) - unless (MEMBER NF FONTSAVAILABLE) collect - NF)) - else (LIST FD))) - else FONTSAVAILABLE]) + [LAMBDA (FONTSPEC) (* ; "Edited 25-Aug-2025 13:09 by rmk") + (* ; "Edited 23-Aug-2025 08:19 by rmk") + + (* ;; "Postscript only has font files of size 1, and only files for %"raw%" postscript families that Medley font families are mapped to by POSTSCRIPTFONTCOERCIONS. Therefore the search doesn't care about the given family, just looks at the corresponding raw files that exist in the directory. ") + + (LET [(SIZE (fetch (FONTSPEC FSSIZE) of FONTSPEC)) + (FONTSAVAILABLE (\SEARCHFONTFILES (CAR (COERCEFONTSPEC FONTSPEC] + + (* ;; "Switch from postscript family names back to the corresponding Medley names.") + + (for FS in FONTSAVAILABLE + do (change (fetch (FONTSPEC FSFAMILY) of FS) + (OR [CAR (find C in (FONTDEVICEPROP FONTSPEC 'FONTCOERCIONS) + suchthat + + (* ;; "C is (medley (ps 1))--match ps return medley") + + (EQ DATUM (CAR (CADR C] + DATUM))) + (if (EQ SIZE '*) + then + (* ;; "If SIZE was wildcarded, then provide list of pointsizes for the Postscript scaled fonts (those with a 1 point descriptor file)") + + (* ;; + "RMK: Maybe just provide the sizes that exist for all the corresponding display fonts?") + + (for FS in FONTSAVAILABLE + do (for S NFS from 2 to \POSTSCRIPT.MAX.WILD.FONTSIZE + eachtime (SETQ NFS (create FONTSPEC using FS FSSIZE _ S)) + unless (MEMBER NFS FONTSAVAILABLE) do (push FONTSAVAILABLE NFS))) + else + (* ;; "Otherwise, replace the 1 with the requested SIZE.") + + (for FS in FONTSAVAILABLE do (replace (FONTSPEC FSSIZE) of FS with SIZE))) + FONTSAVAILABLE]) (POSTSCRIPT.FONTEXISTS? - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 16-Jun-2025 00:04 by rmk") + [LAMBDA (FONTSPEC) (* ; "Edited 3-Sep-2025 23:12 by rmk") + (* ; "Edited 18-Aug-2025 09:44 by rmk") + (* ; "Edited 16-Jun-2025 00:04 by rmk") (* ; "Edited 29-Oct-93 16:39 by rmk:") (* ; "Edited 3-Feb-93 17:22 by jds") @@ -1178,27 +1171,15 @@ (* ;; "Since a 1 point font is ridiculously small, and it is the standard size for Postscript font info, size 1 is presumed to be the base for all postscript fonts.") - (LET ((WEIGHT (fetch (FONTFACE WEIGHT) of FACE)) - (SLOPE (fetch (FONTFACE SLOPE) of FACE)) - (EXPANSION (fetch (FONTFACE EXPANSION) of FACE))) + (LET (FAMILY SIZE FACE ROTATION DEVICE WEIGHT SLOPE EXPANSION) + (SPREADFONTSPEC FONTSPEC) + (SETQ WEIGHT (fetch (FONTFACE WEIGHT) of FACE)) + (SETQ SLOPE (fetch (FONTFACE SLOPE) of FACE)) + (SETQ EXPANSION (fetch (FONTFACE EXPANSION) of FACE)) (OR (PSCFONT.SPELLFILE FAMILY 1 FACE ROTATION DEVICE) (PSCFONTFROMCACHE.COERCEFILE FAMILY 1 WEIGHT SLOPE EXPANSION ROTATION DEVICE) (PSCFONT.COERCEFILE FAMILY 1 WEIGHT SLOPE EXPANSION ROTATION DEVICE]) ) - - - -(* ;; "Until macro in FONT is exported") - -(DECLARE%: EVAL@COMPILE - -(PUTPROPS \FSETCHARWIDTH MACRO (OPENLAMBDA (FONTDESC CHARCODE WIDTH) - (\FSETWIDTH (ffetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO - (\CHARSET CHARCODE) - FONTDESC)) - (\CHAR8CODE CHARCODE) - WIDTH))) -) (DEFINEQ (OPENPOSTSCRIPTSTREAM @@ -1419,11 +1400,12 @@ `(REGION ,POSTSCRIPT.DEFAULT.PAGEREGION ROTATION ,(NOT (NOT POSTSCRIPT.TEXTFILE.LANDSCAPE]) (POSTSCRIPTFILEP - [LAMBDA (FILE) (* ; "Edited 21-Nov-2023 17:04 by rmk") + [LAMBDA (FILE) (* ; "Edited 10-Sep-2025 14:51 by rmk") + (* ; "Edited 21-Nov-2023 17:04 by rmk") (* ; "Edited 5-Mar-93 21:40 by rmk:") (* ; "Edited 14-Jan-93 10:56 by jds") - (OR (CL:MEMBER (UNPACKFILENAME.STRING FILE 'EXTENSION) - [CADR (ASSOC 'EXTENSION (CDR (ASSOC 'POSTSCRIPT PRINTFILETYPES] + (OR (CL:MEMBER (FILENAMEFIELD FILE 'EXTENSION) + (EXTENSIONS.FOR.PRINTFILETYPE 'POSTSCRIPT) :TEST (FUNCTION STRING-EQUAL)) (RESETLST @@ -2304,29 +2286,23 @@ CHARCODE]) (\CREATECHARSET.PSC - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) - (* ; "Edited 8-May-93 22:55 by rmk:") - (LET* ((CSINFO (CREATE CHARSETINFO + [LAMBDA (FONTSPEC FONT CHARSET) (* ; "Edited 3-Sep-2025 23:11 by rmk") + (* ; "Edited 8-May-93 22:55 by rmk:") + (LET* ((CSINFO (create CHARSETINFO OFFSETS _ NIL)) - (WIDTHS (FETCH (CHARSETINFO WIDTHS) OF CSINFO))) - (REPLACE (CHARSETINFO IMAGEWIDTHS) OF CSINFO WITH WIDTHS) + (WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO))) + (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with WIDTHS) - (* ;; "Make imagewidths point to widths. Shouldn't matter to anyone, since imagewidths really has to do with bitmaps etc. But...") + (* ;; "Make imagewidths point to widths. Shouldn't matter to anyone, since imagewidths really has to do with bitmaps etc. But...") (CL:UNLESS (EQ CHARSET 0) - (* ;; "For all charsets other than 0, initialize widths with width of black box=average char width. We know that the AVGCHARWIDTH field of the FONTDESC will eventually be the width of A, but that might not be filled in when this is executed inside POSTSCRIPT.FONTCREATE--it's only after the return to FONTCREATE itself that this gets filled in. However, we do know that charset 0 is all set up before any other characters are dealt with.") - - (FOR I (AVGCHARWIDTH _ (CHARWIDTH (CHARCODE A) - FONTDESC)) FROM 0 TO 255 - FIRST (CL:WHEN (EQ 0 AVGCHARWIDTH) + (* ;; "For all charsets other than 0, initialize widths with width of black box=average char width. We know that the AVGCHARWIDTH field of the FONT will eventually be the width of A, but that might not be filled in when this is executed inside POSTSCRIPT.FONTCREATE--it's only after the return to FONTCREATE itself that this gets filled in. However, we do know that charset 0 is all set up before any other characters are dealt with.") - (* ;; - "This is what \AVGCHARWIDTH in FONT does, but we don't have it here. Just to be extremely safe.") + (* ;; "RMK: Should it use the FONTSLUGWIDTH") - [SETQ AVGCHARWIDTH (MAX 1 (FIXR (FTIMES 0.6 (FONTPROP FONTDESC - 'HEIGHT]) - DO (\FSETWIDTH WIDTHS I AVGCHARWIDTH))) + (for I (AVGCHARWIDTH _ (\AVGCHARWIDTH FONT)) from 0 to \MAXTHINCHAR + do (\FSETWIDTH WIDTHS I AVGCHARWIDTH))) CSINFO]) (\DRAWARC.PSC @@ -3125,22 +3101,21 @@ (DEFINEQ (\POSTSCRIPT.CHANGECHARSET - [LAMBDA (PSDATA CHARSET) (* ; "Edited 29-Apr-93 13:51 by rmk:") + [LAMBDA (PSDATA CHARSET) (* ; "Edited 30-Aug-2025 23:24 by rmk") + (* ; "Edited 29-Apr-93 13:51 by rmk:") (* ;;  "Called when the character set information cached in a display stream doesn't correspond to CHARSET") (PROG* ((FONT (ffetch POSTSCRIPTFONT of PSDATA)) - (CSINFO (\GETCHARSETINFO CHARSET FONT))) - - (* ;; "since the call to \getcharsetinfo has NOSLUG? = NIL, we know that we will get a reasonable character set back") - + (CSINFO (\INSURECHARSETINFO FONT CHARSET))) (UNINTERRUPTABLY (freplace POSTSCRIPTWIDTHS of PSDATA with (ffetch (CHARSETINFO WIDTHS) of CSINFO)) (freplace POSTSCRIPTNSCHARSET of PSDATA with CHARSET))]) (\POSTSCRIPT.OUTCHARFN - [LAMBDA (STREAM CHAR) (* ; "Edited 23-May-93 12:00 by rmk:") + [LAMBDA (STREAM CHAR) (* ; "Edited 8-Sep-2025 09:50 by rmk") + (* ; "Edited 23-May-93 12:00 by rmk:") (* ; "Edited 4-May-93 02:20 by jds") (* ; "Edited 3-Feb-93 00:45 by jds") @@ -3152,6 +3127,7 @@ (DECLARE (GLOBALVARS \POSTSCRIPT.CHARTYPE) (LOCALVARS . T)) + (SETQ CHAR (MTOX$CODE CHAR)) (LET* ((IMAGEDATA (fetch (STREAM IMAGEDATA) of STREAM)) (XPOS (fetch (\POSTSCRIPTDATA POSTSCRIPTX) of IMAGEDATA)) (FONT (ffetch (\POSTSCRIPTDATA POSTSCRIPTFONT) of IMAGEDATA)) @@ -4305,6 +4281,10 @@ (\PS.SCALE0 100) (\PS.TEMPARRAYLEN 20)) ) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS POSTSCRIPTFONTEXTENSIONS POSTSCRIPTFONTDIRECTORIES) +) (RPAQ? POSTSCRIPT.BITMAP.SCALE 1) @@ -4325,6 +4305,24 @@ "{dsk}/USR/LOCAL/LDE/FONTS/POSTSCRIPT/") (T "{DSK}POSTSCRIPT>")))) +(RPAQ? POSTSCRIPTFONTEXTENSIONS '(PSCFONT PF PSC)) + +(RPAQ? POSTSCRIPTFONTCOERCIONS + '((HELVETICA (HELVETICA 1)) + (HELVETICAD (HELVETICA 1)) + (TIMESROMAN (TIMES 1)) + (TIMESROMAND (TIMES 1)) + (COURIER (COURIER 1)) + (GACHA (COURIER 1)) + (CLASSIC (NEWCENTURYSCHLBK 1)) + (MODERN (HELVETICA 1)) + (CREAM (HELVETICA 1)) + (TERMINAL (COURIER 1)) + (LOGO (HELVETICA 1)) + (OPTIMA (PALATINO 1)) + (TITAN (COURIER 1)) + (* (* 1)))) + (RPAQ? \POSTSCRIPT.MAX.WILD.FONTSIZE 72) (DEFINEQ @@ -4414,39 +4412,39 @@ (ADDTOVAR LAMA POSTSCRIPT.PUTCOMMAND) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (22458 32954 (POSTSCRIPT.INIT 22468 . 29560) (POSTSCRIPT.PUTRGBCOLOR 29562 . 30584) ( -\PSC.COLOR.TO.RGB 30586 . 32952)) (33940 69653 (PSCFONT.READFONT 33950 . 35858) (PSCFONT.SPELLFILE -35860 . 36557) (PSCFONT.COERCEFILE 36559 . 38131) (PSCFONTFROMCACHE.SPELLFILE 38133 . 39118) ( -PSCFONTFROMCACHE.COERCEFILE 39120 . 40772) (PSCFONT.WRITEFONT 40774 . 41789) (READ-AFM-FILE 41791 . -47662) (CONVERT-AFM-FILES 47664 . 48876) (POSTSCRIPT.GETFONTID 48878 . 50273) (POSTSCRIPT.FONTCREATE -50275 . 62428) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 62430 . 64827) (POSTSCRIPT.FONTSAVAILABLE 64829 - . 68595) (POSTSCRIPT.FONTEXISTS? 68597 . 69651)) (70208 79493 (OPENPOSTSCRIPTSTREAM 70218 . 79159) ( -CLOSEPOSTSCRIPTSTREAM 79161 . 79491)) (79538 85592 (POSTSCRIPT.HARDCOPYW 79548 . 82655) ( -POSTSCRIPT.TEDIT 82657 . 83141) (POSTSCRIPT.TEXT 83143 . 83434) (POSTSCRIPTFILEP 83436 . 84543) ( -MAKEEPSFILE 84545 . 85590)) (85593 129167 (POSTSCRIPT.BITMAPSCALE 85603 . 88059) ( -POSTSCRIPT.CLOSESTRING 88061 . 88614) (POSTSCRIPT.ENDPAGE 88616 . 89507) (POSTSCRIPT.OUTSTR 89509 . -90726) (POSTSCRIPT.PUTBITMAPBYTES 90728 . 99199) (POSTSCRIPT.PUTCOMMAND 99201 . 100190) ( -POSTSCRIPT.SET-FAKE-LANDSCAPE 100192 . 104712) (POSTSCRIPT.SHOWACCUM 104714 . 106869) ( -POSTSCRIPT.STARTPAGE 106871 . 109403) (\POSTSCRIPTTAB 109405 . 110202) (\PS.BOUTFIXP 110204 . 111484) -(\PS.SCALEHACK 111486 . 114129) (\PS.SCALEREGION 114131 . 114691) (\SCALEDBITBLT.PSC 114693 . 119003) -(\SETPOS.PSC 119005 . 119486) (\SETXFORM.PSC 119488 . 122072) (\STRINGWIDTH.PSC 122074 . 122547) ( -\SWITCHFONTS.PSC 122549 . 128041) (\TERPRI.PSC 128043 . 129165)) (129202 183400 (\BITBLT.PSC 129212 . -129764) (\BLTSHADE.PSC 129766 . 134427) (\CHARWIDTH.PSC 134429 . 134936) (\CREATECHARSET.PSC 134938 . -136636) (\DRAWARC.PSC 136638 . 139016) (\DRAWCIRCLE.PSC 139018 . 141269) (\DRAWCURVE.PSC 141271 . -145115) (\DRAWELLIPSE.PSC 145117 . 147481) (\DRAWLINE.PSC 147483 . 150223) (\DRAWPOINT.PSC 150225 . -150801) (\DRAWPOLYGON.PSC 150803 . 153932) (\DSPBOTTOMMARGIN.PSC 153934 . 154621) ( -\DSPCLIPPINGREGION.PSC 154623 . 155998) (\DSPCOLOR.PSC 156000 . 156931) (\DSPFONT.PSC 156933 . 160570) - (\DSPLEFTMARGIN.PSC 160572 . 161258) (\DSPLINEFEED.PSC 161260 . 161850) (\DSPPUSHSTATE.PSC 161852 . -163312) (\DSPPOPSTATE.PSC 163314 . 166799) (\DSPRESET.PSC 166801 . 167466) (\DSPRIGHTMARGIN.PSC 167468 - . 168157) (\DSPROTATE.PSC 168159 . 169158) (\DSPSCALE.PSC 169160 . 170112) (\DSPSCALE2.PSC 170114 . -170954) (\DSPSPACEFACTOR.PSC 170956 . 171877) (\DSPTOPMARGIN.PSC 171879 . 172450) (\DSPTRANSLATE.PSC -172452 . 174483) (\DSPXPOSITION.PSC 174485 . 175049) (\DSPYPOSITION.PSC 175051 . 175642) ( -\FILLCIRCLE.PSC 175644 . 177869) (\FILLPOLYGON.PSC 177871 . 181108) (\FIXLINELENGTH.PSC 181110 . -182429) (\MOVETO.PSC 182431 . 183201) (\NEWPAGE.PSC 183203 . 183398)) (183456 205479 ( -\POSTSCRIPT.CHANGECHARSET 183466 . 184203) (\POSTSCRIPT.OUTCHARFN 184205 . 196333) ( -\POSTSCRIPT.PRINTSLUG 196335 . 198059) (\POSTSCRIPT.SPECIALOUTCHARFN 198061 . 200412) (\UPDATE.PSC -200414 . 201660) (\POSTSCRIPT.ACCENTFN 201662 . 202604) (\POSTSCRIPT.ACCENTPAIR 202606 . 205477)) ( -205577 207222 (\PSC.SPACEDISP 205587 . 205866) (\PSC.SPACEWID 205868 . 206487) (\PSC.SYMBOLS 206489 . -207220)) (207331 210322 (\POSTSCRIPT.NSHASH 207341 . 210320)) (255096 255802 (POSTSCRIPTSEND 255106 . -255800))))) + (FILEMAP (NIL (23396 33604 (POSTSCRIPT.INIT 23406 . 30210) (POSTSCRIPT.PUTRGBCOLOR 30212 . 31234) ( +\PSC.COLOR.TO.RGB 31236 . 33602)) (34590 69697 (PSCFONT.READFONT 34600 . 36508) (PSCFONT.SPELLFILE +36510 . 37323) (PSCFONT.COERCEFILE 37325 . 38897) (PSCFONTFROMCACHE.SPELLFILE 38899 . 39884) ( +PSCFONTFROMCACHE.COERCEFILE 39886 . 41538) (PSCFONT.WRITEFONT 41540 . 42555) (READ-AFM-FILE 42557 . +48428) (CONVERT-AFM-FILES 48430 . 49642) (POSTSCRIPT.GETFONTID 49644 . 51039) (POSTSCRIPT.FONTCREATE +51041 . 63724) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 63726 . 66123) (POSTSCRIPT.FONTSAVAILABLE 66125 + . 68308) (POSTSCRIPT.FONTEXISTS? 68310 . 69695)) (69698 78983 (OPENPOSTSCRIPTSTREAM 69708 . 78649) ( +CLOSEPOSTSCRIPTSTREAM 78651 . 78981)) (79028 85162 (POSTSCRIPT.HARDCOPYW 79038 . 82145) ( +POSTSCRIPT.TEDIT 82147 . 82631) (POSTSCRIPT.TEXT 82633 . 82924) (POSTSCRIPTFILEP 82926 . 84113) ( +MAKEEPSFILE 84115 . 85160)) (85163 128737 (POSTSCRIPT.BITMAPSCALE 85173 . 87629) ( +POSTSCRIPT.CLOSESTRING 87631 . 88184) (POSTSCRIPT.ENDPAGE 88186 . 89077) (POSTSCRIPT.OUTSTR 89079 . +90296) (POSTSCRIPT.PUTBITMAPBYTES 90298 . 98769) (POSTSCRIPT.PUTCOMMAND 98771 . 99760) ( +POSTSCRIPT.SET-FAKE-LANDSCAPE 99762 . 104282) (POSTSCRIPT.SHOWACCUM 104284 . 106439) ( +POSTSCRIPT.STARTPAGE 106441 . 108973) (\POSTSCRIPTTAB 108975 . 109772) (\PS.BOUTFIXP 109774 . 111054) +(\PS.SCALEHACK 111056 . 113699) (\PS.SCALEREGION 113701 . 114261) (\SCALEDBITBLT.PSC 114263 . 118573) +(\SETPOS.PSC 118575 . 119056) (\SETXFORM.PSC 119058 . 121642) (\STRINGWIDTH.PSC 121644 . 122117) ( +\SWITCHFONTS.PSC 122119 . 127611) (\TERPRI.PSC 127613 . 128735)) (128772 182628 (\BITBLT.PSC 128782 . +129334) (\BLTSHADE.PSC 129336 . 133997) (\CHARWIDTH.PSC 133999 . 134506) (\CREATECHARSET.PSC 134508 . +135864) (\DRAWARC.PSC 135866 . 138244) (\DRAWCIRCLE.PSC 138246 . 140497) (\DRAWCURVE.PSC 140499 . +144343) (\DRAWELLIPSE.PSC 144345 . 146709) (\DRAWLINE.PSC 146711 . 149451) (\DRAWPOINT.PSC 149453 . +150029) (\DRAWPOLYGON.PSC 150031 . 153160) (\DSPBOTTOMMARGIN.PSC 153162 . 153849) ( +\DSPCLIPPINGREGION.PSC 153851 . 155226) (\DSPCOLOR.PSC 155228 . 156159) (\DSPFONT.PSC 156161 . 159798) + (\DSPLEFTMARGIN.PSC 159800 . 160486) (\DSPLINEFEED.PSC 160488 . 161078) (\DSPPUSHSTATE.PSC 161080 . +162540) (\DSPPOPSTATE.PSC 162542 . 166027) (\DSPRESET.PSC 166029 . 166694) (\DSPRIGHTMARGIN.PSC 166696 + . 167385) (\DSPROTATE.PSC 167387 . 168386) (\DSPSCALE.PSC 168388 . 169340) (\DSPSCALE2.PSC 169342 . +170182) (\DSPSPACEFACTOR.PSC 170184 . 171105) (\DSPTOPMARGIN.PSC 171107 . 171678) (\DSPTRANSLATE.PSC +171680 . 173711) (\DSPXPOSITION.PSC 173713 . 174277) (\DSPYPOSITION.PSC 174279 . 174870) ( +\FILLCIRCLE.PSC 174872 . 177097) (\FILLPOLYGON.PSC 177099 . 180336) (\FIXLINELENGTH.PSC 180338 . +181657) (\MOVETO.PSC 181659 . 182429) (\NEWPAGE.PSC 182431 . 182626)) (182684 204830 ( +\POSTSCRIPT.CHANGECHARSET 182694 . 183412) (\POSTSCRIPT.OUTCHARFN 183414 . 195684) ( +\POSTSCRIPT.PRINTSLUG 195686 . 197410) (\POSTSCRIPT.SPECIALOUTCHARFN 197412 . 199763) (\UPDATE.PSC +199765 . 201011) (\POSTSCRIPT.ACCENTFN 201013 . 201955) (\POSTSCRIPT.ACCENTPAIR 201957 . 204828)) ( +204928 206573 (\PSC.SPACEDISP 204938 . 205217) (\PSC.SPACEWID 205219 . 205838) (\PSC.SYMBOLS 205840 . +206571)) (206682 209673 (\POSTSCRIPT.NSHASH 206692 . 209671)) (255083 255789 (POSTSCRIPTSEND 255093 . +255787))))) STOP diff --git a/library/POSTSCRIPTSTREAM.LCOM b/library/POSTSCRIPTSTREAM.LCOM index b960190380088210960df10696833ca80d28d819..b8c89407b4207393744c36e8362ca62a22ed24f6 100644 GIT binary patch delta 8323 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 diff --git a/sources/COREIO b/sources/COREIO index 480027788..72ff5f565 100644 --- a/sources/COREIO +++ b/sources/COREIO @@ -1,17 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 5-Jun-2022 00:14:07"  -{DSK}kaplan>local>medley3.5>working-medley>sources>COREIO.;17 57355 +(FILECREATED "11-Sep-2025 16:49:07" {WMEDLEY}COREIO.;18 56903 - :CHANGES-TO (FNS \CORE.OPENFILE) + :EDIT-BY rmk - :PREVIOUS-DATE " 4-Jun-2022 16:30:20" -{DSK}kaplan>local>medley3.5>working-medley>sources>COREIO.;16) + :CHANGES-TO (FNS \CORE.DIRECTORYNAMEP) + :PREVIOUS-DATE " 5-Jun-2022 00:14:07" {WMEDLEY}COREIO.;17) -(* ; " -Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT COREIOCOMS) @@ -91,8 +87,13 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (RETURN (fetch IOFILEFULLNAME of INFOBLOCK]) (\CORE.DIRECTORYNAMEP - [LAMBDA (DIRNAME DEV) (* ; "Edited 18-Jan-2022 11:17 by rmk") - (* ; "Edited 10-Jan-2022 22:33 by rmk") + [LAMBDA (DIRNAME DEV) + + (* ;; "Edited 11-Sep-2025 16:48 by rmk") + + (* ;; "Edited 18-Jan-2022 11:17 by rmk") + + (* ;; "Edited 10-Jan-2022 22:33 by rmk") (* ;;  "Edited 9-Jan-2022 12:42 by rmk: Using the new FILEDIRCASEARRAY so that slashes and brackets match") @@ -103,22 +104,20 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (CL:WHEN DIRNAME - (* ;; "The DIRNAME could be just {CORE}, which always is OK, or {CORE}xxx. If the latter, then we want it to be a directory and not a file (assuming that xxx and xxx> can't both exist.") + (* ;; "Returns NIL for a DIRNAME of just {CORE}, or {CORE}xxx. If the latter, then we want it to be a directory and not a file (assuming that xxx and xxx> can't both exist.") - (IF (EQ (CHARCODE }) - (NTHCHARCODE DIRNAME -1)) - ELSE (CL:UNLESS (MEMB (NTHCHARCODE DIRNAME -1) - (CHARCODE (> /))) - (SETQ DIRNAME (CONCAT DIRNAME ">"))) + [LET [(DIR (FILENAMEFIELD DIRNAME 'DIRECTORY] + (CL:WHEN DIR + (SETQ DIR (CONCAT DIR ">")) - (* ;; "DIRPOS because caller may not have stripped off the device. This will match the first < or / (or >)") + (* ;; "DIRPOS because caller may not have stripped off the device. This will match the first < or / (or >)") - (FOR ENTRY (DIRPOS _ (STRPOS "<" DIRNAME 1 NIL NIL NIL FILEDIRCASEARRAY)) - FIRST (CL:UNLESS (EQ DIRPOS 1) - (SETQ DIRNAME (SUBSTRING DIRNAME DIRPOS))) - IN (CDR (FETCH COREDIRECTORY OF DEV)) WHEN (STRPOS DIRNAME (CAR ENTRY) - 1 NIL T NIL FILEDIRCASEARRAY) - DO (RETURN T))))]) + (FOR ENTRY (DIRPOS _ (STRPOS "<" DIRNAME 1 NIL NIL NIL FILEDIRCASEARRAY)) + FIRST (CL:UNLESS (EQ DIRPOS 1) + (SETQ DIRNAME (SUBSTRING DIRNAME DIRPOS))) + IN (CDR (FETCH COREDIRECTORY OF DEV)) + WHEN (STRPOS DIRNAME (CAR ENTRY) + 1 NIL T NIL FILEDIRCASEARRAY) DO (RETURN T)))])]) (\CORE.FINDPAGE [LAMBDA (STREAM PN) (* bvm%: "20-Apr-85 13:32") @@ -997,19 +996,17 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (LOCALVARS . T) ) ) -(PUTPROPS COREIO COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 -1993 1999 2018)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1717 46448 (\CORE.CLOSEFILE 1727 . 2500) (\CORE.DELETEFILE 2502 . 4488) ( -\CORE.DIRECTORYNAMEP 4490 . 6171) (\CORE.FINDPAGE 6173 . 9402) (\CORE.GENERATEFILES 9404 . 11991) ( -\CORE.NEXTFILEFN 11993 . 12492) (\CORE.FILEINFOFN 12494 . 12723) (\CORE.GETFILEHANDLE 12725 . 14879) ( -\CORE.GETFILEINFO 14881 . 15844) (\CORE.GETFILEINFO.FROM.INFOBLOCK 15846 . 17383) (\CORE.GETFILENAME -17385 . 19674) (\CORE.GETINFOBLOCK 19676 . 22299) (\CORE.NAMESCAN 22301 . 23848) (\CORE.NAMESEGMENT -23850 . 24287) (\CORE.OPENFILE 24289 . 27681) (\COREFILE.SETPARAMETERS 27683 . 29864) ( -\CORE.PACKFILENAME 29866 . 30261) (\CORE.RELEASEPAGES 30263 . 30864) (\CORE.SETFILEPTR 30866 . 31965) -(\CORE.UPDATEOF 31967 . 33596) (\CORE.BACKFILEPTR 33598 . 35806) (\CORE.SETEOFPTR 35808 . 37677) ( -\CORE.SETACCESSTIME 37679 . 38304) (\CORE.SETFILEINFO 38306 . 40608) (\CORE.GETNEXTBUFFER 40610 . -44566) (\CORE.UNPACKFILENAME 44568 . 46446)) (46449 50082 (COREDEVICE 46459 . 46630) ( -\CREATECOREDEVICE 46632 . 50080)) (50083 52497 (\NODIRCOREFDEV 50093 . 50690) (\NODIRCORE.OPENFILE -50692 . 52495))))) + (FILEMAP (NIL (1572 46115 (\CORE.CLOSEFILE 1582 . 2355) (\CORE.DELETEFILE 2357 . 4343) ( +\CORE.DIRECTORYNAMEP 4345 . 5838) (\CORE.FINDPAGE 5840 . 9069) (\CORE.GENERATEFILES 9071 . 11658) ( +\CORE.NEXTFILEFN 11660 . 12159) (\CORE.FILEINFOFN 12161 . 12390) (\CORE.GETFILEHANDLE 12392 . 14546) ( +\CORE.GETFILEINFO 14548 . 15511) (\CORE.GETFILEINFO.FROM.INFOBLOCK 15513 . 17050) (\CORE.GETFILENAME +17052 . 19341) (\CORE.GETINFOBLOCK 19343 . 21966) (\CORE.NAMESCAN 21968 . 23515) (\CORE.NAMESEGMENT +23517 . 23954) (\CORE.OPENFILE 23956 . 27348) (\COREFILE.SETPARAMETERS 27350 . 29531) ( +\CORE.PACKFILENAME 29533 . 29928) (\CORE.RELEASEPAGES 29930 . 30531) (\CORE.SETFILEPTR 30533 . 31632) +(\CORE.UPDATEOF 31634 . 33263) (\CORE.BACKFILEPTR 33265 . 35473) (\CORE.SETEOFPTR 35475 . 37344) ( +\CORE.SETACCESSTIME 37346 . 37971) (\CORE.SETFILEINFO 37973 . 40275) (\CORE.GETNEXTBUFFER 40277 . +44233) (\CORE.UNPACKFILENAME 44235 . 46113)) (46116 49749 (COREDEVICE 46126 . 46297) ( +\CREATECOREDEVICE 46299 . 49747)) (49750 52164 (\NODIRCOREFDEV 49760 . 50357) (\NODIRCORE.OPENFILE +50359 . 52162))))) STOP diff --git a/sources/COREIO.LCOM b/sources/COREIO.LCOM index 8b866251f5d573aa64aa28fe2176e8cb085229dd..f011a7be1aeccc6df7b433fe92ed83bc00e0c860 100644 GIT binary patch delta 510 zcmaKoQA@&56vv&G4}*H|?QkK`hmCtTH+2q4w`<&*n{87OdPyB2rIVQuMEDTC^c09+ zqX+#6L9czKW{~wDo`(bH!1@3G=eL}5uP@wNdq#-h1!FDeH*s5LDM{>zA>h@gM-5J%XhPcX{znHsaG;nIpvO+dR}*%uuY zwTR^-(5T6Lq1u6Hc(-`xP8Of~v6%&};nEg!nx0_B4lxErxR{PMtR%o#Be@?|dkpex zJ$aRaAjKt;XZ;nsO~l1-T7RX7+hOr>c-buy@O-!7c%Z7_HLLN!>~m10-?gNI;n+sS u2O`7fal2BdHAXEn1|dsOGieJ7utghhA%_9!2qXfijMnq?vUFfGi~k0iuY>&n delta 784 zcmbVKO>fgc5RIvNz*jCkjx2$aLo9#WaVsmSy-7?{+t^N_s1iyOtFr3Yk&}p4QI$i* z1qlf$;><7LLd6;J8~7t!Il(Lq5D8A*!`qps-I+IU_w_aN?iKU)=`l$4$MdW%36cb& zY%01bY8+I#VKJVhSu%nm2M*YU6CGUb&8JB@way2VY>-=7F&t#pI2mQhrOd0=%c49_ z^RxObW39e050-d!v%Y95vMEVe@3c(*bVx2HSvpK-+2unMPVA7hVq*ItambNt6G%}& zyWi`MH!+v4EzWT z1ET&uCa%{3UHMHbD%iefw_=cGI3$PrAj#mxUGyQeeTRT3Y^LbHsz4jx5F^ke;PyCB z1mG-uF9WK`D0;27cJ1c-_M6>BHR#7d=m!yYqITmJ9EWbF8{>yOO7eLEkKkES78hU_ w<)kPFv$V)L5F3U_0e^7AkSQn>R0Bib8TmVqSV`v8t6qUVceNW?s5NW}bqQTd0qZ09I)=Eqh$$#xbJ=7YMimZALj_|CO9Ru%8H_TvVU9t;3a$|$ zu0ei|K5qU&zK$Wz{=UJQ3RVF@u3?`3p~1Q?Km!$&3@vqi6Tu!eQ7{Dh!^Fzia`Ht+ bRVGV=%|95M6&Zau*C@YdWAvSzqjdlP2`@{L delta 317 zcmbOdwkB*sxQL;pu5V(Iu91O}iGrbpm63^+vE{^UlX?paO$9C`LvtiqODj`LD`OKS zg`}d?=IJBn>Kx?i7~<-ppoGl6}YnZ2hXt1se&_JMhM!H^!c~Bo4fc#`=p`^eyu~v!6!ff*c n#%4v%2xsSDO-%(2uF3tX%A5O@kFc?Ug}5g7DZ5Obt5psFr$tjb diff --git a/sources/FILEIO b/sources/FILEIO index 244a1fcf7..189bad26a 100644 --- a/sources/FILEIO +++ b/sources/FILEIO @@ -1,12 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "25-Dec-2024 10:56:37" {WMEDLEY}FILEIO.;138 166550 +(FILECREATED "11-Sep-2025 20:49:24"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>FILEIO.;140 166949 :EDIT-BY rmk - :CHANGES-TO (FNS SETFILEINFO \DO.PARAMS.AT.OPEN \RENAMEFILE) + :CHANGES-TO (FNS COPYCHARS) - :PREVIOUS-DATE "18-Dec-2024 21:08:09" {WMEDLEY}FILEIO.;135) + :PREVIOUS-DATE "24-Apr-2025 22:16:47" +{DSK}kaplan>Local>medley3.5>working-medley>sources>FILEIO.;139) (PRETTYCOMPRINT FILEIOCOMS) @@ -2223,31 +2225,32 @@ update the map") ]) (COPYCHARS - [LAMBDA (SRCFIL DSTFIL START END) (* ; "Edited 13-Aug-2021 18:39 by rmk:") - (* ; "Edited 14-Jun-2021 22:08 by rmk:") - (* ; "Edited 8-Dec-95 16:38 by rmk:") - (* ; "Edited 26-Mar-99 12:13 by rmk:") + [LAMBDA (SRCFIL DSTFIL START END) (* ; "Edited 11-Sep-2025 20:47 by rmk") + (* ; "Edited 13-Aug-2021 18:39 by rmk:") + (* ; "Edited 14-Jun-2021 22:08 by rmk:") + (* ; "Edited 8-Dec-95 16:38 by rmk:") + (* ; "Edited 26-Mar-99 12:13 by rmk:") - (* ;; "This is similar to COPYBYTES except that conversion is done between the EOL convention and externalformat of the input and the EOL convention/external format of the output") + (* ;; "This is similar to COPYBYTES except that conversion is done between the EOL convention and externalformat of the input and the EOL convention/external format of the output. This assumes that an ANY.EOLC source file is actually the same as the destination.") [PROG ((SRCSTRM (\GETSTREAM SRCFIL)) (DSTSTRM (\GETSTREAM DSTFIL)) (ACTUALSTART 0) RAP ACTUALEND EOF SRCEOLC DSTEOLC CH) - (CL:WHEN (AND (EQ (SETQ SRCEOLC (fetch EOLCONVENTION of SRCSTRM)) - (SETQ DSTEOLC (fetch EOLCONVENTION of DSTSTRM))) + (CL:WHEN (AND (OR (EQ (SETQ SRCEOLC (fetch EOLCONVENTION of SRCSTRM)) + (SETQ DSTEOLC (fetch EOLCONVENTION of DSTSTRM))) + (EQ ANY.EOLC (fetch EOLCONVENTION of SRCSTRM))) (EQ (FETCH EXTERNALFORMAT OF SRCSTRM) (FETCH EXTERNALFORMAT OF DSTSTRM))) (RETURN (COPYBYTES SRCSTRM DSTSTRM START END))) - (* ;; "Format or EOL convention are different. So first decode the START END specification") + (* ;; "Format or EOL convention are different. So first decode the START END specification") [COND ((SETQ RAP (fetch RANDOMACCESSP of (fetch DEVICE of SRCSTRM))) (SETQ EOF (\GETEOFPTR SRCSTRM] (COND - [END (OR RAP (ERROR "COPYCHARS: Source file is not random access" (fetch - FULLFILENAME + [END (OR RAP (ERROR "COPYCHARS: Source file is not random access" (fetch FULLFILENAME of SRCSTRM))) (OR (type? BYTEPTR (SETQ ACTUALSTART (FIX START))) (LISPERROR "ILLEGAL ARG" START)) @@ -2265,21 +2268,20 @@ update the map") (RAP (SETQ ACTUALSTART (\GETFILEPTR SRCSTRM)) (SETQ ACTUALEND EOF)) (T - (* ;; - "Not random access and START and END are both NIL, just copy to the end of file,no need to count.") + (* ;; + "Not random access and START and END are both NIL, just copy to the end of file,no need to count.") (until (\EOFP SRCSTRM) do (\OUTCHAR DSTSTRM (\INCCODE.EOLC SRCSTRM SRCEOLC))) (RETURN))) (CL:UNLESS (IGEQ ACTUALEND ACTUALSTART) (ERROR "Negative number of bytes to copy" (IDIFFERENCE ACTUALEND ACTUALSTART))) - (* ;; "We now know which bytes we need to copy, in the case that there is an EOL/format mismatch. If we assume that this is fairly unusual and that we don't want to assume here that we know how the CR and LF are byte-coded, we don't try to optimize for an EOL-only change. We just go generic.") + (* ;; "We now know which bytes we need to copy, in the case that there is an EOL/format mismatch. If we assume that this is fairly unusual and that we don't want to assume here that we know how the CR and LF are byte-coded, we don't try to optimize for an EOL-only change. We just go generic.") - (* ;; "The \INCCODE.EOLC and \OUTCHAR handle all format and EOL issues.") + (* ;; "The \INCCODE.EOLC and \OUTCHAR handle all format and EOL issues.") (BIND (CNT _ (IDIFFERENCE ACTUALEND ACTUALSTART)) DECLARE (SPECVARS CNT) - WHILE (IGREATERP CNT 0) DO (\OUTCHAR DSTSTRM (\INCCODE.EOLC SRCSTRM NIL - 'CNT CNT] + WHILE (IGREATERP CNT 0) DO (\OUTCHAR DSTSTRM (\INCCODE.EOLC SRCSTRM NIL 'CNT CNT] T]) (COPYFILE @@ -2440,10 +2442,11 @@ update the map") OLDVAL]) (ACCESS-CHARSET - [LAMBDA (STREAM NEWVALUE DONTMARKFILE) (* ; "Edited 8-Dec-2023 15:05 by rmk") + [LAMBDA (STREAM NEWVALUE DONTMARKFILE) (* ; "Edited 24-Apr-2025 22:15 by rmk") + (* ; "Edited 8-Dec-2023 15:05 by rmk") (* ; "Edited 11-Sep-87 15:46 by bvm:") - (* ;; "Unless DONTMARKSTREAM, if STREAM is open for output, the external format function may modify the backing file as well as the stream, e.g. put in XCCS shifting bytes.") + (* ;; "Unless DONTMARKSTREAM, if STREAM is open for output, the external format function may modify the backing file as well as the stream, e.g. put in MCCS shifting bytes.") (FDEVOP 'CHARSETFN (fetch (STREAM DEVICE) of STREAM) STREAM NEWVALUE DONTMARKFILE]) @@ -2715,10 +2718,11 @@ update the map") (\BACKCCODE.EOLC STRM)))])]) (\GENERIC.CHARSET - [LAMBDA (STREAM NEWVALUE DONTMARKSTREAM) (* ; "Edited 8-Dec-2023 15:17 by rmk") + [LAMBDA (STREAM NEWVALUE DONTMARKSTREAM) (* ; "Edited 24-Apr-2025 22:16 by rmk") + (* ; "Edited 8-Dec-2023 15:17 by rmk") (* ; "Edited 11-Sep-87 16:20 by bvm:") -(* ;;; "sets or returns the current numeric character set for this stream. This applies the stream's FORMATCHARSETFN if it has one, and (if MARKSTREAM) that may change an output backing stream in some way (e.g. write XCCS charset shift bytes). Otherwise, this just sets the charset stream parameter to influence subsequent reading and writing behavior. Charset doesn't exist in some formats (e.g. UTF-8), the format function would be a noop in that case.") +(* ;;; "sets or returns the current numeric character set for this stream. This applies the stream's FORMATCHARSETFN if it has one, and (if MARKSTREAM) that may change an output backing stream in some way (e.g. write MCCS charset shift bytes). Otherwise, this just sets the charset stream parameter to influence subsequent reading and writing behavior. Charset doesn't exist in some formats (e.g. UTF-8), the format function would be a noop in that case.") (\DTEST STREAM 'STREAM) (LET ((EFORMAT (ffetch (STREAM EXTERNALFORMAT) of STREAM)) @@ -3162,39 +3166,39 @@ update the map") (ADDTOVAR LAMA \IS.NOT.RANDACCESSP \ILLEGAL.DEVICEOP STREAMPROP) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (27735 31851 (STREAMPROP 27745 . 28179) (GETSTREAMPROP 28181 . 28930) (PUTSTREAMPROP -28932 . 31699) (STREAMP 31701 . 31849)) (31894 35273 (\DEFPRINT.BY.NAME 31904 . 33056) ( -\STREAM.DEFPRINT 33058 . 34966) (\FDEV.DEFPRINT 34968 . 35271)) (35531 40572 (\GETACCESS 35541 . 35995 -) (\SETACCESS 35997 . 40570)) (60798 66767 (\DEFINEDEVICE 60808 . 63124) (\GETDEVICEFROMNAME 63126 . -63599) (\GETDEVICEFROMHOSTNAME 63601 . 64645) (\REMOVEDEVICE 64647 . 65770) (\REMOVEDEVICE.NAMES 65772 - . 66765)) (66807 94538 (\CLOSEFILE 66817 . 67642) (\DELETEFILE 67644 . 67938) (\DEVICEEVENT 67940 . -69710) (\GENERATEFILES 69712 . 70659) (\GENERATENEXTFILE 70661 . 71312) (\GENERATEFILEINFO 71314 . -71775) (\GETFILENAME 71777 . 72166) (\GENERIC.OUTFILEP 72168 . 72638) (\OPENFILE 72640 . 75218) ( -\DO.PARAMS.AT.OPEN 75220 . 79416) (\RENAMEFILE 79418 . 80374) (\REVALIDATEFILE 80376 . 82978) ( -\PAGED.REVALIDATEFILELST 82980 . 84538) (\PAGED.REVALIDATEFILES 84540 . 86259) (\PAGED.REVALIDATEFILE -86261 . 88544) (\BUFFERED.REVALIDATEFILE 88546 . 90832) (\BUFFERED.REVALIDATEFILELST 90834 . 92018) ( -\PRINT-REVALIDATION-RESULT 92020 . 92862) (\TRUNCATEFILE 92864 . 93255) (\FILE-CONFLICT 93257 . 94536) -) (94574 99237 (\GENERATENOFILES 94584 . 96680) (\NULLFILEGENERATOR 96682 . 96926) (\NOFILESNEXTFILEFN - 96928 . 98919) (\NOFILESINFOFN 98921 . 99235)) (99356 101264 (\FILE.NOT.OPEN 99366 . 99879) ( -\FILE.WONT.OPEN 99881 . 100209) (\ILLEGAL.DEVICEOP 100211 . 100493) (\IS.NOT.RANDACCESSP 100495 . -100941) (\STREAM.NOT.OPEN 100943 . 101262)) (101399 103697 (\FDEVINSTANCE 101409 . 103695)) (104899 -112273 (CNDIR 104909 . 106214) (DIRECTORYNAME 106216 . 110399) (DIRECTORYNAMEP 110401 . 111017) ( -HOSTNAMEP 111019 . 111826) (\ADD.CONNECTED.DIR 111828 . 112271)) (112318 140973 (\BACKFILEPTR 112328 - . 112516) (\BACKPEEKBIN 112518 . 112879) (\BACKBIN 112881 . 113232) (BIN 113234 . 113451) (\BIN -113453 . 113730) (\BINS 113732 . 114018) (BOUT 114020 . 114382) (\BOUT 114384 . 114699) (\BOUTS 114701 - . 115012) (COPYBYTES 115014 . 118346) (COPYCHARS 118348 . 122014) (COPYFILE 122016 . 123325) ( -\COPYOPENFILE 123327 . 126526) (\INFER.FILE.TYPE 126528 . 127482) (EOFP 127484 . 127781) (FORCEOUTPUT -127783 . 128030) (\FLUSH.OPEN.STREAMS 128032 . 128388) (CHARSET 128390 . 129749) (ACCESS-CHARSET -129751 . 130279) (GETEOFPTR 130281 . 130531) (GETFILEINFO 130533 . 133726) (\TYPE.FROM.FILETYPE 133728 - . 134198) (\FILETYPE.FROM.TYPE 134200 . 134379) (GETFILEPTR 134381 . 134633) (SETFILEINFO 134635 . -138872) (SETFILEPTR 138874 . 140593) (BOUT16 140595 . 140780) (BIN16 140782 . 140971)) (141076 148147 -(\GENERIC.BINS 141086 . 141366) (\GENERIC.BOUTS 141368 . 141633) (\GENERIC.RENAMEFILE 141635 . 143883) - (\GENERIC.OPENP 143885 . 145200) (\GENERIC.READP 145202 . 146354) (\GENERIC.CHARSET 146356 . 148145)) - (148148 148487 (\MAP-OPEN-STREAMS 148158 . 148485)) (150342 152422 (\EOF.ACTION 150352 . 150603) ( -\EOSERROR 150605 . 150798) (\GETEOFPTR 150800 . 150982) (\INCFILEPTR 150984 . 151334) (\PEEKBIN 151336 - . 151527) (\SETCLOSEDFILELENGTH 151529 . 151863) (\SETEOFPTR 151865 . 152053) (\SETFILEPTR 152055 . -152420)) (152423 152965 (\FIXPOUT 152433 . 152733) (\FIXPIN 152735 . 152963)) (152966 153532 (\BOUTEOL - 152976 . 153530)) (156428 166292 (\BUFFERED.BIN 156438 . 157290) (\BUFFERED.PEEKBIN 157292 . 158074) -(\BUFFERED.BOUT 158076 . 158936) (\BUFFERED.BINS 158938 . 162623) (\BUFFERED.BOUTS 162625 . 164426) ( -\BUFFERED.COPYBYTES 164428 . 166290))))) + (FILEMAP (NIL (27784 31900 (STREAMPROP 27794 . 28228) (GETSTREAMPROP 28230 . 28979) (PUTSTREAMPROP +28981 . 31748) (STREAMP 31750 . 31898)) (31943 35322 (\DEFPRINT.BY.NAME 31953 . 33105) ( +\STREAM.DEFPRINT 33107 . 35015) (\FDEV.DEFPRINT 35017 . 35320)) (35580 40621 (\GETACCESS 35590 . 36044 +) (\SETACCESS 36046 . 40619)) (60847 66816 (\DEFINEDEVICE 60857 . 63173) (\GETDEVICEFROMNAME 63175 . +63648) (\GETDEVICEFROMHOSTNAME 63650 . 64694) (\REMOVEDEVICE 64696 . 65819) (\REMOVEDEVICE.NAMES 65821 + . 66814)) (66856 94587 (\CLOSEFILE 66866 . 67691) (\DELETEFILE 67693 . 67987) (\DEVICEEVENT 67989 . +69759) (\GENERATEFILES 69761 . 70708) (\GENERATENEXTFILE 70710 . 71361) (\GENERATEFILEINFO 71363 . +71824) (\GETFILENAME 71826 . 72215) (\GENERIC.OUTFILEP 72217 . 72687) (\OPENFILE 72689 . 75267) ( +\DO.PARAMS.AT.OPEN 75269 . 79465) (\RENAMEFILE 79467 . 80423) (\REVALIDATEFILE 80425 . 83027) ( +\PAGED.REVALIDATEFILELST 83029 . 84587) (\PAGED.REVALIDATEFILES 84589 . 86308) (\PAGED.REVALIDATEFILE +86310 . 88593) (\BUFFERED.REVALIDATEFILE 88595 . 90881) (\BUFFERED.REVALIDATEFILELST 90883 . 92067) ( +\PRINT-REVALIDATION-RESULT 92069 . 92911) (\TRUNCATEFILE 92913 . 93304) (\FILE-CONFLICT 93306 . 94585) +) (94623 99286 (\GENERATENOFILES 94633 . 96729) (\NULLFILEGENERATOR 96731 . 96975) (\NOFILESNEXTFILEFN + 96977 . 98968) (\NOFILESINFOFN 98970 . 99284)) (99405 101313 (\FILE.NOT.OPEN 99415 . 99928) ( +\FILE.WONT.OPEN 99930 . 100258) (\ILLEGAL.DEVICEOP 100260 . 100542) (\IS.NOT.RANDACCESSP 100544 . +100990) (\STREAM.NOT.OPEN 100992 . 101311)) (101448 103746 (\FDEVINSTANCE 101458 . 103744)) (104948 +112322 (CNDIR 104958 . 106263) (DIRECTORYNAME 106265 . 110448) (DIRECTORYNAMEP 110450 . 111066) ( +HOSTNAMEP 111068 . 111875) (\ADD.CONNECTED.DIR 111877 . 112320)) (112367 141263 (\BACKFILEPTR 112377 + . 112565) (\BACKPEEKBIN 112567 . 112928) (\BACKBIN 112930 . 113281) (BIN 113283 . 113500) (\BIN +113502 . 113779) (\BINS 113781 . 114067) (BOUT 114069 . 114431) (\BOUT 114433 . 114748) (\BOUTS 114750 + . 115061) (COPYBYTES 115063 . 118395) (COPYCHARS 118397 . 122195) (COPYFILE 122197 . 123506) ( +\COPYOPENFILE 123508 . 126707) (\INFER.FILE.TYPE 126709 . 127663) (EOFP 127665 . 127962) (FORCEOUTPUT +127964 . 128211) (\FLUSH.OPEN.STREAMS 128213 . 128569) (CHARSET 128571 . 129930) (ACCESS-CHARSET +129932 . 130569) (GETEOFPTR 130571 . 130821) (GETFILEINFO 130823 . 134016) (\TYPE.FROM.FILETYPE 134018 + . 134488) (\FILETYPE.FROM.TYPE 134490 . 134669) (GETFILEPTR 134671 . 134923) (SETFILEINFO 134925 . +139162) (SETFILEPTR 139164 . 140883) (BOUT16 140885 . 141070) (BIN16 141072 . 141261)) (141366 148546 +(\GENERIC.BINS 141376 . 141656) (\GENERIC.BOUTS 141658 . 141923) (\GENERIC.RENAMEFILE 141925 . 144173) + (\GENERIC.OPENP 144175 . 145490) (\GENERIC.READP 145492 . 146644) (\GENERIC.CHARSET 146646 . 148544)) + (148547 148886 (\MAP-OPEN-STREAMS 148557 . 148884)) (150741 152821 (\EOF.ACTION 150751 . 151002) ( +\EOSERROR 151004 . 151197) (\GETEOFPTR 151199 . 151381) (\INCFILEPTR 151383 . 151733) (\PEEKBIN 151735 + . 151926) (\SETCLOSEDFILELENGTH 151928 . 152262) (\SETEOFPTR 152264 . 152452) (\SETFILEPTR 152454 . +152819)) (152822 153364 (\FIXPOUT 152832 . 153132) (\FIXPIN 153134 . 153362)) (153365 153931 (\BOUTEOL + 153375 . 153929)) (156827 166691 (\BUFFERED.BIN 156837 . 157689) (\BUFFERED.PEEKBIN 157691 . 158473) +(\BUFFERED.BOUT 158475 . 159335) (\BUFFERED.BINS 159337 . 163022) (\BUFFERED.BOUTS 163024 . 164825) ( +\BUFFERED.COPYBYTES 164827 . 166689))))) STOP diff --git a/sources/FILEIO.LCOM b/sources/FILEIO.LCOM index 2e96bcf117556b71e37a1fefd075e89bcd96d1b0..a50f65aa6267a3c82397078caae5adcd60b8b48a 100644 GIT binary patch delta 845 zcmb_aO>fgc5T&Waq2f|;{L7N-pvtp8^W60;g!OmMdeEjZFT%~1YPKQM{oSR-g8fNA!9cSqqBFN@xUQQ?T zV}6O4Ren;A(#mvPkGj6_5J_SOxXpG*G31445Rvh}EYo$z^mS2I4-ByU!J)O^4MLbO z4NmNNuvsn$0te&aE2i;3TE?n#ot<{m+zMznqW0CK)u__qx@H5UD7vJBL2WnU_YR?) zO~GLD`#l=+kq=BvKm0pW2aG{L4~|_w4tbji1P)7lwWN-oe7bYi zlAmq8ua%?r?&tmS%^U1|yS1Bbe?PnT<^07_ytU9&Nc=czmJUS2khp!z@@*H{gl^CSq$-evG-~V^L;>5C28ri}gJnJ<%J0hCEYg(r zXheOdNmTXPNjjM-gVm3K$OIgl9srRP2qWg}6Tq6d#IQ=%7{M!yed<*n!up@9t}LV4 q8d27CvQ}RtooynL`e$e z1Cl?1E2rig5P#Bt;Krs+(+E{?SZVgnyf^b^_xEM%%Vq1^;gWJQtS2V5sRL+B?n)*I zbjV~jJwJV0pTO)42z)v`P+_7*pPwye@8^?x@jQwX6=&8{WWs#)vO3Ebb5;&gM zTb=sD`F!zMLZQklZW?89dbR`-4UzevMHswitRF4DA~X(YXl)UT3{6 l!m;tk#yu)TGaWzLN8#$f=rPYhK^dT<&(75rtBdik!5=I%y3YUr diff --git a/sources/HARDCOPY b/sources/HARDCOPY index 28bf7c316..4011c0022 100644 --- a/sources/HARDCOPY +++ b/sources/HARDCOPY @@ -1,18 +1,28 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "14-Jul-2025 23:00:56" {WMEDLEY}HARDCOPY.;20 156777 +(FILECREATED "11-Sep-2025 17:08:34" {WMEDLEY}HARDCOPY.;47 148569 :EDIT-BY rmk - :CHANGES-TO (FNS \DSPFONT.HCPYMODE) + :CHANGES-TO (FNS PRINTERDEVICE.OPENFN) - :PREVIOUS-DATE " 5-Jul-2025 18:52:09" {WMEDLEY}HARDCOPY.;19) + :PREVIOUS-DATE "11-Sep-2025 12:40:56" {WMEDLEY}HARDCOPY.;46) (PRETTYCOMPRINT HARDCOPYCOMS) (RPAQQ HARDCOPYCOMS - [(COMS (* ; "exported functionality") + [[EXPORT (CONSTANTS (MICASPERINCH 2540) + (PTSPERINCH 72) + (MICASPERPT (FQUOTIENT MICASPERINCH PTSPERINCH)) + (IHALFMICASPERPT (FIX (FQUOTIENT MICASPERPT 2))) + (IMICASPERPT (FIX MICASPERPT)) + (PTSPERCM (FQUOTIENT PTSPERINCH 2.54)) + (PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) + (PTSPERPICA 12) + (PICASPERINCH (QUOTIENT PTSPERINCH PTSPERPICA)) + (DEFAULTTAB (IQUOTIENT PTSPERINCH 2] + (COMS (* ; "exported functionality") (FNS HARDCOPY.SOMEHOW HARDCOPYIMAGEW HARDCOPYIMAGEW.TOFILE HARDCOPYIMAGEW.TOPRINTER HARDCOPYREGION.TOFILE HARDCOPYREGION.TOPRINTER COPY.WINDOW.TO.BITMAP) (* ; "user interface jazz") @@ -21,36 +31,32 @@ GetNewPrinterFromUser PopUpWindowAndGetAtom PopUpWindowAndGetList NewPrinter GetPrinterName GetImageFile FetchDefaultPrinter) (* ; "filename diddlers") - (FNS ExtensionForPrintFileType PRINTFILETYPE.FROM.EXTENSION)) + (FNS EXTENSIONS.FOR.PRINTFILETYPE PRINTFILETYPE.FROM.EXTENSION)) (COMS (* ;  "Interface for PRINTERS and IMAGEFILES") (FNS DEFAULTPRINTER CAN.PRINT.DIRECTLY CONVERT.FILE.TO.TYPE.FOR.PRINTER EMPRESS HARDCOPYW LISTFILES1 PRINTER.BITMAPFILE PRINTER.BITMAPSCALE PRINTER.SCRATCH.FILE PRINTERPROP PRINTERSTATUS PRINTERTYPE PRINTERNAME PRINTFILEPROP PRINTFILETYPE \EXPECTED.FILE.TYPE SEND.FILE.TO.PRINTER) - (FNS PRINTERDEVICE) + (FNS PRINTERDEVICE PRINTERDEVICE.OPENFN PRINTERDEVICE.CLOSEFN) [DECLARE%: DONTEVAL@LOAD DOCOPY (P (PRINTERDEVICE 'LPT] - (P (* ; "for backward compatibility") - (MOVD? 'NILL 'PRINTERMODE)) (INITVARS (DEFAULTPRINTINGHOST) - (DEFAULTPRINTERTYPE 'INTERPRESS) + (DEFAULTPRINTERTYPE 'PDF) (EMPRESS.SCRATCH) (EMPRESS#SIDES T) (PRINTFILETYPES NIL)) (GLOBALVARS DEFAULTPRINTINGHOST DEFAULTPRINTERTYPE EMPRESS#SIDES PRINTERTYPES PRINTFILETYPES)) + (FNS SCALEREGION) (COMS (* ;  "Converting text files to imagestreams") - (INITVARS (TEXTDEFAULTTABS (LIST 20320)) - (TEXTDEFAULTPAGEREGION (CREATEREGION 2794 1905 18415 24765))) - (* ; - "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches. NOT USED ANYWHERE") - (GLOBALVARS TEXTDEFAULTTABS TEXTDEFAULTPAGEREGION) + [INITVARS (TEXTDEFAULTPAGEREGION (SCALEREGION MICASPERINCH (CREATEREGION 1.1 0.75 7.25 + 9.75] + (GLOBALVARS TEXTDEFAULTPAGEREGION) (FNS TEXTTOIMAGEFILE COPY.TEXT.TO.IMAGE)) - (COMS (FNS \BLTSHADE.GENERICPRINTER) - (* ; + (COMS (* ;  "hack for printers that can't really BLTSHADE") - ) + (FNS \BLTSHADE.GENERICPRINTER)) [COMS (* ;  "stuff to support hardcopy streams on the display.") (FNS MAKEHARDCOPYSTREAM UNMAKEHARDCOPYSTREAM HARDCOPYSTREAMTYPE \CHARWIDTH.HDCPYDISPLAY @@ -58,33 +64,58 @@ \DSPYPOSITION.HDCPYDISPLAY \STRINGWIDTH.HDCPYDISPLAY \STRINGWIDTH.HCPYDISPLAYAUX \HDCPYBLTCHAR \HDCPYDISPLAY.FIX.XPOS \HDCPYDISPLAY.FIX.YPOS \HDCPYDISPLAYINIT \HDCPYDSPPRINTCHAR \SLOWHDCPYBLTCHAR \CHANGECHARSET.HDCPYDISPLAY) - [DECLARE%: DONTCOPY DOEVAL@COMPILE (EXPORT (CONSTANTS (MICASPERPT (FQUOTIENT 2540 72)) - (IHALFMICASPERPT 17) - (IMICASPERPT 35) - (DEFAULTTAB 36] - (* ; "screen-points: 1/2 inch") - (DECLARE%: DONTCOPY DOEVAL@COMPILE (EXPORT (FUNCTIONS \MICASTOPTS))) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\HDCPYDISPLAYINIT] - [COMS (* ; + (DECLARE%: DONTCOPY DOEVAL@COMPILE (EXPORT (MACROS \MICASTOPTS] + (COMS (* ;  "Stuff to support MICA-unit hardcopy streams on the display") - (FNS MAKEHARDCOPYMODESTREAM UNMAKEHARDCOPYMODESTREAM \BLTSHADE.HCPYMODE - \BITBLT.HCPYMODE \BRUSHCONVERT.HCPYMODE \CHANGECHARSET.HCPYMODE + (FNS MAKEHARDCOPYMODESTREAM UNMAKEHARDCOPYMODESTREAM \HCPYDISPLAYIMAGEOPS + \BLTSHADE.HCPYMODE \BITBLT.HCPYMODE \BRUSHCONVERT.HCPYMODE \CHANGECHARSET.HCPYMODE \DASHINGCONVERT.HCPYMODE \CHARWIDTH.HCPYMODE \DRAWLINE.HCPYMODE \DRAWCURVE.HCPYMODE \DRAWCIRCLE.HCPYMODE \DRAWELLIPSE.HCPYMODE \DSPFONT.HCPYMODE \DSPLEFTMARGIN.HCPYMODE \DSPLINEFEED.HCPYMODE \DSPRIGHTMARGIN.HCPYMODE \DSPSPACEFACTOR.HCPYMODE \DSPXPOSITION.HCPYMODE \DSPYPOSITION.HCPYMODE - \MOVETO.HCPYMODE \FONTCREATE.HCPYMODE.PRESS \CREATECHARSET.HCPYMODE.PRESS - \FONTCREATE.HCPYMODE.INTERPRESS \CREATECHARSET.HCPYMODE.INTERPRESS - \STRINGWIDTH.HCPYMODE \HCPYMODEBLTCHAR \HCPYMODEDISPLAYINIT \HCPYMODEDSPPRINTCHAR - \SLOWHCPYMODEBLTCHAR \SFFixY.HCPYMODE) - [ADDVARS (IMAGESTREAMTYPES (PRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE.PRESS) - (CREATECHARSET \CREATECHARSET.HCPYMODE.PRESS)) - (INTERPRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE.INTERPRESS) - (CREATECHARSET \CREATECHARSET.HCPYMODE.INTERPRESS] - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\HCPYMODEDISPLAYINIT] + \MOVETO.HCPYMODE \FONTCREATE.HCPYMODE \CREATECHARSET.HCPYMODE + \STRINGWIDTH.HCPYMODE \HCPYMODEBLTCHAR \HCPYMODEDSPPRINTCHAR \SLOWHCPYMODEBLTCHAR + \SFFixY.HCPYMODE)) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA]) +(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE + +(RPAQQ MICASPERINCH 2540) + +(RPAQQ PTSPERINCH 72) + +(RPAQ MICASPERPT (FQUOTIENT MICASPERINCH PTSPERINCH)) + +(RPAQ IHALFMICASPERPT (FIX (FQUOTIENT MICASPERPT 2))) + +(RPAQ IMICASPERPT (FIX MICASPERPT)) + +(RPAQ PTSPERCM (FQUOTIENT PTSPERINCH 2.54)) + +(RPAQ PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) + +(RPAQQ PTSPERPICA 12) + +(RPAQ PICASPERINCH (QUOTIENT PTSPERINCH PTSPERPICA)) + +(RPAQ DEFAULTTAB (IQUOTIENT PTSPERINCH 2)) + + +(CONSTANTS (MICASPERINCH 2540) + (PTSPERINCH 72) + (MICASPERPT (FQUOTIENT MICASPERINCH PTSPERINCH)) + (IHALFMICASPERPT (FIX (FQUOTIENT MICASPERPT 2))) + (IMICASPERPT (FIX MICASPERPT)) + (PTSPERCM (FQUOTIENT PTSPERINCH 2.54)) + (PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) + (PTSPERPICA 12) + (PICASPERINCH (QUOTIENT PTSPERINCH PTSPERPICA)) + (DEFAULTTAB (IQUOTIENT PTSPERINCH 2))) +) + +(* "END EXPORTED DEFINITIONS") + @@ -370,26 +401,25 @@ (MENU (MakeMenuOfPrinters "Which printer?"]) (GetImageFile - [LAMBDA (W) (* ; "Edited 27-Apr-98 16:44 by rmk:") + [LAMBDA (W) (* ; "Edited 10-Sep-2025 14:50 by rmk") + (* ; "Edited 27-Apr-98 16:44 by rmk:") (* ; "Edited 18-Jan-96 11:17 by ") (* ; "Edited 17-Jan-96 10:42 by rmk") (PROG (FILE PRINTFILETYPE FILETYPEMENU) (* ;; "Strip candidate version so overwrites must be explicitly indicated each time. Use previous file as candidate, and if no previous one, apply function associated with the window to the window and the extension associated with the defaultprinting host. Such a function on a TEDIT window, for example, could suggest the image-type file named after the underlying TEDIT file.") - [SETQ FILE - (PopUpWindowAndGetAtom - "File name (Clear to abort): " - (OR [AND (WINDOWPROP W 'HARDCOPYFILE) - (PACKFILENAME 'VERSION NIL 'BODY (WINDOWPROP W 'HARDCOPYFILE] - (AND (WINDOWPROP W 'HARDCOPYFILEFN) - (APPLY* (WINDOWPROP W 'HARDCOPYFILEFN) - W - (CAR (MKLIST (CADR (ASSOC 'EXTENSION - (CDR (ASSOC (OR (CADDR (LISTP (DEFAULTPRINTER)) - ) - (PRINTERTYPE)) - PRINTFILETYPES] + [SETQ FILE (PopUpWindowAndGetAtom + "File name (Clear to abort): " + (OR [AND (WINDOWPROP W 'HARDCOPYFILE) + (PACKFILENAME 'VERSION NIL 'BODY (WINDOWPROP W 'HARDCOPYFILE] + (AND (WINDOWPROP W 'HARDCOPYFILEFN) + (APPLY* (WINDOWPROP W 'HARDCOPYFILEFN) + W + (CAR (EXTENSIONS.FOR.PRINTFILETYPE (OR (CADDR (LISTP ( + DEFAULTPRINTER + ))) + (PRINTERTYPE] (CL:UNLESS (AND FILE (SETQ FILE (OUTFILEP FILE))) (* ; "Keep directory etc for reuse") (RETURN)) (WINDOWPROP W 'HARDCOPYFILE FILE) (* ; @@ -419,10 +449,11 @@ (DEFINEQ -(ExtensionForPrintFileType - [LAMBDA (TYPE) (* ; "Edited 26-Aug-87 14:11 by Snow") +(EXTENSIONS.FOR.PRINTFILETYPE + [LAMBDA (TYPE) (* ; "Edited 10-Sep-2025 14:43 by rmk") + (* ; "Edited 26-Aug-87 14:11 by Snow") (DECLARE (GLOBALVARS PRINTFILETYPES)) - (CAADR (ASSOC 'EXTENSION (CDR (ASSOC TYPE PRINTFILETYPES]) + (CAR (MKLIST (GETMULTI PRINTFILETYPES TYPE 'EXTENSION]) (PRINTFILETYPE.FROM.EXTENSION [LAMBDA (FILE) (* ; "Edited 26-Aug-87 14:11 by Snow") @@ -798,83 +829,82 @@ (DEFINEQ (PRINTERDEVICE - [LAMBDA (NAME) (* ; "Edited 5-Dec-96 11:23 by rmk:") + [LAMBDA (NAME) (* ; "Edited 11-Sep-2025 12:40 by rmk") + (* ; "Edited 5-Dec-96 11:23 by rmk:") (* ; "Edited 4-Dec-86 16:32 by hdj") - (* ;; "This defines an LPT device. An LPT file is a file that gets sent to printer and deleted when it is closed. This must be defined on a CORE device only because we have no way of inheriting the previous CLOSEFILE function that this function is replacing but needs to call internally. We have \CORE.CLOSEFILE explicit in this code.") + (* ;; "This defines an LPT device. An LPT file is a file that gets sent to printer and deleted when it is closed. This must be defined on a CORE device only because we have no way of inheriting the previous CLOSEFILE function that this function is replacing but needs to call internally. PRINTERDEVICE.CLOSEFN calls\CORE.CLOSEFILE explicitly.") (LET ((DEV (\CREATECOREDEVICE NAME))) - [replace (FDEV OPENFILE) of DEV - with (FUNCTION (LAMBDA (NAME ACCESS RECOG PARAMETERS FDEV OLDSTREAM) - (LET ((STRM (\CORE.OPENFILE NAME ACCESS RECOG PARAMETERS FDEV OLDSTREAM) - )) + (replace (FDEV OPENFILE) of DEV with (FUNCTION PRINTERDEVICE.OPENFN)) + (replace (FDEV CLOSEFILE) of DEV with (FUNCTION PRINTERDEVICE.CLOSEFN)) + (\DEFINEDEVICE NAME DEV) + NAME]) - (* ;; "Mark the original name of the printer on the stream. Unless the user overrides this by changing the PRINTERNAME property, SEND.FILE.TO.PRINTER in the close function will get the user's original spelling, without any case conversions that might otherwise be done by \CORE.OPENFILE. ") +(PRINTERDEVICE.OPENFN + [LAMBDA (NAME ACCESS RECOG PARAMETERS FDEV OLDSTREAM) (* ; "Edited 11-Sep-2025 17:03 by rmk") + (LET [(STRM (\CORE.OPENFILE NAME ACCESS RECOG PARAMETERS FDEV OLDSTREAM)) + (PRINTERNAME (FILENAMEFIELD NAME 'NAME] - (STREAMPROP STRM 'PRINTERNAME (FILENAMEFIELD NAME 'NAME)) - STRM] - [replace (FDEV CLOSEFILE) of DEV - with (FUNCTION (LAMBDA (STREAM) - (LET [(SDEV (fetch (STREAM DEVICE) of STREAM)) - (PRINTOPTIONS (STREAMPROP STREAM 'PRINTOPTIONS] + (* ;; "Mark the original name of the printer on the stream. Unless the user overrides this by changing the PRINTERNAME property, SEND.FILE.TO.PRINTER in the close function will get the user's original spelling, without any case conversions that might otherwise be done by \CORE.OPENFILE. ") - (* ;; - "Get PRINTOPTIONS property before closing the stream, in case the closing throws them away") + (STREAMPROP STRM 'PRINTERNAME (CL:UNLESS (EQ PRINTERNAME '%.) + PRINTERNAME)) + STRM]) - (* ;; "") +(PRINTERDEVICE.CLOSEFN + [LAMBDA (STREAM) (* ; "Edited 11-Sep-2025 12:37 by rmk") + (LET [(SDEV (fetch (STREAM DEVICE) of STREAM)) + (PRINTOPTIONS (STREAMPROP STREAM 'PRINTOPTIONS] - (* ;; "If we could save away and get at the previous CLOSEFILE method (e.g. by an FDEVPROP), this could be replaced by the generic (FDEVOP (QUOTE CLOSEFILE) SDEV STREAM)") + (* ;; + "Get PRINTOPTIONS property before closing the stream, in case the closing throws them away") - (COND - [(AND (NOT RESETSTATE) - (OPENP STREAM 'OUTPUT) - (IGREATERP (GETEOFPTR STREAM) - 0)) + (* ;; "") - (* ;; "Close and send to printer only if open for output. If open for input, then we must already have started printing. Don't close until after getting EOF ptr.") + (* ;; "If we could save away and get at the previous CLOSEFILE method (e.g. by an FDEVPROP), this could be replaced by the generic (FDEVOP (QUOTE CLOSEFILE) SDEV STREAM). We know that SDEV is a CORE device, we call \CORE.CLOSEFILE directly") - (\CORE.CLOSEFILE STREAM) - (replace (STREAM ACCESS) of STREAM with NIL) - (* ; + (COND + [(AND (NOT RESETSTATE) + (OPENP STREAM 'OUTPUT) + (IGREATERP (GETEOFPTR STREAM) + 0)) + + (* ;; "Close and send to printer only if open for output. If open for input, then we must already have started printing. Don't close until after getting EOF ptr.") + + (\CORE.CLOSEFILE STREAM) + (replace (STREAM ACCESS) of STREAM with NIL) (* ;  "Hack, cause this is usually done later in the generic \CLOSEFILE.") - (* ;; "The PRINTERNAME might be marked explicitly on the stream. Otherwise let SEND.FILE.TO.PRINTER choose the host if it is the generic printer LPT, or use the name in the devicename field.") - - (SEND.FILE.TO.PRINTER - STREAM - [IF (STREAMPROP STREAM 'PRINTERNAME) - ELSEIF (NEQ 'LPT (fetch (FDEV DEVICENAME) of SDEV)) - THEN (fetch (FDEV DEVICENAME) of SDEV) - ELSE (LET ((NAME (fetch (STREAM FULLNAME) of STREAM)) - POS POS2) - (AND (SETQ POS (STRPOS "}" NAME)) - (SETQ POS2 (STRPOS "." NAME (ADD1 POS))) - (SUBATOM NAME (ADD1 POS) - (SUB1 POS2] - (APPEND '(DELETE T) - PRINTOPTIONS - '(HEADING T] - (T - - (* ;; "Error while creating the file, if the user had wrapped a RESETLST/CLOSEF around his code. Presumably, he doesn't want the file printed") - - (\CORE.CLOSEFILE STREAM) - (FDEVOP 'DELETEFILE SDEV STREAM SDEV T] - (\DEFINEDEVICE NAME DEV) - NAME]) + (* ;; "The PRINTERNAME might be marked explicitly on the stream. Otherwise let SEND.FILE.TO.PRINTER choose the host if it is the generic printer LPT, or use the name in the devicename field.") + + (SEND.FILE.TO.PRINTER STREAM (IF (STREAMPROP STREAM 'PRINTERNAME) + ELSEIF (NEQ 'LPT (fetch (FDEV DEVICENAME) of SDEV)) + THEN (fetch (FDEV DEVICENAME) of SDEV) + ELSE [LET ((NAME (fetch (STREAM FULLNAME) of STREAM)) + POS POS2) + (AND (SETQ POS (STRPOS "}" NAME)) + (SETQ POS2 (STRPOS "." NAME (ADD1 POS))) + (SUBATOM NAME (ADD1 POS) + (SUB1 POS2] + NIL) + (APPEND '(DELETE T) + PRINTOPTIONS + '(HEADING T] + (T + (* ;; "Error while creating the file, if the user had wrapped a RESETLST/CLOSEF around his code. Presumably, he doesn't want the file printed") + + (\CORE.CLOSEFILE STREAM) + (FDEVOP 'DELETEFILE SDEV STREAM SDEV T]) ) (DECLARE%: DONTEVAL@LOAD DOCOPY (PRINTERDEVICE 'LPT) ) - (* ; "for backward compatibility") - -(MOVD? 'NILL 'PRINTERMODE) - (RPAQ? DEFAULTPRINTINGHOST ) -(RPAQ? DEFAULTPRINTERTYPE 'INTERPRESS) +(RPAQ? DEFAULTPRINTERTYPE 'PDF) (RPAQ? EMPRESS.SCRATCH ) @@ -885,23 +915,27 @@ (GLOBALVARS DEFAULTPRINTINGHOST DEFAULTPRINTERTYPE EMPRESS#SIDES PRINTERTYPES PRINTFILETYPES) ) +(DEFINEQ +(SCALEREGION + [LAMBDA (SCALE REGION) (* rmk%: "21-JUL-82 13:06") + (* ; "Scales a region") + (create REGION + LEFT _ (FIX (FTIMES SCALE (fetch (REGION LEFT) of REGION))) + BOTTOM _ (FIX (FTIMES SCALE (fetch (REGION BOTTOM) of REGION))) + WIDTH _ (FIX (FTIMES SCALE (fetch (REGION WIDTH) of REGION))) + HEIGHT _ (FIX (FTIMES SCALE (fetch (REGION HEIGHT) of REGION]) +) -(* ; "Converting text files to imagestreams") - - -(RPAQ? TEXTDEFAULTTABS (LIST 20320)) - -(RPAQ? TEXTDEFAULTPAGEREGION (CREATEREGION 2794 1905 18415 24765)) - +(* ; "Converting text files to imagestreams") -(* ; "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches. NOT USED ANYWHERE") +(RPAQ? TEXTDEFAULTPAGEREGION (SCALEREGION MICASPERINCH (CREATEREGION 1.1 0.75 7.25 9.75))) (DECLARE%: DOEVAL@COMPILE DONTCOPY -(GLOBALVARS TEXTDEFAULTTABS TEXTDEFAULTPAGEREGION) +(GLOBALVARS TEXTDEFAULTPAGEREGION) ) (DEFINEQ @@ -1031,6 +1065,11 @@ (\OUTCHAR IMAGESTREAM C] (SETFILEINFO INSTRM 'ENDOFSTREAMOP EOSP]) ) + + + +(* ; "hack for printers that can't really BLTSHADE") + (DEFINEQ (\BLTSHADE.GENERICPRINTER @@ -1064,19 +1103,16 @@ -(* ; "hack for printers that can't really BLTSHADE") - - - - (* ; "stuff to support hardcopy streams on the display.") (DEFINEQ (MAKEHARDCOPYSTREAM - [LAMBDA (DISPLAYSTREAM IMAGETYPE) (* ; "Edited 26-Aug-87 14:23 by Snow") + [LAMBDA (DISPLAYSTREAM IMAGETYPE) (* ; "Edited 9-Sep-2025 15:11 by rmk") + (* ; "Edited 26-Aug-87 14:23 by Snow") -(* ;;; "creates a hardcopy stream from a display stream.") +(* ;;; +"creates a hardcopy stream from a display stream. Seems to be called only from SK.SET.HARDCOPY.MODE") (DECLARE (GLOBALVARS \HDCPYDISPLAYIMAGEOPS)) (PROG [(DS (COND @@ -1124,26 +1160,30 @@ (RETURN DS]) (HARDCOPYSTREAMTYPE - [LAMBDA (IMAGESTREAM) (* ; "Edited 26-Aug-87 14:24 by Snow") + [LAMBDA (IMAGESTREAM) (* ; "Edited 9-Sep-2025 13:40 by rmk") + (* ; "Edited 26-Aug-87 14:24 by Snow") -(* ;;; "returns the type of a hard copy stream which is either PRESS or INTERPRESS.") +(* ;;; "returns the type of a hard copy stream.") (LET ((STREAM (\OUTSTREAMARG IMAGESTREAM T))) (AND STREAM (STREAMPROP STREAM 'HARDCOPYIMAGETYPE]) (\CHARWIDTH.HDCPYDISPLAY - [LAMBDA (STREAM CHARCODE) (* ; "Edited 26-Aug-87 14:24 by Snow") + [LAMBDA (STREAM CHARCODE) (* ; "Edited 10-Sep-2025 23:48 by rmk") + (* ; "Edited 26-Aug-87 14:24 by Snow") (* ;  "gets the width of a character code in a hardcopy stream. Should be updated for spacefactor") (IQUOTIENT (IPLUS (\FGETCHARIMAGEWIDTH (FONTCREATE (ffetch (\DISPLAYDATA DDFONT) of (ffetch IMAGEDATA of STREAM)) NIL NIL NIL (STREAMPROP STREAM 'HARDCOPYIMAGETYPE)) CHARCODE) - (CONSTANT IHALFMICASPERPT)) - (CONSTANT IMICASPERPT]) + IHALFMICASPERPT) + IMICASPERPT]) (\DSPFONT.HDCPYDISPLAY - [LAMBDA (HDCPYDSTREAM FONT) (* ; "Edited 12-Jan-88 16:18 by jds") + [LAMBDA (HDCPYDSTREAM FONT) (* ; "Edited 10-Sep-2025 23:48 by rmk") + (* ; "Edited 2-Sep-2025 22:34 by rmk") + (* ; "Edited 12-Jan-88 16:18 by jds") (* ;; "changes the font of a hardcopy display stream. Does what the display does then puts the hardcopy widths where they can be found {FOR NOW USE THE DDCHARIMAGEWIDTHS FIELD}") @@ -1154,10 +1194,9 @@  "For now, use a streamprop instead of a special field in the dispay data") (* ; "Scale widths to printer device units, so we don't have to fetch the constants to scale by for every char we print") (replace DDCHARIMAGEWIDTHS of DD - with (PROG (W OLDWIDTH (SCALE (FONTPROP FD 'SCALE)) - (CSINFO (\GETCHARSETINFO (fetch (STREAM CHARSET) - of HDCPYDSTREAM) - FD))) + with (PROG [W OLDWIDTH (SCALE (FONTPROP FD 'SCALE)) + (CSINFO (\INSURECHARSETINFO FD (fetch (STREAM CHARSET) + of HDCPYDSTREAM] (* ;; "set linefeed from scaled height. This may be off by almost half a pixel per line but it is better than not doing so.") @@ -1166,19 +1205,19 @@ of FD) SCALE] [COND - ((EQP SCALE (CONSTANT MICASPERPT)) + ((EQP SCALE MICASPERPT) (RETURN (fetch (CHARSETINFO WIDTHS) of CSINFO] (SETQ W (\CREATECSINFOELEMENT)) (SETQ OLDWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (SETQ SCALE (FQUOTIENT (CONSTANT MICASPERPT) - SCALE)) + (SETQ SCALE (FQUOTIENT MICASPERPT SCALE)) [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH W I (FIXR (FTIMES (\FGETWIDTH OLDWIDTH I) SCALE] (RETURN W])]) (\DSPRIGHTMARGIN.HDCPYDISPLAY - [LAMBDA (DISPLAYSTREAM XPOSITION) (* ; "Edited 26-Aug-87 14:25 by Snow") + [LAMBDA (DISPLAYSTREAM XPOSITION) (* ; "Edited 10-Sep-2025 23:49 by rmk") + (* ; "Edited 26-Aug-87 14:25 by Snow") (* ;;; "Sets the right margin that determines when a cr is inserted by print for the hardcopy display stream.") @@ -1187,7 +1226,7 @@ (PROG1 (\DSPRIGHTMARGIN.DISPLAY DISPLAYSTREAM XPOSITION) [AND XPOSITION (replace (\DISPLAYDATA DDMICARIGHTMARGIN) of (fetch IMAGEDATA of DISPLAYSTREAM ) - with (FIX (FTIMES XPOSITION (CONSTANT MICASPERPT])]) + with (FIX (FTIMES XPOSITION MICASPERPT])]) (\DSPXPOSITION.HDCPYDISPLAY [LAMBDA (HARDCOPYSTREAM XPOSITION) (* ; "Edited 26-Aug-87 14:25 by Snow") @@ -1202,7 +1241,8 @@ (AND YPOSITION (\HDCPYDISPLAY.FIX.YPOS HARDCOPYSTREAM)))]) (\STRINGWIDTH.HDCPYDISPLAY - [LAMBDA (STREAM STR RDTBL) (* ; "Edited 26-Aug-87 14:25 by Snow") + [LAMBDA (STREAM STR RDTBL) (* ; "Edited 10-Sep-2025 23:49 by rmk") + (* ; "Edited 26-Aug-87 14:25 by Snow") (* ;  "Returns the width of for the current font/spacefactor in hardcopy stream STREAM.") (LET [(HARDCOPYFD (FONTCREATE (ffetch (\DISPLAYDATA DDFONT) of (ffetch IMAGEDATA of STREAM)) @@ -1210,11 +1250,12 @@ (IQUOTIENT (IPLUS (\STRINGWIDTH.GENERIC STR HARDCOPYFD RDTBL (\FGETCHARIMAGEWIDTH HARDCOPYFD (CHARCODE SPACE))) - (CONSTANT IHALFMICASPERPT)) - (CONSTANT IMICASPERPT]) + IHALFMICASPERPT) + IMICASPERPT]) (\STRINGWIDTH.HCPYDISPLAYAUX - [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 3-Apr-87 13:48 by jop") + [LAMBDA (STR FONT RDTBL SPACEWIDTH) (* ; "Edited 2-Sep-2025 22:35 by rmk") + (* ; "Edited 3-Apr-87 13:48 by jop") (* ;; "Returns the width of STR with SPACEWIDTH for the width of spaces. RDTBL has already been coerced, so no FLG is needed") @@ -1232,7 +1273,7 @@ ((NEQ CSET (\CHARSET C)) (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO IMAGEWIDTHS) - of (\GETCHARSETINFO CSET FONT] + of (\INSURECHARSETINFO FONT CSET] (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) @@ -1255,7 +1296,7 @@  "Get the widths vector for this character set") (SETQ CSET (\CHARSET C)) (SETQ WIDTHSBASE (ffetch (CHARSETINFO IMAGEWIDTHS) - of (\GETCHARSETINFO CSET FONT] + of (\INSURECHARSETINFO FONT CSET] (add TOTAL (COND ((EQ C (CHARCODE SPACE)) SPACEWIDTH) @@ -1284,15 +1325,16 @@ (SETQ WIDTHSBASE (ffetch (CHARSETINFO IMAGEWIDTHS ) - of (\GETCHARSETINFO CSET FONT - ))) + of (\INSURECHARSETINFO FONT + CSET))) (\FGETIMAGEWIDTH WIDTHSBASE (\CHAR8CODE CC] STR RDTBL RDTBL *PRINT-LEVEL* *PRINT-LENGTH*) TOTALWIDTH]) (\HDCPYBLTCHAR - [LAMBDA (CHARCODE DISPLAYSTREAM DISPLAYDATA) (* ; "Edited 26-Aug-87 14:26 by Snow") + [LAMBDA (CHARCODE DISPLAYSTREAM DISPLAYDATA) (* ; "Edited 10-Sep-2025 23:49 by rmk") + (* ; "Edited 26-Aug-87 14:26 by Snow") (* ;; "puts a character on a hardcopy display stream. Much of the information needed by the BitBlt microcode is prestored by the routines that change it. This is kept in the BitBltTable.") (* ; @@ -1330,12 +1372,10 @@ (* ;; "update the display stream x position. Make sure that there is at least one point width for each character.") - [freplace DDXPOSITION of DISPLAYDATA with (IMAX (ADD1 CURX) - (IQUOTIENT (IPLUS MICARIGHT (CONSTANT - - IHALFMICASPERPT - )) - (CONSTANT IMICASPERPT] + (freplace DDXPOSITION of DISPLAYDATA with (IMAX (ADD1 CURX) + (IQUOTIENT (IPLUS MICARIGHT IHALFMICASPERPT + ) + IMICASPERPT))) (* ;  "transforms an x coordinate into the destination coordinate.") (SETQ CURX (IPLUS CURX (ffetch DDXOFFSET of DISPLAYDATA))) @@ -1365,29 +1405,32 @@ T]) (\HDCPYDISPLAY.FIX.XPOS - [LAMBDA (HARDCOPYSTREAM) (* ; "Edited 26-Aug-87 14:26 by Snow") + [LAMBDA (HARDCOPYSTREAM) (* ; "Edited 10-Sep-2025 23:49 by rmk") + (* ; "Edited 26-Aug-87 14:26 by Snow") (* ;;; "updates the mica X position from the x position in the display stream. This is called whenever the X position changes in a hardcopy stream.") (PROG ((DD (fetch IMAGEDATA of HARDCOPYSTREAM))) (replace (\DISPLAYDATA DDMICAXPOS) of DD with (FIX (FTIMES (fetch (\DISPLAYDATA DDXPOSITION ) of DD) - (CONSTANT MICASPERPT]) + MICASPERPT]) (\HDCPYDISPLAY.FIX.YPOS - [LAMBDA (HARDCOPYSTREAM) (* ; "Edited 26-Aug-87 14:26 by Snow") + [LAMBDA (HARDCOPYSTREAM) (* ; "Edited 10-Sep-2025 23:49 by rmk") + (* ; "Edited 26-Aug-87 14:26 by Snow") (* ;;; "updates the mica Y position from the Y position in the display stream. This is called whenever the Y position changes in a hardcopy stream.") - (PROG ((DD (fetch IMAGEDATA of HARDCOPYSTREAM))) - (replace (\DISPLAYDATA DDMICAYPOS) of DD with (FIX (FTIMES (fetch (\DISPLAYDATA DDYPOSITION - ) of DD) - (CONSTANT MICASPERPT]) + (LET ((DD (fetch IMAGEDATA of HARDCOPYSTREAM))) + (replace (\DISPLAYDATA DDMICAYPOS) of DD with (FIX (FTIMES (fetch (\DISPLAYDATA DDYPOSITION) + of DD) + MICASPERPT]) (\HDCPYDISPLAYINIT - [LAMBDA NIL (* ; "Edited 26-Aug-87 14:26 by Snow") + [LAMBDA NIL (* ; "Edited 9-Sep-2025 13:42 by rmk") + (* ; "Edited 26-Aug-87 14:26 by Snow") -(* ;;; "Initializes global variables for the hardcopy Display device. This device appears to the user as an INTERPRESS or PRESS device meaning units in micas but outputs to the screen. Much of this code was borrowed from the display case.") +(* ;;; "Initializes global variables for the hardcopy Display device. This device appears to the user as a hardcopy device meaning units in micas but outputs to the screen. Much of this code was borrowed from the display case.") (DECLARE (GLOBALVARS \HDCPYDISPLAYIMAGEOPS)) (SETQ \HDCPYDISPLAYIMAGEOPS (create IMAGEOPS using \DISPLAYIMAGEOPS IMAGETYPE _ @@ -1490,7 +1533,8 @@ (SHOULDNT]) (\SLOWHDCPYBLTCHAR - [LAMBDA (CHARCODE DISPLAYSTREAM) (* ; "Edited 9-Nov-89 14:37 by gadener") + [LAMBDA (CHARCODE DISPLAYSTREAM) (* ; "Edited 2-Sep-2025 22:35 by rmk") + (* ; "Edited 9-Nov-89 14:37 by gadener") (* ;;; "IS THIS CODE JUST GOING TO DUPLICATE AND GET OUT OF SYNC WITH \SLOWBLTCHAR? KBR 1-FEB-86. *") @@ -1554,8 +1598,8 @@ (PROG (YPOS HEIGHTMOVED CSINFO) (SETQ YPOS (ffetch (\DISPLAYDATA DDYPOSITION) of DD)) (SETQ HEIGHTMOVED (\DSPGETCHARWIDTH CHAR8CODE DD)) - (SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) - (ffetch (\DISPLAYDATA DDFONT) of DD))) + (SETQ CSINFO (\INSURECHARSETINFO (ffetch (\DISPLAYDATA DDFONT) of DD) + (\CHARSET CHARCODE))) (COND ((EQ ROTATION 90) (* ; "don't force CR for rotated fonts.") (\DSPYPOSITION.DISPLAY DISPLAYSTREAM (IPLUS YPOS HEIGHTMOVED)) @@ -1586,7 +1630,9 @@ (T (ERROR "Not implemented to rotate by other than 0, 90 or 270"]) (\CHANGECHARSET.HDCPYDISPLAY - [LAMBDA (DISPLAYDATA CHARSET HDCPYDSTREAM) (* ; "Edited 26-Aug-87 14:27 by Snow") + [LAMBDA (DISPLAYDATA CHARSET HDCPYDSTREAM) (* ; "Edited 10-Sep-2025 23:50 by rmk") + (* ; "Edited 2-Sep-2025 22:35 by rmk") + (* ; "Edited 26-Aug-87 14:27 by Snow") (* ;; "Called when the character set information cached in a display stream doesn't correspond to CHARSET Only sets those field that are different from the regular DISPLAY case and uses the regular display case to get the rest.") @@ -1599,14 +1645,13 @@  "Scale widths to micas, so we don't have to fetch the constants to scale by for every char we print") (replace DDCHARIMAGEWIDTHS of DISPLAYDATA with (PROG (W OLDWIDTH (SCALE (FONTPROP FD 'SCALE)) - (CSINFO (\GETCHARSETINFO CHARSET FD))) + (CSINFO (\INSURECHARSETINFO FD CHARSET))) (SETQ OLDWIDTH (fetch (CHARSETINFO WIDTHS) of CSINFO)) (COND - ((EQP SCALE (CONSTANT MICASPERPT)) + ((EQP SCALE MICASPERPT) (RETURN OLDWIDTH))) (SETQ W (\CREATECSINFOELEMENT)) - (SETQ SCALE (FQUOTIENT (CONSTANT MICASPERPT) - SCALE)) + (SETQ SCALE (FQUOTIENT MICASPERPT SCALE)) [for I from 0 to \MAXTHINCHAR do (\FSETWIDTH W I (FIXR (FTIMES (\FGETWIDTH OLDWIDTH I) SCALE] @@ -1615,19 +1660,8 @@ (DECLARE%: DONTCOPY DOEVAL@COMPILE (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE -(RPAQ MICASPERPT (FQUOTIENT 2540 72)) - -(RPAQQ IHALFMICASPERPT 17) - -(RPAQQ IMICASPERPT 35) - -(RPAQQ DEFAULTTAB 36) - - -(CONSTANTS (MICASPERPT (FQUOTIENT 2540 72)) - (IHALFMICASPERPT 17) - (IMICASPERPT 35) - (DEFAULTTAB 36)) +(PUTPROPS \MICASTOPTS MACRO ((MICAS) + (QUOTIENT MICAS MICASPERPT))) ) (* "END EXPORTED DEFINITIONS") @@ -1636,52 +1670,30 @@ -(* ; "screen-points: 1/2 inch") - -(DECLARE%: DONTCOPY DOEVAL@COMPILE -(* "FOLLOWING DEFINITIONS EXPORTED") -(DEFMACRO \MICASTOPTS (MICAS) - [COND - ((NUMBERP MICAS) - (QUOTIENT MICAS MICASPERPT)) - (T `(QUOTIENT ,MICAS MICASPERPT]) - -(* "END EXPORTED DEFINITIONS") - -) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(\HDCPYDISPLAYINIT) -) - - - (* ; "Stuff to support MICA-unit hardcopy streams on the display") (DEFINEQ (MAKEHARDCOPYMODESTREAM - [LAMBDA (DISPLAYSTREAM IMAGETYPE) (* ; "Edited 1-Apr-88 11:25 by jds") + [LAMBDA (DISPLAYSTREAM IMAGETYPE) (* ; "Edited 9-Sep-2025 13:33 by rmk") + (* ; "Edited 1-Apr-88 11:25 by jds") (* ;;; "Creates a hardcopy-mode display stream from a normal one. That stream operates in units of micas, but displays on the screen as usual.") - (DECLARE (GLOBALVARS \HCPYMODEDISPLAYIMAGEOPS.PRESS \HCPYMODEDISPLAYIMAGEOPS.INTERPRESS)) - (PROG [(DS (COND + (CL:UNLESS IMAGETYPE + [SETQ IMAGETYPE (CAR (PRINTERPROP (PRINTERTYPE) + 'CANPRINT]) + (LET* ([DS (COND ((DISPLAYSTREAMP DISPLAYSTREAM)) ((WINDOWP DISPLAYSTREAM) (WINDOWPROP DISPLAYSTREAM 'DSP)) ((NULL DISPLAYSTREAM) (DSPCREATE)) (T (\ILLEGAL.ARG DISPLAYSTREAM] - (SELECTQ [OR IMAGETYPE (SETQ IMAGETYPE (CAR (PRINTERPROP (PRINTERTYPE) - 'CANPRINT] - (PRESS (* ; - "Give the stream PRESS-style imageops, so it will deal with press fonts right.") - (replace (STREAM IMAGEOPS) of DS with \HCPYMODEDISPLAYIMAGEOPS.PRESS)) - (INTERPRESS (* ; - "Give the stream INTERPRESS-style operations, so it will deal with Interpress fonts right.") - (replace (STREAM IMAGEOPS) of DS with \HCPYMODEDISPLAYIMAGEOPS.INTERPRESS)) - NIL) + (IMAGEOPSVAR (PACK* "\HCPYMODEDISPLAYIMAGEOPS." IMAGETYPE))) + (CL:UNLESS (type? IMAGEOPS (GETATOMVAL IMAGEOPSVAR)) + (SETATOMVAL IMAGEOPSVAR (\HCPYDISPLAYIMAGEOPS IMAGETYPE))) + (replace (STREAM IMAGEOPS) of DS with (GETATOMVAL IMAGEOPSVAR)) (STREAMPROP DS 'HARDCOPYIMAGETYPE IMAGETYPE) (* ;  "set the bout fn to one that updates the mica fields and sets the position from them.") (replace (STREAM STRMBOUTFN) of DS with (FUNCTION \HCPYMODEDSPPRINTCHAR)) @@ -1704,38 +1716,75 @@ MICASPERPT)) DS) (* ; "And reuse the right margin") (DSPSPACEFACTOR 1 DS) - (RETURN DS]) + DS]) (UNMAKEHARDCOPYMODESTREAM - [LAMBDA (DISPLAYSTREAM) (* ; "Edited 26-Aug-87 14:28 by Snow") + [LAMBDA (DISPLAYSTREAM) (* ; "Edited 9-Sep-2025 13:29 by rmk") + (* ; "Edited 26-Aug-87 14:28 by Snow") (* ;;; "returns a hardcopy stream to a display stream.") (DECLARE (GLOBALVARS \DISPLAYIMAGEOPS)) - (PROG [(DS (COND - ((DISPLAYSTREAMP DISPLAYSTREAM)) - ((WINDOWP DISPLAYSTREAM) - (WINDOWPROP DISPLAYSTREAM 'DSP)) - (T (\ILLEGAL.ARG DISPLAYSTREAM] - (COND - ((FMEMB 'HARDCOPY (IMAGESTREAMTYPE DS)) (* ; - "Make sure the stream really WAS a hardcopy-mode stream.") - ) - (T (* ; - "It wasn't a hardcopy-mode stream. Don't make any changes") - (RETURN DS))) - (replace (STREAM IMAGEOPS) of DS with \DISPLAYIMAGEOPS) + (LET [(DS (COND + ((DISPLAYSTREAMP DISPLAYSTREAM)) + ((WINDOWP DISPLAYSTREAM) + (WINDOWPROP DISPLAYSTREAM 'DSP)) + (T (\ILLEGAL.ARG DISPLAYSTREAM] + (CL:WHEN (FMEMB 'HARDCOPY (IMAGESTREAMTYPE DS)) + + (* ;; "Do nothing if it's not a hardcopy-mode stream") + + (replace (STREAM IMAGEOPS) of DS with \DISPLAYIMAGEOPS) (* ; "Give it back the usual operations") - (STREAMPROP DS 'HARDCOPYIMAGETYPE NIL) (* ; "restore the bout fn") - (replace (STREAM STRMBOUTFN) of DS with (FUNCTION \DSPPRINTCHAR)) - (replace (STREAM OUTCHARFN) of DS with (FUNCTION \DSPPRINTCHAR)) - (DSPXPOSITION 0 DS) - (DSPYPOSITION 0 DS) - (DSPRIGHTMARGIN (OR (STREAMPROP DISPLAYSTREAM 'DSPRIGHTMARGIN) - (fetch (REGION WIDTH) of (DSPCLIPPINGREGION NIL DS))) - NIL DS) (* ; + (STREAMPROP DS 'HARDCOPYIMAGETYPE NIL) (* ; "restore the bout fn") + (replace (STREAM STRMBOUTFN) of DS with (FUNCTION \DSPPRINTCHAR)) + (replace (STREAM OUTCHARFN) of DS with (FUNCTION \DSPPRINTCHAR)) + (DSPXPOSITION 0 DS) + (DSPYPOSITION 0 DS) + (DSPRIGHTMARGIN (OR (STREAMPROP DISPLAYSTREAM 'DSPRIGHTMARGIN) + (fetch (REGION WIDTH) of (DSPCLIPPINGREGION NIL DS))) + NIL DS)) (* ;  "Reset the right margin back to points") - (RETURN DS]) + DS]) + +(\HCPYDISPLAYIMAGEOPS + [LAMBDA (IMAGETYPE) (* ; "Edited 9-Sep-2025 15:13 by rmk") + + (* ;; "Same code for all types, except for the IMFONTCREATE function (used only for this purpose, or SK.CHOOSE.TEXT.FONT.") + + (* ;; "This assumes a canonical name \[IMAGETYPE]IMAGEOPS for the IMAGEOPS of IMAGETYPE, so that it can get the IMSCALE function.") + + (create IMAGEOPS using \DISPLAYIMAGEOPS IMAGETYPE _ '(HARDCOPY DISPLAY) + IMFONT _ (FUNCTION \DSPFONT.HCPYMODE) + IMRIGHTMARGIN _ (FUNCTION \DSPRIGHTMARGIN.HCPYMODE) + IMLEFTMARGIN _ (FUNCTION \DSPLEFTMARGIN.HCPYMODE) + IMLINEFEED _ (FUNCTION \DSPLINEFEED.HCPYMODE) + IMDRAWLINE _ (FUNCTION \DRAWLINE.HCPYMODE) + IMDRAWCURVE _ (FUNCTION \DRAWCURVE.HCPYMODE) + IMDRAWCIRCLE _ (FUNCTION \DRAWCIRCLE.HCPYMODE) + IMDRAWELLIPSE _ (FUNCTION \DRAWELLIPSE.HCPYMODE) + IMFILLCIRCLE _ (FUNCTION \FILLCIRCLE.HCPYMODE) + IMBLTSHADE _ (FUNCTION \BLTSHADE.HCPYMODE) + IMBITBLT _ (FUNCTION \BITBLT.HCPYMODE) + IMXPOSITION _ (FUNCTION \DSPXPOSITION.HCPYMODE) + IMYPOSITION _ (FUNCTION \DSPYPOSITION.HCPYMODE) + IMMOVETO _ (FUNCTION \MOVETO.HCPYMODE) + IMSTRINGWIDTH _ (FUNCTION \STRINGWIDTH.HCPYMODE) + IMCHARWIDTH _ (FUNCTION \CHARWIDTH.HCPYMODE) + IMFONTCREATE _ (PACK* IMAGETYPE 'DISPLAY) + IMSCALE _ (fetch (IMAGEOPS IMSCALE) of (GETATOMVAL (PACK* "\" IMAGETYPE + "IMAGEOPS"))) + IMNEWPAGE _ [FUNCTION (LAMBDA (STREAM) + (LET ((WINDOW (AND \WINDOWWORLD (WFROMDS STREAM))) + WINDOWFN) + (COND + ([AND WINDOW (SETQ WINDOWFN + (WINDOWPROP WINDOW + 'PAGEFULLFN] + (APPLY* WINDOWFN STREAM)) + (T (PAGEFULLFN STREAM))) + (CLEARW STREAM] + IMSPACEFACTOR _ (FUNCTION \DSPSPACEFACTOR.HCPYMODE]) (\BLTSHADE.HCPYMODE [LAMBDA (TEXTURE STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT OPERATION CLIPPINGREGION) @@ -1772,14 +1821,17 @@ (T BB]) (\CHANGECHARSET.HCPYMODE - [LAMBDA (DISPLAYDATA CHARSET) (* ; "Edited 26-Aug-87 14:29 by Snow") + [LAMBDA (DISPLAYDATA CHARSET) (* ; "Edited 2-Sep-2025 22:36 by rmk") + (* ; "Edited 26-Aug-87 14:29 by Snow") (* ;  "Called when the character set information cached in a display stream doesn't correspond to CHARSET") - (PROG [BM (PBT (ffetch DDPILOTBBT of DISPLAYDATA)) - (CSINFO (\GETCHARSETINFO CHARSET (ffetch DDFONT of DISPLAYDATA))) - (CSDINFO (\GETCHARSETINFO CHARSET (FONTCOPY (ffetch DDFONT of DISPLAYDATA) - 'DEVICE - 'DISPLAY] + (PROG (BM (PBT (ffetch DDPILOTBBT of DISPLAYDATA)) + (CSINFO (\INSURECHARSETINFO (ffetch DDFONT of DISPLAYDATA) + CHARSET)) + (CSDINFO (\INSURECHARSETINFO (FONTCOPY (ffetch DDFONT of DISPLAYDATA) + 'DEVICE + 'DISPLAY) + CHARSET))) (UNINTERRUPTABLY (freplace DDWIDTHSCACHE of DISPLAYDATA with (ffetch (CHARSETINFO WIDTHS) of CSINFO)) (freplace DDOFFSETSCACHE of DISPLAYDATA with (ffetch (CHARSETINFO OFFSETS) of CSINFO)) @@ -1996,115 +2048,68 @@ (\DSPXPOSITION.HCPYMODE STREAM X) (\DSPYPOSITION.HCPYMODE STREAM Y]) -(\FONTCREATE.HCPYMODE.PRESS - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 26-Aug-87 14:36 by Snow") - (* ; - "Create a font descriptor for a display stream that is mimicing an PRESS device") - (PROG* ((DFONT (FONTCREATE FAMILY SIZE FACE ROTATION 'DISPLAY)) - (HFONT (create FONTDESCRIPTOR using (FONTCREATE FAMILY SIZE FACE ROTATION 'PRESS) - FONTCHARSETVECTOR _ (\CREATEFONTCHARSETVECTOR))) - (CS0DINFO (\GETCHARSETINFO \DEFAULTCHARSET DFONT))) - (replace FONTDEVICE of HFONT with 'PRESSDISPLAY) - [replace OTHERDEVICEFONTPROPS of HFONT with (LIST 'WIDTHS (fetch (CHARSETINFO WIDTHS) - of CS0DINFO) - 'ASCENT - (fetch (CHARSETINFO CHARSETASCENT) - of CS0DINFO) - 'DESCENT - (fetch (CHARSETINFO CHARSETDESCENT) - of CS0DINFO) - 'HEIGHT - (IPLUS (fetch (CHARSETINFO CHARSETASCENT - ) of CS0DINFO) - (fetch (CHARSETINFO - CHARSETDESCENT) - of CS0DINFO] - - (* ;; "Cache the DISPLAY info, for the various X- and Y-position updating tasks that affect the display bitmap itself") - - (RETURN HFONT]) - -(\CREATECHARSET.HCPYMODE.PRESS - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC)(* ; "Edited 26-Aug-87 14:36 by Snow") - (* ; - "Build the CHARSETINFO for an PRESSDISPLAY font") - (PROG* ((DFONT (FONTCREATE FAMILY SIZE FACE ROTATION 'DISPLAY)) - (HFONT (FONTCREATE FAMILY SIZE FACE ROTATION 'PRESS)) - (CSDINFO (\GETCHARSETINFO CHARSET DFONT)) - (CSHINFO (\GETCHARSETINFO CHARSET HFONT)) - (CSINFO (CREATE CHARSETINFO USING CSHINFO))) - (replace (CHARSETINFO OFFSETS) of CSINFO with (fetch (CHARSETINFO OFFSETS) of CSDINFO)) +(\FONTCREATE.HCPYMODE + [LAMBDA (FONTSPEC) (* ; "Edited 2-Sep-2025 22:37 by rmk") + (* ; "Edited 26-Aug-87 14:36 by Snow") + +(* ;;; "Create a font descriptor for a display stream that is mimicing a hardcopy device") + + (LET* ((DFONT (FONTCREATE FONTSPEC NIL NIL NIL 'DISPLAY)) + (HFONT (create FONTDESCRIPTOR using (FONTCREATE FONTSPEC) + FONTCHARSETVECTOR _ (\CREATEFONTCHARSETVECTOR))) + (CS0DINFO (\INSURECHARSETINFO DFONT \DEFAULTCHARSET))) + [replace OTHERDEVICEFONTPROPS of HFONT with (LIST 'WIDTHS (fetch (CHARSETINFO WIDTHS) + of CS0DINFO) + 'ASCENT + (fetch (CHARSETINFO CHARSETASCENT) + of CS0DINFO) + 'DESCENT + (fetch (CHARSETINFO CHARSETDESCENT) + of CS0DINFO) + 'HEIGHT + (IPLUS (fetch (CHARSETINFO CHARSETASCENT) + of CS0DINFO) + (fetch (CHARSETINFO CHARSETDESCENT + ) of CS0DINFO] + + (* ;; "Cache the DISPLAY info, for the various X- and Y-position updating tasks that affect the display bitmap itself") + + HFONT]) + +(\CREATECHARSET.HCPYMODE + [LAMBDA (FONTSPEC FONT CHARSET) (* ; "Edited 9-Sep-2025 15:26 by rmk") + (* ; "Edited 2-Sep-2025 22:37 by rmk") + (* ; "Edited 26-Aug-87 14:37 by Snow") + +(* ;;; "Build the CHARSETINFO for a hardcopy display font, corresponding to the FONTSPEC's FSDEVICE.") + + (LET* ((DFONT (FONTCREATE FONTSPEC NIL NIL NIL 'DISPLAY)) + (HFONT (FONTCREATE FONTSPEC)) + (CSDINFO (\INSURECHARSETINFO DFONT CHARSET)) + (CSHINFO (\INSURECHARSETINFO HFONT CHARSET)) + (CSINFO (CREATE CHARSETINFO USING CSHINFO))) + (replace (CHARSETINFO OFFSETS) of CSINFO with (fetch (CHARSETINFO OFFSETS) of CSDINFO)) (* ;  "Fill in the right offsets from the display font--into the hcpy font, and its Charset-0 info block") - (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with (fetch (CHARSETINFO CHARSETBITMAP) - of CSDINFO)) + (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with (fetch (CHARSETINFO CHARSETBITMAP) + of CSDINFO)) (* ; "Likewise the character rasters") - (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO IMAGEWIDTHS) - of CSDINFO)) + (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO IMAGEWIDTHS) + of CSDINFO)) (* ;  "And the raster widths (as distinct from the nominal mica widths)") - (RETURN CSINFO]) - -(\FONTCREATE.HCPYMODE.INTERPRESS - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE) (* ; "Edited 26-Aug-87 14:36 by Snow") - -(* ;;; "Create a font descriptor for a display stream that is mimicing an INTERPRESS device") - - (PROG* ((DFONT (FONTCREATE FAMILY SIZE FACE ROTATION 'DISPLAY)) - (HFONT (create FONTDESCRIPTOR using (FONTCREATE FAMILY SIZE FACE ROTATION 'INTERPRESS) - FONTCHARSETVECTOR _ (\CREATEFONTCHARSETVECTOR))) - (CS0DINFO (\GETCHARSETINFO \DEFAULTCHARSET DFONT))) - (replace FONTDEVICE of HFONT with 'INTERPRESSDISPLAY) - [replace OTHERDEVICEFONTPROPS of HFONT with (LIST 'WIDTHS (fetch (CHARSETINFO WIDTHS) - of CS0DINFO) - 'ASCENT - (fetch (CHARSETINFO CHARSETASCENT) - of CS0DINFO) - 'DESCENT - (fetch (CHARSETINFO CHARSETDESCENT) - of CS0DINFO) - 'HEIGHT - (IPLUS (fetch (CHARSETINFO CHARSETASCENT - ) of CS0DINFO) - (fetch (CHARSETINFO - CHARSETDESCENT) - of CS0DINFO] - - (* ;; "Cache the DISPLAY info, for the various X- and Y-position updating tasks that affect the display bitmap itself") - - (RETURN HFONT]) - -(\CREATECHARSET.HCPYMODE.INTERPRESS - [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHARSET FONTDESC)(* ; "Edited 26-Aug-87 14:37 by Snow") - -(* ;;; "Build the CHARSETINFO for an INTERPRESSDISPLAY font") - - (PROG* ((DFONT (FONTCREATE FAMILY SIZE FACE ROTATION 'DISPLAY)) - (HFONT (FONTCREATE FAMILY SIZE FACE ROTATION 'INTERPRESS)) - (CSDINFO (\GETCHARSETINFO CHARSET DFONT)) - (CSHINFO (\GETCHARSETINFO CHARSET HFONT)) - (CSINFO (CREATE CHARSETINFO USING CSHINFO))) - (replace (CHARSETINFO OFFSETS) of CSINFO with (fetch (CHARSETINFO OFFSETS) of CSDINFO)) - (* ; - "Fill in the right offsets from the display font--into the hcpy font, and its Charset-0 info block") - (replace (CHARSETINFO CHARSETBITMAP) of CSINFO with (fetch (CHARSETINFO CHARSETBITMAP) - of CSDINFO)) - (* ; "Likewise the character rasters") - (replace (CHARSETINFO IMAGEWIDTHS) of CSINFO with (fetch (CHARSETINFO IMAGEWIDTHS) - of CSDINFO)) - (* ; - "And the raster widths (as distinct from the nominal mica widths)") - (RETURN CSINFO]) + CSINFO]) (\STRINGWIDTH.HCPYMODE - [LAMBDA (STREAM STR RDTBL) (* ; "Edited 26-Aug-87 14:38 by Snow") + [LAMBDA (STREAM STR RDTBL) (* ; "Edited 10-Sep-2025 23:50 by rmk") + (* ; "Edited 26-Aug-87 14:38 by Snow") (* ;  "Returns the width of for the current font/spacefactor in hardcopy stream STREAM.") (LET [(WIDTHSBASE (ffetch (\DISPLAYDATA DDCHARIMAGEWIDTHS) of (ffetch IMAGEDATA of STREAM] (IQUOTIENT (IPLUS (\STRINGWIDTH.GENERIC STR WIDTHSBASE RDTBL (\FGETWIDTH WIDTHSBASE (CHARCODE SPACE))) - (CONSTANT IHALFMICASPERPT)) - (CONSTANT IMICASPERPT]) + IHALFMICASPERPT) + IMICASPERPT]) (\HCPYMODEBLTCHAR [LAMBDA (CHARCODE DISPLAYSTREAM DISPLAYDATA) (* ; "Edited 1-Apr-88 11:35 by jds") @@ -2187,98 +2192,6 @@ ) T]) -(\HCPYMODEDISPLAYINIT - [LAMBDA NIL (* ; "Edited 1-Apr-88 11:36 by jds") - -(* ;;; "Initializes global variables for the hardcopy Display device. This device appears to the user as an INTERPRESS or PRESS device meaning units in micas but outputs to the screen. Much of this code was borrowed from the display case.") - - (DECLARE (GLOBALVARS \HCPYMODEDISPLAYIMAGEOPS.PRESS \HCPYMODEDISPLAYIMAGEOPS.INTERPRESS)) - (SETQ \HCPYMODEDISPLAYIMAGEOPS.PRESS (create IMAGEOPS - using \DISPLAYIMAGEOPS IMAGETYPE _ '(HARDCOPY DISPLAY) - IMFONT _ (FUNCTION \DSPFONT.HCPYMODE) - IMRIGHTMARGIN _ (FUNCTION \DSPRIGHTMARGIN.HCPYMODE) - IMLEFTMARGIN _ (FUNCTION \DSPLEFTMARGIN.HCPYMODE) - IMLINEFEED _ (FUNCTION \DSPLINEFEED.HCPYMODE) - IMDRAWLINE _ (FUNCTION \DRAWLINE.HCPYMODE) - IMDRAWCURVE _ (FUNCTION \DRAWCURVE.HCPYMODE) - IMDRAWCIRCLE _ (FUNCTION \DRAWCIRCLE.HCPYMODE) - IMDRAWELLIPSE _ (FUNCTION \DRAWELLIPSE.HCPYMODE) - IMFILLCIRCLE _ (FUNCTION \FILLCIRCLE.HCPYMODE) - IMBLTSHADE _ (FUNCTION \BLTSHADE.HCPYMODE) - IMBITBLT _ (FUNCTION \BITBLT.HCPYMODE) - IMXPOSITION _ (FUNCTION \DSPXPOSITION.HCPYMODE) - IMYPOSITION _ (FUNCTION \DSPYPOSITION.HCPYMODE) - IMMOVETO _ (FUNCTION \MOVETO.HCPYMODE) - IMSTRINGWIDTH _ (FUNCTION \STRINGWIDTH.HCPYMODE) - IMCHARWIDTH _ (FUNCTION \CHARWIDTH.HCPYMODE) - IMFONTCREATE _ (FUNCTION PRESSDISPLAY) - IMSCALE _ [FUNCTION (LAMBDA NIL - (CONSTANT (FQUOTIENT - MICASPERINCH - 72] - IMNEWPAGE _ - [FUNCTION (LAMBDA (STREAM) - (LET ((WINDOW (AND \WINDOWWORLD - (WFROMDS STREAM))) - WINDOWFN) - (COND - ([AND WINDOW - (SETQ WINDOWFN - (WINDOWPROP WINDOW - 'PAGEFULLFN] - (APPLY* WINDOWFN STREAM)) - (T (PAGEFULLFN STREAM))) - (CLEARW STREAM] - IMSPACEFACTOR _ (FUNCTION \DSPSPACEFACTOR.HCPYMODE) - )) - (SETQ \HCPYMODEDISPLAYIMAGEOPS.INTERPRESS (create IMAGEOPS - using \DISPLAYIMAGEOPS IMAGETYPE _ - '(HARDCOPY DISPLAY) - IMFONT _ (FUNCTION \DSPFONT.HCPYMODE) - IMRIGHTMARGIN _ (FUNCTION - \DSPRIGHTMARGIN.HCPYMODE) - IMLEFTMARGIN _ (FUNCTION - \DSPLEFTMARGIN.HCPYMODE) - IMLINEFEED _ (FUNCTION \DSPLINEFEED.HCPYMODE) - IMDRAWLINE _ (FUNCTION \DRAWLINE.HCPYMODE) - IMDRAWCURVE _ (FUNCTION \DRAWCURVE.HCPYMODE) - IMDRAWCIRCLE _ (FUNCTION \DRAWCIRCLE.HCPYMODE) - IMDRAWELLIPSE _ (FUNCTION - \DRAWELLIPSE.HCPYMODE) - IMFILLCIRCLE _ (FUNCTION \FILLCIRCLE.HCPYMODE) - IMBLTSHADE _ (FUNCTION \BLTSHADE.HCPYMODE) - IMBITBLT _ (FUNCTION \BITBLT.HCPYMODE) - IMXPOSITION _ (FUNCTION \DSPXPOSITION.HCPYMODE - ) - IMYPOSITION _ (FUNCTION \DSPYPOSITION.HCPYMODE - ) - IMMOVETO _ (FUNCTION \MOVETO.HCPYMODE) - IMSTRINGWIDTH _ (FUNCTION - \STRINGWIDTH.HCPYMODE) - IMCHARWIDTH _ (FUNCTION \CHARWIDTH.HCPYMODE) - IMFONTCREATE _ (FUNCTION INTERPRESSDISPLAY) - IMSCALE _ [FUNCTION (LAMBDA NIL - (CONSTANT (FQUOTIENT - MICASPERINCH - 72] - IMNEWPAGE _ - [FUNCTION (LAMBDA (STREAM) - (LET - ((WINDOW (AND \WINDOWWORLD - (WFROMDS STREAM))) - WINDOWFN) - (COND - ([AND WINDOW - (SETQ WINDOWFN - (WINDOWPROP - WINDOW - 'PAGEFULLFN] - (APPLY* WINDOWFN STREAM)) - (T (PAGEFULLFN STREAM))) - (CLEARW STREAM] - IMSPACEFACTOR _ (FUNCTION - \DSPSPACEFACTOR.HCPYMODE]) - (\HCPYMODEDSPPRINTCHAR [LAMBDA (STREAM CHARCODE) (* ; "Edited 26-Aug-87 14:39 by Snow") @@ -2365,7 +2278,8 @@ (SHOULDNT]) (\SLOWHCPYMODEBLTCHAR - [LAMBDA (CHARCODE DISPLAYSTREAM) (* ; "Edited 26-Aug-87 14:39 by Snow") + [LAMBDA (CHARCODE DISPLAYSTREAM) (* ; "Edited 2-Sep-2025 22:37 by rmk") + (* ; "Edited 26-Aug-87 14:39 by Snow") (* ;;; "IS THIS CODE JUST GOING TO DUPLICATE AND GET OUT OF SYNC WITH \SLOWBLTCHAR? KBR 1-FEB-86. *") @@ -2429,8 +2343,8 @@ (PROG (YPOS HEIGHTMOVED CSINFO) (SETQ YPOS (ffetch (\DISPLAYDATA DDYPOSITION) of DD)) (SETQ HEIGHTMOVED (\DSPGETCHARWIDTH CHAR8CODE DD)) - (SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) - (ffetch (\DISPLAYDATA DDFONT) of DD))) + (SETQ CSINFO (\INSURECHARSETINFO (ffetch (\DISPLAYDATA DDFONT) of DD) + (\CHARSET CHARCODE))) (COND ((EQ ROTATION 90) (* ; "don't force CR for rotated fonts.") (\DSPYPOSITION.DISPLAY DISPLAYSTREAM (IPLUS YPOS HEIGHTMOVED)) @@ -2501,15 +2415,6 @@ (ffetch DDClippingBottom of DISPLAYDATA))) 0]) ) - -(ADDTOVAR IMAGESTREAMTYPES (PRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE.PRESS) - (CREATECHARSET \CREATECHARSET.HCPYMODE.PRESS)) - (INTERPRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE.INTERPRESS) - (CREATECHARSET \CREATECHARSET.HCPYMODE.INTERPRESS))) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(\HCPYMODEDISPLAYINIT) -) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) @@ -2519,40 +2424,40 @@ (ADDTOVAR LAMA ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (6233 12071 (HARDCOPY.SOMEHOW 6243 . 7609) (HARDCOPYIMAGEW 7611 . 7832) ( -HARDCOPYIMAGEW.TOFILE 7834 . 8142) (HARDCOPYIMAGEW.TOPRINTER 8144 . 9391) (HARDCOPYREGION.TOFILE 9393 - . 9935) (HARDCOPYREGION.TOPRINTER 9937 . 11050) (COPY.WINDOW.TO.BITMAP 11052 . 12069)) (12143 23930 ( -MakeMenuOfPrinters 12153 . 13685) (PRINTERS.WHENSELECTEDFN 13687 . 15310) (MakeMenuOfImageTypes 15312 - . 16131) (GetNewPrinterFromUser 16133 . 16575) (PopUpWindowAndGetAtom 16577 . 18028) ( -PopUpWindowAndGetList 18030 . 19600) (NewPrinter 19602 . 21101) (GetPrinterName 21103 . 21391) ( -GetImageFile 21393 . 23678) (FetchDefaultPrinter 23680 . 23928)) (23965 24730 ( -ExtensionForPrintFileType 23975 . 24222) (PRINTFILETYPE.FROM.EXTENSION 24224 . 24728)) (24785 45169 ( -DEFAULTPRINTER 24795 . 25035) (CAN.PRINT.DIRECTLY 25037 . 25233) (CONVERT.FILE.TO.TYPE.FOR.PRINTER -25235 . 26972) (EMPRESS 26974 . 27549) (HARDCOPYW 27551 . 32553) (LISTFILES1 32555 . 32732) ( -PRINTER.BITMAPFILE 32734 . 33123) (PRINTER.BITMAPSCALE 33125 . 33609) (PRINTER.SCRATCH.FILE 33611 . -33781) (PRINTERPROP 33783 . 34033) (PRINTERSTATUS 34035 . 34310) (PRINTERTYPE 34312 . 36882) ( -PRINTERNAME 36884 . 37305) (PRINTFILEPROP 37307 . 37563) (PRINTFILETYPE 37565 . 39521) ( -\EXPECTED.FILE.TYPE 39523 . 40313) (SEND.FILE.TO.PRINTER 40315 . 45167)) (45170 49789 (PRINTERDEVICE -45180 . 49787)) (50624 58869 (TEXTTOIMAGEFILE 50634 . 52830) (COPY.TEXT.TO.IMAGE 52832 . 58867)) ( -58870 60613 (\BLTSHADE.GENERICPRINTER 58880 . 60611)) (60741 96742 (MAKEHARDCOPYSTREAM 60751 . 62303) -(UNMAKEHARDCOPYSTREAM 62305 . 63235) (HARDCOPYSTREAMTYPE 63237 . 63571) (\CHARWIDTH.HDCPYDISPLAY 63573 - . 64305) (\DSPFONT.HDCPYDISPLAY 64307 . 67019) (\DSPRIGHTMARGIN.HDCPYDISPLAY 67021 . 67777) ( -\DSPXPOSITION.HDCPYDISPLAY 67779 . 68154) (\DSPYPOSITION.HDCPYDISPLAY 68156 . 68531) ( -\STRINGWIDTH.HDCPYDISPLAY 68533 . 69400) (\STRINGWIDTH.HCPYDISPLAYAUX 69402 . 74624) (\HDCPYBLTCHAR -74626 . 79618) (\HDCPYDISPLAY.FIX.XPOS 79620 . 80278) (\HDCPYDISPLAY.FIX.YPOS 80280 . 80938) ( -\HDCPYDISPLAYINIT 80940 . 82533) (\HDCPYDSPPRINTCHAR 82535 . 88448) (\SLOWHDCPYBLTCHAR 88450 . 94954) -(\CHANGECHARSET.HDCPYDISPLAY 94956 . 96740)) (97243 97384 (\MICASTOPTS 97243 . 97384)) (97555 156213 ( -MAKEHARDCOPYMODESTREAM 97565 . 100598) (UNMAKEHARDCOPYMODESTREAM 100600 . 102361) (\BLTSHADE.HCPYMODE -102363 . 103029) (\BITBLT.HCPYMODE 103031 . 103779) (\BRUSHCONVERT.HCPYMODE 103781 . 104330) ( -\CHANGECHARSET.HCPYMODE 104332 . 107427) (\DASHINGCONVERT.HCPYMODE 107429 . 107770) ( -\CHARWIDTH.HCPYMODE 107772 . 108209) (\DRAWLINE.HCPYMODE 108211 . 108740) (\DRAWCURVE.HCPYMODE 108742 - . 109329) (\DRAWCIRCLE.HCPYMODE 109331 . 109816) (\DRAWELLIPSE.HCPYMODE 109818 . 110502) ( -\DSPFONT.HCPYMODE 110504 . 113188) (\DSPLEFTMARGIN.HCPYMODE 113190 . 113932) (\DSPLINEFEED.HCPYMODE -113934 . 114567) (\DSPRIGHTMARGIN.HCPYMODE 114569 . 115637) (\DSPSPACEFACTOR.HCPYMODE 115639 . 116414) - (\DSPXPOSITION.HCPYMODE 116416 . 117434) (\DSPYPOSITION.HCPYMODE 117436 . 118086) (\MOVETO.HCPYMODE -118088 . 118302) (\FONTCREATE.HCPYMODE.PRESS 118304 . 120441) (\CREATECHARSET.HCPYMODE.PRESS 120443 . -122065) (\FONTCREATE.HCPYMODE.INTERPRESS 122067 . 124141) (\CREATECHARSET.HCPYMODE.INTERPRESS 124143 - . 125665) (\STRINGWIDTH.HCPYMODE 125667 . 126374) (\HCPYMODEBLTCHAR 126376 . 132126) ( -\HCPYMODEDISPLAYINIT 132128 . 140260) (\HCPYMODEDSPPRINTCHAR 140262 . 146196) (\SLOWHCPYMODEBLTCHAR -146198 . 152715) (\SFFixY.HCPYMODE 152717 . 156211))))) + (FILEMAP (NIL (6508 12346 (HARDCOPY.SOMEHOW 6518 . 7884) (HARDCOPYIMAGEW 7886 . 8107) ( +HARDCOPYIMAGEW.TOFILE 8109 . 8417) (HARDCOPYIMAGEW.TOPRINTER 8419 . 9666) (HARDCOPYREGION.TOFILE 9668 + . 10210) (HARDCOPYREGION.TOPRINTER 10212 . 11325) (COPY.WINDOW.TO.BITMAP 11327 . 12344)) (12418 24340 + (MakeMenuOfPrinters 12428 . 13960) (PRINTERS.WHENSELECTEDFN 13962 . 15585) (MakeMenuOfImageTypes +15587 . 16406) (GetNewPrinterFromUser 16408 . 16850) (PopUpWindowAndGetAtom 16852 . 18303) ( +PopUpWindowAndGetList 18305 . 19875) (NewPrinter 19877 . 21376) (GetPrinterName 21378 . 21666) ( +GetImageFile 21668 . 24088) (FetchDefaultPrinter 24090 . 24338)) (24375 25249 ( +EXTENSIONS.FOR.PRINTFILETYPE 24385 . 24741) (PRINTFILETYPE.FROM.EXTENSION 24743 . 25247)) (25304 45688 + (DEFAULTPRINTER 25314 . 25554) (CAN.PRINT.DIRECTLY 25556 . 25752) (CONVERT.FILE.TO.TYPE.FOR.PRINTER +25754 . 27491) (EMPRESS 27493 . 28068) (HARDCOPYW 28070 . 33072) (LISTFILES1 33074 . 33251) ( +PRINTER.BITMAPFILE 33253 . 33642) (PRINTER.BITMAPSCALE 33644 . 34128) (PRINTER.SCRATCH.FILE 34130 . +34300) (PRINTERPROP 34302 . 34552) (PRINTERSTATUS 34554 . 34829) (PRINTERTYPE 34831 . 37401) ( +PRINTERNAME 37403 . 37824) (PRINTFILEPROP 37826 . 38082) (PRINTFILETYPE 38084 . 40040) ( +\EXPECTED.FILE.TYPE 40042 . 40832) (SEND.FILE.TO.PRINTER 40834 . 45686)) (45689 50126 (PRINTERDEVICE +45699 . 46676) (PRINTERDEVICE.OPENFN 46678 . 47398) (PRINTERDEVICE.CLOSEFN 47400 . 50124)) (50482 +51040 (SCALEREGION 50492 . 51038)) (51264 59509 (TEXTTOIMAGEFILE 51274 . 53470) (COPY.TEXT.TO.IMAGE +53472 . 59507)) (59571 61314 (\BLTSHADE.GENERICPRINTER 59581 . 61312)) (61381 98547 ( +MAKEHARDCOPYSTREAM 61391 . 63107) (UNMAKEHARDCOPYSTREAM 63109 . 64039) (HARDCOPYSTREAMTYPE 64041 . +64448) (\CHARWIDTH.HDCPYDISPLAY 64450 . 65270) (\DSPFONT.HDCPYDISPLAY 65272 . 68067) ( +\DSPRIGHTMARGIN.HDCPYDISPLAY 68069 . 68924) (\DSPXPOSITION.HDCPYDISPLAY 68926 . 69301) ( +\DSPYPOSITION.HDCPYDISPLAY 69303 . 69678) (\STRINGWIDTH.HDCPYDISPLAY 69680 . 70635) ( +\STRINGWIDTH.HCPYDISPLAYAUX 70637 . 75977) (\HDCPYBLTCHAR 75979 . 80876) (\HDCPYDISPLAY.FIX.XPOS 80878 + . 81635) (\HDCPYDISPLAY.FIX.YPOS 81637 . 82378) (\HDCPYDISPLAYINIT 82380 . 84070) (\HDCPYDSPPRINTCHAR + 84072 . 89985) (\SLOWHDCPYBLTCHAR 89987 . 96603) (\CHANGECHARSET.HDCPYDISPLAY 96605 . 98545)) (98862 +148413 (MAKEHARDCOPYMODESTREAM 98872 . 101593) (UNMAKEHARDCOPYMODESTREAM 101595 . 103185) ( +\HCPYDISPLAYIMAGEOPS 103187 . 106007) (\BLTSHADE.HCPYMODE 106009 . 106675) (\BITBLT.HCPYMODE 106677 . +107425) (\BRUSHCONVERT.HCPYMODE 107427 . 107976) (\CHANGECHARSET.HCPYMODE 107978 . 111240) ( +\DASHINGCONVERT.HCPYMODE 111242 . 111583) (\CHARWIDTH.HCPYMODE 111585 . 112022) (\DRAWLINE.HCPYMODE +112024 . 112553) (\DRAWCURVE.HCPYMODE 112555 . 113142) (\DRAWCIRCLE.HCPYMODE 113144 . 113629) ( +\DRAWELLIPSE.HCPYMODE 113631 . 114315) (\DSPFONT.HCPYMODE 114317 . 117001) (\DSPLEFTMARGIN.HCPYMODE +117003 . 117745) (\DSPLINEFEED.HCPYMODE 117747 . 118380) (\DSPRIGHTMARGIN.HCPYMODE 118382 . 119450) ( +\DSPSPACEFACTOR.HCPYMODE 119452 . 120227) (\DSPXPOSITION.HCPYMODE 120229 . 121247) ( +\DSPYPOSITION.HCPYMODE 121249 . 121899) (\MOVETO.HCPYMODE 121901 . 122115) (\FONTCREATE.HCPYMODE +122117 . 124074) (\CREATECHARSET.HCPYMODE 124076 . 125799) (\STRINGWIDTH.HCPYMODE 125801 . 126596) ( +\HCPYMODEBLTCHAR 126598 . 132348) (\HCPYMODEDSPPRINTCHAR 132350 . 138284) (\SLOWHCPYMODEBLTCHAR 138286 + . 144915) (\SFFixY.HCPYMODE 144917 . 148411))))) STOP diff --git a/sources/HARDCOPY.LCOM b/sources/HARDCOPY.LCOM index f8dc7103c47295686215d4e7c9edeeada82bdc8d..6880c316f28f9980748332658a8a668641662961 100644 GIT binary patch delta 9530 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 L&_e$&f&Tvh-wP8Z delta 10413 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.5>git-medley>sources>INTERPRESS.;11 220765 +(FILECREATED "10-Sep-2025 16:59:11"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>INTERPRESS.;96 215772 :EDIT-BY rmk - :CHANGES-TO (VARS INTERPRESSCOMS \SYMBOLTONSARRAY HIPPOTONSARRAY CYRILLICTONSARRAY - \MATHTONSARRAY) - (FNS \DSPFONT.IP) + :CHANGES-TO (VARS INTERPRESSCOMS) - :PREVIOUS-DATE "13-Jul-2025 23:11:52" -{DSK}kaplan>Local>medley3.5>git-medley>sources>INTERPRESS.;10) + :PREVIOUS-DATE " 9-Sep-2025 13:19:12" {WMEDLEY}INTERPRESS.;94) (PRETTYCOMPRINT INTERPRESSCOMS) @@ -23,7 +20,7 @@ (DEFAULTINTERPRESSMEDIUM '(PAPER (KNOWN.SIZE "US.LETTER"] (VARS KNOWN.MEDIA.SIZES) [COMS (DECLARE%: DONTCOPY EVAL@COMPILE (VARS * IPCONSTANTS) - (FUNCTIONS \IPC) + (MACROS \IPC) (* ; "MICASPERINCH is used by HARDCOPY") (EXPORT (CONSTANTS (MICASPERINCH 2540) (MICASPERMILLIMETER 100] @@ -57,17 +54,16 @@ (COMS (* ; "image state") (FNS IP-TOS POP-IP-STACK PUSH-IP-STACK) (RECORDS IPSTATE)) - (FNS \CREATECHARSET.IP \CHANGECHARSET.IP) + (FNS \CHANGECHARSET.IP) (FNS \INTERPRESSINIT) - (FNS SCALEREGION) (DECLARE%: DONTEVAL@LOAD DOCOPY (INITVARS (\SPLINESTEP.IP 16.0))) [DECLARE%: DONTEVAL@LOAD DOCOPY (INITVARS IPPAGEREGION.ROT180 IPPAGEREGION.ROT270 - [DEFAULTPAGEREGION (SCALEREGION 2540 + [DEFAULTPAGEREGION (SCALEREGION MICASPERINCH (CREATEREGION 1.1 0.75 (- 7.5 1.1) (- 10.5 0.75] (DEFAULTLANDPAGEREGION (SCALEREGION - 2540 + MICASPERINCH (CREATEREGION 0.75 1.1 (- 10.5 0.75) (- 7.5 1.1] @@ -102,37 +98,37 @@ (PRINTFILETYPES (INTERPRESS (TEST INTERPRESSFILEP) (EXTENSION (IP IPR INTERPRESS)) (CONVERSION (TEXT MAKEINTERPRESS TEDIT \TEDIT.HARDCOPY] + [ADDVARS (IMAGESTREAMTYPES (INTERPRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE) + (CREATECHARSET \CREATECHARSET.HCPYMODE] (INITVARS (DEFAULT.INTERPRESS.BITMAP.ROTATION 90)) (ALISTS (SYSTEMINITVARS INTERPRESSFONTDIRECTORIES)) - [INITVARS (INTERPRESSFONTEXTENSIONS '(WD)) - (INTERPRESSFONTDIRECTORIES '("{Erinyes}Fonts>")) - (INTERPRESSPRINTWHEELFAMILIES '(BOLDPS ELITE LETTERGOTHIC MASTER PICA PSBOLD - SCIENTIFIC SPOKESMAN TITAN TREND TRENDPS TROJAN - VINTAGE)) - (INTERPRESSFAMILYALIASES '(LOGO LOGOTYPES-XEROX] - [COMS (* ; "NS Character Encoding") - (FNS \COERCEASCIITONSFONT \CREATEINTERPRESSFONT \SEARCHINTERPRESSFONTS) - (DECLARE%: EVAL@COMPILE DONTCOPY (CONSTANTS (noInfoCode 32768))) - (INITVARS (ASCIITONSTRANSLATIONS)) - - (* ;; "These are in priority order: if an early one doesn't find a font for a family, the later ones are tried (essentially going to MODERN as the default).") - - (ADDVARS (ASCIITONSTRANSLATIONS (TIMESROMAN NIL CLASSIC) - (GACHA NIL TERMINAL) - (HELVETICA NIL MODERN) - (CLASSIC NIL MODERN) - (GACHA NIL MODERN) - (TIMESROMAN NIL MODERN) - (LOGO NIL LOGOTYPES) - (HIPPO HIPPOTONSARRAY CLASSIC) - (CYRILLIC CYRILLICTONSARRAY CLASSIC) - (SYMBOL \SYMBOLTONSARRAY MODERN) - (MATH \MATHTONSARRAY CLASSIC))) - (UGLYVARS \SYMBOLTONSARRAY HIPPOTONSARRAY CYRILLICTONSARRAY \MATHTONSARRAY) - (VARS \ASCII2XCCSMAP) - (FNS \ASCIIMAPARRAY) - (INITVARS (\ASCII2XCCS (\ASCIIMAPARRAY \ASCII2XCCSMAP)) - (\ASCII2MCCS (\ASCIIMAPARRAY \ASCII2XCCSMAP '("$" "-"] + (ADDVARS (INTERPRESSFONTEXTENSIONS MEDLEYINTERPRESSFONT WD)) + [COMS (* ; + "Interpress fonts; but see MEDLEY-INIT-VARS") + [INITVARS (INTERPRESSFONTDIRECTORIES '(fonts>medleyinterpressfonts> fonts>ipfonts>)) + (INTERPRESSPRINTWHEELFAMILIES '(BOLDPS ELITE LETTERGOTHIC MASTER PICA PSBOLD + SCIENTIFIC SPOKESMAN TITAN TREND TRENDPS + TROJAN VINTAGE)) + (INTERPRESSFAMILYALIASES '(LOGO LOGOTYPES-XEROX] + (FNS \CREATEINTERPRESSFONT \CREATECHARSET.IP) + (FNS) + [COMS (FNS IPFONT.FILEP IPFONT.GETCHARSET \FACECODE \FAMILYCODE) + (MACROS \POSITIONFONTFILE) + (EXPORT (CONSTANTS (noInfoCode 32768] + (ADDVARS (INTERPRESSCHARSETFNS (INTERPRESS IPFONT.FILEP IPFONT.GETCHARSET))) + (INITVARS (INTERPRESSFONTCOERCIONS '((TIMESROMAN CLASSIC) + (GACHA TERMINAL) + (HELVETICA MODERN) + (CLASSIC MODERN) + (GACHA MODERN) + (TIMESROMAN MODERN) + (LOGO LOGOTYPES) + (HIPPO CLASSIC) + (CYRILLIC CLASSIC) + (SYMBOL MODERN) + (MATH CLASSIC) + (SIGMA MODERN) + (* MODERN] (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\INTERPRESSINIT))) (DECLARE%: EVAL@COMPILE DONTCOPY (P (LOADDEF 'SYSTEMBRUSH 'RESOURCES 'IMAGEIO) (LOADDEF 'BRUSH 'RECORDS 'IMAGEIO]) @@ -386,18 +382,23 @@ (MAXLONGSEQUENCEBYTES (SUB1 (EXPT 2 16))) (FILETYPE.INTERPRESS 4361))) +(DECLARE%: EVAL@COMPILE + +(PUTPROPS \IPC MACRO (ARGS [OR (AND (BOUNDP '\IPCONSTANTS) + (LISTP \IPCONSTANTS)) + (SETQ \IPCONSTANTS (FOR C IN IPCONSTANTS + JOIN (FOR Y IN (EVAL C) + COLLECT (CONS (CAR Y) + (CADR Y] -(DEFMACRO \IPC (X) - (DECLARE (SPECIAL X)) (* ; "Edited 27-Oct-2024 11:57 by lmm") - (* ; "Edited 2-May-2023 08:33 by lmm") - [OR (AND (BOUNDP '\IPCONSTANTS) - (LISTP \IPCONSTANTS)) - (SETQ \IPCONSTANTS (FOR X IN IPCONSTANTS JOIN (FOR Y IN (EVAL X) - COLLECT (CONS (CAR Y) - (CADR Y] - (FOR I FROM 1 TO 10 DO (IF (EQUAL X (SETQ X (SUBLIS \IPCONSTANTS X))) - THEN (RETURN (LIST 'CONSTANT X))) FINALLY (ERROR "too many \IPC levels" - X))) + (* ;; "This tries recursively to replace all the constants in the expression X according to the values in \IPCONSTANTS. When this was a DEFMACRO, RECOMPILE wouldn't work on INTERPRESS. ") + + (FOR I (Y _ (CAR ARGS)) FROM 1 TO 10 + DO (IF (EQUAL Y (SETQ Y (SUBLIS \IPCONSTANTS Y))) + THEN (RETURN (LIST 'CONSTANT Y))) FINALLY (ERROR + "too many \IPC levels" + X)))) +) (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE @@ -1365,10 +1366,10 @@ (INTERPRESS.BITMAPSCALE [LAMBDA (WIDTH HEIGHT) (* ; "Edited 2-May-2023 08:37 by lmm") (* lmm " 3-OCT-83 21:31") - (PROG [(RATIO (MIN (FQUOTIENT (\IPC (TIMES (\IPC POINTSPERINCH) + (PROG [(RATIO (MIN (FQUOTIENT (\IPC (TIMES (\IPC POINTSPERINCH) 9.5)) WIDTH) - (FQUOTIENT (\IPC (TIMES (\IPC POINTSPERINCH) + (FQUOTIENT (\IPC (TIMES (\IPC POINTSPERINCH) 7.5)) HEIGHT] (RETURN (COND @@ -1381,77 +1382,78 @@ (T RATIO]) (INTERPRESS.OUTCHARFN - [LAMBDA (IPSTREAM CHARCODE) (* ; "Edited 6-Jan-89 23:03 by jds") + [LAMBDA (IPSTREAM CHARCODE) (* ; "Edited 9-Sep-2025 09:59 by rmk") + (* ; "Edited 7-Sep-2025 22:40 by rmk") + (* ; "Edited 20-Jul-2025 16:27 by rmk") + (* ; "Edited 24-Apr-2025 23:14 by rmk") + (* ; "Edited 6-Jan-89 23:03 by jds") + + (* ;; "Assumes that all CHARCODE's are MCCS, font-independent") (* ;; "The \OUTCHAR method for interpress streams. Print a character, taking account of margins and visible region, and things like ^L.") (LET* ((IPDATA (ffetch IPDATA of IPSTREAM)) - [NSCODE (COND - ((\FATCHARCODEP CHARCODE) - CHARCODE) - (T (\GETBASE (ffetch NSTRANSTABLE of IPDATA) - CHARCODE] + (XCODE (MTOXCODE CHARCODE)) (OLD-CSET (ffetch NSCHARSET of IPDATA))) - [COND - ((NEQ (\CHARSET NSCODE) - OLD-CSET) + (CL:UNLESS (EQ (\CHARSET XCODE) + OLD-CSET) (* ;; "Switch character set so that we get the right char width, but DON'T write out the charset-shift sequence, in case the character gets clipped.") - (\CHANGECHARSET.IP IPDATA (\CHARSET NSCODE] + (\CHANGECHARSET.IP IPDATA (\CHARSET XCODE))) (* ;; "Select on NSCODE, since ^L etc might be graphic in some ascii fonts:") - (SELCHARQ NSCODE + (SELCHARQ XCODE (EOL (NEWLINE.IP IPSTREAM)) (LF (\DSPXPOSITION.IP IPSTREAM (PROG1 (\DSPXPOSITION.IP IPSTREAM) - (NEWLINE.IP IPSTREAM)))) + (NEWLINE.IP IPSTREAM)))) (^L (DSPNEWPAGE IPSTREAM)) (PROG (CHAR-WIDTH NEWXPOS) (* ; - "Have to switch charset before fetching width from cache, even though we might later clip") + "Have to switch charset before fetching width from cache, even though we might later clip") [SETQ CHAR-WIDTH (COND - ((EQ NSCODE (CHARCODE SPACE)) + ((EQ XCODE (CHARCODE SPACE)) (ffetch IPSPACEWIDTH of IPDATA)) (T (\FGETWIDTH (ffetch IPWIDTHSCACHE of IPDATA) - (\CHAR8CODE NSCODE] + (\CHAR8CODE XCODE] (SETQ NEWXPOS (+ (ffetch IPXPOS of IPDATA) CHAR-WIDTH)) RETRY (* ; - "Return to here if we have to emit a newline before printing") + "Return to here if we have to emit a newline before printing") (COND ((AND (fetch IPCHARVISIBLEP of IPDATA) (<= NEWXPOS (fetch IPMINCHARRIGHT of IPDATA))) (* ;; "Char vis means starting pos is inside the character clipping region. Minright is the min of the right margin and clipping right, so we're OK if we end up left of that") (* ; -"This is the common case we've optimized for: char starts and ends visible and before right margin") + "This is the common case we've optimized for: char starts and ends visible and before right margin") (freplace IPXPOS of IPDATA with NEWXPOS) [COND - ((NEQ (\CHARSET NSCODE) + ((NEQ (\CHARSET XCODE) OLD-CSET) (\BOUT (ffetch IPSHOWSTREAM of IPDATA) NSCHARSETSHIFT) (* ; "Switch character set") (\BOUT (ffetch IPSHOWSTREAM of IPDATA) - (\CHARSET NSCODE)) + (\CHARSET XCODE)) (* ;; - "have to repeat this, since we may have done a CR before printing it.") + "have to repeat this, since we may have done a CR before printing it.") - (\CHANGECHARSET.IP IPDATA (\CHARSET NSCODE] + (\CHANGECHARSET.IP IPDATA (\CHARSET XCODE] (\BOUT (ffetch IPSHOWSTREAM of IPDATA) - (\CHAR8CODE NSCODE)) + (\CHAR8CODE XCODE)) (RETURN)) ((> NEWXPOS (ffetch IPRIGHT of IPDATA)) (* ;; - "Failed visible or micharright, if over right margin, do newline and try again, otherwise clip ") + "Failed visible or micharright, if over right margin, do newline and try again, otherwise clip ") - (NEWLINE.IP IPSTREAM) (* ; - "This will reset the IPCHARVISIBLEP") + (NEWLINE.IP IPSTREAM) (* ; + "This will reset the IPCHARVISIBLEP") (SETQ NEWXPOS (+ (ffetch IPXPOS of IPDATA) CHAR-WIDTH)) (* ; - "Retry to print if we ended up unclipped and within the margin, otherwise fall thru to clip") + "Retry to print if we ended up unclipped and within the margin, otherwise fall thru to clip") (AND (<= NEWXPOS (ffetch IPMINCHARRIGHT of IPDATA)) (GO RETRY))) ((AND (ffetch IPCLIPINCLUSIVE of IPDATA) @@ -1460,29 +1462,29 @@ (>= NEWXPOS (ffetch IPVISRIGHT of IPDATA))) (* ;; - "We're clipping him, but he wants the straddling character left visible. Print it.") + "We're clipping him, but he wants the straddling character left visible. Print it.") (freplace IPXPOS of IPDATA with NEWXPOS) [COND - ((NEQ (\CHARSET NSCODE) + ((NEQ (\CHARSET XCODE) (ffetch NSCHARSET of IPDATA)) (\BOUT (ffetch IPSHOWSTREAM of IPDATA) NSCHARSETSHIFT) (* ; "Switch character set") (\BOUT (ffetch IPSHOWSTREAM of IPDATA) - (\CHARSET NSCODE)) + (\CHARSET XCODE)) (* ;; - "have to repeat this, since we may have done a CR before printing it.") + "have to repeat this, since we may have done a CR before printing it.") - (\CHANGECHARSET.IP IPDATA (\CHARSET NSCODE] + (\CHANGECHARSET.IP IPDATA (\CHARSET XCODE] (\BOUT (ffetch IPSHOWSTREAM of IPDATA) - (\CHAR8CODE NSCODE)) + (\CHAR8CODE XCODE)) (RETURN)) (T (* ;; "Nothing printed; have to reset the charset.") (\CHANGECHARSET.IP IPDATA OLD-CSET))) - (SHOW.IP IPSTREAM T) (* ; "Either failed CHARVIS, or failed both VISRIGHT and IPRIGHT, so not in clipping region. Just move X position") + (SHOW.IP IPSTREAM T) (* ; "Either failed CHARVIS, or failed both VISRIGHT and IPRIGHT, so not in clipping region. Just move X position") (SETX.IP IPSTREAM NEWXPOS]) (INTERPRESSFILEP @@ -2621,8 +2623,10 @@ ]) (\DSPFONT.IP - [LAMBDA (IPSTREAM FONT) (* ; "Edited 14-Jul-2025 23:30 by rmk") - (* ; "Edited 13-Jul-2025 23:10 by rmk") + [LAMBDA (IPSTREAM FONT) (* ; "Edited 6-Sep-2025 14:50 by rmk") + (* ; "Edited 20-Jul-2025 14:26 by rmk") + (* ; "Edited 14-Jul-2025 22:59 by rmk") + (* ; "Edited 5-Jul-2025 18:49 by rmk") (* ; "Edited 2-May-2023 08:38 by lmm") (* ; "Edited 21-Aug-91 16:33 by jds") @@ -2645,7 +2649,7 @@ (* ;  "Get the font number to go in the file") (APPENDINTEGER.IP IPSTREAM FRAMEVAR) - (APPENDOP.IP IPSTREAM (\IPC SETFONT)) + (APPENDOP.IP IPSTREAM (\IPC SETFONT)) (freplace IPFONT of IPDATA with FONT) (* ; "Remember the new font") (\CHANGECHARSET.IP IPDATA \DEFAULTCHARSET) [freplace IPSPACEWIDTH of IPDATA with (FIXR (TIMES (ffetch IPSPACEFACTOR of IPDATA) @@ -2654,10 +2658,13 @@ (CHARCODE SPACE] (* ;  "Set the linefeed distance to be one point more than the font height") - [freplace IPLINEFEED of IPDATA with (IDIFFERENCE (\IPC (IMINUS (IQUOTIENT MICASPERINCH + [freplace IPLINEFEED of IPDATA with (IDIFFERENCE (\IPC (IMINUS (IQUOTIENT MICASPERINCH POINTSPERINCH))) (FONTPROP FONT 'HEIGHT] - (freplace NSTRANSTABLE of IPDATA with (ffetch OTHERDEVICEFONTPROPS of FONT)) + (CL:UNLESS (EQ 'MCCS (fetch (FONTDESCRIPTOR FONTCHARENCODING) of FONT)) + (freplace (INTERPRESSDATA MCCSTRANSFN) of IPDATA with (ffetch (FONTDESCRIPTOR + FONTTOMCCSFN) + of FONT))) (\FIXLINELENGTH.IP IPSTREAM) (freplace IPMAXVISIBLEBASELINE of IPDATA with (- (ffetch IPVISTOP of IPDATA) (ffetch (FONTDESCRIPTOR \SFAscent) @@ -3100,190 +3107,21 @@ ) (DEFINEQ -(\CREATECHARSET.IP - [LAMBDA (FAMILY PSIZE FACE ROTATION DEVICE CHARSET FONTDESC NOSLUG?) - (* ; "Edited 8-Apr-88 09:54 by jds") - -(* ;;; "Build the CHARSETINFO for an Interpress NS font. If we can't find widths info for that font, return NIL") - -(* ;;; "Widths array is fully allocated, with zeroes for characters with no information. An array is not allocated for fixed WidthsY. DEVICE is PRESS or INTERPRESS") - - (DECLARE (GLOBALVARS INTERPRESSFONTDIRECTORIES \ASCIITONS)) - (RESETLST (* ; - "RESETLST to make sure the fontfiles get closed") - (PROG (WFILE WSTRM FIXEDFLAGS RELFLAG FIRSTCHAR LASTCHAR TEM WIDTHS WIDTHSY FBBOX - CHARSETHEIGHT (NSMICASIZE (FIXR (FQUOTIENT (ITIMES PSIZE 2540) - 72))) - (CSINFO (create CHARSETINFO))) - (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - [COND - ((SETQ WFILE (\FINDFONTFILE FAMILY PSIZE FACE NIL NIL CHARSET - INTERPRESSFONTDIRECTORIES INTERPRESSFONTEXTENSIONS)) - -(* ;;; "Look thru INTERPRESSFONTDIRECTORIES for a file that describes the font requested. Only continue if we can find one.") - - [RESETSAVE (SETQ WSTRM (OPENSTREAM WFILE 'INPUT 'OLD)) - '(PROGN (CLOSEF? OLDVALUE] - [COND - ((RANDACCESSP WSTRM) - (SETFILEPTR WSTRM 0)) - (T (COPYBYTES WSTRM (SETQ WSTRM (OPENSTREAM '{NODIRCORE} 'BOTH 'NEW] - (SETQ RELFLAG (\POSITIONFONTFILE WSTRM NSMICASIZE FIRSTCHAR LASTCHAR NIL)) - - (* ;; "\POSITIONFONTFILE sets FIRSTCHAR LASTCHAR as well as positioning the font file at the beginning of the widths") - - (* ;; "Fill in the widths, and return a flag telling whether the widths are absolute, or are type-size relative. 0 => relative") - - ) - (T (* ; - "Can't find a file to describe this font;") - (RETURN (COND - (NOSLUG? (* ; - "the caller just wants NIL back to signal that nothing was found") - NIL) - (T (\BUILDSLUGCSINFO (fetch (FONTDESCRIPTOR FONTAVGCHARWIDTH) - of FONTDESC) - (FONTPROP FONTDESC 'ASCENT) - (FONTPROP FONTDESC 'DESCENT) - (FONTPROP FONTDESC 'DEVICE] - (SETQ RELFLAG (ZEROP RELFLAG)) (* ; - "Convert the flag to a logical value") - (SETFILEPTR WSTRM (UNFOLD (\FIXPIN WSTRM) - BYTESPERWORD)) - - (* ;; "Read the location of the WD segment for this font (we're in the directory part of the file now), and go there.") - - (SETQ FBBOX (SIGNED (\WIN WSTRM) - BITSPERWORD)) (* ; - "replace (FONTDESCRIPTOR FBBOX) of FD with (SIGNED (\WIN WSTRM) BITSPERWORD)") - (* ; - "Get the max bounding width for the font") - (replace (CHARSETINFO CHARSETDESCENT) of CSINFO - with (IMINUS (SIGNED (\WIN WSTRM) - BITSPERWORD))) (* ; "Descent is -FBBOY") - (\WIN WSTRM) (* ; - "replace (FONTDESCRIPTOR FBBDX) of FD with (SIGNED (\WIN WSTRM) BITSPERWORD)") - (* ; "And the standard kern value (?)") - (SETQ CHARSETHEIGHT (SIGNED (\WIN WSTRM) - BITSPERWORD)) (* ; - "replace \SFHeight of FD with (SIGNED (\WIN WSTRM) BITSPERWORD)") - (* ; "Height is FBBDY") - [COND - (RELFLAG (* ; - "Dimensions are relative, must be scaled") - - (* ;; "replace (FONTDESCRIPTOR FBBOX) of FD with (IQUOTIENT (ITIMES (fetch (FONTDESCRIPTOR FBBOX) of FD) NSMICASIZE) 1000)") - - (replace (CHARSETINFO CHARSETDESCENT) of CSINFO - with (IQUOTIENT (ITIMES (fetch (CHARSETINFO CHARSETDESCENT) - of CSINFO) - NSMICASIZE) - 1000)) - - (* ;; "replace (FONTDESCRIPTOR FBBDX) of FD with (IQUOTIENT (ITIMES (fetch (FONTDESCRIPTOR FBBDX) of FD) NSMICASIZE) 1000)") - - (SETQ CHARSETHEIGHT (IQUOTIENT (ITIMES CHARSETHEIGHT NSMICASIZE) - 1000] - (replace (CHARSETINFO CHARSETASCENT) of CSINFO - with (IDIFFERENCE CHARSETHEIGHT (fetch CHARSETDESCENT of CSINFO))) - (SETQ FIXEDFLAGS (LRSH (\BIN WSTRM) - 6)) (* ; "The fixed flags") - (\BIN WSTRM) (* ; "Skip the spares") - [COND - ((EQ 2 (LOGAND FIXEDFLAGS 2)) (* ; "This font is fixed width.") - (SETQ TEM (\WIN WSTRM)) (* ; - "Read the fixed width for this font") - [COND - ((AND RELFLAG (NOT (ZEROP TEM))) (* ; - "If it's size relative, scale it.") - (SETQ TEM (IQUOTIENT (ITIMES TEM NSMICASIZE) - 1000] - (for I from FIRSTCHAR to LASTCHAR do - (* ; - "Fill in the char widths table with the width.") - (\FSETWIDTH WIDTHS I TEM))) - (T (* ; - "Variable width font, so we have to read widths.") - (* ; - "AIN WIDTHS FIRSTCHAR (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) WSTRM") - (for I from FIRSTCHAR to LASTCHAR do (\FSETWIDTH WIDTHS I - noInfoCode)) - [\BINS (\GETOFD WSTRM 'INPUT) - WIDTHS - (UNFOLD FIRSTCHAR BYTESPERWORD) - (IMIN (UNFOLD (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) - BYTESPERWORD) - (IDIFFERENCE (GETFILEINFO WSTRM 'LENGTH) - (GETFILEPTR WSTRM] (* ; "Read the X widths.") - (for I from FIRSTCHAR to LASTCHAR - when (EQ noInfoCode (\FGETWIDTH WIDTHS I)) - do (* ; - "For chars that have no width info, let width be zero.") - (\FSETWIDTH WIDTHS I 0)) - (COND - (RELFLAG (* ; - "If the widths are size-relative, scale them.") - (for I from FIRSTCHAR to LASTCHAR - do (\FSETWIDTH WIDTHS I (IQUOTIENT (ITIMES (\FGETWIDTH WIDTHS I) - NSMICASIZE) - 1000] - [COND - [(EQ 1 (LOGAND FIXEDFLAGS 1)) - (COND - ((ILESSP (GETFILEPTR WSTRM) - (GETEOFPTR WSTRM)) - (SETQ WIDTHSY (\WIN WSTRM))) - (T (* ; - "STAR FONT FILES LIKE TO LEAVE OFF THE Y WIDTH.") - (SETQ WIDTHSY 0))) (* ; - "The fixed width-Y for this font; the width-Y field is a single integer in the FD") - (replace (CHARSETINFO YWIDTHS) of CSINFO - with (COND - ((AND RELFLAG (NOT (ZEROP WIDTHSY))) - (IQUOTIENT (ITIMES WIDTHSY NSMICASIZE) - 1000)) - (T WIDTHSY] - (T (* ; - "Variable Y-width font. Fill it in as above") - (SETQ WIDTHSY (replace (CHARSETINFO YWIDTHS) of CSINFO with ( - \CREATECSINFOELEMENT - ))) - (for I from FIRSTCHAR to LASTCHAR do (\FSETWIDTH WIDTHSY I - noInfoCode)) - (\BINS (\GETOFD WSTRM 'INPUT) - WIDTHSY - (UNFOLD FIRSTCHAR BYTESPERWORD) - (UNFOLD (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) - BYTESPERWORD)) (* ; "Read the Y widths") - (for I from FIRSTCHAR to LASTCHAR - when (EQ noInfoCode (\FGETWIDTH WIDTHSY I)) - do (* ; - "Let any characters with no width info be zero height") - (\FSETWIDTH WIDTHSY I 0)) - (COND - (RELFLAG (* ; - "If the widths are size-relative, scale them.") - (for I from FIRSTCHAR to LASTCHAR - do (\FSETWIDTH WIDTHSY I (IQUOTIENT (ITIMES (\FGETWIDTH WIDTHSY - I) - NSMICASIZE) - 1000] - (RETURN CSINFO)))]) - (\CHANGECHARSET.IP - [LAMBDA (IPDATA CHARSET) (* gbn " 1-Oct-85 17:45") + [LAMBDA (IPDATA CHARSET) (* ; "Edited 30-Aug-2025 23:45 by rmk") + (* ; "Edited 23-Jul-2025 09:59 by rmk") + (* gbn " 1-Oct-85 17:45") (* ;; -"Called when the character set information cached in a display stream doesn't correspond to CHARSET") + "Called when the character set information cached in a display stream doesn't correspond to CHARSET") (PROG* ((FONT (ffetch IPFONT of IPDATA)) - (CSINFO (\GETCHARSETINFO CHARSET FONT))) + (CSINFO (\INSURECHARSETINFO FONT CHARSET))) (* ;; "since the call to \getcharsetinfo has NOSLUG? = NIL, we know that we will get a reasonable character set back") (UNINTERRUPTABLY - (freplace IPWIDTHSCACHE of IPDATA with (ffetch (CHARSETINFO WIDTHS) - of CSINFO)) + (freplace IPWIDTHSCACHE of IPDATA with (ffetch (CHARSETINFO WIDTHS) of CSINFO)) (freplace NSCHARSET of IPDATA with CHARSET))]) ) (DEFINEQ @@ -3315,7 +3153,7 @@ IMMOVETO _ (FUNCTION \MOVETO.IP) IMSCALE _ [FUNCTION (LAMBDA NIL (* ;  "should this be a ratio instead of a float?") - (\IPC (FQUOTIENT MICASPERINCH POINTSPERINCH] + (\IPC (FQUOTIENT MICASPERINCH POINTSPERINCH] IMTERPRI _ (FUNCTION NEWLINE.IP) IMBOTTOMMARGIN _ (FUNCTION \DSPBOTTOMMARGIN.IP) IMTOPMARGIN _ (FUNCTION \DSPTOPMARGIN.IP) @@ -3340,17 +3178,6 @@ IMDRAWPOINT _ (FUNCTION \DRAWPOINT.IP))) NIL]) ) -(DEFINEQ - -(SCALEREGION - [LAMBDA (SCALE REGION) (* rmk%: "21-JUL-82 13:06") - (* ; "Scales a region") - (create REGION - LEFT _ (FIX (FTIMES SCALE (fetch (REGION LEFT) of REGION))) - BOTTOM _ (FIX (FTIMES SCALE (fetch (REGION BOTTOM) of REGION))) - WIDTH _ (FIX (FTIMES SCALE (fetch (REGION WIDTH) of REGION))) - HEIGHT _ (FIX (FTIMES SCALE (fetch (REGION HEIGHT) of REGION]) -) (DECLARE%: DONTEVAL@LOAD DOCOPY (RPAQ? \SPLINESTEP.IP 16.0) @@ -3361,11 +3188,11 @@ (RPAQ? IPPAGEREGION.ROT270 NIL) -(RPAQ? DEFAULTPAGEREGION (SCALEREGION 2540 (CREATEREGION 1.1 0.75 (- 7.5 1.1) - (- 10.5 0.75)))) +(RPAQ? DEFAULTPAGEREGION (SCALEREGION MICASPERINCH (CREATEREGION 1.1 0.75 (- 7.5 1.1) + (- 10.5 0.75)))) -(RPAQ? DEFAULTLANDPAGEREGION (SCALEREGION 2540 (CREATEREGION 0.75 1.1 (- 10.5 0.75) - (- 7.5 1.1)))) +(RPAQ? DEFAULTLANDPAGEREGION (SCALEREGION MICASPERINCH (CREATEREGION 0.75 1.1 (- 10.5 0.75) + (- 7.5 1.1)))) ) @@ -3393,9 +3220,9 @@ (ERROR "Invalid Interpress operator code:" OP))) (COND ((CONSTANT (ILEQ OP 31)) - (APPENDBYTE.IP STREAM (LOGOR (\IPC SHORTOP) + (APPENDBYTE.IP STREAM (LOGOR (\IPC SHORTOP) OP))) - (T (APPENDBYTE.IP STREAM (LOGOR (\IPC LONGOP) + (T (APPENDBYTE.IP STREAM (LOGOR (\IPC LONGOP) (FOLDLO OP 256))) (APPENDBYTE.IP STREAM (MOD OP 256]) @@ -3419,7 +3246,7 @@ (APPENDINT.IPMACRO STREAM (IPLUS N 4000) 2)) (T (PROG ((LEN (BYTESININT.IP N))) - (APPENDSEQUENCEDESCRIPTOR.IP STREAM (\IPC + (APPENDSEQUENCEDESCRIPTOR.IP STREAM (\IPC SEQINTEGER ) LEN) @@ -3469,7 +3296,8 @@ (IPNEXTFRAMEVAR BYTE) (IPHEADINGOPVAR BYTE) (NSCHARSET BYTE) - (NSTRANSTABLE POINTER) + (MCCSTRANSFN POINTER) (* ; + "Was NSTRANSFN, but now stops at MCCS") (IPCORRECTSTARTX POINTER (* ;  "Used with IPXPOS to compute width for CORRECTing char strings during SHOW.") ) @@ -3659,7 +3487,7 @@ (ADDTOVAR IMAGESTREAMTYPES (INTERPRESS (OPENSTREAM OPENIPSTREAM) (FONTCREATE \CREATEINTERPRESSFONT) - (FONTSAVAILABLE \SEARCHINTERPRESSFONTS) + (FONTSAVAILABLE \SEARCHFONTFILES) (CREATECHARSET \CREATECHARSET.IP))) @@ -3691,212 +3519,307 @@ (EXTENSION (IP IPR INTERPRESS)) (CONVERSION (TEXT MAKEINTERPRESS TEDIT \TEDIT.HARDCOPY)))) +(ADDTOVAR IMAGESTREAMTYPES (INTERPRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE) + (CREATECHARSET \CREATECHARSET.HCPYMODE))) + (RPAQ? DEFAULT.INTERPRESS.BITMAP.ROTATION 90) (ADDTOVAR SYSTEMINITVARS (INTERPRESSFONTDIRECTORIES {DSK})) -(RPAQ? INTERPRESSFONTEXTENSIONS '(WD)) +(ADDTOVAR INTERPRESSFONTEXTENSIONS MEDLEYINTERPRESSFONT WD) + + + +(* ; "Interpress fonts; but see MEDLEY-INIT-VARS") -(RPAQ? INTERPRESSFONTDIRECTORIES '("{Erinyes}Fonts>")) + +(RPAQ? INTERPRESSFONTDIRECTORIES '(fonts>medleyinterpressfonts> fonts>ipfonts>)) (RPAQ? INTERPRESSPRINTWHEELFAMILIES '(BOLDPS ELITE LETTERGOTHIC MASTER PICA PSBOLD SCIENTIFIC SPOKESMAN TITAN TREND TRENDPS TROJAN VINTAGE)) (RPAQ? INTERPRESSFAMILYALIASES '(LOGO LOGOTYPES-XEROX)) +(DEFINEQ +(\CREATEINTERPRESSFONT + [LAMBDA (FONTSPEC) (* ; "Edited 31-Aug-2025 14:20 by rmk") + (* ; "Edited 28-Aug-2025 16:00 by rmk") + (* ; "Edited 16-Aug-2025 12:05 by rmk") + (* ; "Edited 12-Aug-2025 23:06 by rmk") + (* ; "Edited 5-Aug-2025 17:56 by rmk") + (* ; "Edited 24-Jul-2025 22:39 by rmk") + (* ; "Edited 20-Jul-2025 20:53 by rmk") + (* ; "Edited 22-May-2025 09:59 by rmk") + (* ; "Edited 18-May-2025 21:37 by rmk") + (* gbn " 1-Oct-85 18:29") + (create FONTDESCRIPTOR + FONTFAMILY _ (fetch (FONTSPEC FSFAMILY) of FONTSPEC) + FONTSIZE _ (fetch (FONTSPEC FSSIZE) of FONTSPEC) + FONTFACE _ (fetch (FONTSPEC FSFACE) of FONTSPEC) + ROTATION _ (fetch (FONTSPEC FSROTATION) of FONTSPEC) + FONTDEVICE _ (fetch (FONTSPEC FSDEVICE) of FONTSPEC) + \SFAscent _ 0 + \SFDescent _ 0 + \SFHeight _ 0 + FONTDEVICESPEC _ (create FONTSPEC using FONTSPEC) + FONTSCALE _ (CONSTANT (FQUOTIENT 2540 72)) + FONTTOMCCSFN _ (MCCSMAPFN FONTSPEC]) - -(* ; "NS Character Encoding") - +(\CREATECHARSET.IP + [LAMBDA (FONTSPEC FONT CHARSET) (* ; "Edited 7-Sep-2025 23:23 by rmk") + (* ; "Edited 30-Aug-2025 14:24 by rmk") + (* ; "Edited 28-Aug-2025 23:24 by rmk") + (* ; "Edited 26-Aug-2025 23:43 by rmk") + (* ; "Edited 16-Aug-2025 17:46 by rmk") + (* ; "Edited 5-Aug-2025 22:33 by rmk") + (* ; "Edited 23-Jul-2025 13:22 by rmk") + (OR (\READCHARSET FONTSPEC CHARSET FONT) + (CADR (\COERCECHARSET FONTSPEC CHARSET]) +) (DEFINEQ -(\COERCEASCIITONSFONT - [LAMBDA (ASCIITONSMAPARRAY ASCIIFAMILY NSFAMILY SIZE FONTFACE ROTATION DEVICE) - (* ; "Edited 20-Dec-2024 13:37 by rmk") - (* gbn "12-Sep-85 15:10") - - (* ;; "Produces an ascii font with the proper widths for the ns-character correspondences defined by ASCIITONSMAPARRAY") - - (PROG (CHARSETDIR [ASCIITONSMAP (fetch (ARRAYP BASE) of (\DTEST ASCIITONSMAPARRAY 'ARRAYP] - (FD (\CREATESTARFONT NSFAMILY SIZE FONTFACE ROTATION DEVICE))) - (OR FD (RETURN NIL)) - [SETQ CHARSETDIR (CONS (CONS 0 (\GETCHARSETINFO 0 FD] - [bind NSCODE CS for I from 0 to 255 unless (OR (EQ I (SETQ NSCODE (\GETBASE ASCIITONSMAP I) - )) - (ASSOC (SETQ CS (\CHARSET NSCODE)) - CHARSETDIR)) - do (* ; - "Run thru the translate table looking for non-0 charsets. Add their width info to the directory") - (push CHARSETDIR (CONS CS - (COND - ((\GETCHARSETINFO CS FD)) - (T (* ; - "There isn't any info for that character. Warn the guy, but continue.") - (FRESHLINE PROMPTWINDOW) - (printout PROMPTWINDOW - "Warning: Information about character set " - .I3.8 CS " missing from font " ASCIIFAMILY %, - SIZE ".") - NIL] (* ; - "Return if one of the fonts couldn't be found") - [bind CHARSETINFO NSCODE (WIDTHS _ (fetch (CHARSETINFO WIDTHS) of (\GETCHARSETINFO 0 FD))) - for I from 0 to 255 unless (EQ I (SETQ NSCODE (\GETBASE ASCIITONSMAP I))) - when (SETQ CHARSETINFO (CDR (ASSOC (\CHARSET NSCODE) - CHARSETDIR))) - do (* ; - "For each non-ASCII character, look for width info in the right NS place. If none, use zero width.") - (\FSETWIDTH WIDTHS I (\FGETWIDTH (fetch (CHARSETINFO WIDTHS) of CHARSETINFO) - (\CHAR8CODE NSCODE] - [replace OTHERDEVICEFONTPROPS of FD with (fetch (ARRAYP BASE) of (\DTEST ASCIITONSMAPARRAY - 'ARRAYP] - [COND - ((NEQ NSFAMILY ASCIIFAMILY) +(IPFONT.FILEP + [LAMBDA (STREAM) (* ; "Edited 21-Jul-2025 15:26 by rmk") + (STRING.EQUAL "wd" (FILENAMEFIELD STREAM 'EXTENSION]) + +(IPFONT.GETCHARSET + [LAMBDA (FILE CHARSET FONT) (* ; "Edited 7-Sep-2025 23:38 by rmk") + (* ; "Edited 28-Aug-2025 23:18 by rmk") + (* ; "Edited 22-Jul-2025 23:24 by rmk") + (* ; "Edited 21-Jul-2025 18:32 by rmk") + (* ; "Edited 12-Jun-2025 21:12 by rmk") + (* ; "Edited 11-Jun-2025 10:55 by rmk") + (* ; "Edited 8-Apr-88 09:54 by jds") - (* ;; "Update the font deacriptor so it looks like it's really for the family the guy wanted. Also save the info we used to get here.") +(* ;;; "Reads .wd files to build the CHARSETINFO for an Interpress font, NI, returns NIL if it can't be constructed.. Caller has decided this this file is a good candidate fore the FONTSPEC parameters.. ") - (replace FONTFAMILY of FD with ASCIIFAMILY) - (replace FONTDEVICESPEC of FD with (LIST NSFAMILY SIZE FONTFACE ROTATION DEVICE] - (RETURN FD]) +(* ;;; "Widths array is fully allocated, with zeroes for characters with no information. An array is not allocated for fixed WidthsY. ") -(\CREATEINTERPRESSFONT - [LAMBDA (FAMILY SIZE FONTFACE ROTATION DEVICE) (* ; "Edited 21-Dec-2024 16:26 by rmk") - (* ; "Edited 20-Dec-2024 13:43 by rmk") - (* ; "Edited 17-Feb-87 16:49 by FS") - - (* ;; "Creates a font descriptor for an NS font for Interpress hardcopy. Tries first on the assumption that he gave us the NS font name;") - - (DECLARE (GLOBALVARS \ASCII2XCCS)) - (if (\COERCEASCIITONSFONT \ASCII2XCCS FAMILY FAMILY SIZE FONTFACE ROTATION DEVICE) - elseif (for TRANSL in ASCIITONSTRANSLATIONS bind NEWFONT - when (AND (EQ FAMILY (CAR TRANSL)) - (SETQ NEWFONT (\COERCEASCIITONSFONT (COND - ((NULL (CADR TRANSL)) - \ASCII2XCCS) - ((LITATOM (CADR TRANSL)) - (EVAL (CADR TRANSL))) - (T (CADR TRANSL))) - FAMILY - (OR (CADDR TRANSL) - 'MODERN) - SIZE FONTFACE ROTATION DEVICE))) - do (RETURN NEWFONT]) - -(\SEARCHINTERPRESSFONTS - [LAMBDA (FAMILY PSIZE FACE ROTATION) (* ; "Edited 2-Jan-87 17:07 by FS") - (DECLARE (GLOBALVARS INTERPRESSFONTDIRECTORIES INTERPRESSFONTEXTENSIONS)) - (\SEARCHFONTFILES FAMILY PSIZE FACE ROTATION 'INTERPRESS INTERPRESSFONTDIRECTORIES - INTERPRESSFONTEXTENSIONS]) -) -(DECLARE%: EVAL@COMPILE DONTCOPY -(DECLARE%: EVAL@COMPILE + (RESETLST (* ; + "Make sure FILE get closed if we open it") + (PROG (WSTRM FIXEDFLAGS RELFLAG FIRSTCHAR LASTCHAR TEM WIDTHS WIDTHSY FBBOX CHARSETHEIGHT + (NSMICASIZE (FIXR (FQUOTIENT (ITIMES (FONTPROP FONT 'SIZE) + 2540) + 72))) + (CSINFO (create CHARSETINFO + OFFSETS _ NIL))) + (CL:UNLESS (SETQ WSTRM (GETSTREAM FILE 'INPUT T)) + [RESETSAVE (SETQ WSTRM (OPENSTREAM FILE 'INPUT 'OLD)) + '(PROGN (CLOSEF? OLDVALUE]) + (CL:UNLESS (RANDACCESSP WSTRM) + [SETQ WSTRM (COPYBYTES WSTRM (SETQ WSTRM (OPENSTREAM '{NODIRCORE} 'BOTH + 'NEW]) + (CL:UNLESS (SETQ RELFLAG (\POSITIONFONTFILE WSTRM NSMICASIZE FIRSTCHAR LASTCHAR NIL)) -(RPAQQ noInfoCode 32768) + (* ;; "\POSITIONFONTFILE sets FIRSTCHAR LASTCHAR as well as positioning the font file at the beginning of the widths") + (* ;; "Fill in the widths, and return a flag telling whether the widths are absolute, or are type-size relative. 0 => relative") -(CONSTANTS (noInfoCode 32768)) -) -) + (RETURN NIL)) + (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) + (SETQ RELFLAG (ZEROP RELFLAG)) (* ; + "Convert the flag to a logical value") + (SETFILEPTR WSTRM (UNFOLD (\FIXPIN WSTRM) + BYTESPERWORD)) -(RPAQ? ASCIITONSTRANSLATIONS ) + (* ;; "Read the location of the WD segment for this font (we're in the directory part of the file now), and go there.") + (SETQ FBBOX (SIGNED (\WIN WSTRM) + BITSPERWORD)) (* ; + "Get the max bounding width for the font") + (replace (CHARSETINFO CHARSETDESCENT) of CSINFO with (IMINUS (SIGNED (\WIN WSTRM) + BITSPERWORD))) + (\WIN WSTRM) (* ; "RMK: Not sure what this is") + (SETQ CHARSETHEIGHT (SIGNED (\WIN WSTRM) + BITSPERWORD)) + (CL:WHEN RELFLAG (* ; + "Dimensions are relative, must be scaled") + (replace (CHARSETINFO CHARSETDESCENT) of CSINFO + with (IQUOTIENT (ITIMES (fetch (CHARSETINFO CHARSETDESCENT) of CSINFO) + NSMICASIZE) + 1000)) + (SETQ CHARSETHEIGHT (IQUOTIENT (ITIMES CHARSETHEIGHT NSMICASIZE) + 1000))) + (replace (CHARSETINFO CHARSETASCENT) of CSINFO with (IDIFFERENCE CHARSETHEIGHT + (fetch CHARSETDESCENT + of CSINFO))) + (SETQ FIXEDFLAGS (LRSH (\BIN WSTRM) + 6)) (* ; "The fixed flags") + (\BIN WSTRM) (* ; "Skip the spares") + [COND + ((EQ 2 (LOGAND FIXEDFLAGS 2)) (* ; "This font is fixed width.") + (SETQ TEM (\WIN WSTRM)) (* ; + "Read the fixed width for this font") + [COND + ((AND RELFLAG (NOT (ZEROP TEM))) (* ; "If it's size relative, scale it.") + (SETQ TEM (IQUOTIENT (ITIMES TEM NSMICASIZE) + 1000] + (for I from FIRSTCHAR to LASTCHAR do (* ; + "Fill in the char widths table with the width.") + (\FSETWIDTH WIDTHS I TEM))) + (T (* ; + "Variable width font, so we have to read widths.") + (* ; + "AIN WIDTHS FIRSTCHAR (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) WSTRM") + (for I from FIRSTCHAR to LASTCHAR do (\FSETWIDTH WIDTHS I noInfoCode)) + [\BINS (\GETOFD WSTRM 'INPUT) + WIDTHS + (UNFOLD FIRSTCHAR BYTESPERWORD) + (IMIN (UNFOLD (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) + BYTESPERWORD) + (IDIFFERENCE (GETFILEINFO WSTRM 'LENGTH) + (GETFILEPTR WSTRM] (* ; "Read the X widths.") + (for I from FIRSTCHAR to LASTCHAR when (EQ noInfoCode (\FGETWIDTH WIDTHS I)) + do (* ; + "For chars that have no width info, let width be zero.") + (\FSETWIDTH WIDTHS I 0)) + (CL:WHEN RELFLAG (* ; + "If the widths are size-relative, scale them.") + (for I from FIRSTCHAR to LASTCHAR + do (\FSETWIDTH WIDTHS I (IQUOTIENT (ITIMES (\FGETWIDTH WIDTHS I) + NSMICASIZE) + 1000))))] + [COND + ((EQ 1 (LOGAND FIXEDFLAGS 1)) + (COND + ((ILESSP (GETFILEPTR WSTRM) + (GETEOFPTR WSTRM)) + (SETQ WIDTHSY (\WIN WSTRM))) + (T (* ; + "STAR FONT FILES LIKE TO LEAVE OFF THE Y WIDTH.") + (SETQ WIDTHSY 0))) (* ; + "The fixed width-Y for this font; the width-Y field is a single integer in the FD") + (replace (CHARSETINFO YWIDTHS) of CSINFO with (CL:IF (AND RELFLAG + (NOT (ZEROP WIDTHSY))) + (IQUOTIENT (ITIMES WIDTHSY + NSMICASIZE) + 1000) + WIDTHSY))) + (T (* ; + "Variable Y-width font. Fill it in as above") + (SETQ WIDTHSY (replace (CHARSETINFO YWIDTHS) of CSINFO with (\CREATECSINFOELEMENT + ))) + (for I from FIRSTCHAR to LASTCHAR do (\FSETWIDTH WIDTHSY I noInfoCode)) + (\BINS WSTRM WIDTHSY (UNFOLD FIRSTCHAR BYTESPERWORD) + (UNFOLD (ADD1 (IDIFFERENCE LASTCHAR FIRSTCHAR)) + BYTESPERWORD)) (* ; "Read the Y widths") + (for I from FIRSTCHAR to LASTCHAR when (EQ noInfoCode (\FGETWIDTH WIDTHSY I)) + do (* ; + "Let any characters with no width info be zero height") + (\FSETWIDTH WIDTHSY I 0)) + (CL:WHEN RELFLAG (* ; + "If the widths are size-relative, scale them.") + (for I from FIRSTCHAR to LASTCHAR + do (\FSETWIDTH WIDTHSY I (IQUOTIENT (ITIMES (\FGETWIDTH WIDTHSY I) + NSMICASIZE) + 1000))))] + (RETURN CSINFO)))]) +(\FACECODE + [LAMBDA (FACE) (* rmk%: "27-FEB-81 12:16") + (IPLUS (SELECTQ (fetch (FONTFACE EXPANSION) of FACE) + (REGULAR 0) + (COMPRESSED 6) + (EXPANDED 12) + (SHOULDNT)) + (SELECTQ (fetch (FONTFACE WEIGHT) of FACE) + (MEDIUM 0) + (BOLD 2) + (LIGHT 4) + (SHOULDNT)) + (SELECTQ (fetch (FONTFACE SLOPE) of FACE) + (REGULAR 0) + (ITALIC 1) + (SHOULDNT]) + +(\FAMILYCODE + [LAMBDA (FAMILY WSTRM) (* rmk%: "11-Sep-84 10:54") + + (* ;; "Returns the family CODE for FAMILY in a standard widths file, leaving the file positioned at the beginning of the next file entry. Returns NIL if FAMILY not found. If FAMILY is T, returns the code for the first family in the index.") + + (SETFILEPTR WSTRM 0) + (bind TYPE CODE LENGTH (NCHARS _ (NCHARS FAMILY)) + (NEXT _ 0) + do (SETFILEPTR WSTRM NEXT) + (SETQ TYPE (\BIN WSTRM)) + (SETQ LENGTH (\BIN WSTRM)) + (add NEXT (LLSH (IPLUS LENGTH (LLSH (LOGAND TYPE 15) + 8)) + 1)) + (SELECTQ (LRSH TYPE 4) + (1 (SETQ CODE (\WIN WSTRM)) + (COND + ([OR (EQ FAMILY T) + (AND (EQ NCHARS (\BIN WSTRM)) + (for I from 1 to NCHARS always (EQ (\BIN WSTRM) + (NTHCHARCODE FAMILY I] + (SETFILEPTR WSTRM NEXT) (* ; "Move file to next entry") + (RETURN CODE)))) + (0 (RETURN NIL)) + NIL]) +) +(DECLARE%: EVAL@COMPILE -(* ;; -"These are in priority order: if an early one doesn't find a font for a family, the later ones are tried (essentially going to MODERN as the default)." -) +(PUTPROPS \POSITIONFONTFILE MACRO + ((WSTRM NSMICASIZE FIRSTCHAR LASTCHAR FAMILY FACECODE) + + (* ;; "Some of the parameters are variable names to be set. Value is either NIL or SIZE") + + (bind TYPE LENGTH SIZE FAMCODE FILEFAM FILEFACE (NEXT _ 0) + first (OR (SETQ FAMCODE (\FAMILYCODE (OR FAMILY T) + WSTRM)) + (RETURN NIL)) + do (SETQ TYPE (\BIN WSTRM)) + (SETQ LENGTH (\BIN WSTRM)) + (add NEXT (LLSH (IPLUS LENGTH (LLSH (LOGAND TYPE 15) + 8)) + 1)) + (SELECTQ (LRSH TYPE 4) + (4 (SETQ FILEFAM (\BIN WSTRM)) + (SETQ FILEFACE (\BIN WSTRM)) + (CL:WHEN (OR (EQ FAMILY T) + (EQ FAMILY NIL) + (AND (IEQP FILEFAM FAMCODE) + (IEQP FILEFACE FACECODE))) + (SETQ FIRSTCHAR (\BIN WSTRM)) + (SETQ LASTCHAR (\BIN WSTRM)) + (CL:WHEN (AND (OR (ZEROP (SETQ SIZE (\WIN WSTRM))) + (LESSP (ABS (FQUOTIENT (IDIFFERENCE NSMICASIZE SIZE) + NSMICASIZE)) + 0.02)) + (ZEROP (\WIN WSTRM))) + (RETURN SIZE)))) + (0 (RETURN NIL)) + NIL) + (SETFILEPTR WSTRM NEXT)))) +) +(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE +(RPAQQ noInfoCode 32768) -(ADDTOVAR ASCIITONSTRANSLATIONS - (TIMESROMAN NIL CLASSIC) - (GACHA NIL TERMINAL) - (HELVETICA NIL MODERN) - (CLASSIC NIL MODERN) - (GACHA NIL MODERN) - (TIMESROMAN NIL MODERN) - (LOGO NIL LOGOTYPES) - (HIPPO HIPPOTONSARRAY CLASSIC) - (CYRILLIC CYRILLICTONSARRAY CLASSIC) - (SYMBOL \SYMBOLTONSARRAY MODERN) - (MATH \MATHTONSARRAY CLASSIC)) - -(READVARS-FROM-STRINGS '(\SYMBOLTONSARRAY HIPPOTONSARRAY CYRILLICTONSARRAY \MATHTONSARRAY) - "({Y256 SMALLPOSP 0 0 0 180 8546 0 8574 177 61309 61282 61283 61284 61285 0 184 0 0 61296 61298 61273 -61272 8549 8550 0 0 61054 61305 61275 61274 8546 61299 0 0 0 174 173 175 61266 61250 61251 61303 61261 - 61263 0 0 61262 {R4 0} 8551 61258 61259 61281 0 61292 172 61365 61364 61290 61351 0 0 0 47 0 65 66 67 - 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 61271 61270 0 61366 61367 61238 -61239 61362 61363 61360 61361 123 125 61234 61235 61052 8514 61243 61242 8740 8742 61308 8546 0 61301 -{R4 0} 167 61232 61233 182 64 211 163 36 {R128 0} } {Y256 SMALLPOSP 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 - 60973 61229 16 17 18 61221 20 21 61220 23 60973 61228 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 - 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 9793 9794 9809 9797 9798 9818 -9796 9802 9804 74 9805 9806 9807 9808 9810 9811 9803 9813 9814 9816 9817 86 9821 9819 9820 9801 91 92 -93 173 172 96 9825 9826 9841 9829 9830 9850 9828 9834 9836 106 9837 9838 9839 9840 9842 9843 9835 9845 - 9846 9848 9849 118 9853 9851 9852 9833 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 -138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 61220 61221 157 158 159 160 161 -162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 61286 184 185 186 -187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 -212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 -237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 } {Y256 SMALLPOSP 0 0 1 2 - 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 10023 37 -38 39 40 41 10041 43 44 8510 46 47 48 49 10095 51 10071 53 10088 55 10089 57 58 59 171 61 187 63 10047 - 10017 10018 10046 10021 10022 10038 10020 10049 10026 10027 10028 10029 10030 10031 10032 10033 10039 - 10034 10035 10036 10037 10019 10024 10045 10048 10025 10090 9984 10091 10044 10092 9984 10065 10066 -10110 10069 10070 10086 10068 10097 10074 10075 10076 10077 10078 10079 10080 10081 10087 10082 10083 -10084 10085 10067 10072 10093 10096 10073 10042 9984 10043 10040 9984 128 129 130 131 132 133 134 135 -136 137 138 139 140 141 142 10094 144 145 146 147 148 149 150 151 152 153 154 61220 61221 157 158 159 -160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 61286 184 -185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 -210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 -235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 } {Y256 SMALLPOSP - 0 0 61307 61234 61235 0 163 61301 61302 0 0 0 182 0 0 0 61286 0 0 0 61306 0 0 61295 {R9 0} 32 61232 -61287 8551 162 184 61366 61299 194 61308 199 177 61260 61309 8552 61285 61287 8738 8740 8574 61282 -61283 61284 61292 8570 199 167 0 8549 8546 8550 191 61248 61365 61258 61356 61369 61364 61233 61275 -61279 61273 61274 61278 61272 61629 61259 61281 61297 61265 61358 61305 61296 61271 61367 61298 180 -61626 61368 0 0 0 175 174 0 61351 61267 211 61370 61303 61266 61263 61288 61360 61361 61362 61363 -61256 61290 61287 61238 61240 210 61246 61244 61247 61245 61250 61251 61270 61239 188 189 190 61264 {R -129 0} }) -") - -(RPAQQ \ASCII2XCCSMAP - (("$" "0,244" Currency to dollar) - ("-" "41,76" Hyphen to Japanese hyphen) - ("_" "0,254" Underscore to left arrow) - ("^" "0,255" Caret to Up arrow) - ("^K" "0,302" Acute) - ("^N" "0,305" Macron) - ("^S" "357,45" Em dash) - ("^V" "357,44" En dash) - ("^X" "0,55" Neutral hyphen) - ("^O" "357,55" Em quad) - ("^\" "357,54" En quad) - ("^Y" "357,56" Figure space) - ("^D" "0,310" Diaresis) - ("^G" "0,271" Left quote) - ("^H" "0,241" Inverted !) - ("^B" "0,277" Inverted ?) - ("`" "0,251" Back quote to left quote) - ("0,233" "357,44" En dash (again?)) - ("0,234" "357,45" Em dash (again?)) - ("^^" "0,270" Divide))) -(DEFINEQ -(\ASCIIMAPARRAY - [LAMBDA (MAP SKIP) (* ; "Edited 21-Dec-2024 18:57 by rmk") - (SETQ SKIP (CHARCODE.DECODE SKIP)) - (LET ((TABLE (ARRAY 256 'WORD 0 0))) - (for I from 0 to 255 do (SETA TABLE I I)) - [for X FROMCODE in MAP eachtime [SETQ FROMCODE (OR (FIXP (CAR X)) - (CHARCODE.DECODE (CAR X] - unless (MEMB FROMCODE SKIP) do (SETA TABLE FROMCODE (CL:IF (STRINGP (CADR X)) - (CHARCODE.DECODE (CADR X)) - (LOGOR (LLSH (CADR X) - 8) - (CADDR X)))] - TABLE]) +(CONSTANTS (noInfoCode 32768)) ) -(RPAQ? \ASCII2XCCS (\ASCIIMAPARRAY \ASCII2XCCSMAP)) +(* "END EXPORTED DEFINITIONS") + -(RPAQ? \ASCII2MCCS (\ASCIIMAPARRAY \ASCII2XCCSMAP '("$" "-"))) +(ADDTOVAR INTERPRESSCHARSETFNS (INTERPRESS IPFONT.FILEP IPFONT.GETCHARSET)) + +(RPAQ? INTERPRESSFONTCOERCIONS + '((TIMESROMAN CLASSIC) + (GACHA TERMINAL) + (HELVETICA MODERN) + (CLASSIC MODERN) + (GACHA MODERN) + (TIMESROMAN MODERN) + (LOGO LOGOTYPES) + (HIPPO CLASSIC) + (CYRILLIC CLASSIC) + (SYMBOL MODERN) + (MATH CLASSIC) + (SIGMA MODERN) + (* MODERN))) (DECLARE%: DONTEVAL@LOAD DOCOPY (\INTERPRESSINIT) @@ -3908,45 +3831,44 @@ (LOADDEF 'BRUSH 'RECORDS 'IMAGEIO) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (15830 16683 (\IPC 15830 . 16683)) (16916 22568 (APPENDBYTE.IP 16926 . 17062) ( -APPENDIDENTIFIER.IP 17064 . 17586) (APPENDINT.IP 17588 . 18039) (APPENDINTEGER.IP 18041 . 18613) ( -APPENDLARGEVECTOR.IP 18615 . 19580) (APPENDNUMBER.IP 19582 . 20051) (APPENDOP.IP 20053 . 20699) ( -APPENDRATIONAL.IP 20701 . 21194) (APPENDSEQUENCEDESCRIPTOR.IP 21196 . 22391) (BYTESININT.IP 22393 . -22566)) (22604 62411 (ARCTO.IP 22614 . 23895) (BEGINMASTER.IP 23897 . 24170) (BEGINPAGE.IP 24172 . -24528) (BEGINPREAMBLE.IP 24530 . 24901) (CLIPRECTANGLE.IP 24903 . 25393) (CONCAT.IP 25395 . 25660) ( -CONCATT.IP 25662 . 25929) (ENDMASTER.IP 25931 . 26375) (ENDPAGE.IP 26377 . 26754) (ENDPREAMBLE.IP -26756 . 27555) (FGET.IP 27557 . 27860) (FILLRECTANGLE.IP 27862 . 30190) (FILLTRAJECTORY.IP 30192 . -30827) (FILLNGON.IP 30829 . 33106) (FSET.IP 33108 . 33411) (GETFRAMEVAR.IP 33413 . 33731) ( -INITIALIZEMASTER.IP 33733 . 34334) (INITIALIZECOLOR.IP 34336 . 35657) (ISET.IP 35659 . 36030) ( -GETCP.IP 36032 . 36341) (LINETO.IP 36343 . 36948) (MASKSTROKE.IP 36950 . 37223) (MOVETO.IP 37225 . -37562) (ROTATE.IP 37564 . 37866) (SCALE.IP 37868 . 38171) (SCALE2.IP 38173 . 38510) (SETCOLOR.IP 38512 - . 40741) (SETRGB.IP 40743 . 41799) (SETCOLORLV.IP 41801 . 46414) (SETCOLOR16.IP 46416 . 49522) ( -SETFONT.IP 49524 . 50345) (SETSPACE.IP 50347 . 50659) (SETXREL.IP 50661 . 51845) (SETX.IP 51847 . -53364) (SETXY.IP 53366 . 54538) (SETXYREL.IP 54540 . 55846) (SETY.IP 55848 . 57157) (SETYREL.IP 57159 - . 58059) (SHOW.IP 58061 . 61321) (TRAJECTORY.IP 61323 . 61721) (TRANS.IP 61723 . 62062) (TRANSLATE.IP - 62064 . 62409)) (62442 68532 (\CHANGE-VISIBLE-REGION.IP 62452 . 66113) (\PAPERSIZE.IP 66115 . 66936) -(HEADINGOP.IP 66938 . 68530)) (68533 173771 (DEFINEFONT.IP 68543 . 69517) (FONTNAME.IP 69519 . 70449) -(INTERPRESS.BITMAPSCALE 70451 . 71260) (INTERPRESS.OUTCHARFN 71262 . 77434) (INTERPRESSFILEP 77436 . -78770) (MAKEINTERPRESS 78772 . 78956) (NEWLINE.IP 78958 . 79690) (NEWPAGE.IP 79692 . 84667) ( -NEWPAGE?.IP 84669 . 85148) (OPENIPSTREAM 85150 . 93501) (SETUPFONTS.IP 93503 . 94495) (SHOWBITMAP.IP -94497 . 99038) (\BITMAPSIZE.IP 99040 . 99817) (SHOWBITMAP1.IP 99819 . 104191) (SHOWSHADE.IP 104193 . -105146) (\BITBLT.IP 105148 . 109352) (\SCALEDBITBLT.IP 109354 . 112999) (\BLTSHADE.IP 113001 . 114459) - (\CHARWIDTH.IP 114461 . 114911) (\CLOSEIPSTREAM 114913 . 115240) (\DRAWARC.IP 115242 . 115689) ( -\DRAWCURVE.IP 115691 . 118128) (\DRAWPOINT.IP 118130 . 119167) (\DSPCOLOR.IP 119169 . 120120) ( -ENSURE.RGB 120122 . 120786) (\IPCURVE2 120788 . 134042) (\CLIPCURVELINE.IP 134044 . 138742) ( -\DRAWLINE.IP 138744 . 142476) (\CLIPLINE 142478 . 147178) (\DSPBOTTOMMARGIN.IP 147180 . 147596) ( -\DSPFONT.IP 147598 . 151873) (\DSPLEFTMARGIN.IP 151875 . 152335) (\DSPLINEFEED.IP 152337 . 153004) ( -\DSPRIGHTMARGIN.IP 153006 . 153803) (\DSPSPACEFACTOR.IP 153805 . 154934) (\DSPTOPMARGIN.IP 154936 . -155372) (\DSPXPOSITION.IP 155374 . 156361) (\DSPROTATE.IP 156363 . 156541) (\PUSHSTATE.IP 156543 . -157435) (\POPSTATE.IP 157437 . 158072) (\DEFAULTSTATE.IP 158074 . 158426) (\DSPTRANSLATE.IP 158428 . -158609) (\DSPSCALE2.IP 158611 . 158786) (\DSPYPOSITION.IP 158788 . 159089) (FILLCIRCLE.IP 159091 . -160174) (\FILLPOLYGON.IP 160176 . 161507) (\DRAWPOLYGON.IP 161509 . 167639) (\FIXLINELENGTH.IP 167641 - . 168855) (\MOVETO.IP 168857 . 169221) (\SETBRUSH.IP 169223 . 171389) (\STRINGWIDTH.IP 171391 . -171794) (\DSPCLIPPINGREGION.IP 171796 . 172972) (\DSPOPERATION.IP 172974 . 173769)) (173962 174717 ( -IP-TOS 173972 . 174232) (POP-IP-STACK 174234 . 174529) (PUSH-IP-STACK 174531 . 174715)) (174778 187342 - (\CREATECHARSET.IP 174788 . 186579) (\CHANGECHARSET.IP 186581 . 187340)) (187343 190963 ( -\INTERPRESSINIT 187353 . 190961)) (190964 191522 (SCALEREGION 190974 . 191520)) (204450 206874 ( -INTERPRESSBITMAP 204460 . 206872)) (209082 214497 (\COERCEASCIITONSFONT 209092 . 212581) ( -\CREATEINTERPRESSFONT 212583 . 214156) (\SEARCHINTERPRESSFONTS 214158 . 214495)) (219512 220443 ( -\ASCIIMAPARRAY 219522 . 220441))))) + (FILEMAP (NIL (17251 22903 (APPENDBYTE.IP 17261 . 17397) (APPENDIDENTIFIER.IP 17399 . 17921) ( +APPENDINT.IP 17923 . 18374) (APPENDINTEGER.IP 18376 . 18948) (APPENDLARGEVECTOR.IP 18950 . 19915) ( +APPENDNUMBER.IP 19917 . 20386) (APPENDOP.IP 20388 . 21034) (APPENDRATIONAL.IP 21036 . 21529) ( +APPENDSEQUENCEDESCRIPTOR.IP 21531 . 22726) (BYTESININT.IP 22728 . 22901)) (22939 62746 (ARCTO.IP 22949 + . 24230) (BEGINMASTER.IP 24232 . 24505) (BEGINPAGE.IP 24507 . 24863) (BEGINPREAMBLE.IP 24865 . 25236) + (CLIPRECTANGLE.IP 25238 . 25728) (CONCAT.IP 25730 . 25995) (CONCATT.IP 25997 . 26264) (ENDMASTER.IP +26266 . 26710) (ENDPAGE.IP 26712 . 27089) (ENDPREAMBLE.IP 27091 . 27890) (FGET.IP 27892 . 28195) ( +FILLRECTANGLE.IP 28197 . 30525) (FILLTRAJECTORY.IP 30527 . 31162) (FILLNGON.IP 31164 . 33441) (FSET.IP + 33443 . 33746) (GETFRAMEVAR.IP 33748 . 34066) (INITIALIZEMASTER.IP 34068 . 34669) (INITIALIZECOLOR.IP + 34671 . 35992) (ISET.IP 35994 . 36365) (GETCP.IP 36367 . 36676) (LINETO.IP 36678 . 37283) ( +MASKSTROKE.IP 37285 . 37558) (MOVETO.IP 37560 . 37897) (ROTATE.IP 37899 . 38201) (SCALE.IP 38203 . +38506) (SCALE2.IP 38508 . 38845) (SETCOLOR.IP 38847 . 41076) (SETRGB.IP 41078 . 42134) (SETCOLORLV.IP +42136 . 46749) (SETCOLOR16.IP 46751 . 49857) (SETFONT.IP 49859 . 50680) (SETSPACE.IP 50682 . 50994) ( +SETXREL.IP 50996 . 52180) (SETX.IP 52182 . 53699) (SETXY.IP 53701 . 54873) (SETXYREL.IP 54875 . 56181) + (SETY.IP 56183 . 57492) (SETYREL.IP 57494 . 58394) (SHOW.IP 58396 . 61656) (TRAJECTORY.IP 61658 . +62056) (TRANS.IP 62058 . 62397) (TRANSLATE.IP 62399 . 62744)) (62777 68867 (\CHANGE-VISIBLE-REGION.IP +62787 . 66448) (\PAPERSIZE.IP 66450 . 67271) (HEADINGOP.IP 67273 . 68865)) (68868 174910 ( +DEFINEFONT.IP 68878 . 69852) (FONTNAME.IP 69854 . 70784) (INTERPRESS.BITMAPSCALE 70786 . 71579) ( +INTERPRESS.OUTCHARFN 71581 . 78088) (INTERPRESSFILEP 78090 . 79424) (MAKEINTERPRESS 79426 . 79610) ( +NEWLINE.IP 79612 . 80344) (NEWPAGE.IP 80346 . 85321) (NEWPAGE?.IP 85323 . 85802) (OPENIPSTREAM 85804 + . 94155) (SETUPFONTS.IP 94157 . 95149) (SHOWBITMAP.IP 95151 . 99692) (\BITMAPSIZE.IP 99694 . 100471) +(SHOWBITMAP1.IP 100473 . 104845) (SHOWSHADE.IP 104847 . 105800) (\BITBLT.IP 105802 . 110006) ( +\SCALEDBITBLT.IP 110008 . 113653) (\BLTSHADE.IP 113655 . 115113) (\CHARWIDTH.IP 115115 . 115565) ( +\CLOSEIPSTREAM 115567 . 115894) (\DRAWARC.IP 115896 . 116343) (\DRAWCURVE.IP 116345 . 118782) ( +\DRAWPOINT.IP 118784 . 119821) (\DSPCOLOR.IP 119823 . 120774) (ENSURE.RGB 120776 . 121440) (\IPCURVE2 +121442 . 134696) (\CLIPCURVELINE.IP 134698 . 139396) (\DRAWLINE.IP 139398 . 143130) (\CLIPLINE 143132 + . 147832) (\DSPBOTTOMMARGIN.IP 147834 . 148250) (\DSPFONT.IP 148252 . 153012) (\DSPLEFTMARGIN.IP +153014 . 153474) (\DSPLINEFEED.IP 153476 . 154143) (\DSPRIGHTMARGIN.IP 154145 . 154942) ( +\DSPSPACEFACTOR.IP 154944 . 156073) (\DSPTOPMARGIN.IP 156075 . 156511) (\DSPXPOSITION.IP 156513 . +157500) (\DSPROTATE.IP 157502 . 157680) (\PUSHSTATE.IP 157682 . 158574) (\POPSTATE.IP 158576 . 159211) + (\DEFAULTSTATE.IP 159213 . 159565) (\DSPTRANSLATE.IP 159567 . 159748) (\DSPSCALE2.IP 159750 . 159925) + (\DSPYPOSITION.IP 159927 . 160228) (FILLCIRCLE.IP 160230 . 161313) (\FILLPOLYGON.IP 161315 . 162646) +(\DRAWPOLYGON.IP 162648 . 168778) (\FIXLINELENGTH.IP 168780 . 169994) (\MOVETO.IP 169996 . 170360) ( +\SETBRUSH.IP 170362 . 172528) (\STRINGWIDTH.IP 172530 . 172933) (\DSPCLIPPINGREGION.IP 172935 . 174111 +) (\DSPOPERATION.IP 174113 . 174908)) (175101 175856 (IP-TOS 175111 . 175371) (POP-IP-STACK 175373 . +175668) (PUSH-IP-STACK 175670 . 175854)) (175917 176841 (\CHANGECHARSET.IP 175927 . 176839)) (176842 +180458 (\INTERPRESSINIT 176852 . 180456)) (193542 195966 (INTERPRESSBITMAP 193552 . 195964)) (198390 +201011 (\CREATEINTERPRESSFONT 198400 . 200128) (\CREATECHARSET.IP 200130 . 201009)) (201012 213185 ( +IPFONT.FILEP 201022 . 201206) (IPFONT.GETCHARSET 201208 . 211306) (\FACECODE 211308 . 211898) ( +\FAMILYCODE 211900 . 213183))))) STOP diff --git a/sources/INTERPRESS.LCOM b/sources/INTERPRESS.LCOM index cc4a8f51f935b71fef61ab2a447258b0bf0e26eb..decfd60d04cbd78ecde4bb4903581f5415f8778c 100644 GIT binary patch delta 6849 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 delta 11593 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 Pm8RaMGUa~rM|b@Xd)hg; From de0120ac30195cd3cf8513d3c29319984d771d56 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:49:27 -0700 Subject: [PATCH 08/40] Compatibility with new underscore/circumflex assignments --- library/UNIXCOMM | 35 +- library/UNIXCOMM.LCOM | Bin 6812 -> 6828 bytes lispusers/GITFNS | 298 +++--- lispusers/GITFNS.LCOM | Bin 51443 -> 51441 bytes lispusers/GITFNS.TEDIT | Bin 19574 -> 19802 bytes lispusers/HELPSYS | 1994 ++++++++++++++++++++-------------------- lispusers/HELPSYS.LCOM | Bin 62220 -> 62147 bytes 7 files changed, 1167 insertions(+), 1160 deletions(-) diff --git a/library/UNIXCOMM b/library/UNIXCOMM index a21d84584..02c27436d 100644 --- a/library/UNIXCOMM +++ b/library/UNIXCOMM @@ -1,16 +1,15 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "18-Dec-2022 11:55:01" {WMEDLEY}UNIXCOMM.;11 14599 +(FILECREATED " 2-Sep-2025 12:06:52"  +{DSK}kaplan>Local>medley3.5>working-medley>library>UNIXCOMM.;14 14825 - :CHANGES-TO (FNS INITIALIZE-SHELL-DEVICE UNIX-BACKFILEPTR UNIX-STREAM-EOFP) - (VARS UNIXCOMMCOMS) + :EDIT-BY rmk - :PREVIOUS-DATE "25-Oct-2022 21:56:00" {WMEDLEY}UNIXCOMM.;9) + :CHANGES-TO (FNS FORK-UNIX) + :PREVIOUS-DATE "29-Apr-2025 22:45:47" +{DSK}kaplan>Local>medley3.5>working-medley>library>UNIXCOMM.;13) -(* ; " -Copyright (c) 1988-1990, 2018, 2022 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT UNIXCOMMCOMS) @@ -75,8 +74,13 @@ Copyright (c) 1988-1990, 2018, 2022 by Venue & Xerox Corporation. else (SUBRCALL UNIX-HANDLECOMM 4]) (FORK-UNIX - [LAMBDA (STR) (* ; "Edited 25-May-88 15:47 by drc:") - (SUBRCALL UNIX-HANDLECOMM 0 (\DTEST STR 'ONED-ARRAY]) + [LAMBDA (STR) (* ; "Edited 2-Sep-2025 12:03 by rmk") + (* ; "Edited 29-Apr-2025 22:45 by rmk") + (* ; "Edited 25-May-88 15:47 by drc:") + + (* ;; "MTOUBYTES converts MCCS codes to Unicodes, and then lays out the bytes of the UTF-8 encoding of those characters. ") + + (SUBRCALL UNIX-HANDLECOMM 0 (MTOUTF8STRING (\DTEST STR 'ONED-ARRAY]) (UNIX-KILL [LAMBDA (CONN) (* ; "Edited 25-May-88 16:04 by drc:") @@ -316,12 +320,11 @@ Copyright (c) 1988-1990, 2018, 2022 by Venue & Xerox Corporation. ) (PUTPROPS UNIXCOMM FILETYPE COMPILE-FILE) -(PUTPROPS UNIXCOMM COPYRIGHT ("Venue & Xerox Corporation" 1988 1989 1990 2018 2022)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1963 7028 (FORK-SHELL 1973 . 3170) (FORK-UNIX 3172 . 3348) (UNIX-KILL 3350 . 3539) ( -UNIX-WRITE 3541 . 4252) (CREATE-SHELL-STREAM 4254 . 5138) (CREATE-PROCESS-STREAM 5140 . 5979) ( -UNIXCOMM-AROUNDEXITFN 5981 . 7026)) (7076 12267 (INITIALIZE-SHELL-DEVICE 7086 . 8514) ( -UNIX-GET-NEXT-BUFFER 8516 . 10716) (UNIX-BACKFILEPTR 10718 . 11130) (UNIX-STREAM-EOFP 11132 . 11613) ( -UNIX-STREAM-OUT 11615 . 11871) (UNIX-STREAM-CLOSE 11873 . 12265)) (12515 14221 ( -CREATE-UNIX-SOCKET-STREAM 12525 . 13331) (ACCEPT-UNIX-SOCKET-STREAM 13333 . 14219))))) + (FILEMAP (NIL (1903 7339 (FORK-SHELL 1913 . 3110) (FORK-UNIX 3112 . 3659) (UNIX-KILL 3661 . 3850) ( +UNIX-WRITE 3852 . 4563) (CREATE-SHELL-STREAM 4565 . 5449) (CREATE-PROCESS-STREAM 5451 . 6290) ( +UNIXCOMM-AROUNDEXITFN 6292 . 7337)) (7387 12578 (INITIALIZE-SHELL-DEVICE 7397 . 8825) ( +UNIX-GET-NEXT-BUFFER 8827 . 11027) (UNIX-BACKFILEPTR 11029 . 11441) (UNIX-STREAM-EOFP 11443 . 11924) ( +UNIX-STREAM-OUT 11926 . 12182) (UNIX-STREAM-CLOSE 12184 . 12576)) (12826 14532 ( +CREATE-UNIX-SOCKET-STREAM 12836 . 13642) (ACCEPT-UNIX-SOCKET-STREAM 13644 . 14530))))) STOP diff --git a/library/UNIXCOMM.LCOM b/library/UNIXCOMM.LCOM index 0e9e8dfa67e897e14c2c6571b847fe15bfa14974..22c08221e4b2919760463eea22a9902fde7a9fd6 100644 GIT binary patch delta 1527 zcmb`Gy>Ht_6u>FRmTe`2jiip08tn_)!7@OBcO=D+27(#sBom=Xf}|X~G2ke%kSLZv zASVcdAQ0fOL($}bF6~-$$r3oT|ArRm)B;_y80pxK9dgu%LDNQ;bRogx-Fxr%d+&Z! zUMt_-?g18p)}DYxtN_A>STq#O!vcSQcYCkhX>G#p4)Bn9UI}i!xY5{eb@xkK&Am=@ zr)2NmZ+1%Ct<6sBnN(0pPj|ap?VSh0V5QV)-|IHJ&q@u)S}nWvdf_W1=Yf}yU_N;; z%vUseSnnsy@NAD~*+i(a$0iSLmbTikZHONz6bd|SHXpOHl7S@A5D}lxEJWwaJ~2a5 zVTGSd7o+KY3=SY!W7-T-u|nbI8g#d}z$h=9PK^XY=mIOo383oww}i+-9t_VXE0)^` zgbJ$qHgRg0PTYX_zUzac z!n)&Hb+blXFQC6nx3hWR-Z9A3Qs2i3<8QQ?SsXF`JQF1&p;<1IAONHyTE2L_r$Mzs zRsbUj7K3GC+XDNv%489+s1E;$IQb9h^3VuwQNAEq8M!vZwyW&<|@I6v?y)^3d7xbI#K@W@KDI*$-c-Dv{52>-9 zr2cPPquT*USB6G395b?^4qYQQSqURZJO^KA_{qD_uX!~0surIL`bX~JxMSIw54shU Ap#T5? delta 1511 zcmaJ>y>HV%6nC1^(x?MSsFaVQhe0SQvhiKw#1076B$vd(u`SyP4OB>_jYLpss;EUE z1eKUz;X}9bC%}NpAHjme#0U&b48Xv|0?%mz!HHPT_MP9|@9W(Q^||`=(p92K#pa4c z6-t4SysG9EB0^GJY2Vyvtu2 zQFR^ig^FR9*|;wS4u29q$=}3}UQR)>Zg@WQ;Ufh<1$ozFbe)s@0=N{j~|#81R-`~VFDk*y{)l*f^AwmFDLfJQcwaFmTbqY8fE6Vcxp`8 z6BEW3j70eJeiE;|jz4%MeCO{cPsVEe*W_E7f*+s~Ro8P|py}-3C(#Hj`7AIB1?Kxe zvKs%n_xM;Q$LFRFZet}2il*;cMk8pr468|(wCppx=%c>Ob`8&{`amh}J2XjDC>2>9 zC{bYEuQ1D!@Y5`?d7w&Wca5ORku{=|5M&EM1IcCKf)i8_TN?63Rx)Z<07UIoYZ`=B zTc*t{W|#3lO+iLo!m{lIvg0xvav{seT$aKTbA0A`j>k_YTFGH;g^#FhY+>pjY2We3 zv&Z>)@K*SvGycjUgHms84RgC~m!a#Ze zC#iq(H$o)-WiP~$Jl~vJDG#}(k8rJ<&4_Ec0oOp~QsNl@aj-Lk*pSL#UkKkOVtj4( z$mIKOLxh0lV|8qZ6a3TcgKeUR)c<;>rK6sOKBbjjeyJMuf)c%-?aa`c(r+>dqr4m6 zoHh_&H`}Wwn1F~;L>ZA*9eGFH>tgOFc;WE%M$)YXVVD2CnV{gf4bLoB0=$ju&GoG& qoPxz>r+pg=?aoHKv%J}AuZsv18wm#;2eg7JM8kp7R4RdYPvSRoS&3W# diff --git a/lispusers/GITFNS b/lispusers/GITFNS index b6ef04295..ba121bb76 100644 --- a/lispusers/GITFNS +++ b/lispusers/GITFNS @@ -1,29 +1,28 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "29-Apr-2025 15:17:37" {WMEDLEY}GITFNS.;541 134267 +(FILECREATED " 9-May-2025 11:39:55" {WMEDLEY}GITFNS.;545 134412 :EDIT-BY rmk - :CHANGES-TO (VARS GITFNSCOMS) - (FNS GIT-WORKING-COMPARE-DIRECTORIES) + :CHANGES-TO (FNS GIT-PULL-REQUESTS) - :PREVIOUS-DATE "31-Mar-2025 21:25:00" {WMEDLEY}GITFNS.;539) + :PREVIOUS-DATE " 5-May-2025 22:04:15" {WMEDLEY}GITFNS.;544) (PRETTYCOMPRINT GITFNSCOMS) -(RPAQQ GITFNSCOMS +(RPAQQ GITFNSCOMS ( - (* ;; "Set up") + (* ;; "Set up") (FILES (SYSLOAD FROM LISPUSERS) COMPAREDIRECTORIES COMPARESOURCES COMPARETEXT PSEUDOHOSTS JSON UNIXUTILS REGIONMANAGER ) - (* ;; "") + (* ;; "") - (* ;; "GIT projects") + (* ;; "GIT projects") (COMS (FNS GIT-CLONEP GIT-INIT GIT-MAKE-PROJECT GIT-GET-PROJECT GIT-PUT-PROJECT-FIELD GIT-PROJECT-PATH FIND-ANCESTOR-DIRECTORY GIT-FIND-CLONE GIT-MAINBRANCH @@ -44,94 +43,94 @@ (P (GIT-INIT)) (ADDVARS (AROUNDEXITFNS GIT-INIT)) - (* ;; "") + (* ;; "") - (* ;; "Lisp exec commands") + (* ;; "Lisp exec commands") (INITVARS (GIT-MERGE-COMPARES T) (GIT-CDBROWSER-SEPARATE-DIRECTIONS T)) (COMMANDS gwc bbc prc cob b? cdg cdw) (FNS PRC-COMMAND) - (* ;; "") + (* ;; "") - (* ;; "File correspondents") + (* ;; "File correspondents") (FNS ALLSUBDIRS MEDLEYSUBDIRS GITSUBDIRS) (FNS TOGIT FROMGIT GIT-DELETE-FILE MYMEDLEY-DELETE-FILES) (FNS MYMEDLEYSUBDIR GITSUBDIR STRIPDIR STRIPHOST STRIPNAME STRIPWHERE) (FNS GFILE4MFILE MFILE4GFILE GIT-REPO-FILENAME) - (* ;; "") + (* ;; "") - (* ;; "Git commands") + (* ;; "Git commands") (FNS GIT-COMMIT GIT-PUSH GIT-PULL GIT-APPROVAL GIT-GET-FILE GIT-FILE-EXISTS? GIT-REMOTE-UPDATE GIT-REMOTE-ADD GIT-FILE-DATE GIT-FILE-HISTORY GIT-PRINT-FILE-HISTORY GIT-FETCH) - (* ;; "Differences") + (* ;; "Differences") (FNS GIT-BRANCH-DIFF GIT-COMMIT-DIFFS GIT-BRANCH-RELATIONS) - (* ;; "") + (* ;; "") - (* ;; "Branches") + (* ;; "Branches") (FNS GIT-BRANCH-NUM GIT-CHECKOUT GIT-WHICH-BRANCH GIT-MAKE-BRANCH GIT-BRANCHES GIT-BRANCH-EXISTS? GIT-PICK-BRANCH GIT-BRANCH-MENU GIT-BRANCH-WHENSELECTEDFN GIT-PULL-REQUESTS GIT-SHORT-BRANCH-NAME GIT-LONG-NAME GIT-PRC-BRANCHES) - (* ;; "My branches") + (* ;; "My branches") (FNS GIT-MY-CURRENT-BRANCH GIT-MY-BRANCHP GIT-MY-NEXT-BRANCH GIT-MY-BRANCHES) - (* ;; "") + (* ;; "") - (* ;; "Worktrees") + (* ;; "Worktrees") (FNS GIT-ADD-WORKTREE GIT-REMOVE-WORKTREE GIT-LIST-WORKTREES WORKTREEDIR) - (* ;; "") + (* ;; "") - (* ;; "Comparisons") + (* ;; "Comparisons") (FNS GIT-GET-DIFFERENT-FILES GIT-BRANCHES-COMPARE-DIRECTORIES GIT-WORKING-COMPARE-DIRECTORIES GIT-COMPARE-WORKTREE GITCDOBJBUTTONFN GIT-CD-LABELFN GIT-CD-MENUFN GIT-WORKING-COMPARE-FILES GIT-BRANCHES-COMPARE-FILES GIT-PR-COMPARE) (INITVARS (FROMGITN 0)) - (* ;; "") + (* ;; "") - (* ;; "Utilities") + (* ;; "Utilities") (FNS CDGITDIR GIT-COMMAND GITORIGIN GIT-INITIALS GIT-COMMAND-TO-FILE GIT-RESULT-TO-LINES STRIPLOCAL) - (PROPS (GITFNS FILETYPE)))) + (PROPS (GITFNS FILETYPE)))) -(* ;; "Set up") +(* ;; "Set up") -(FILESLOAD (SYSLOAD FROM LISPUSERS) +(FILESLOAD (SYSLOAD FROM LISPUSERS) COMPAREDIRECTORIES COMPARESOURCES COMPARETEXT PSEUDOHOSTS JSON UNIXUTILS REGIONMANAGER) -(* ;; "") +(* ;; "") -(* ;; "GIT projects") +(* ;; "GIT projects") (DEFINEQ @@ -402,15 +401,15 @@ (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE -(TYPERECORD GIT-PROJECT (PROJECTNAME GITHOST WHOST EXCLUSIONS DEFAULTSUBDIRS CLONEPATH MAINBRANCH)) +(TYPERECORD GIT-PROJECT (PROJECTNAME GITHOST WHOST EXCLUSIONS DEFAULTSUBDIRS CLONEPATH MAINBRANCH)) -(RECORD PULLREQUEST (PRNUMBER PRDESCRIPTION PRNAME PRSTATUS PRPROJECT PRURL PRLOGIN)) +(RECORD PULLREQUEST (PRNUMBER PRDESCRIPTION PRNAME PRSTATUS PRPROJECT PRURL PRLOGIN)) ) ) -(RPAQ? GIT-DEFAULT-PROJECT 'MEDLEY) +(RPAQ? GIT-DEFAULT-PROJECT 'MEDLEY) -(RPAQ? GIT-DEFAULT-PROJECTS +(RPAQ? GIT-DEFAULT-PROJECTS '((MEDLEY NIL NIL (EXPORTS.ALL RDSYS RDSYS.LCOM loadups/ patches/ tmp/ fontsold/ clos/ cltl2/) (greetfiles scripts sources library lispusers internal doctools rooms)) (NOTECARDS) @@ -418,120 +417,120 @@ (TEST) (MAIKO))) -(RPAQ? GIT-PROJECTS NIL) +(RPAQ? GIT-PROJECTS NIL) -(RPAQ? GIT-PRC-MENUS NIL) +(RPAQ? GIT-PRC-MENUS NIL) -(GIT-INIT) +(GIT-INIT) -(ADDTOVAR AROUNDEXITFNS GIT-INIT) +(ADDTOVAR AROUNDEXITFNS GIT-INIT) -(* ;; "") +(* ;; "") -(* ;; "Lisp exec commands") +(* ;; "Lisp exec commands") -(RPAQ? GIT-MERGE-COMPARES T) +(RPAQ? GIT-MERGE-COMPARES T) -(RPAQ? GIT-CDBROWSER-SEPARATE-DIRECTIONS T) +(RPAQ? GIT-CDBROWSER-SEPARATE-DIRECTIONS T) (DEFCOMMAND gwc (SUBDIR . OTHERS) - (* ;; "Compares the specified local git-medley subdirectories against my working Medley. The SUBDIRS are the arguments up to one that looks like a project") + (* ;; "Compares the specified local git-medley subdirectories against my working Medley. The SUBDIRS are the arguments up to one that looks like a project") - (LET ((SUBDIRS (AND SUBDIR (CONS SUBDIR OTHERS))) + (LET ((SUBDIRS (AND SUBDIR (CONS SUBDIR OTHERS))) PROJECT) - (SETQ SUBDIRS (FOR STAIL ON SUBDIRS COLLECT (IF (GIT-GET-PROJECT (CAR STAIL) + (SETQ SUBDIRS (FOR STAIL ON SUBDIRS COLLECT (IF (GIT-GET-PROJECT (CAR STAIL) NIL T) - THEN (SETQ PROJECT (CAR STAIL)) - (GO $$OUT)) - (CAR STAIL))) - (GIT-WORKING-COMPARE-DIRECTORIES SUBDIRS NIL NIL NIL T PROJECT))) + THEN (SETQ PROJECT (CAR STAIL)) + (GO $$OUT)) + (CAR STAIL))) + (GIT-WORKING-COMPARE-DIRECTORIES SUBDIRS NIL NIL NIL T PROJECT))) (DEFCOMMAND bbc (BRANCH1 BRANCH2 LOCAL PROJECT) - (* ;; "Compares 2 git branches. Defaults to local/ if LOCAL, otherwise defaults to origin/. BRANCH2 defaults to the main branch (origin/ or local/ depending on LOCAL)") + (* ;; "Compares 2 git branches. Defaults to local/ if LOCAL, otherwise defaults to origin/. BRANCH2 defaults to the main branch (origin/ or local/ depending on LOCAL)") - (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) - (GIT-FETCH PROJECT) - (SETQ BRANCH1 (SELECTQ (U-CASE BRANCH1) + (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) + (GIT-FETCH PROJECT) + (SETQ BRANCH1 (SELECTQ (U-CASE BRANCH1) ((NIL T) - (GIT-MY-CURRENT-BRANCH PROJECT)) + (GIT-MY-CURRENT-BRANCH PROJECT)) ((LOCAL REMOTE ORIGIN) - (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH1 PROJECT T))) - (OR (GIT-LONG-NAME BRANCH1 NIL PROJECT) + (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH1 PROJECT T))) + (OR (GIT-LONG-NAME BRANCH1 NIL PROJECT) BRANCH1))) - (SETQ BRANCH2 (SELECTQ (U-CASE BRANCH2) + (SETQ BRANCH2 (SELECTQ (U-CASE BRANCH2) ((NIL T) - (GIT-MAINBRANCH PROJECT LOCAL)) + (GIT-MAINBRANCH PROJECT LOCAL)) ((LOCAL REMOTE ORIGIN) - (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH2 PROJECT T))) - (OR (GIT-LONG-NAME BRANCH2 NIL PROJECT) + (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH2 PROJECT T))) + (OR (GIT-LONG-NAME BRANCH2 NIL PROJECT) BRANCH2))) - (GIT-BRANCHES-COMPARE-DIRECTORIES BRANCH1 (OR BRANCH2 (GIT-MAINBRANCH PROJECT LOCAL)) + (GIT-BRANCHES-COMPARE-DIRECTORIES BRANCH1 (OR BRANCH2 (GIT-MAINBRANCH PROJECT LOCAL)) LOCAL PROJECT)) (DEFCOMMAND prc (REMOTEBRANCH DRAFTS PROJECT) - (* ;; "Compares REMOTEBRANCH against the main orign branch, for pull-request assessment") + (* ;; "Compares REMOTEBRANCH against the main orign branch, for pull-request assessment") - (PRC-COMMAND REMOTEBRANCH DRAFTS PROJECT)) + (PRC-COMMAND REMOTEBRANCH DRAFTS PROJECT)) (DEFCOMMAND cob (BRANCH NEXTTITLESTRING PROJECT) - (* ;; "Switches to BRANCH. T means my current branch, NEW/NEXT means my next branch (under wherever we are now), and NEXTTITLESTRING if given will be attached to the branch-name. Default is to bring up a menu of locally available branches.") + (* ;; "Switches to BRANCH. T means my current branch, NEW/NEXT means my next branch (under wherever we are now), and NEXTTITLESTRING if given will be attached to the branch-name. Default is to bring up a menu of locally available branches.") - (CL:UNLESS (STRINGP NEXTTITLESTRING) - (SETQ PROJECT NEXTTITLESTRING)) + (CL:UNLESS (STRINGP NEXTTITLESTRING) + (SETQ PROJECT NEXTTITLESTRING)) (CL:UNLESS PROJECT - (CL:WHEN (GIT-GET-PROJECT BRANCH NIL T) - (SETQ PROJECT BRANCH) - (SETQ BRANCH NIL))) - (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) - (GIT-FETCH PROJECT) - (SELECTQ (U-CASE BRANCH) - (T (GIT-CHECKOUT (GIT-MY-CURRENT-BRANCH PROJECT) + (CL:WHEN (GIT-GET-PROJECT BRANCH NIL T) + (SETQ PROJECT BRANCH) + (SETQ BRANCH NIL))) + (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) + (GIT-FETCH PROJECT) + (SELECTQ (U-CASE BRANCH) + (T (GIT-CHECKOUT (GIT-MY-CURRENT-BRANCH PROJECT) PROJECT)) ((NEW NEXT) - (GIT-MAKE-BRANCH NIL NEXTTITLESTRING PROJECT)) - (CL:WHEN [SETQ BRANCH (IF BRANCH - THEN (GIT-LONG-NAME BRANCH NIL PROJECT) - ELSE (GIT-PICK-BRANCH (GIT-BRANCHES 'LOCAL PROJECT T) - (CONCAT (L-CASE (GIT-GET-PROJECT PROJECT 'PROJECTNAME) + (GIT-MAKE-BRANCH NIL NEXTTITLESTRING PROJECT)) + (CL:WHEN [SETQ BRANCH (IF BRANCH + THEN (GIT-LONG-NAME BRANCH NIL PROJECT) + ELSE (GIT-PICK-BRANCH (GIT-BRANCHES 'LOCAL PROJECT T) + (CONCAT (L-CASE (GIT-GET-PROJECT PROJECT 'PROJECTNAME) T) " branches"] - (GIT-CHECKOUT BRANCH PROJECT)))) + (GIT-CHECKOUT BRANCH PROJECT)))) -(DEFCOMMAND b? (PROJECT) (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) - (GIT-FETCH PROJECT) - (CONCAT (L-CASE (GIT-GET-PROJECT PROJECT 'PROJECTNAME) +(DEFCOMMAND b? (PROJECT) (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) + (GIT-FETCH PROJECT) + (CONCAT (L-CASE (GIT-GET-PROJECT PROJECT 'PROJECTNAME) T) " " - (GIT-WHICH-BRANCH PROJECT))) - -(DEFCOMMAND cdg (PROJECT SUBDIR) (CL:UNLESS (GIT-GET-PROJECT PROJECT NIL T) - (SETQ SUBDIR PROJECT) - (SETQ PROJECT GIT-DEFAULT-PROJECT)) - (CL:WHEN [AND SUBDIR (NOT (MEMB (CHCON1 SUBDIR)) - (CHARCODE (> /] - (SETQ SUBDIR (CONCAT SUBDIR "/"))) - (SLASHIT (/CNDIR (CONCAT (GIT-GET-PROJECT PROJECT 'GITHOST) - (OR SUBDIR ""))) + (GIT-WHICH-BRANCH PROJECT))) + +(DEFCOMMAND cdg (PROJECT SUBDIR) (CL:UNLESS (GIT-GET-PROJECT PROJECT NIL T) + (SETQ SUBDIR PROJECT) + (SETQ PROJECT GIT-DEFAULT-PROJECT)) + (CL:WHEN [AND SUBDIR (NOT (MEMB (CHCON1 SUBDIR)) + (CHARCODE (> /] + (SETQ SUBDIR (CONCAT SUBDIR "/"))) + (SLASHIT (/CNDIR (CONCAT (GIT-GET-PROJECT PROJECT 'GITHOST) + (OR SUBDIR ""))) T)) -(DEFCOMMAND cdw (PROJECT SUBDIR) (CL:UNLESS (GIT-GET-PROJECT PROJECT NIL T) - (SETQ SUBDIR PROJECT) - (SETQ PROJECT GIT-DEFAULT-PROJECT)) - (CL:WHEN [AND SUBDIR (NOT (MEMB (CHCON1 SUBDIR)) - (CHARCODE (> /] - (SETQ SUBDIR (CONCAT SUBDIR "/"))) - (SLASHIT (/CNDIR (CONCAT (GIT-GET-PROJECT PROJECT 'WHOST) - (OR SUBDIR ""))) +(DEFCOMMAND cdw (PROJECT SUBDIR) (CL:UNLESS (GIT-GET-PROJECT PROJECT NIL T) + (SETQ SUBDIR PROJECT) + (SETQ PROJECT GIT-DEFAULT-PROJECT)) + (CL:WHEN [AND SUBDIR (NOT (MEMB (CHCON1 SUBDIR)) + (CHARCODE (> /] + (SETQ SUBDIR (CONCAT SUBDIR "/"))) + (SLASHIT (/CNDIR (CONCAT (GIT-GET-PROJECT PROJECT 'WHOST) + (OR SUBDIR ""))) T)) (DEFINEQ @@ -617,12 +616,12 @@ -(* ;; "") +(* ;; "") -(* ;; "File correspondents") +(* ;; "File correspondents") (DEFINEQ @@ -865,12 +864,12 @@ -(* ;; "") +(* ;; "") -(* ;; "Git commands") +(* ;; "Git commands") (DEFINEQ @@ -1074,7 +1073,7 @@ -(* ;; "Differences") +(* ;; "Differences") (DEFINEQ @@ -1187,14 +1186,16 @@ T]) (GIT-COMMIT-DIFFS - [LAMBDA (BRANCH1 BUTNOTBRANCH2 PROJECT) (* ; "Edited 2-May-2024 11:24 by mth") + [LAMBDA (BRANCH1 BUTNOTBRANCH2 PROJECT) (* ; "Edited 5-May-2025 21:59 by rmk") + (* ; "Edited 29-Apr-2025 22:08 by rmk") + (* ; "Edited 2-May-2024 11:24 by mth") (* ; "Edited 26-Jun-2022 13:32 by rmk") (* ; "Edited 7-May-2022 23:48 by rmk") (* ; "Edited 2-May-2022 13:45 by rmk") (* ;; "Returns the identifiers for commits in BRANCH1 but not in BUTNOTBRANCH2") - (GIT-COMMAND (CONCAT "git log --format=%"%%h%" %"" BRANCH1 "%" %"^" BUTNOTBRANCH2 "%"") + (GIT-COMMAND (CONCAT "git log --format=%"%%h%" %"" BRANCH1 "%" %"­" BUTNOTBRANCH2 "%"") NIL NIL PROJECT]) (GIT-BRANCH-RELATIONS @@ -1262,12 +1263,12 @@ -(* ;; "") +(* ;; "") -(* ;; "Branches") +(* ;; "Branches") (DEFINEQ @@ -1466,7 +1467,8 @@ '(PROGN (DSPFONT OLDVALUE T])]) (GIT-PULL-REQUESTS - [LAMBDA (INCLUDEDRAFTS PROJECT) (* ; "Edited 20-May-2024 22:12 by rmk") + [LAMBDA (INCLUDEDRAFTS PROJECT) (* ; "Edited 9-May-2025 11:39 by rmk") + (* ; "Edited 20-May-2024 22:12 by rmk") (* ; "Edited 13-May-2024 18:59 by rmk") (* ; "Edited 11-May-2024 10:51 by rmk") (* ; "Edited 1-May-2024 09:23 by rmk") @@ -1493,7 +1495,7 @@ PRDESCRIPTION _ (JSON-GET JSOBJ 'title) PRSTATUS _ (CL:IF DRAFT 'D - (CL:IF (STREQUAL "REVIEW_REQUIRED" + (CL:IF (STREQUAL "REVIEW¬REQUIRED" (JSON-GET JSOBJ 'reviewDecision)) " " 'A)) @@ -1575,7 +1577,7 @@ -(* ;; "My branches") +(* ;; "My branches") (DEFINEQ @@ -1642,12 +1644,12 @@ -(* ;; "") +(* ;; "") -(* ;; "Worktrees") +(* ;; "Worktrees") (DEFINEQ @@ -1718,12 +1720,12 @@ -(* ;; "") +(* ;; "") -(* ;; "Comparisons") +(* ;; "Comparisons") (DEFINEQ @@ -2273,16 +2275,16 @@ RB NIL PROJECT]) ) -(RPAQ? FROMGITN 0) +(RPAQ? FROMGITN 0) -(* ;; "") +(* ;; "") -(* ;; "Utilities") +(* ;; "Utilities") (DEFINEQ @@ -2430,35 +2432,35 @@ STRING]) ) -(PUTPROPS GITFNS FILETYPE :TCOMPL) +(PUTPROPS GITFNS FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4225 20804 (GIT-CLONEP 4235 . 5563) (GIT-INIT 5565 . 6195) (GIT-MAKE-PROJECT 6197 . -13862) (GIT-GET-PROJECT 13864 . 15789) (GIT-PUT-PROJECT-FIELD 15791 . 17432) (GIT-PROJECT-PATH 17434 - . 18478) (FIND-ANCESTOR-DIRECTORY 18480 . 18829) (GIT-FIND-CLONE 18831 . 19912) (GIT-MAINBRANCH 19914 - . 20309) (GIT-MAINBRANCH? 20311 . 20802)) (26471 31400 (PRC-COMMAND 26481 . 31398)) (31448 34236 ( -ALLSUBDIRS 31458 . 32744) (MEDLEYSUBDIRS 32746 . 33439) (GITSUBDIRS 33441 . 34234)) (34237 39027 ( -TOGIT 34247 . 35653) (FROMGIT 35655 . 36636) (GIT-DELETE-FILE 36638 . 37484) (MYMEDLEY-DELETE-FILES -37486 . 39025)) (39028 42031 (MYMEDLEYSUBDIR 39038 . 39494) (GITSUBDIR 39496 . 39939) (STRIPDIR 39941 - . 40312) (STRIPHOST 40314 . 40554) (STRIPNAME 40556 . 41309) (STRIPWHERE 41311 . 42029)) (42032 43934 - (GFILE4MFILE 42042 . 42405) (MFILE4GFILE 42407 . 42976) (GIT-REPO-FILENAME 42978 . 43932)) (43975 -54230 (GIT-COMMIT 43985 . 44811) (GIT-PUSH 44813 . 45573) (GIT-PULL 45575 . 46327) (GIT-APPROVAL 46329 - . 46678) (GIT-GET-FILE 46680 . 48595) (GIT-FILE-EXISTS? 48597 . 48871) (GIT-REMOTE-UPDATE 48873 . -49708) (GIT-REMOTE-ADD 49710 . 50017) (GIT-FILE-DATE 50019 . 51066) (GIT-FILE-HISTORY 51068 . 53002) ( -GIT-PRINT-FILE-HISTORY 53004 . 54054) (GIT-FETCH 54056 . 54228)) (54256 65376 (GIT-BRANCH-DIFF 54266 - . 61013) (GIT-COMMIT-DIFFS 61015 . 61688) (GIT-BRANCH-RELATIONS 61690 . 65374)) (65413 84799 ( -GIT-BRANCH-NUM 65423 . 65996) (GIT-CHECKOUT 65998 . 67284) (GIT-WHICH-BRANCH 67286 . 67693) ( -GIT-MAKE-BRANCH 67695 . 70274) (GIT-BRANCHES 70276 . 72871) (GIT-BRANCH-EXISTS? 72873 . 73744) ( -GIT-PICK-BRANCH 73746 . 74236) (GIT-BRANCH-MENU 74238 . 75119) (GIT-BRANCH-WHENSELECTEDFN 75121 . -77660) (GIT-PULL-REQUESTS 77662 . 81180) (GIT-SHORT-BRANCH-NAME 81182 . 81473) (GIT-LONG-NAME 81475 . -81792) (GIT-PRC-BRANCHES 81794 . 84797)) (84825 88273 (GIT-MY-CURRENT-BRANCH 84835 . 85205) ( -GIT-MY-BRANCHP 85207 . 85825) (GIT-MY-NEXT-BRANCH 85827 . 86321) (GIT-MY-BRANCHES 86323 . 88271)) ( -88311 92386 (GIT-ADD-WORKTREE 88321 . 89928) (GIT-REMOVE-WORKTREE 89930 . 90860) (GIT-LIST-WORKTREES -90862 . 91666) (WORKTREEDIR 91668 . 92384)) (92426 125819 (GIT-GET-DIFFERENT-FILES 92436 . 98860) ( -GIT-BRANCHES-COMPARE-DIRECTORIES 98862 . 106093) (GIT-WORKING-COMPARE-DIRECTORIES 106095 . 111802) ( -GIT-COMPARE-WORKTREE 111804 . 115782) (GITCDOBJBUTTONFN 115784 . 120274) (GIT-CD-LABELFN 120276 . -121358) (GIT-CD-MENUFN 121360 . 123800) (GIT-WORKING-COMPARE-FILES 123802 . 124422) ( -GIT-BRANCHES-COMPARE-FILES 124424 . 125588) (GIT-PR-COMPARE 125590 . 125817)) (125881 134204 (CDGITDIR - 125891 . 126578) (GIT-COMMAND 126580 . 128138) (GITORIGIN 128140 . 128837) (GIT-INITIALS 128839 . -129143) (GIT-COMMAND-TO-FILE 129145 . 132630) (GIT-RESULT-TO-LINES 132632 . 133537) (STRIPLOCAL 133539 - . 134202))))) + (FILEMAP (NIL (4187 20766 (GIT-CLONEP 4197 . 5525) (GIT-INIT 5527 . 6157) (GIT-MAKE-PROJECT 6159 . +13824) (GIT-GET-PROJECT 13826 . 15751) (GIT-PUT-PROJECT-FIELD 15753 . 17394) (GIT-PROJECT-PATH 17396 + . 18440) (FIND-ANCESTOR-DIRECTORY 18442 . 18791) (GIT-FIND-CLONE 18793 . 19874) (GIT-MAINBRANCH 19876 + . 20271) (GIT-MAINBRANCH? 20273 . 20764)) (26229 31158 (PRC-COMMAND 26239 . 31156)) (31214 34002 ( +ALLSUBDIRS 31224 . 32510) (MEDLEYSUBDIRS 32512 . 33205) (GITSUBDIRS 33207 . 34000)) (34003 38793 ( +TOGIT 34013 . 35419) (FROMGIT 35421 . 36402) (GIT-DELETE-FILE 36404 . 37250) (MYMEDLEY-DELETE-FILES +37252 . 38791)) (38794 41797 (MYMEDLEYSUBDIR 38804 . 39260) (GITSUBDIR 39262 . 39705) (STRIPDIR 39707 + . 40078) (STRIPHOST 40080 . 40320) (STRIPNAME 40322 . 41075) (STRIPWHERE 41077 . 41795)) (41798 43700 + (GFILE4MFILE 41808 . 42171) (MFILE4GFILE 42173 . 42742) (GIT-REPO-FILENAME 42744 . 43698)) (43749 +54004 (GIT-COMMIT 43759 . 44585) (GIT-PUSH 44587 . 45347) (GIT-PULL 45349 . 46101) (GIT-APPROVAL 46103 + . 46452) (GIT-GET-FILE 46454 . 48369) (GIT-FILE-EXISTS? 48371 . 48645) (GIT-REMOTE-UPDATE 48647 . +49482) (GIT-REMOTE-ADD 49484 . 49791) (GIT-FILE-DATE 49793 . 50840) (GIT-FILE-HISTORY 50842 . 52776) ( +GIT-PRINT-FILE-HISTORY 52778 . 53828) (GIT-FETCH 53830 . 54002)) (54034 65372 (GIT-BRANCH-DIFF 54044 + . 60791) (GIT-COMMIT-DIFFS 60793 . 61684) (GIT-BRANCH-RELATIONS 61686 . 65370)) (65417 84912 ( +GIT-BRANCH-NUM 65427 . 66000) (GIT-CHECKOUT 66002 . 67288) (GIT-WHICH-BRANCH 67290 . 67697) ( +GIT-MAKE-BRANCH 67699 . 70278) (GIT-BRANCHES 70280 . 72875) (GIT-BRANCH-EXISTS? 72877 . 73748) ( +GIT-PICK-BRANCH 73750 . 74240) (GIT-BRANCH-MENU 74242 . 75123) (GIT-BRANCH-WHENSELECTEDFN 75125 . +77664) (GIT-PULL-REQUESTS 77666 . 81293) (GIT-SHORT-BRANCH-NAME 81295 . 81586) (GIT-LONG-NAME 81588 . +81905) (GIT-PRC-BRANCHES 81907 . 84910)) (84942 88390 (GIT-MY-CURRENT-BRANCH 84952 . 85322) ( +GIT-MY-BRANCHP 85324 . 85942) (GIT-MY-NEXT-BRANCH 85944 . 86438) (GIT-MY-BRANCHES 86440 . 88388)) ( +88436 92511 (GIT-ADD-WORKTREE 88446 . 90053) (GIT-REMOVE-WORKTREE 90055 . 90985) (GIT-LIST-WORKTREES +90987 . 91791) (WORKTREEDIR 91793 . 92509)) (92559 125952 (GIT-GET-DIFFERENT-FILES 92569 . 98993) ( +GIT-BRANCHES-COMPARE-DIRECTORIES 98995 . 106226) (GIT-WORKING-COMPARE-DIRECTORIES 106228 . 111935) ( +GIT-COMPARE-WORKTREE 111937 . 115915) (GITCDOBJBUTTONFN 115917 . 120407) (GIT-CD-LABELFN 120409 . +121491) (GIT-CD-MENUFN 121493 . 123933) (GIT-WORKING-COMPARE-FILES 123935 . 124555) ( +GIT-BRANCHES-COMPARE-FILES 124557 . 125721) (GIT-PR-COMPARE 125723 . 125950)) (126022 134345 (CDGITDIR + 126032 . 126719) (GIT-COMMAND 126721 . 128279) (GITORIGIN 128281 . 128978) (GIT-INITIALS 128980 . +129284) (GIT-COMMAND-TO-FILE 129286 . 132771) (GIT-RESULT-TO-LINES 132773 . 133678) (STRIPLOCAL 133680 + . 134343))))) STOP diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM index 41362e26693d7f283f6fa3b03a2b81caf290b6a8..def8564d224b249022c4da7bf3de957b74348f24 100644 GIT binary patch delta 334 zcmex7k@@39<_X~<3YNOQiIuuW21cd|hK5$gmR6>w6SEEKO*Iv`loZSml19c>rp8vr zCQ1rLsmb}d1(`XiDGI3-1x3ZGRtf<@&brS2zP^rrE(-3RA-YaMj(*M_y1uS{pll2Mo*A?^z`(U6jBmPfEHnKiiv@e zCYOerr;n?1kgH>es|!#OHqTTmZ~(n#Y+_<)G&zS+#@fv<7}HIf3RVF@u3?`3p~1Q? sK*NA$nIie!$jZRP%FuLTwF0BbW>%&$cgD4wYdoimGp^Yzl6XHI04B>=c>n+a delta 285 zcmex3k@@pP<_X~21cd|hNf1A=2ph$6SEEU3^f(Flu#rMtc;AUObwJ2 zic*vFa|<$aQd1OCD+-E=Rjm{zAE;J{&dgI#atrnGQ9#zFr>Cc+z?G6%0#uF7JaZ*Y zE)6$NA6MrfSH}=n7c@mM7gZ~87%CVVn;4myPwr-v5est+3RZCU3~}=dcJ}uT)>O~{ zvOvy|*VI(73J7uy^Yjl5)^!0Isi0(RsOy^u^`nuYm655H0ni&<6KiFej4d}aGnKhB S#%-?hoG#87zgZ~pemVeKGfO4_ diff --git a/lispusers/GITFNS.TEDIT b/lispusers/GITFNS.TEDIT index 2e1a9c12b7936936ee8da3593c5695411446b790..0aa747b426239c9b51923c5ceddf09df726eb5b1 100644 GIT binary patch delta 3648 zcmb7GJ8&CC7~V6oBZUOw7{@t05a%XwEIT*>lLTTru_Q~D&@0F;fY3n&oZwp_V%+b$K;`zyV?Ez?|=Whr@z05{`e~T{z@?_ z*=n)o-k%jOy7%2;!@Y~8PE^|4DSdK&__8VP)Cb*GuhKC^gWv2ztyvjd8}zSj&n?vY zo&I2Md9K>2)Y|2;6Q4H+YMsjVcB^I%J`Vq!ndtU6>x16^(uXlIObQ(!JSsOzCGx7D?M}SQ7Tb+@1x7*C@R=5SCgrNqu+zdQ|_6-qF{en z?GpbH+Yx+uEgphDZp@g$Vi^Q1A}siF5|;reUNt9yl+>rOfO3Mxz8kj@rvwo=0U3JB zfEaA>d0>QNq&4qQTFyj)nPXvrD$wV_&E=A@>mokmIq!mukWXMCEg;^N-Cg&!;&vYg z-6fMT%aMbPw;%*p2y66kZB8JxKMvXv4mMjerYi{nl%`vU7T0gQ<_(Dhzje+)=pLz-Q~Gf^%1@u_!??XEWB&*IgUX1xkCjsP-&sQrp-TB{CKKxdiOQL1G;VjY9Q$)Uc?nGSIr9#D=A%fczdy8gvJtzXUuwin=y5y{ z1s*1)W)MLruRz3I+WsW~&`z_w(}?FX;qnFr!WKa_vbWZc9VI_C;y<|denWpnyc4y8 zIYU={mNnUb$B7x5+Qn)@ONEdfrhuqU1}$IurrQFhA(>VkWQd|nK=ca4YuS5S$t74~ zmw~IdnkykX+deEi-(2Ahd%^y`HO+r#p>bkLS821L@Oa8Sj9-(|3y4ai_?3|gA+0nc zxA!FbPcvDC13YxV1zz6-WD*M?w{u9vo@-3o-B!ts+|5=p3l{$qG3j&?{CTo_tcSc5Fn?bJYh3xw#pX4>$k+eJ+l zvX-@sKVrO9p{7A+4tUX7#v;8&w%lH1>5^a$5rVh?pkQyb{U^)@xju{hI|3#iHc8$Z vfvi8NUSxl3C#O+Pl~mUF6^12`*qP3XYizr7;?M^>6Q8@A;>Otcr$7A%+Ofju delta 3426 zcmaJ@O>bL86rJa~sS{d0RHx)oN*ybtNkD<}k@6ATIEkG&_&LJqf)*r@fCcJ;NFWwS zm62G&idleIv4Slq5)xf>%L*j6An^m}iUmlB4fmXRbL^oKmfq8ybI-kVzut_0`6B!4 z^X!{et=h1kzg*kO8vdi&T3Ft!bt{Hu)BSA8-m^z0i{rqy4W&Zkl^K@p=kARQaGX){@U#=I#zsGWnfBHf`0{ysi6$fDzdI)%26))3R zD4+z(J2cRedKUz!n-Ipk*g~9XsKANHD0l|MSmT~2COA%3i-yv35(O&D0>M~;J^(Iw z2{-X;5nl-US3yR|=OM@nNHF)UR;U%1V;po#CUMISg7-3%;0j@l{@QSZ2ux@aShcOGGIbLf}L9b3d8WEDgiF-MQkw!YQ-O;zRumX|0!<6wP=7<#B zWqZgy2Z7s^8ujN))F_!a9HyA`g8Ug4+=#4*Bl!{d1IjePJp}~0$O!!+at{QMg^;XV zCM)3I+Gwmo!(oGl`QW8w=nty$%ll(vaqekbat|p(9R6ryaiowQ0t=Q3>E4Klqwx{K zd7TW>Y(mX8qBY$hY(@*N`oHKd+7gf)iUbQreHsEdp)&r5cGHfU-`mZHlUjs?jn<3& zu#LaCnHONP&tpG^bRtu>nmWa^8aX)x_^J4py0bkig znu*ywaHNTc%BLW3RZiw}QB#^8?$ig$Kx`cXswPVSM`~_xV8|PA2^Ek3%)irVjzHHK z$y+RpzTpR93P=1*;e#q5x=R#-+`MmUZa4=49sLan5vT#o8m8*F+-t*Yre@q~ z5@!ikVHix1AE1nE9s*Wj@ODkoc*(VjAV*Xs0qH9WR#w;0OSX2rf%#W2HS7A6Ls)*M z_oSUftzIZctddx=Q_8F{UJLdx9nHxgA}WhwS2ikwtjcU`9Z3GSUPwp9p@1#FjvLsZ zhnjwzBL31IE{bb>-`LAd{%mji71*k1x|`H9by_>ZfISlu%4O(vsK)K^YcDqWhxR`g zt&xT)(^hJb&UhiZfteco>l{%Ng{-HZ@h6LCBg{0&%mMLpv&18Jt@=~_6^7o7?hqk} zO8{tJ0+%C0rScKcJ;?tfu*O4cMbM38{V9zq|6RYqJ6(mAKVH7@6%hYVACvl6asK4n QKfQa~xhLMM9Q)wrzat5ZwEzGB diff --git a/lispusers/HELPSYS b/lispusers/HELPSYS index f51a86fe8..4ff064d9e 100644 --- a/lispusers/HELPSYS +++ b/lispusers/HELPSYS @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "11-Nov-2023 09:31:38" {DSK}larry>il>medley>lispusers>HELPSYS.;2 87772 +(FILECREATED " 5-May-2025 22:04:32" {WMEDLEY}HELPSYS.;15 87966 - :EDIT-BY "lmm" + :EDIT-BY rmk - :CHANGES-TO (VARS HELPSYSCOMS) - (FNS CLHS.LOOKUP) + :CHANGES-TO (FNS CLHS.INDEX) - :PREVIOUS-DATE "16-Jun-2023 14:38:33" {DSK}larry>il>medley>lispusers>HELPSYS.;1) + :PREVIOUS-DATE " 4-May-2025 13:30:47" {WMEDLEY}HELPSYS.;12) (PRETTYCOMPRINT HELPSYSCOMS) @@ -230,7 +229,9 @@ (DEFINEQ (CLHS.INDEX - [LAMBDA (ENTRY) (* ; "Edited 9-Oct-2022 16:34 by lmm") + [LAMBDA (ENTRY) (* ; "Edited 5-May-2025 22:04 by rmk") + (* ; "Edited 4-May-2025 13:30 by rmk") + (* ; "Edited 9-Oct-2022 16:34 by lmm") (* ; "Edited 16-Aug-2022 09:34 by lmm") (* ; "Edited 14-Aug-2022 15:54 by lmm") (OR CLHS.INDEX @@ -240,8 +241,9 @@ (PROGN (PRINTOUT PROMPTWINDOW "Fetching Hyperspec Index from web" T) (ShellCommand (CONCAT "cd $MEDLEYDIR && " " mkdir -p tmp/clhs && " "curl --output tmp/clhs/clindex.html -s " - CLHS.ROOT.URL "Front/X_AllSym.htm"))) - (MEDLEYDIR "tmp/clhs" "clindex.html"))) + CLHS.ROOT.URL "Front/X¬AllSym.htm")) + (MEDLEYDIR "tmp/clhs" "clindex.html"))) + :EXTERNAL-FORMAT :UTF-8) (LET (LINE POSLINK POSFRAG POSENDLINK POSENDTERM POSTERM LINK) (while (SETQ LINE (CL:READ-LINE STREAM NIL)) when [AND (SETQ POSLINK (STRPOS "
  • 6bztjvQr?) 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 O{b5YQ-~Q0?@&5;wrz$G| delta 11571 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 From 4020765fe74f701ff5995f362b16a85b22311e26 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:50:13 -0700 Subject: [PATCH 09/40] Minor compatibility adjustments --- sources/CMLREAD | 22 +-- sources/CMLREAD.LCOM | Bin 5953 -> 5876 bytes sources/COMPILE | 314 +++++++++++++++++++-------------------- sources/COMPILE.LCOM | Bin 28113 -> 27940 bytes sources/IOCHAR | 64 ++++---- sources/IOCHAR.LCOM | Bin 24082 -> 24112 bytes sources/LLCHAR | 43 +++--- sources/LLCHAR.LCOM | Bin 22467 -> 22366 bytes sources/LLDISPLAY | 192 ++++++++++++------------ sources/LLDISPLAY.LCOM | 83 ++++++----- sources/LLREAD | 46 +++--- sources/LLREAD.LCOM | Bin 25660 -> 25704 bytes sources/VANILLADISK | 105 ++++++------- sources/VANILLADISK.LCOM | Bin 2808 -> 2833 bytes 14 files changed, 426 insertions(+), 443 deletions(-) diff --git a/sources/CMLREAD b/sources/CMLREAD index 7217d725b..2542b14f4 100644 --- a/sources/CMLREAD +++ b/sources/CMLREAD @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "23-Sep-2024 11:55:33" {DSK}matt>Interlisp>medley>sources>CMLREAD.;4 12882 +(FILECREATED "24-Apr-2025 21:59:48" {WMEDLEY}CMLREAD.;17 12829 - :EDIT-BY "mth" + :EDIT-BY rmk - :CHANGES-TO (FNS CL:READ-FROM-STRING) + :CHANGES-TO (VARS CMLREADCOMS) - :PREVIOUS-DATE "16-Sep-2024 12:26:09" {DSK}matt>Interlisp>medley>sources>CMLREAD.;3) + :PREVIOUS-DATE "23-Sep-2024 11:55:33" {WMEDLEY}CMLREAD.;16) (PRETTYCOMPRINT CMLREADCOMS) @@ -37,7 +37,7 @@ (INITVARS (*COMMON-LISP-READ-ENVIRONMENT* (create READER-ENVIRONMENT REPACKAGE _ (CL:FIND-PACKAGE "USER") REREADTABLE _ CMLRDTBL REBASE _ 10 - REFORMAT _ :XCCS] + REFORMAT _ :MCCS] (PROP FILETYPE CMLREAD) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) @@ -274,7 +274,7 @@ ) (RPAQ? *COMMON-LISP-READ-ENVIRONMENT* (create READER-ENVIRONMENT REPACKAGE _ (CL:FIND-PACKAGE "USER") - REREADTABLE _ CMLRDTBL REBASE _ 10 REFORMAT _ :XCCS)) + REREADTABLE _ CMLRDTBL REBASE _ 10 REFORMAT _ :MCCS)) (PUTPROPS CMLREAD FILETYPE CL:COMPILE-FILE) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS @@ -287,9 +287,9 @@ CL:UNREAD-CHAR CL:READ-CHAR CL:READ-LINE CL:COPY-READTABLE) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2433 3418 (CL:COPY-READTABLE 2443 . 3416)) (3419 10627 (CL:READ-LINE 3429 . 4301) ( -CL:READ-CHAR 4303 . 4853) (CL:UNREAD-CHAR 4855 . 5316) (CL:PEEK-CHAR 5318 . 7612) (CL:LISTEN 7614 . -7879) (CL:READ-CHAR-NO-HANG 7881 . 8653) (CL:CLEAR-INPUT 8655 . 8892) (CL:READ-FROM-STRING 8894 . 9914 -) (CL:READ-BYTE 9916 . 10369) (CL:WRITE-BYTE 10371 . 10625)) (11621 12094 (WITH-READER-ENVIRONMENT -11621 . 12094))))) + (FILEMAP (NIL (2380 3365 (CL:COPY-READTABLE 2390 . 3363)) (3366 10574 (CL:READ-LINE 3376 . 4248) ( +CL:READ-CHAR 4250 . 4800) (CL:UNREAD-CHAR 4802 . 5263) (CL:PEEK-CHAR 5265 . 7559) (CL:LISTEN 7561 . +7826) (CL:READ-CHAR-NO-HANG 7828 . 8600) (CL:CLEAR-INPUT 8602 . 8839) (CL:READ-FROM-STRING 8841 . 9861 +) (CL:READ-BYTE 9863 . 10316) (CL:WRITE-BYTE 10318 . 10572)) (11568 12041 (WITH-READER-ENVIRONMENT +11568 . 12041))))) STOP diff --git a/sources/CMLREAD.LCOM b/sources/CMLREAD.LCOM index 1a0db1409bc0a957dec0c4f6377739beee05ea6e..d2e4be9606c9ec6835837179b6817f3b35261af5 100644 GIT binary patch delta 355 zcmX@8_eFO?M7@cwV?mLwk%5t^f{~$>sil>Pg_44XQgVK7L1s>Bib8&#f|5dYxUZ{= zk85PDO>ur{QF3arowKh`kgKDMp0%O5rUI9e5t1>67FGtvR;C6@3QErYz5$*-uDWhO zB1K6d6KIxOsE>~VLV3NZf}Wn9l0r&i3D7cZ=9nsJa%q4Ja0Xf!;_8B`2;pYDZd5Qd zvM{n#uyS?r4AFIpR4B^LRjOF=2OBtuET%Gtxw&)qdxH^g5-!_6;P z!P&COMPILE.;5 77344 +(FILECREATED "24-Apr-2025 22:04:20" {WMEDLEY}COMPILE.;6 76628 :EDIT-BY rmk - :CHANGES-TO (VARS COMPILECOMS) - (FNS COMPSET) + :CHANGES-TO (FNS BCOMPL.BODY BRECOMPILE) - :PREVIOUS-DATE " 5-Jul-2021 13:46:39" {WMEDLEY}COMPILE.;4) + :PREVIOUS-DATE "24-Sep-2023 13:59:34" {WMEDLEY}COMPILE.;5) -(* ; " -Copyright (c) 1984-1990, 2021 by Venue & Xerox Corporation. -The following program was created in 1984 but has not been published -within the meaning of the copyright law, is furnished under license, -and may not be used, copied and/or disclosed except in accordance -with the terms of said license. -") - (PRETTYCOMPRINT COMPILECOMS) (RPAQQ COMPILECOMS @@ -113,101 +104,102 @@ with the terms of said license. CFILE NOBLOCKSFLG OPTIONSSET)))]) (BCOMPL.BODY - [LAMBDA (STREAMS CFILE NOBLOCKSFLG OPTIONSSET) (* ; "Edited 5-Jul-2021 13:46 by rmk:") + [LAMBDA (STREAMS CFILE NOBLOCKSFLG OPTIONSSET) (* ; "Edited 24-Apr-2025 22:03 by rmk") + (* ; "Edited 5-Jul-2021 13:46 by rmk:") -(* ;;; "STREAMS is a list of streams. Compile everything on them, dumping to CFILE (default first stream.dcom). NOBLOCKSFLG means TCOMPL instead of BCOMPL. OPTIONSSET is true if the Listing? question has already been asked.") +(* ;;; "STREAMS is a list of streams. Compile everything on them, dumping to CFILE (default first stream.dcom). NOBLOCKSFLG means TCOMPL instead of BCOMPL. OPTIONSSET is true if the Listing? question has already been asked.") -(* ;;; "RMK: Apply each input streams \EXTERNALFORMAT") +(* ;;; "RMK: Apply each input streams \EXTERNALFORMAT") (DECLARE (SPECVARS CFILE)) (PROG ((SPECVARS T) (LOCALVARS SYSLOCALVARS) DEFS CHANGES OTHERS FIRST BLOCKS BLKFNS FILEROOT TEM SCRATCHFILE DESTINATIONENV UNPACKFILE ) - (DECLARE (SPECVARS SPECVARS LOCALVARS CHANGES OTHERS FIRST BLOCKS BLKFNS - DESTINATIONENV DEFS)) + (DECLARE (SPECVARS SPECVARS LOCALVARS CHANGES OTHERS FIRST BLOCKS BLKFNS DESTINATIONENV + DEFS)) [OR OPTIONSSET (COMPSET NIL '(F % -] (* ; -"OPTIONSSET is T on calls from TCOMPL. In this case, the first COMPSET has already been performed.") +] (* ; + "OPTIONSSET is T on calls from TCOMPL. In this case, the first COMPSET has already been performed.") (COMPSET (OR CFILE (PACKFILENAME 'HOST [CADR (FMEMB 'HOST (SETQ UNPACKFILE - (UNPACKFILENAME (CAR STREAMS - ] - 'DIRECTORY - (CADR (FMEMB 'DIRECTORY UNPACKFILE)) - 'NAME - (SETQ FILEROOT (CADR (FMEMB 'NAME UNPACKFILE))) - 'EXTENSION COMPILE.EXT))) + (UNPACKFILENAME (CAR STREAMS] + 'DIRECTORY + (CADR (FMEMB 'DIRECTORY UNPACKFILE)) + 'NAME + (SETQ FILEROOT (CADR (FMEMB 'NAME UNPACKFILE))) + 'EXTENSION COMPILE.EXT))) - (* ;; "Edited by TT(8-June-90 : for Fix AR#2999)") + (* ;; "Edited by TT(8-June-90 : for Fix AR#2999)") [COND (LCFIL (SETQ SCRATCHFILE (OPENSTREAM BCOMPL.SCRATCH 'BOTH 'NEW] (RESETSAVE NIL (LIST 'BCOMPL3 NIL STREAMS SCRATCHFILE)) - (* ;; "BCOMPL3 will close and if necessary delete all the appropriate files when bcompl finishes, or control-d or control-e occurs.") + (* ;; "BCOMPL3 will close and if necessary delete all the appropriate files when bcompl finishes, or control-d or control-e occurs.") [LET (DFNFLG) - (* ;; "if top level value of DFNFLG is PROP, still want to evaluate expressions in declarations etc as though it were T. i.e. make BCOMPL1A equivalent to doing a LOADCOMP") + (* ;; "if top level value of DFNFLG is PROP, still want to evaluate expressions in declarations etc as though it were T. i.e. make BCOMPL1A equivalent to doing a LOADCOMP") (for STREAM in STREAMS do (RESETLST - (RESETSAVE NIL (LIST 'CLOSEF STREAM)) - (RESETSAVE (INPUT STREAM)) (* ; - "Needs to be primary input for some of the filepkg expressions to work") - (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* - (until (OR (NULL (SETQ TEM (READ STREAM))) - (EQ TEM 'STOP)) - do (CL:WHEN (EQ (CAR (LISTP TEM)) - 'DEFINE-FILE-INFO) - (\EXTERNALFORMAT STREAM (OR (LISTGET (CDR TEM) - :FORMAT) - :XCCS))) - (BCOMPL1A TEM 'DEFAULT 'DEFAULT 'DEFAULT STREAM))))] + (RESETSAVE NIL (LIST 'CLOSEF STREAM)) + (RESETSAVE (INPUT STREAM)) (* ; + "Needs to be primary input for some of the filepkg expressions to work") + (WITH-READER-ENVIRONMENT *OLD-INTERLISP-READ-ENVIRONMENT* + (until (OR (NULL (SETQ TEM (READ STREAM))) + (EQ TEM 'STOP)) + do (CL:WHEN (EQ (CAR (LISTP TEM)) + 'DEFINE-FILE-INFO) + (\EXTERNALFORMAT STREAM (OR (LISTGET (CDR TEM) + :FORMAT) + :MCCS))) + (BCOMPL1A TEM 'DEFAULT 'DEFAULT 'DEFAULT STREAM))))] (SETQ NOFIXFNSLST (APPEND NLAMA NLAML LAMS (NCONC [MAPCAR DEFS (FUNCTION (LAMBDA (X) (RCOMP3 (CAR X) (CADR X] NOFIXFNSLST))) - (* ;; "The BCOMPL1 reads in FILES. It returns a list of variables set in the files. The RCOMP3 adds function to NLAMA, LAMS, etc., and returns a list of functions. NOFIXFNLST is reset in case there is any dwimifying to be done.") + (* ;; "The BCOMPL1 reads in FILES. It returns a list of variables set in the files. The RCOMP3 adds function to NLAMA, LAMS, etc., and returns a list of functions. NOFIXFNLST is reset in case there is any dwimifying to be done.") (WITH-READER-ENVIRONMENT (OR DESTINATIONENV (SETQ DESTINATIONENV *OLD-INTERLISP-READ-ENVIRONMENT*)) (COND - (LCFIL (\EXTERNALFORMAT LCFIL (OR (FETCH (READER-ENVIRONMENT REFORMAT) - OF DESTINATIONENV) - :XCCS)) + (LCFIL (\EXTERNALFORMAT LCFIL (OR (FETCH (READER-ENVIRONMENT REFORMAT) OF + DESTINATIONENV + ) + :MCSS)) (PRINT-COMPILE-HEADER STREAMS [LIST (COND - (NOBLOCKSFLG 'tcompl'd) - (T 'bcompl'd] + (NOBLOCKSFLG 'tcompl'd) + (T 'bcompl'd] DESTINATIONENV))) (COND (SCRATCHFILE - (* ;; "writes others on a scratchfile so space can be freed up. will be copied onto lcfil aftr compilation.") + (* ;; "writes others on a scratchfile so space can be freed up. will be copied onto lcfil aftr compilation.") (\EXTERNALFORMAT SCRATCHFILE (\EXTERNALFORMAT LCFIL)) (for X in OTHERS do (PRINT X SCRATCHFILE)) (PRINT NIL SCRATCHFILE) (SETQ OTHERS NIL))) [OR DWIMIFYCOMPFLG (SETQ DWIMIFYCOMPFLG (EQMEMB 'CLISP (GETPROP FILEROOT 'FILETYPE] - (* ; - "The FILETYPE may have been set during the course of BCOMPL1.") + (* ; + "The FILETYPE may have been set during the course of BCOMPL1.") [MAPC FIRST (FUNCTION (LAMBDA (X) (PRINT X LCFIL] [PROG (LISPXHIST) (DECLARE (SPECVARS LISPXHIST)) - (* ;; "compile blocks MAPC not used because BCOMPL2 checks BLOCKS. lispxhist rebound bcause no need to save information when compiling from file") + (* ;; "compile blocks MAPC not used because BCOMPL2 checks BLOCKS. lispxhist rebound bcause no need to save information when compiling from file") (AND NOBLOCKSFLG (GO NOBLOCKLP)) BLOCKLP (COND (BLOCKS (BCOMPL2 (CAR BLOCKS)) (SETQ BLOCKS (CDR BLOCKS)) - (GO BLOCKLP))) (* ; - "COMPILE other functions. done this way instead of MAPC to release the defs as soon aspossible.") + (GO BLOCKLP))) (* ; + "COMPILE other functions. done this way instead of MAPC to release the defs as soon aspossible.") NOBLOCKLP (COND (DEFS (AND (NOT (FMEMB (CAAR DEFS) @@ -499,17 +491,18 @@ with the terms of said license. (SETQ BLOCKS (NCONC1 BLOCKS X)))) (BRECOMPILE - [LAMBDA (FILES CFILE FNS NOBLOCKSFLG) (* ; "Edited 5-Jul-2021 09:28 by rmk:") + [LAMBDA (FILES CFILE FNS NOBLOCKSFLG) (* ; "Edited 24-Apr-2025 22:04 by rmk") + (* ; "Edited 5-Jul-2021 09:28 by rmk:") -(* ;;; "FNS is a list of functions to be recompiled. The object is to make a file that looks exactly like that produced by BCOMPL except to greatly reduce the work by copying from CFILE the compiled definitions those functions not being recompiled.") +(* ;;; "FNS is a list of functions to be recompiled. The object is to make a file that looks exactly like that produced by BCOMPL except to greatly reduce the work by copying from CFILE the compiled definitions those functions not being recompiled.") -(* ;;; "BRECOMPILE is driven by the source file(s). The algorithm is whenever a DEFINEQ is encountered, process all of the functions in the DEFINEQ as follows: COMPILE the definition of the function if it is on the list FNS, or if FNS is EXPRS and the function is currently defined as an EXPR. Otherwise copy its compiled definition from CFILE. Note that functions with compiled definitions in CFILE that do not appear in PFILE are NOT copied. This corresponds to the case where functions have been deleted from the source file.") +(* ;;; "BRECOMPILE is driven by the source file(s). The algorithm is whenever a DEFINEQ is encountered, process all of the functions in the DEFINEQ as follows: COMPILE the definition of the function if it is on the list FNS, or if FNS is EXPRS and the function is currently defined as an EXPR. Otherwise copy its compiled definition from CFILE. Note that functions with compiled definitions in CFILE that do not appear in PFILE are NOT copied. This corresponds to the case where functions have been deleted from the source file.") -(* ;;; "The value FNS = CHANGES means recompile anything marked changed in the file header.") +(* ;;; "The value FNS = CHANGES means recompile anything marked changed in the file header.") -(* ;;; "(RECOMPILE file cfile fns) is equivalent to (BRECOMPILE file cfile fns T).") +(* ;;; "(RECOMPILE file cfile fns) is equivalent to (BRECOMPILE file cfile fns T).") -(* ;;; "Note that CFILE=NIL is interpreted as meaning file.dcom even when FNS supplied.") +(* ;;; "Note that CFILE=NIL is interpreted as meaning file.dcom even when FNS supplied.") (RESETLST (PROG ((*PRINT-ARRAY* T) @@ -529,10 +522,10 @@ with the terms of said license. (AUXFILECOM T) CHANGES OTHERS FIRST FILEMAPLST FNLST BLKFNS BLOCKS FILE FILE.COM TEM ADRLST SCRATCHFILE COREOK DESTINATIONENV MSG) - (DECLARE (SPECVARS *PRINT-ARRAY* *PRINT-LENGTH* *PRINT-LEVEL* NLAMA NLAML LAMS - LAMA DWIMIFYCOMPFLG EXPRSLST NOFIXFNSLST NOFIXVARSLST BUILDMAPFLG - SPECVARS LOCALVARS CHANGES OTHERS FIRST BLKFNS BLOCKS - DESTINATIONENV ADRLST FILEMAPLST CFILE FNS FILE)) + (DECLARE (SPECVARS *PRINT-ARRAY* *PRINT-LENGTH* *PRINT-LEVEL* NLAMA NLAML LAMS LAMA + DWIMIFYCOMPFLG EXPRSLST NOFIXFNSLST NOFIXVARSLST BUILDMAPFLG SPECVARS + LOCALVARS CHANGES OTHERS FIRST BLKFNS BLOCKS DESTINATIONENV ADRLST + FILEMAPLST CFILE FNS FILE)) (COND ((AND (NULL CFILE) (NULL FNS)) @@ -551,7 +544,7 @@ with the terms of said license. (SETQ FILE (CADR (FMEMB 'NAME FILE))) 'EXTENSION COMPILE.EXT)) - (* ;; "Edited by TT (8-June-90 : for fix AR#2999)") + (* ;; "Edited by TT (8-June-90 : for fix AR#2999)") (COND ((EQ FNS 'ALL) @@ -572,7 +565,7 @@ with the terms of said license. ((OR (NULL ENV) (NOT (EQUAL-READER-ENVIRONMENT ENV DESTINATIONENV))) T) - (T (* "Position cfile back to start") + (T (* "Position cfile back to start") (SETFILEPTR CFILE START) NIL] (SETQ TEM (CLOSEF CFILE)) @@ -587,14 +580,14 @@ with the terms of said license. "not found;" " compile all functions on " (FULLNAME (CAR FILES)) '"instead")) - 'Y)) (* ; - "Edited by TT(8-June-90 : for Fix AR#8017)") + 'Y)) (* ; + "Edited by TT(8-June-90 : for Fix AR#8017)") (GO BRECALL)) ((EQ [ASKUSER DWIMWAIT 'Y (CONS '"Just forget about compiling" (MAPCAR FILES (FUNCTION FULLNAME] 'Y) (SELECTQ (CAR READBUF) - ((ST F STF) (* "E.g. From CLEANUP.") + ((ST F STF) (* "E.g. From CLEANUP.") (SETQ READBUF (CDR READBUF))) NIL) (RETFROM 'BRECOMPILE)) @@ -613,117 +606,109 @@ with the terms of said license. (SETQ SCRATCHFILE (OPENSTREAM BCOMPL.SCRATCH 'BOTH 'NEW)) (RESETSAVE NIL (LIST 'BCOMPL3 CFILE FILES SCRATCHFILE)) - (* ;; "BCOMPL3 will close and if necessary delete all the appropriate files when brecompile finishes, or control-d or control-e occurs. Note that this call differs from the call for bcompl in that cfile is also specified. this corresponds to the fact that recompile has an extra file open.") + (* ;; "BCOMPL3 will close and if necessary delete all the appropriate files when brecompile finishes, or control-d or control-e occurs. Note that this call differs from the call for bcompl in that cfile is also specified. this corresponds to the fact that recompile has an extra file open.") - [SETQ COREOK (for X in FILES - always (AND (EQ (CDAR (GETPROP (SETQ TEM (ROOTFILENAME X)) - 'FILEDATES)) - X) - (FMEMB (CDAR (GETPROP TEM 'FILE)) - '(LOADFNS T] + [SETQ COREOK (for X in FILES always (AND (EQ (CDAR (GETPROP (SETQ TEM (ROOTFILENAME + X)) + 'FILEDATES)) + X) + (FMEMB (CDAR (GETPROP TEM 'FILE)) + '(LOADFNS T] [SETQ FILEMAPLST (for STREAM in FILES collect (LET ((LDFLG 'EXPRESSIONS) - (VARLST 'COMPILING) - DONELST FNLST) - (DECLARE (SPECVARS LDFLG VARLST DONELST FNLST)) - (* ; - "FNLST etc are used free in LOADFNSCAN") - (SETFILEPTR STREAM 0) - (INPUT STREAM) - - (* ;; "LOADFNSCAN scans the file, building a map if one not already there. Value is the map. In addition, sets DONELST to a list of all non-defineq expressions.") - - (CL:MULTIPLE-VALUE-BIND (ENV MAP FILECREATEDLOC) - (GET-ENVIRONMENT-AND-FILEMAP STREAM) - (DECLARE (CL:SPECIAL FILECREATEDLOC)) - (* ; " used by LOADFNSCAN") - (WITH-READER-ENVIRONMENT ENV - (create COMPFILEDESCR - COMPFILESTREAM _ STREAM - COMPFILEENV _ ENV - COMPFILEMAP _ (LOADFNSCAN MAP) - COMPFILEXPRS _ (DREVERSE DONELST)))] + (VARLST 'COMPILING) + DONELST FNLST) + (DECLARE (SPECVARS LDFLG VARLST DONELST FNLST)) + (* ; + "FNLST etc are used free in LOADFNSCAN") + (SETFILEPTR STREAM 0) + (INPUT STREAM) + + (* ;; "LOADFNSCAN scans the file, building a map if one not already there. Value is the map. In addition, sets DONELST to a list of all non-defineq expressions.") + + (CL:MULTIPLE-VALUE-BIND (ENV MAP FILECREATEDLOC) + (GET-ENVIRONMENT-AND-FILEMAP STREAM) + (DECLARE (CL:SPECIAL FILECREATEDLOC)) + (* ; " used by LOADFNSCAN") + (WITH-READER-ENVIRONMENT ENV + (create COMPFILEDESCR + COMPFILESTREAM _ STREAM + COMPFILEENV _ ENV + COMPFILEMAP _ (LOADFNSCAN MAP) + COMPFILEXPRS _ (DREVERSE DONELST)))] [SETQ FNLST (for DESCR in FILEMAPLST join (for DEFQ in (CDR (fetch COMPFILEMAP of DESCR)) - join (for X in (CDDR DEFQ) - collect (CAR X] + join (for X in (CDDR DEFQ) collect (CAR X] - (* ;; "FILEMAPLST is a list of information about each file, including its name, filemap and non-defineq expressions. The first entry on the filemap is NIL. We start mapping down CDR of the filemap, and each element therein corresponds to a single DEFINEQ, in the form (start stop . fnEntries). fnEntries is a list of (FN start . stop), so the inner MAPCAR gathers up the names of the functions. The reason for not asking LOADFNS to do this is in most cases the map will already have been built, so LOADFNS won't even go inside of the defineq.") + (* ;; "FILEMAPLST is a list of information about each file, including its name, filemap and non-defineq expressions. The first entry on the filemap is NIL. We start mapping down CDR of the filemap, and each element therein corresponds to a single DEFINEQ, in the form (start stop . fnEntries). fnEntries is a list of (FN start . stop), so the inner MAPCAR gathers up the names of the functions. The reason for not asking LOADFNS to do this is in most cases the map will already have been built, so LOADFNS won't even go inside of the defineq.") - [for DESCR in FILEMAPLST do (for FORM - in (fetch COMPFILEXPRS of DESCR) - do (BCOMPL1A FORM 'DEFAULT - 'DEFAULT - 'DEFAULT] + [for DESCR in FILEMAPLST do (for FORM in (fetch COMPFILEXPRS of DESCR) + do (BCOMPL1A FORM 'DEFAULT 'DEFAULT 'DEFAULT] - (* ;; "BCOMPL1A adds VARS set in the files to NOFIXVARSLST. NOFIXFNLST and NOFIXVARSLST are reset in case there is any dwimifying to be done BCOMPL1 also sets free variable OTHERS to list of expressions to be printed on compiled file when all is done.") + (* ;; "BCOMPL1A adds VARS set in the files to NOFIXVARSLST. NOFIXFNLST and NOFIXVARSLST are reset in case there is any dwimifying to be done BCOMPL1 also sets free variable OTHERS to list of expressions to be printed on compiled file when all is done.") (SETQ NOFIXFNSLST (APPEND NLAMA NLAML LAMS FNLST NOFIXFNSLST)) - (WITH-READER-ENVIRONMENT (SETQ DESTINATIONENV (fetch COMPFILEENV - of (CAR FILEMAPLST))) - (* ; -"Start writing the compiled file. Use environment of one of the source files--usually the only one") + (WITH-READER-ENVIRONMENT (SETQ DESTINATIONENV (fetch COMPFILEENV of (CAR FILEMAPLST))) + (* ; + "Start writing the compiled file. Use environment of one of the source files--usually the only one") (if LCFIL then (\EXTERNALFORMAT LCFIL (OR (LISTGET DESTINATIONENV :FORMAT) - :XCCS)) - (PRINT-COMPILE-HEADER - FILES - [CONS (if NOBLOCKSFLG - then 'recompiled - else 'brecompiled) - (if (EQ FNS 'ALL) - then (LIST 'ALL) - else (CONS (SELECTQ FNS - (CHANGES 'changes%:) - ((EXPRS T) - 'exprs%:) - 'explicitly%:) - (OR [SUBSET FNLST (FUNCTION (LAMBDA (X) - (RECOMP? X FNS] - (LIST 'nothing] - DESTINATIONENV)) + :MCCS)) + (PRINT-COMPILE-HEADER + FILES + [CONS (if NOBLOCKSFLG + then 'recompiled + else 'brecompiled) + (if (EQ FNS 'ALL) + then (LIST 'ALL) + else (CONS (SELECTQ FNS + (CHANGES 'changes%:) + ((EXPRS T) + 'exprs%:) + 'explicitly%:) + (OR [SUBSET FNLST (FUNCTION (LAMBDA (X) + (RECOMP? X FNS] + (LIST 'nothing] + DESTINATIONENV)) [MAPC FNLST (FUNCTION (LAMBDA (X) (RCOMP3 X (VIRGINFN X] (if SCRATCHFILE then + (* ;; "writes others on a scratchfile so space can be freed up. will be copied onto lcfil aftr compilation.") - (* ;; "writes others on a scratchfile so space can be freed up. will be copied onto lcfil aftr compilation.") - - (\EXTERNALFORMAT SCRATCHFILE (\EXTERNALFORMAT LCFIL)) - (for X in OTHERS do (PRINT X SCRATCHFILE)) - (PRINT NIL SCRATCHFILE) - (SETQ OTHERS NIL)) + (\EXTERNALFORMAT SCRATCHFILE (\EXTERNALFORMAT LCFIL)) + (for X in OTHERS do (PRINT X SCRATCHFILE)) + (PRINT NIL SCRATCHFILE) + (SETQ OTHERS NIL)) (for X in (PROGN FIRST) do (PRINT X LCFIL)) [OR DWIMIFYCOMPFLG (SETQ DWIMIFYCOMPFLG (EQMEMB 'CLISP (GETPROP FILE 'FILETYPE] (OR (EQ FNS 'ALL) (INPUT CFILE)) [if (NOT NOBLOCKSFLG) then (for BLOCK in BLOCKS - do (if (NULL (CAR BLOCK)) - then (BCOMPL2 BLOCK FILEMAPLST) - elseif (for X in BLOCK - thereis (AND (LITATOM X) - (RECOMP? X FNS))) - then (* ; - "If any function in the BLOCK is to be recompiled, the whole BLOCK must be recompiled.") - (BCOMPL2 BLOCK FILEMAPLST COREOK) - else (BRECOMPILE1 BLOCK] - - (* ;; "NOBLOCKSFLG is T for calls from RECOMPILE. In this case, even if there were any blocks, ignore them.") - (* ; "Now COMPILE rest of functions.") - (for X in FNLST - do (if (OR (FMEMB X BLKFNS) - (FMEMB X DONTCOMPILEFNS)) - elseif (RECOMP? X FNS) - then - - (* ;; "The HELP is bcause if X is on FNS, then it follows X is in the file map, and brecompile3 should be able to produce its definition.") - - (COMPILE1 X (CADR (SETQ TEM (BRECOMPILE3 X FILEMAPLST - COREOK))) - (CADDR TEM)) - else (BRECOMPILE1 X T)))) + do (if (NULL (CAR BLOCK)) + then (BCOMPL2 BLOCK FILEMAPLST) + elseif (for X in BLOCK thereis (AND (LITATOM X) + (RECOMP? X FNS))) + then (* ; + "If any function in the BLOCK is to be recompiled, the whole BLOCK must be recompiled.") + (BCOMPL2 BLOCK FILEMAPLST COREOK) + else (BRECOMPILE1 BLOCK] + + (* ;; "NOBLOCKSFLG is T for calls from RECOMPILE. In this case, even if there were any blocks, ignore them.") + (* ; "Now COMPILE rest of functions.") + (for X in FNLST do (if (OR (FMEMB X BLKFNS) + (FMEMB X DONTCOMPILEFNS)) + elseif (RECOMP? X FNS) + then + + (* ;; "The HELP is bcause if X is on FNS, then it follows X is in the file map, and brecompile3 should be able to produce its definition.") + + (COMPILE1 X (CADR (SETQ TEM (BRECOMPILE3 X FILEMAPLST + COREOK))) + (CADDR TEM)) + else (BRECOMPILE1 X T)))) (RETURN (FULLNAME LCFIL)) NONRAND (SETQ MSG " is not RANDACCESSP") @@ -1532,16 +1517,15 @@ with the terms of said license. (ADDTOVAR LAMA ) ) -(PUTPROPS COMPILE COPYRIGHT ("Venue & Xerox Corporation" T 1984 1985 1986 1987 1988 1989 1990 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3708 73744 (BCOMPL 3718 . 5368) (BCOMPL.BODY 5370 . 11949) (PRINT-COMPILE-HEADER 11951 - . 13014) (RESETOPENFILES 13016 . 13369) (BCOMPL1A 13371 . 19384) (BCOMPL2 19386 . 26201) (BCOMPL3 -26203 . 27552) (BLOCK%: 27554 . 28186) (BRECOMPILE 28188 . 43177) (BRECOMPILE1 43179 . 49031) ( -BRECOMPILE2 49033 . 49835) (BRECOMPILE3 49837 . 51213) (BLOCKCOMPILE 51215 . 53075) (BLOCKCOMPILE1 -53077 . 58162) (COMPSET 58164 . 60861) (COMPSETREAD 60863 . 62174) (COMPSETY 62176 . 62300) (COMPSETF -62302 . 62468) (RCOMP3 62470 . 64177) (TCOMPL 64179 . 64478) (RECOMPILE 64480 . 64563) (RECOMP? 64565 - . 65025) (COMPILE 65027 . 67016) (COMPILE1 67018 . 67606) (COMPILE1A 67608 . 69255) ( -SHOULD-BE-DWIMIFIED? 69257 . 69946) (COMPEM 69948 . 70672) (GETCFILE 70674 . 72405) (SPECVARS 72407 . -72962) (LOCALVARS 72964 . 73538) (GLOBALVARS 73540 . 73742)) (76094 77043 (COMPILEMODE 76104 . 77041)) + (FILEMAP (NIL (3379 73129 (BCOMPL 3389 . 5039) (BCOMPL.BODY 5041 . 11639) (PRINT-COMPILE-HEADER 11641 + . 12704) (RESETOPENFILES 12706 . 13059) (BCOMPL1A 13061 . 19074) (BCOMPL2 19076 . 25891) (BCOMPL3 +25893 . 27242) (BLOCK%: 27244 . 27876) (BRECOMPILE 27878 . 42562) (BRECOMPILE1 42564 . 48416) ( +BRECOMPILE2 48418 . 49220) (BRECOMPILE3 49222 . 50598) (BLOCKCOMPILE 50600 . 52460) (BLOCKCOMPILE1 +52462 . 57547) (COMPSET 57549 . 60246) (COMPSETREAD 60248 . 61559) (COMPSETY 61561 . 61685) (COMPSETF +61687 . 61853) (RCOMP3 61855 . 63562) (TCOMPL 63564 . 63863) (RECOMPILE 63865 . 63948) (RECOMP? 63950 + . 64410) (COMPILE 64412 . 66401) (COMPILE1 66403 . 66991) (COMPILE1A 66993 . 68640) ( +SHOULD-BE-DWIMIFIED? 68642 . 69331) (COMPEM 69333 . 70057) (GETCFILE 70059 . 71790) (SPECVARS 71792 . +72347) (LOCALVARS 72349 . 72923) (GLOBALVARS 72925 . 73127)) (75479 76428 (COMPILEMODE 75489 . 76426)) ))) STOP diff --git a/sources/COMPILE.LCOM b/sources/COMPILE.LCOM index 7bcb18ddfc8d6fbd4879729a0b91263202f88361..ecab8389535b59bd9cc77158760fdc17420f4184 100644 GIT binary patch delta 3605 zcmZu!U2GKB751)ezza!Oa7ZzKhs8F#fZe(CKMSQE@6OsQ)-%h@EQ3=jLv|^)N`U~8 zTD8rpQKeK>iwM)Su4P4tqLM~YYH*x~y!f?J(^P%vOZ!^2s?VJF~l93Vzr* z_n!N6?z!Ln&gVbcL-aerRaEF*I~$sJ<=k7~tK!H|h(vhj;r2o9Vv3TI8s|*jQ{t10TOLzr8nJVoRlmj$Obg#wh%J>)WFuy~bbW<--k<43%zn8oJ04;CaY!bhU%S5)R961~;U%EuIZv z!Jn;K0Fx47VD*pN{GEFh;;5l2X);jb6-b4j~IS4Wx04U%I9ff44A<4#ac;5PNxs0b!FBr*O)P(S&1g zq)*mL7>?E3VAACdm~@4Tj_tQDGG17Z02co9(083pPb%r2#6s}v;Qipk;Gt6 zZ$0dJ4982Ouc(V_ea?6^I-auY7tXHw;+=5JkmJFgnS9xsFPp}l88)XRR)~KT0 zPqcXFx2^Ak*7x1@;C`}xKR#Hrcx>XV^Yz8>$>?z6z3{-{{S%A9k|X2LG2^ulo=z*y zeD7LzVaJ@ho}Ms*rH4KLiMC&ePqNU6zF6w}hu`l__gUewtUPtuxwd0&cs(s-o#B;w zBau#&(t_^%B$-UCoWQd_30K)UnOxc3NF?TNtvk2Z2Ao^-LvwfDa&C>z-Cj@juKmNg z6F$hE-g?UUSu(k@6SICE_U7z<>=C>dzM9*YUJCBL8>Qxlae|h^ALWX;nLp%eIMksd zU?(~V#`+;)^sz z-O$5N$M-dLLujQ;2laTC&pE5=yQGV1CxN=4b!^R0$aS1(TvSvv#1s{04aCcf2qTRN z3K?$BfrJ5?OdDv=Bbbe&EzB(hG|%&5Ng7#at1h&b zBpO}v7)?fnY15uU(PI)5;{YTwPOdcOHUv^M+bxCeN0)QGMg;SF*h>^i{vIo5Ct;9*F z`H*c^fG^~c<4=~|dBRmhwZVL(Vn@%1=H|+S zRE|QQIBCt2g23>L9CA$=m}NLHdKSt|jecXX898{Sql%CJGJw&%&2=$sXf&@`&gbn4 zP;q(;@~U82#j%2k*DvByBM2CBn|jBgtBHXExxTh}emI>|3`LMdu?*hw9e0-FhNd0F z3QR?k8*-~fYRF$(ck{!|W<2N@vvLN{1}Nl3!JrKOE4p#>;)MqO3({0AoDlsCqii;U z+ho}`-Pv4@R0zeaM?Q_Da!7{}ej*-xNuf+@ZU%x?4F4`3*a-s30H5@Yt8ZLs97n$- qgkO^KM;K*}(Hl27Y%?T67-8QV9Le3U1|CUV{hstMqt7l^QvU-oU7JM! delta 3869 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.;2 100127 +(FILECREATED "24-Aug-2025 11:45:37"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>IOCHAR.;49 100320 - :CHANGES-TO (VARS IOCHARCOMS) + :EDIT-BY rmk - :PREVIOUS-DATE "24-Jul-2022 14:56:20" {DSK}larry>medley>sources>IOCHAR.;1) + :CHANGES-TO (RESOURCES \FFDELTA1) + (FNS MAKEBITTABLE \SETUP.FFILEPOS) + :PREVIOUS-DATE "24-Apr-2025 22:08:18" +{DSK}kaplan>Local>medley3.5>working-medley>sources>IOCHAR.;48) -(* ; " -Copyright (c) 1981-1988, 1990-1991, 2018, 2020 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT IOCHARCOMS) @@ -203,17 +204,18 @@ Copyright (c) 1981-1988, 1990-1991, 2018, 2020 by Venue & Xerox Corporation. ) (MAKEBITTABLE - [LAMBDA (L NEG A) (* ; "Edited 29-Apr-91 23:02 by jds") + [LAMBDA (L NEG A) (* ; "Edited 24-Aug-2025 11:45 by rmk") + (* ; "Edited 29-Apr-91 23:02 by jds") [COND - [(type? CHARTABLE A) (* ; "Clear it") + [(type? CHARTABLE A) (* ; "Clear it") (\ZEROBYTES A 0 \MAXTHINCHAR) (if (fetch (CHARTABLE NSCHARHASH) of A) then (CLRHASH (fetch (CHARTABLE NSCHARHASH) of A] (T (SETQ A (create CHARTABLE] (for X in L do (\SETSYNCODE A (OR (SMALLP X) - (CHCON1 X)) - 1)) (* ; "Invert 1 and 0 if NEG") - [AND NEG (for I from 0 to \MAXCHAR do (\SETSYNCODE A I (LOGXOR 1 (\SYNCODE A I] + (CHCON1 X)) + 1)) (* ; "Invert 1 and 0 if NEG") + [AND NEG (for I from 0 to \MAXTHINCHAR do (\SETSYNCODE A I (LOGXOR 1 (\SYNCODE A I] A]) ) (DECLARE%: DONTCOPY @@ -258,13 +260,15 @@ DONTCOPY (FILEPOS [LAMBDA (PATTERN FILE START END SKIP TAIL CASEARRAY) + (* ;; "Edited 24-Apr-2025 22:08 by rmk") + (* ;; "Edited 10-Jul-2022 16:51 by rmk") (* ;; "Edited 1-Jul-2022 11:55 by rmk") (* ;; "Edited 25-Jun-2022 22:51 by rmk: The original version was a byte-level searcher, this upgrades to character searching as determined by the external format of the stream. (It is also a bit faster than the original).") - (* ;; "This provides accurate results if the stream's external format is stable, wherein each character code has a unique byte representation. If the stream's format is unstable (i.e. XCCS runcoding), then the result is accurate if the stream's initial charset (or other contextual information) is correct for the START byte position.") + (* ;; "This provides accurate results if the stream's external format is stable, wherein each character code has a unique byte representation. If the stream's format is unstable (i.e. MCCS runcoding), then the result is accurate if the stream's initial charset (or other contextual information) is correct for the START byte position.") (* ;; "Otherwise, there may be some bad matches and some missing matches. The slow case will be accurate in those cases (and a NIL return for the format's \FORMATBYTESTRING function will kick it into the slow case (about 10 times slower). This always defers to the slow case if SKIP or CASEARRAY are non-NIL.") @@ -382,7 +386,7 @@ DONTCOPY (* ;; "Getting the character set for the start of the match is a little trickier. We know the character set at the byte that starts the beginning of the match (= character set of PATTERN's first character. If we set the stream to that charset, then back up one character, that should get it right. ") - (* ;; "This should only be necessary for an unstable format, maybe don't bother if it isn't XCCS. There is another special case here for XCCS: if the charset is 255 at the start (=2 byte encoding), then we assume that it didn't change, and nothing to worry about.") + (* ;; "This should only be necessary for an unstable format, maybe don't bother if it isn't XCCS. There is another special case here for MCCS: if the charset is 255 at the start (=2 byte encoding), then we assume that it didn't change, and nothing to worry about.") (RETURN (IF TAIL THEN (CL:UNLESS (EQ NSCHARSETSHIFT (ffetch (STREAM CHARSET) of STREAM)) @@ -412,6 +416,8 @@ DONTCOPY (FFILEPOS [LAMBDA (PATTERN FILE START END SKIP TAIL CASEARRAY) + (* ;; "Edited 24-Apr-2025 22:07 by rmk") + (* ;; "Edited 10-Jul-2022 10:17 by rmk") (* ;; "Edited 1-Jul-2022 11:55 by rmk") @@ -420,7 +426,7 @@ DONTCOPY (* ;; "Edited 10-Aug-2020 21:44 by rmk:") - (* ;; "RMK: Added coercion from internal XCCS string to UTF8 if searching a UTF8 file") + (* ;; "RMK: Added coercion from internal MCCS string to UTF8 if searching a UTF8 file") (* Pavel "12-Oct-86 15:20") (PROG ((STREAM (\GETSTREAM FILE 'INPUT)) BYTEPATTERN BPATBASE BPATOFFSET BPATLEN ORGFILEPTR STARTBYTEPOS ENDBYTEPOS BIGENDOFFSET @@ -587,6 +593,8 @@ DONTCOPY (\SETUP.FFILEPOS [LAMBDA (PATBASE PATOFFSET PATLEN PATCHAR DELTA1 DELTA2) + (* ;; "Edited 24-Aug-2025 11:45 by rmk") + (* ;; "Edited 24-Jun-2022 16:32 by rmk: Removing CASE argument. That forces the \SLOWFILEPOS, because the the alternative stream matches can't be anticipated.") (* jop%: "25-Sep-86 11:44") @@ -596,7 +604,7 @@ DONTCOPY PATLEN)) (MAXPATINDEX (SUB1 PATLEN)) CHAR) - (for I from 0 to (FOLDLO \MAXCHAR BYTESPERWORD) do (PUTBASE DELTA1 I PATLEN,PATLEN)) + (for I from 0 to (FOLDLO \MAXTHINCHAR BYTESPERWORD) do (PUTBASE DELTA1 I PATLEN,PATLEN)) (* ;; "DELTA1 initially all PATLEN, the default for chars not in the pattern. I assume array is word-aligned") @@ -780,7 +788,7 @@ DONTCOPY (DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE -[PUTDEF '\FFDELTA1 'RESOURCES '(NEW (ARRAY (ADD1 \MAXCHAR) +[PUTDEF '\FFDELTA1 'RESOURCES '(NEW (ARRAY (ADD1 \MAXTHINCHAR) 'BYTE] [PUTDEF '\FFDELTA2 'RESOURCES '(NEW (ARRAY \MAX.PATTERN.SIZE 'BYTE] @@ -1567,18 +1575,16 @@ DONTCOPY (ADDTOVAR LAMA PACK* CONCAT) ) -(PUTPROPS IOCHAR COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 -1991 2018 2020)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3456 7250 (CHCON 3466 . 4316) (UNPACK 4318 . 5212) (DCHCON 5214 . 6481) (DUNPACK 6483 - . 7248)) (7251 18766 (UALPHORDER 7261 . 7357) (ALPHORDER 7359 . 9162) (CONCAT 9164 . 9809) ( -CONCATCODES 9811 . 9997) (PACKC 9999 . 12602) (PACK 12604 . 13183) (PACK* 13185 . 14907) (\PACK.ITEM -14909 . 15364) (STRPOS 15366 . 18764)) (18768 19057 (XCL:PACK 18768 . 19057)) (19059 19309 (XCL:PACK* -19059 . 19309)) (20016 22407 (STRPOSL 20026 . 21652) (MAKEBITTABLE 21654 . 22405)) (22569 23046 ( -CASEARRAY 22579 . 22769) (UPPERCASEARRAY 22771 . 23044)) (23368 56745 (FILEPOS 23378 . 32619) ( -FFILEPOS 32621 . 44842) (\SETUP.FFILEPOS 44844 . 48627) (\SLOWFILEPOS 48629 . 56743)) (57533 98780 ( -DATE 57543 . 57629) (DATEFORMAT 57631 . 57723) (GDATE 57725 . 57836) (IDATE 57838 . 69509) ( -\IDATESCANTOKEN 69511 . 70790) (\IDATE-PARSE-MONTH 70792 . 74488) (\OUTDATE 74490 . 87238) ( -\OUTDATE-STRING 87240 . 87855) (\RPLRIGHT 87857 . 88095) (\UNPACKDATE 88097 . 93888) (\PACKDATE 93890 - . 97210) (\DTSCAN 97212 . 97354) (\ISDST? 97356 . 97863) (\CHECKDSTCHANGE 97865 . 98778))))) + (FILEMAP (NIL (3501 7295 (CHCON 3511 . 4361) (UNPACK 4363 . 5257) (DCHCON 5259 . 6526) (DUNPACK 6528 + . 7293)) (7296 18811 (UALPHORDER 7306 . 7402) (ALPHORDER 7404 . 9207) (CONCAT 9209 . 9854) ( +CONCATCODES 9856 . 10042) (PACKC 10044 . 12647) (PACK 12649 . 13228) (PACK* 13230 . 14952) (\PACK.ITEM + 14954 . 15409) (STRPOS 15411 . 18809)) (18813 19102 (XCL:PACK 18813 . 19102)) (19104 19354 (XCL:PACK* + 19104 . 19354)) (20061 22561 (STRPOSL 20071 . 21697) (MAKEBITTABLE 21699 . 22559)) (22723 23200 ( +CASEARRAY 22733 . 22923) (UPPERCASEARRAY 22925 . 23198)) (23522 57053 (FILEPOS 23532 . 32823) ( +FFILEPOS 32825 . 45096) (\SETUP.FFILEPOS 45098 . 48935) (\SLOWFILEPOS 48937 . 57051)) (57845 99092 ( +DATE 57855 . 57941) (DATEFORMAT 57943 . 58035) (GDATE 58037 . 58148) (IDATE 58150 . 69821) ( +\IDATESCANTOKEN 69823 . 71102) (\IDATE-PARSE-MONTH 71104 . 74800) (\OUTDATE 74802 . 87550) ( +\OUTDATE-STRING 87552 . 88167) (\RPLRIGHT 88169 . 88407) (\UNPACKDATE 88409 . 94200) (\PACKDATE 94202 + . 97522) (\DTSCAN 97524 . 97666) (\ISDST? 97668 . 98175) (\CHECKDSTCHANGE 98177 . 99090))))) STOP diff --git a/sources/IOCHAR.LCOM b/sources/IOCHAR.LCOM index 15b9981d722ebcd64b35c4cd0372c45dbb56c247..ec92917b169266ff11f832aa70389aa8c78f4960 100644 GIT binary patch delta 475 zcmbV|!AiqG5Qd3($_scM_LLkpY|=#2MFMHE(a>!YvWX)05}Hs-)25_~h={Ks`XYkY z;(PcurWB-t7ro4B=9};TUpCU)MtZ(X4HLV!Q*02!0$r!3MSCX*6f|iTt65!@&@2Ig z{NRh><7vLG+O;z;R&}v-crz(#XHk`Pb>Gu0=dNkzv*i@O66xs4?5luudyj2U{g@Kc zv5*&!l8`eTbfZKt>plcI=di!8X&QpExakajch)=URl957FetGp(e1z2ePG(}AJXUbVH9%t3+n!a*Z=?k delta 489 zcma)&L2AN46o#?O+@QP1EK0ISm>CmIrV)rw(nUAl=JEdjd++^Fc{@~I1`kkEJw8?`rd6O-W?0OqBaqQJpDm^tpFlnb z1lvK|_gemN*I4H3V$7Fz5V}n#)-H8j0SSR|l7g9TGAvSFzs~ok6HU_)Ohzk_`o{*L zNRi~Lpyj)<@1(v5h!8d5i&BmP#UhjGRUzXgx4XtuKI3*aDvFIg2;O5t z>%fF-=h{!yGz7Wt#EAq)e>ZF=3a}{l`$5=CR8RB*qPlvs&W^Q2XGV=t{Qp`au81S2 z+bugj9?w4Sw{p}=qd1I`pIUIkXc!0A%~X84&*y6n7jVam{2AQ5SmecMHO=P;h-H!z j;u6cOme5NWC2A$=B}@SegCt1An}{huv7$(wpe20+i{gXJ diff --git a/sources/LLCHAR b/sources/LLCHAR index eb9904a44..5959ed8d6 100644 --- a/sources/LLCHAR +++ b/sources/LLCHAR @@ -1,16 +1,15 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "28-Apr-2022 08:52:36" {DSK}kaplan>Local>medley3.5>my-medley>sources>LLCHAR.;13 104756 +(FILECREATED "24-Aug-2025 11:50:57"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLCHAR.;14 104478 - :CHANGES-TO (I.S.OPRS inpname) + :EDIT-BY rmk - :PREVIOUS-DATE "23-Apr-2022 17:19:02" -{DSK}kaplan>Local>medley3.5>my-medley>sources>LLCHAR.;12) + :CHANGES-TO (VARS LLCHARCOMS) + :PREVIOUS-DATE "28-Apr-2022 08:52:36" +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLCHAR.;13) -(* ; " -Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT LLCHARCOMS) @@ -44,7 +43,6 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (MACROS \PUTBASECHAR \GETBASECHAR) (MACROS \CHARSET \CHAR8CODE) (CONSTANTS (\CHARMASK 255) - (\MAXCHAR 255) (\MAXTHINCHAR 255) (\MAXFATCHAR 65535) (\MAXCHARSET 255) @@ -1728,8 +1726,6 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (RPAQQ \CHARMASK 255) -(RPAQQ \MAXCHAR 255) - (RPAQQ \MAXTHINCHAR 255) (RPAQQ \MAXFATCHAR 65535) @@ -1740,7 +1736,6 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (CONSTANTS (\CHARMASK 255) - (\MAXCHAR 255) (\MAXTHINCHAR 255) (\MAXFATCHAR 65535) (\MAXCHARSET 255) @@ -1848,19 +1843,17 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (PUTPROPS LLCHAR FILETYPE :FAKE-COMPILE-FILE) -(PUTPROPS LLCHAR COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1994 -2018 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4224 74410 (ALLOCSTRING 4234 . 6257) (MKATOM 6259 . 6894) (SUBATOM 6896 . 8766) ( -CHARACTER 8768 . 9772) (\PARSE.NUMBER 9774 . 25494) (\INVALID.DOTTED.SYMBOL 25496 . 25991) ( -\INVALID.INTEGER 25993 . 27445) (\MKINTEGER 27447 . 30154) (MKSTRING 30156 . 32299) ( -\PRINDATUM.TO.STRING 32301 . 38479) (BKSYSBUF 38481 . 40015) (NCHARS 40017 . 41717) (NTHCHARCODE 41719 - . 43765) (RPLCHARCODE 43767 . 44828) (\RPLCHARCODE 44830 . 46365) (NTHCHAR 46367 . 46560) (RPLSTRING -46562 . 49773) (SUBSTRING 49775 . 52698) (GNC 52700 . 52873) (GNCCODE 52875 . 53643) (GLC 53645 . -53818) (GLCCODE 53820 . 54585) (STREQUAL 54587 . 56701) (STRING.EQUAL 56703 . 61041) (STRINGP 61043 . -61194) (CHCON1 61196 . 61983) (U-CASE 61985 . 65212) (L-CASE 65214 . 69074) (U-CASEP 69076 . 69650) ( -\SMASHABLESTRING 69652 . 70114) (\MAKEWRITABLESTRING 70116 . 70552) (\SMASHSTRING 70554 . 74260) ( -\FATTENSTRING 74262 . 74408)) (74595 79757 (\GETBASESTRING 74605 . 75259) (\PUTBASESTRING 75261 . -78000) (\PUTBASESTRINGFAT 78002 . 78748) (GetBcplString 78750 . 79415) (SetBcplString 79417 . 79755)) -(101142 103956 (%%COPY-ONED-ARRAY 101152 . 103002) (%%COPY-STRING-TO-ARRAY 103004 . 103954))))) + (FILEMAP (NIL (4108 74294 (ALLOCSTRING 4118 . 6141) (MKATOM 6143 . 6778) (SUBATOM 6780 . 8650) ( +CHARACTER 8652 . 9656) (\PARSE.NUMBER 9658 . 25378) (\INVALID.DOTTED.SYMBOL 25380 . 25875) ( +\INVALID.INTEGER 25877 . 27329) (\MKINTEGER 27331 . 30038) (MKSTRING 30040 . 32183) ( +\PRINDATUM.TO.STRING 32185 . 38363) (BKSYSBUF 38365 . 39899) (NCHARS 39901 . 41601) (NTHCHARCODE 41603 + . 43649) (RPLCHARCODE 43651 . 44712) (\RPLCHARCODE 44714 . 46249) (NTHCHAR 46251 . 46444) (RPLSTRING +46446 . 49657) (SUBSTRING 49659 . 52582) (GNC 52584 . 52757) (GNCCODE 52759 . 53527) (GLC 53529 . +53702) (GLCCODE 53704 . 54469) (STREQUAL 54471 . 56585) (STRING.EQUAL 56587 . 60925) (STRINGP 60927 . +61078) (CHCON1 61080 . 61867) (U-CASE 61869 . 65096) (L-CASE 65098 . 68958) (U-CASEP 68960 . 69534) ( +\SMASHABLESTRING 69536 . 69998) (\MAKEWRITABLESTRING 70000 . 70436) (\SMASHSTRING 70438 . 74144) ( +\FATTENSTRING 74146 . 74292)) (74479 79641 (\GETBASESTRING 74489 . 75143) (\PUTBASESTRING 75145 . +77884) (\PUTBASESTRINGFAT 77886 . 78632) (GetBcplString 78634 . 79299) (SetBcplString 79301 . 79639)) +(100978 103792 (%%COPY-ONED-ARRAY 100988 . 102838) (%%COPY-STRING-TO-ARRAY 102840 . 103790))))) STOP diff --git a/sources/LLCHAR.LCOM b/sources/LLCHAR.LCOM index 386e40045108234dc836adbe1e262a2de783f71f..8fd7f263700a18942cbc7a553597a21cfdff83fd 100644 GIT binary patch delta 446 zcmX@Sp7Gu~#t9L^Cc2KL>AFS+My3jehE}EqR;K0?v(4(u^NX@G^U`&5Q&VzMEA5K& zON)|Ii|u@ToIMK#Es*pYSs9vH85k%ja49+a`v!RWxaztAi4-M;%sd4p zw@@D+1!VPldU{FvsBXL(f}FY9OUX4;_9NHWQ4_~lg}}#5q7GAp@E5s zxrKt2tBYrdu2ZB!QEs+^70@Go?ykYQA^r*)Tw#tu!3q%10bL)gsbCclIki%>88x9#puFV{ru6`_j Ho<3Xvi5QT{#*1MI8iy}jWk_#pzH|bvrg^;Fgq$VLrONDNV4JeqTq^(#4pTUyX zkh`=$m%WKtzkaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;25 272767 +(FILECREATED " 2-Sep-2025 22:54:03"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;50 272104 :EDIT-BY rmk - :CHANGES-TO (VARS LLDISPLAYCOMS) + :CHANGES-TO (FNS \SLOWBLTCHAR) - :PREVIOUS-DATE "14-Jul-2025 22:06:59" -{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;23) + :PREVIOUS-DATE " 2-Sep-2025 22:41:14" +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;49) (PRETTYCOMPRINT LLDISPLAYCOMS) @@ -1141,46 +1141,38 @@ T]) (\CHANGECHARSET.DISPLAY - [LAMBDA (DISPLAYDATA CHARSET) (* gbn "13-Sep-85 11:47") + [LAMBDA (DISPLAYDATA CHARSET) (* ; "Edited 2-Sep-2025 22:40 by rmk") + (* gbn "13-Sep-85 11:47") (* ;; -"Called when the character set information cached in a display stream doesn't correspond to CHARSET") + "Called when the character set information cached in a display stream doesn't correspond to CHARSET") - (PROG [BM (PBT (ffetch DDPILOTBBT of DISPLAYDATA)) - (CSINFO (\GETCHARSETINFO CHARSET (ffetch DDFONT of DISPLAYDATA] + (PROG (BM (PBT (ffetch DDPILOTBBT of DISPLAYDATA)) + (CSINFO (\INSURECHARSETINFO (ffetch DDFONT of DISPLAYDATA) + CHARSET))) - (* ;; "Since we called \GETCHARSETINFO without the NOSLUG? flag, we presume we will get back a CSINFO , even if it is a slug csinfo") + (* ;; "Since we will get back a CSINFO , even if it is a slug csinfo") (UNINTERRUPTABLY - (freplace DDWIDTHSCACHE of DISPLAYDATA with (ffetch (CHARSETINFO WIDTHS - ) - of CSINFO)) - (freplace DDOFFSETSCACHE of DISPLAYDATA with (ffetch (CHARSETINFO - OFFSETS) - of CSINFO)) - (freplace DDCHARIMAGEWIDTHS of DISPLAYDATA with (ffetch (CHARSETINFO - IMAGEWIDTHS) - of CSINFO)) + (freplace DDWIDTHSCACHE of DISPLAYDATA with (ffetch (CHARSETINFO WIDTHS) of CSINFO)) + (freplace DDOFFSETSCACHE of DISPLAYDATA with (ffetch (CHARSETINFO OFFSETS) of CSINFO)) + (freplace DDCHARIMAGEWIDTHS of DISPLAYDATA with (ffetch (CHARSETINFO IMAGEWIDTHS) + of CSINFO)) (freplace DDCHARSET of DISPLAYDATA with CHARSET) (SETQ BM (ffetch CHARSETBITMAP of CSINFO)) - (freplace PBTSOURCEBPL of PBT with (UNFOLD (ffetch BITMAPRASTERWIDTH - of BM) - BITSPERWORD)) + (freplace PBTSOURCEBPL of PBT with (UNFOLD (ffetch BITMAPRASTERWIDTH of BM) + BITSPERWORD)) [COND ((OR (NEQ (ffetch DDCHARSETASCENT of DISPLAYDATA) (ffetch CHARSETASCENT of CSINFO)) (NEQ (ffetch DDCHARSETDESCENT of DISPLAYDATA) (ffetch CHARSETDESCENT of CSINFO))) (\SFFixY DISPLAYDATA CSINFO)) - (T (freplace PBTSOURCE of PBT with (\ADDBASE (ffetch BITMAPBASE - of BM) - (ITIMES (ffetch - BITMAPRASTERWIDTH - of BM) - (ffetch - DDCHARHEIGHTDELTA - of DISPLAYDATA]) - ]) + (T (freplace PBTSOURCE of PBT with (\ADDBASE (ffetch BITMAPBASE of BM) + (ITIMES (ffetch BITMAPRASTERWIDTH + of BM) + (ffetch DDCHARHEIGHTDELTA + of DISPLAYDATA])]) (\INDICATESTRING [LAMBDA (CHARCODE) (* jds " 3-Oct-85 16:50") @@ -1208,16 +1200,16 @@ (CHARACTER CHARCODE]) (\SLOWBLTCHAR - [LAMBDA (CHARCODE DISPLAYSTREAM) (* ; "Edited 8-Nov-89 15:19 by gadener") + [LAMBDA (CHARCODE DISPLAYSTREAM) (* ; "Edited 2-Sep-2025 22:52 by rmk") + (* ; "Edited 8-Nov-89 15:19 by gadener") (* ;; "case of BLTCHAR where either font is rotated or destination is a color bitmap. DISPLAYSTREAM is known to be a display stream, and its cache fields have been updated for CHARCODE's charset") (PROG (ROTATION CHAR8CODE DD) (SETQ CHAR8CODE (\CHAR8CODE CHARCODE)) (SETQ DD (ffetch (STREAM IMAGEDATA) of DISPLAYSTREAM)) - (SETQ ROTATION (ffetch (FONTDESCRIPTOR ROTATION) of (ffetch (\DISPLAYDATA - DDFONT) - of DD))) + (SETQ ROTATION (ffetch (FONTDESCRIPTOR ROTATION) of (ffetch (\DISPLAYDATA DDFONT) + of DD))) (COND [(EQ 0 ROTATION) (PROG (NEWX LEFT RIGHT CURX PILOTBBT DESTBIT WIDTH SOURCEBIT) @@ -1247,11 +1239,9 @@ (SETQ SOURCEBIT (IDIFFERENCE (IPLUS (\DSPGETCHAROFFSET CHAR8CODE DD) LEFT) CURX)) - (SELECTQ (ffetch (BITMAP BITMAPBITSPERPIXEL) of (ffetch - (\DISPLAYDATA - DDDestination - ) - of DD)) + (SELECTQ (ffetch (BITMAP BITMAPBITSPERPIXEL) of (ffetch (\DISPLAYDATA + DDDestination) + of DD)) (1) (4 (SETQ DESTBIT (LLSH DESTBIT 2)) (SETQ WIDTH (LLSH WIDTH 2)) @@ -1263,33 +1253,29 @@ (SETQ WIDTH (ITIMES 24 WIDTH)) (SETQ SOURCEBIT (ITIMES 24 SOURCEBIT))) (SHOULDNT)) - (.WHILE.TOP.DS. DISPLAYSTREAM (freplace (PILOTBBT PBTDESTBIT) - of PILOTBBT with DESTBIT) + (.WHILE.TOP.DS. DISPLAYSTREAM (freplace (PILOTBBT PBTDESTBIT) of PILOTBBT + with DESTBIT) (freplace (PILOTBBT PBTWIDTH) of PILOTBBT with WIDTH) - (freplace (PILOTBBT PBTSOURCEBIT) of PILOTBBT with - SOURCEBIT) + (freplace (PILOTBBT PBTSOURCEBIT) of PILOTBBT with SOURCEBIT) (\PILOTBITBLT PILOTBBT 0)) T] (T (* ; "handle rotated fonts") (PROG (YPOS HEIGHTMOVED CSINFO) (SETQ YPOS (ffetch (\DISPLAYDATA DDYPOSITION) of DD)) (SETQ HEIGHTMOVED (\DSPGETCHARWIDTH CHAR8CODE DD)) - (SETQ CSINFO (\GETCHARSETINFO (\CHARSET CHARCODE) - (ffetch (\DISPLAYDATA DDFONT) of DD))) + (SETQ CSINFO (\INSURECHARSETINFO (ffetch (\DISPLAYDATA DDFONT) of DD) + (\CHARSET CHARCODE))) (COND - ((EQ ROTATION 90) (* ; - "don't force CR for rotated fonts.") + ((EQ ROTATION 90) (* ; "don't force CR for rotated fonts.") (\DSPYPOSITION.DISPLAY DISPLAYSTREAM (IPLUS YPOS HEIGHTMOVED)) (* ; - "update the display stream x position.") + "update the display stream x position.") (BITBLT (ffetch (CHARSETINFO CHARSETBITMAP) of CSINFO) 0 (\DSPGETCHAROFFSET CHAR8CODE DD) DISPLAYSTREAM - (ADD1 (IDIFFERENCE (ffetch (\DISPLAYDATA DDXPOSITION) - of DD) - (ffetch (CHARSETINFO CHARSETASCENT) of CSINFO)) - ) + (ADD1 (IDIFFERENCE (ffetch (\DISPLAYDATA DDXPOSITION) of DD) + (ffetch (CHARSETINFO CHARSETASCENT) of CSINFO))) YPOS (IPLUS (ffetch (CHARSETINFO CHARSETASCENT) of CSINFO) (ffetch (CHARSETINFO CHARSETDESCENT) of CSINFO)) @@ -4593,17 +4579,25 @@ (DEFINEQ (INITIALIZEDISPLAYSTREAMS - [LAMBDA NIL (* ; "Edited 6-Jul-2025 12:57 by rmk") + [LAMBDA NIL (* ; "Edited 18-Aug-2025 12:15 by rmk") + (* ; "Edited 6-Jul-2025 12:57 by rmk") (* lmm " 7-Jan-86 16:51") (SETQ WHOLEDISPLAY (create REGION)) (SETQ \SYSPILOTBBT (create PILOTBBT)) (* ; "For BITBLT") (SETQ \SYSBBTEXTURE (BITMAPCREATE 16 16)) (* ;  "For texture handling in \BITBLTSUB") - (* ; - "A guaranteed display font is initialized here after pup, font, and bitmap code has been loaded.") - (SETQ \GUARANTEEDDISPLAYFONT (FONTCREATE 'GACHA 10 '(MEDIUM REGULAR REGULAR) - NIL - 'DISPLAY)) + + (* ;; "A guaranteed display font is initialized here after pup, font, and bitmap code has been loaded. This does not use FONTCREATE, so it doesn't depend on the argument checking and incore cache retrieval ") + + [SETQ \GUARANTEEDDISPLAYFONT (\CREATEDISPLAYFONT (MAKEFONTSPEC 'GACHA 10 '(MEDIUM REGULAR REGULAR + ) + 0 + 'DISPLAY] + + (* ;; + "For some reason, charset 0 has to be instantiated, otherwise there is a divide by 0 in the loadup") + + (\CREATECHARSET 0 \GUARANTEEDDISPLAYFONT) (SETQ DEFAULTFONT (FONTCLASS 'DEFAULTFONT (LIST 1 \GUARANTEEDDISPLAYFONT]) ) (DECLARE%: DOCOPY DONTEVAL@LOAD @@ -4628,44 +4622,44 @@ (ADDTOVAR LAMA ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (20615 23283 (\FBITMAPBIT 20625 . 21085) (\FBITMAPBIT.UFN 21087 . 22106) ( -\NEWPAGE.DISPLAY 22108 . 22243) (INITBITMASKS 22245 . 23281)) (25208 25717 (\CreateCursorBitMap 25218 - . 25715)) (25834 86764 (BITBLT 25844 . 36234) (BLTSHADE 36236 . 37014) (\BITBLTSUB 37016 . 47151) ( -\GETPILOTBBTSCRATCHBM 47153 . 47768) (BITMAPCOPY 47770 . 48346) (BITMAPCREATE 48348 . 49908) ( -BITMAPBIT 49910 . 58297) (BITMAPEQUAL 58299 . 59761) (BLTCHAR 59763 . 60379) (\BLTCHAR 60381 . 60883) -(\MEDW.BLTCHAR 60885 . 65763) (\CHANGECHARSET.DISPLAY 65765 . 68723) (\INDICATESTRING 68725 . 69921) ( -\SLOWBLTCHAR 69923 . 77019) (TEXTUREP 77021 . 77291) (INVERT.TEXTURE 77293 . 77567) ( -INVERT.TEXTURE.BITMAP 77569 . 79104) (BITMAPWIDTH 79106 . 79478) (BITMAPHEIGHT 79480 . 79856) ( -READBITMAP 79858 . 82368) (\INSUREBITSPERPIXEL 82370 . 82665) (MAXIMUMCOLOR 82667 . 82808) ( -OPPOSITECOLOR 82810 . 82989) (MAXIMUMSHADE 82991 . 83202) (OPPOSITESHADE 83204 . 83383) (\MEDW.BITBLT -83385 . 86762)) (86765 88194 (\READBINARYBITMAP 86775 . 87413) (\PRINTBINARYBITMAP 87415 . 88192)) ( -88196 93382 (FINISH-READING-BITMAP 88196 . 93382)) (94504 94985 (BITMAPBIT.EXPANDER 94514 . 94983)) ( -94986 143520 (\BITBLT.DISPLAY 94996 . 118235) (\BITBLT.BITMAP 118237 . 127336) (\BITBLT.MERGE 127338 - . 129591) (\BLTSHADE.DISPLAY 129593 . 136693) (\BLTSHADE.BITMAP 136695 . 143518)) (143521 152841 ( -\BITBLT.BITMAP.SLOW 143531 . 152839)) (152842 169223 (\PUNT.BLTSHADE.BITMAP 152852 . 159948) ( -\PUNT.BITBLT.BITMAP 159950 . 169221)) (169224 172664 (\SCALEDBITBLT.DISPLAY 169234 . 170867) ( -\BACKCOLOR.DISPLAY 170869 . 172662)) (176519 178792 (DISPLAYSTREAMP 176529 . 177137) (DSPSOURCETYPE -177139 . 178148) (DSPXOFFSET 178150 . 178469) (DSPYOFFSET 178471 . 178790)) (178793 192988 ( -DSPDESTINATION 178803 . 181906) (DSPTEXTURE 181908 . 182070) (\DISPLAYSTREAMINCRXPOSITION 182072 . -182359) (\SFFixDestination 182361 . 183539) (\SFFixClippingRegion 183541 . 185713) (\SFFixFont 185715 - . 186765) (\SFFIXLINELENGTH 186767 . 188263) (\UPDATE-SYNONYM-STREAM-LINELENGTH-FIELD 188265 . 190078 -) (\SFFixY 190080 . 192986)) (192989 196836 (\SIMPLE.DSPCREATE 192999 . 193549) (\COMMON.DSPCREATE -193551 . 196834)) (196937 199131 (\MEDW.XOFFSET 196947 . 198088) (\MEDW.YOFFSET 198090 . 199129)) ( -199132 207062 (\DSPCLIPPINGREGION.DISPLAY 199142 . 199888) (\DSPFONT.DISPLAY 199890 . 202264) ( -\DISPLAY.PILOTBITBLT 202266 . 202415) (\DSPLINEFEED.DISPLAY 202417 . 202988) (\DSPLEFTMARGIN.DISPLAY -202990 . 203721) (\DSPOPERATION.DISPLAY 203723 . 204747) (\DSPRIGHTMARGIN.DISPLAY 204749 . 205594) ( -\DSPXPOSITION.DISPLAY 205596 . 206453) (\DSPYPOSITION.DISPLAY 206455 . 207060)) (211250 216286 ( -TTYDISPLAYSTREAM 211260 . 216284)) (216589 217619 (DSPSCROLL 216599 . 217299) (PAGEHEIGHT 217301 . -217617)) (217664 220686 (\DSPRESET.DISPLAY 217674 . 220684)) (220722 221245 (\MAYBE-DRIBBLE-CHAR -220722 . 221245)) (221246 241884 (\DSPPRINTCHAR 221256 . 229094) (\DSPPRINTCR/LF 229096 . 241882)) ( -241885 242477 (\TTYBACKGROUND 241895 . 242475)) (242478 245765 (DSPBACKUP 242488 . 245763)) (245949 -246205 (COLORDISPLAYP 245959 . 246203)) (246206 248277 (DISPLAYBEFOREEXIT 246216 . 247042) ( -DISPLAYAFTERENTRY 247044 . 248275)) (248649 253181 (\DSPCLIPTRANSFORMX 248659 . 249248) ( -\DSPCLIPTRANSFORMY 249250 . 249975) (\DSPTRANSFORMREGION 249977 . 250509) (\DSPUNTRANSFORMY 250511 . -250771) (\DSPUNTRANSFORMX 250773 . 251033) (\OFFSETCLIPPINGREGION 251035 . 253179)) (254495 257082 ( -UPDATESCREENDIMENSIONS 254505 . 255134) (\CreateScreenBitMap 255136 . 257080)) (257641 270800 ( -\CoerceToDisplayDevice 257651 . 258064) (\CREATEDISPLAY 258066 . 259906) (DISPLAYSTREAMINIT 259908 . -263052) (\STARTDISPLAY 263054 . 265965) (\MOVE.WINDOWS.ONTO.SCREEN 265967 . 268159) ( -\UPDATE.PBT.RASTERWIDTHS 268161 . 269943) (\STOPDISPLAY 269945 . 270437) (\DEFINEDISPLAYINFO 270439 . -270798)) (271408 272392 (INITIALIZEDISPLAYSTREAMS 271418 . 272390))))) + (FILEMAP (NIL (20613 23281 (\FBITMAPBIT 20623 . 21083) (\FBITMAPBIT.UFN 21085 . 22104) ( +\NEWPAGE.DISPLAY 22106 . 22241) (INITBITMASKS 22243 . 23279)) (25206 25715 (\CreateCursorBitMap 25216 + . 25713)) (25832 85635 (BITBLT 25842 . 36232) (BLTSHADE 36234 . 37012) (\BITBLTSUB 37014 . 47149) ( +\GETPILOTBBTSCRATCHBM 47151 . 47766) (BITMAPCOPY 47768 . 48344) (BITMAPCREATE 48346 . 49906) ( +BITMAPBIT 49908 . 58295) (BITMAPEQUAL 58297 . 59759) (BLTCHAR 59761 . 60377) (\BLTCHAR 60379 . 60881) +(\MEDW.BLTCHAR 60883 . 65761) (\CHANGECHARSET.DISPLAY 65763 . 67997) (\INDICATESTRING 67999 . 69195) ( +\SLOWBLTCHAR 69197 . 75890) (TEXTUREP 75892 . 76162) (INVERT.TEXTURE 76164 . 76438) ( +INVERT.TEXTURE.BITMAP 76440 . 77975) (BITMAPWIDTH 77977 . 78349) (BITMAPHEIGHT 78351 . 78727) ( +READBITMAP 78729 . 81239) (\INSUREBITSPERPIXEL 81241 . 81536) (MAXIMUMCOLOR 81538 . 81679) ( +OPPOSITECOLOR 81681 . 81860) (MAXIMUMSHADE 81862 . 82073) (OPPOSITESHADE 82075 . 82254) (\MEDW.BITBLT +82256 . 85633)) (85636 87065 (\READBINARYBITMAP 85646 . 86284) (\PRINTBINARYBITMAP 86286 . 87063)) ( +87067 92253 (FINISH-READING-BITMAP 87067 . 92253)) (93375 93856 (BITMAPBIT.EXPANDER 93385 . 93854)) ( +93857 142391 (\BITBLT.DISPLAY 93867 . 117106) (\BITBLT.BITMAP 117108 . 126207) (\BITBLT.MERGE 126209 + . 128462) (\BLTSHADE.DISPLAY 128464 . 135564) (\BLTSHADE.BITMAP 135566 . 142389)) (142392 151712 ( +\BITBLT.BITMAP.SLOW 142402 . 151710)) (151713 168094 (\PUNT.BLTSHADE.BITMAP 151723 . 158819) ( +\PUNT.BITBLT.BITMAP 158821 . 168092)) (168095 171535 (\SCALEDBITBLT.DISPLAY 168105 . 169738) ( +\BACKCOLOR.DISPLAY 169740 . 171533)) (175390 177663 (DISPLAYSTREAMP 175400 . 176008) (DSPSOURCETYPE +176010 . 177019) (DSPXOFFSET 177021 . 177340) (DSPYOFFSET 177342 . 177661)) (177664 191859 ( +DSPDESTINATION 177674 . 180777) (DSPTEXTURE 180779 . 180941) (\DISPLAYSTREAMINCRXPOSITION 180943 . +181230) (\SFFixDestination 181232 . 182410) (\SFFixClippingRegion 182412 . 184584) (\SFFixFont 184586 + . 185636) (\SFFIXLINELENGTH 185638 . 187134) (\UPDATE-SYNONYM-STREAM-LINELENGTH-FIELD 187136 . 188949 +) (\SFFixY 188951 . 191857)) (191860 195707 (\SIMPLE.DSPCREATE 191870 . 192420) (\COMMON.DSPCREATE +192422 . 195705)) (195808 198002 (\MEDW.XOFFSET 195818 . 196959) (\MEDW.YOFFSET 196961 . 198000)) ( +198003 205933 (\DSPCLIPPINGREGION.DISPLAY 198013 . 198759) (\DSPFONT.DISPLAY 198761 . 201135) ( +\DISPLAY.PILOTBITBLT 201137 . 201286) (\DSPLINEFEED.DISPLAY 201288 . 201859) (\DSPLEFTMARGIN.DISPLAY +201861 . 202592) (\DSPOPERATION.DISPLAY 202594 . 203618) (\DSPRIGHTMARGIN.DISPLAY 203620 . 204465) ( +\DSPXPOSITION.DISPLAY 204467 . 205324) (\DSPYPOSITION.DISPLAY 205326 . 205931)) (210121 215157 ( +TTYDISPLAYSTREAM 210131 . 215155)) (215460 216490 (DSPSCROLL 215470 . 216170) (PAGEHEIGHT 216172 . +216488)) (216535 219557 (\DSPRESET.DISPLAY 216545 . 219555)) (219593 220116 (\MAYBE-DRIBBLE-CHAR +219593 . 220116)) (220117 240755 (\DSPPRINTCHAR 220127 . 227965) (\DSPPRINTCR/LF 227967 . 240753)) ( +240756 241348 (\TTYBACKGROUND 240766 . 241346)) (241349 244636 (DSPBACKUP 241359 . 244634)) (244820 +245076 (COLORDISPLAYP 244830 . 245074)) (245077 247148 (DISPLAYBEFOREEXIT 245087 . 245913) ( +DISPLAYAFTERENTRY 245915 . 247146)) (247520 252052 (\DSPCLIPTRANSFORMX 247530 . 248119) ( +\DSPCLIPTRANSFORMY 248121 . 248846) (\DSPTRANSFORMREGION 248848 . 249380) (\DSPUNTRANSFORMY 249382 . +249642) (\DSPUNTRANSFORMX 249644 . 249904) (\OFFSETCLIPPINGREGION 249906 . 252050)) (253366 255953 ( +UPDATESCREENDIMENSIONS 253376 . 254005) (\CreateScreenBitMap 254007 . 255951)) (256512 269671 ( +\CoerceToDisplayDevice 256522 . 256935) (\CREATEDISPLAY 256937 . 258777) (DISPLAYSTREAMINIT 258779 . +261923) (\STARTDISPLAY 261925 . 264836) (\MOVE.WINDOWS.ONTO.SCREEN 264838 . 267030) ( +\UPDATE.PBT.RASTERWIDTHS 267032 . 268814) (\STOPDISPLAY 268816 . 269308) (\DEFINEDISPLAYINFO 269310 . +269669)) (270279 271729 (INITIALIZEDISPLAYSTREAMS 270289 . 271727))))) STOP diff --git a/sources/LLDISPLAY.LCOM b/sources/LLDISPLAY.LCOM index 6a366d3ee..c1b38fe48 100644 --- a/sources/LLDISPLAY.LCOM +++ b/sources/LLDISPLAY.LCOM @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "27-Jul-2025 20:25:50" ("compiled on " -{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;25) "27-Jul-2025 13:59:31" -"COMPILE-FILEd" in "FULL 27-Jul-2025 ..." dated "27-Jul-2025 13:59:38") -(FILECREATED "27-Jul-2025 20:25:24" -{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;25 272767 :EDIT-BY rmk -:CHANGES-TO (VARS LLDISPLAYCOMS) :PREVIOUS-DATE "14-Jul-2025 22:06:59" -{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;23) +(FILECREATED " 2-Sep-2025 22:54:03" ("compiled on " +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;50) " 2-Sep-2025 22:44:30" +"COMPILE-FILEd" in "FULL 2-Sep-2025 ..." dated " 2-Sep-2025 22:44:39") +(FILECREATED " 2-Sep-2025 22:54:03" +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;50 272104 :EDIT-BY rmk +:CHANGES-TO (FNS \SLOWBLTCHAR) :PREVIOUS-DATE " 2-Sep-2025 22:41:14" +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLDISPLAY.;49) (RPAQQ LLDISPLAYCOMS ((DECLARE%: DONTCOPY (EXPORT (RECORDS PILOTBBT \DISPLAYDATA DISPLAYSTATE DISPLAYINFO) (MACROS \GETDISPLAYDATA))) (* ; "User-visible records are on ADISPLAY --- must be init'ed here") (INITRECORDS BITMAP PILOTBBT REGION @@ -196,7 +196,7 @@ BLTCHAR :D8 (42 \DISPLAYDATA 35 STREAM 24 OUTPUT) () \BLTCHAR :D8 -(P 0 A0169 I 2 DISPLAYDATA I 1 DISPLAYSTREAM I 0 CHARCODE) (Agh bÉ.ÉZ@ABlH(11 \GETSTREAM) +(P 0 A0152 I 2 DISPLAYDATA I 1 DISPLAYSTREAM I 0 CHARCODE) (Agh bÉ.ÉZ@ABlH(11 \GETSTREAM) (25 IMAGEOPS 18 STREAM 5 OUTPUT) () \MEDW.BLTCHAR :D8 @@ -209,11 +209,11 @@ BLTCHAR :D8 (256 \EM.DISPINTERRUPT 191 \TOPWDS 175 \EM.DISPINTERRUPT 167 \EM.DISPINTERRUPT 132 PILOTBBT) () \CHANGECHARSET.DISPLAY :D8 -(P 7 \INTERRUPTABLE P 5 BM P 4 CSINFO P 3 PBT I 1 CHARSET I 0 DISPLAYDATA) œ@É*@É ÉAàÐɵ@É ÉAàA@É -HIÐJ¿J"@LÉ¿@LÉ¿@LÉ0¿@A>¿LɽKMÈàààànÿÿåÍ¿@È'LÈ -ð—@È@LÈ ð©@L -¿°#MÉMÈ@ÉBÚоKNÒÍ¿KNÓÍh(116 \SFFixY 30 \CREATECHARSET) -(148 PILOTBBT 137 PILOTBBT) +(P 8 \INTERRUPTABLE P 6 BM P 5 CSINFO P 4 PBT I 1 CHARSET I 0 DISPLAYDATA) ¦ @É*@É HÉAàÐɵHÉAàAH +IJÐK¿K"@MÉ¿@MÉ¿@MÉ0¿@A>¿MɾLNÈàààànÿÿåÍ¿@È'MÈ +ð—@È@MÈ ð©@M +¿°'NÉNÈ@ÉBÚÐ_¿LOÒÍ¿LOÓÍh(122 \SFFixY 35 \CREATECHARSET) +(157 PILOTBBT 145 PILOTBBT 24 FONTDESCRIPTOR) () \INDICATESTRINGA0001 :D8 (NAME SI::*UNWIND-PROTECT* I 0 SI::*CLEANUP-FORMS* F 0 SI::*RESETFORMS* F 1 CHARCODE) Hgd gi @@ -225,18 +225,18 @@ BLTCHAR :D8 (75 ^ 52 %# 16 SI::RESETUNWIND) ( 81 "" 58 "") \SLOWBLTCHAR :D8 -(P 16 CSINFO P 15 HEIGHTMOVED P 14 YPOS P 13 SOFTCURSORUP P 12 DISPINTERRUPT P 11 SOURCEBIT P 10 WIDTH P 9 DESTBIT P 8 PILOTBBT P 7 CURX P 6 RIGHT P 5 LEFT P 4 NEWX P 2 DD P 1 CHAR8CODE P 0 ROTATION I 1 DISPLAYSTREAM I 0 CHARCODE F 20 \SOFTCURSORP F 21 \SOFTCURSORUPP F 22 \CURSORDESTINATION F 23 \SCREENBITMAPS) b@@lÿåYAÉ0ZdÉ È Xdjð¢±~€ JÉ_JÉIÐÈØ\JÉñ²l A -¿JÉ_JÉIÐÈØ¼JL¿OJÉØ_¿JÈ"dOñ¢¿O½JÈ#LJÉØ»dKñ‘¿K¾JÉ*_¿NMñ¢± OÈ jð’±M_¿NMÙ_¿JÉIÐÈMØOÙ_¿JÉÈdkð³adlð²¿Oàà_¿Oàà_¿Oàà_°Ddlð²¿Oààà_¿Oààà_¿Oààà_°$lð²lOÚ_¿lOÚ_¿lOÚ_„¿ W(²-W*´ hA -W,ð_²`È_¿`jÍ¿¿A`ð³hA -W.–A ¿OOÍ¿OOÍ¿OOÍ¿Ojv¿OŸ¿`OÍ¿±Î0JÉ_¿JÉIÐÈ_¿JÉ É@ãàÐɵ$JÉ É@ãà@ãJÉ -O"O$ÐO&¿O&_ ¿HdlZð²;¿AOOØ -¿O ÉjJÉIÐÈAJÉO È -ÙkØOO È -O È ØO °Hnð²8AOOÙ -¿O ÉjJÉIÐÈAJÉO È ÙJÉO È -O È ØO ‰o h(606 ERROR 595 BKBITBLT 553 \DSPYPOSITION.DISPLAY 534 BKBITBLT 491 \DSPYPOSITION.DISPLAY 453 \CREATECHARSET 387 \SOFTCURSORUPCURRENT 352 \TOTOPWDS 342 DSPDESTINATION 325 \SOFTCURSORDOWN 294 DSPDESTINATION 275 SHOULDNT 55 \DSPPRINTCR/LF) -(393 \EM.DISPINTERRUPT 332 \TOPWDS 316 \EM.DISPINTERRUPT 306 \EM.DISPINTERRUPT 111 \DISPLAYDATA 83 \DISPLAYDATA) -( 601 "Not implemented to rotate by other than 0, 90 or 270") +(P 18 CSINFO P 17 HEIGHTMOVED P 16 YPOS P 15 SOFTCURSORUP P 14 DISPINTERRUPT P 13 SOURCEBIT P 12 WIDTH P 11 DESTBIT P 10 PILOTBBT P 9 CURX P 8 RIGHT P 7 LEFT P 6 NEWX P 2 DD P 1 CHAR8CODE P 0 ROTATION I 1 DISPLAYSTREAM I 0 CHARCODE F 22 \SOFTCURSORP F 23 \SOFTCURSORUPP F 24 \CURSORDESTINATION F 25 \SCREENBITMAPS) n`@lÿåYAÉ0ZdÉ È Xdj𢱈€ JÉ_JÉIÐÈØ^JÉñ²l A +¿JÉ_JÉIÐÈØ¾JN¿OJÉØ_¿JÈ"dOñ¢¿O_¿JÈ#NJÉØ»dKñ‘¿K_¿JÉ*_¿OOñ¢±OÈ jð’±O_¿OOÙ_¿JÉIÐÈOØOÙ_¿JÉÈdkð³adlð²¿Oàà_¿Oàà_¿Oàà_°Ddlð²¿Oààà_¿Oààà_¿Oààà_°$lð²lOÚ_¿lOÚ_¿lOÚ_„¿ W,²-W.´ hA +W0ð_²`È_¿`jÍ¿¿A`ð³hA +W2–A ¿OOÍ¿OOÍ¿OOÍ¿Ojv¿OŸ¿`OÍ¿±Ð0JÉ_ ¿JÉIÐÈ_"¿JÉ @ã½\ÉMàÐɵ#LÉMàML +O&O(ÐO*¿O*_$¿HdlZð²;¿AO O"Ø +¿O$ÉjJÉIÐÈAJÉO$È +ÙkØO O$È +O$È ØO" °Hnð²8AO O"Ù +¿O$ÉjJÉIÐÈAJÉO$È ÙJÉO$È +O$È ØO" ‰o h(618 ERROR 607 BKBITBLT 565 \DSPYPOSITION.DISPLAY 546 BKBITBLT 503 \DSPYPOSITION.DISPLAY 465 \CREATECHARSET 397 \SOFTCURSORUPCURRENT 362 \TOTOPWDS 352 DSPDESTINATION 335 \SOFTCURSORDOWN 304 DSPDESTINATION 285 SHOULDNT 55 \DSPPRINTCR/LF) +(454 FONTDESCRIPTOR 403 \EM.DISPINTERRUPT 342 \TOPWDS 326 \EM.DISPINTERRUPT 316 \EM.DISPINTERRUPT 113 \DISPLAYDATA 83 \DISPLAYDATA) +( 613 "Not implemented to rotate by other than 0, 90 or 270") TEXTUREP :D8 (I 0 OBJECT) @d3 ³ô@Èkð´@NIL (18 BITMAP 10 BITMAP) @@ -289,7 +289,7 @@ OPPOSITESHADE :D8 NIL () \MEDW.BITBLT :D8 -(P 9 A0172 P 8 A0171 P 7 SOURCEBOTTOMTRANSFORMED P 6 SOURCELEFTTRANSFORMED P 3 SRCWIN P 2 A0170 P 1 DD P 0 DSTWIN I 11 CLIPPINGREGION I 10 TEXTURE I 9 OPERATION I 8 SOURCETYPE I 7 HEIGHT I 6 WIDTH I 5 DESTINATIONBOTTOM I 4 DESTINATIONLEFT I 3 DESTINATION I 2 SOURCEBOTTOM I 1 SOURCELEFT I 0 SOURCE F 10 \SCREENBITMAPS)  +(P 9 A0155 P 8 A0154 P 7 SOURCEBOTTOMTRANSFORMED P 6 SOURCELEFTTRANSFORMED P 3 SRCWIN P 2 A0153 P 1 DD P 0 DSTWIN I 11 CLIPPINGREGION I 10 TEXTURE I 9 OPERATION I 8 SOURCETYPE I 7 HEIGHT I 6 WIDTH I 5 DESTINATIONBOTTOM I 4 DESTINATIONLEFT I 3 DESTINATION I 2 SOURCEBOTTOM I 1 SOURCELEFT I 0 SOURCE F 10 \SCREENBITMAPS)   @ ³C ªo ¿@òZ@²WCi Cgh É0HÉ2ÉHºHÉ2@ABCDEFGGGGGABlJ±–Cô‚±¯C´‚±¨@i !@gh É0AIÉصABIÉصBKÉ2ÉJ_¿KÉ2IÉNOCDEFGGGGGNIÈ"¼dLñ¡¿LOIÈ$½dMñ¡¿MlO±Þ@ @@ -455,11 +455,11 @@ Q (145 ERASE 138 INVERT 121 INVERT 110 PAINT 99 ERASE 86 \DISPLAYDATA 77 \DISPLAYDATA 53 INVERT 43 INPUT 32 \DISPLAYDATA 23 \DISPLAYDATA 16 STREAM 5 OUTPUT) () DSPXOFFSET :D8 -(P 0 A0186 I 1 DISPLAYSTREAM I 0 XOFFSET) 'Agh bÉ.É\@AlH(11 \GETSTREAM) +(P 0 A0169 I 1 DISPLAYSTREAM I 0 XOFFSET) 'Agh bÉ.É\@AlH(11 \GETSTREAM) (25 IMAGEOPS 18 STREAM 5 OUTPUT) () DSPYOFFSET :D8 -(P 0 A0187 I 1 DISPLAYSTREAM I 0 YOFFSET) 'Agh bÉ.É^@AlH(11 \GETSTREAM) +(P 0 A0170 I 1 DISPLAYSTREAM I 0 YOFFSET) 'Agh bÉ.É^@AlH(11 \GETSTREAM) (25 IMAGEOPS 18 STREAM 5 OUTPUT) () DSPDESTINATION :D8 @@ -544,12 +544,12 @@ A (23 \DISPLAYDATA 16 STREAM 5 OUTPUT) ( 63 " is not a REGION.") \DSPFONT.DISPLAY :D8 -(P 4 \INTERRUPTABLE P 2 DD P 1 OLDFONT P 0 XFONT I 1 FONT I 0 DISPLAYSTREAM) †@@É0ZdÉ YA²nAhdd@i µJÉ giA -µ o XIð³>JH ¿JjHÈ -Ù¿JHÉɵHÉjH +(P 4 \INTERRUPTABLE P 2 DD P 1 OLDFONT P 0 XFONT I 1 FONT I 0 DISPLAYSTREAM) ‹@@É0ZdÉ YA²sAhdd@i µJÉ giA +µ o XIð³CJH ¿JjHÈ +Ù¿JHÉɵHÉjH [¿KÉÈ ÍA¿@J -(130 \SFFixFont 111 \CREATECHARSET 66 ERROR 54 FONTCOPY 35 FONTCREATE) -(87 FONTDESCRIPTOR 45 NOERROR 17 \DISPLAYDATA 8 STREAM) +(135 \SFFixFont 116 \CREATECHARSET 66 ERROR 54 FONTCOPY 35 FONTCREATE) +(107 FONTDESCRIPTOR 87 FONTDESCRIPTOR 45 NOERROR 17 \DISPLAYDATA 8 STREAM) ( 61 "FONT NOT FOUND OR ILLEGAL FONTCOPY PARAMETER") \DISPLAY.PILOTBITBLT :D8 (I 1 N I 0 PILOTBBT) @AvNIL @@ -790,11 +790,11 @@ Z`S (167 \LastTTYLines 155 SCREENHEIGHT 148 SCREENHEIGHT 133 SCREENWIDTH 115 SCREENWIDTH 76 SCREENHEIGHT 62 \LastTTYLines 52 \TopLevelTtyWindow 47 \DEFAULTTTYDISPLAYSTREAM 35 ScreenBitMap) () \STARTDISPLAY :D8 -(P 2 \INTERRUPTABLE P 1 W P 0 OLDWINDOWS F 3 \MAINSCREEN F 4 \WINDOWWORLD F 5 \CURSORDESTINATION F 6 \CURSORDESTRASTERWIDTH F 7 \CURSORDESTWIDTH F 8 \CURSORDESTHEIGHT) @``ðœ``ð³AT²> ¸``ó«``ó–H ¿HŒdI µò`` +(P 2 \INTERRUPTABLE P 1 W P 0 OLDWINDOWS F 3 \MAINSCREEN F 4 \WINDOWWORLD F 5 \CURSORDESTINATION F 6 WINDOWBACKGROUNDSHADE F 7 \CURSORDESTWIDTH F 8 \CURSORDESTHEIGHT F 9 \CURSORDESTRASTERWIDTH) <``ðœ``ð³AT²> ¸``ó«``ó–H ¿HŒdI µò`` É`È -¿ijd``hSµ;`c -`c`c`Èc H²P` ¿H °:`¿S`¿S`¿°ždI µò``h(291 \OPENW1 235 REVERSE 228 CHANGEBACKGROUND 142 SHOWDISPLAY 113 \CreateScreenBitMap 90 \CLOSEW1 76 \MOVE.WINDOWS.ONTO.SCREEN 45 REVERSE 40 OPENWINDOWS 7 UPDATESCREENDIMENSIONS) -(316 \OLDSCREENWIDTH 311 SCREENWIDTH 306 \OLDSCREENHEIGHT 301 SCREENHEIGHT 275 SCREENHEIGHT 270 SCREEN 261 SCREENWIDTH 256 SCREEN 247 ScreenBitMap 242 SCREEN 223 WINDOWBACKGROUNDSHADE 211 BITMAP 206 ScreenBitMap 199 SCREENHEIGHT 192 SCREENWIDTH 185 ScreenBitMap 177 WHOLESCREEN 172 WHOLEDISPLAY 162 SCREENHEIGHT 157 SCREENWIDTH 149 \DisplayStarted 135 BITMAP 130 ScreenBitMap 123 BITMAP 118 ScreenBitMap 108 SCREENHEIGHT 103 SCREENWIDTH 68 SCREENHEIGHT 63 \OLDSCREENHEIGHT 56 SCREENWIDTH 51 \OLDSCREENWIDTH 29 \OLDSCREENHEIGHT 24 SCREENHEIGHT 17 \OLDSCREENWIDTH 12 SCREENWIDTH) +¿ijd``hSµ7`c +`c`c`ÈcH²LV ¿H °:`¿S`¿S`¿°¢dI µò``h(287 \OPENW1 231 REVERSE 224 CHANGEBACKGROUND 142 SHOWDISPLAY 113 \CreateScreenBitMap 90 \CLOSEW1 76 \MOVE.WINDOWS.ONTO.SCREEN 45 REVERSE 40 OPENWINDOWS 7 UPDATESCREENDIMENSIONS) +(312 \OLDSCREENWIDTH 307 SCREENWIDTH 302 \OLDSCREENHEIGHT 297 SCREENHEIGHT 271 SCREENHEIGHT 266 SCREEN 257 SCREENWIDTH 252 SCREEN 243 ScreenBitMap 238 SCREEN 211 BITMAP 206 ScreenBitMap 199 SCREENHEIGHT 192 SCREENWIDTH 185 ScreenBitMap 177 WHOLESCREEN 172 WHOLEDISPLAY 162 SCREENHEIGHT 157 SCREENWIDTH 149 \DisplayStarted 135 BITMAP 130 ScreenBitMap 123 BITMAP 118 ScreenBitMap 108 SCREENHEIGHT 103 SCREENWIDTH 68 SCREENHEIGHT 63 \OLDSCREENHEIGHT 56 SCREENWIDTH 51 \OLDSCREENWIDTH 29 \OLDSCREENHEIGHT 24 SCREENHEIGHT 17 \OLDSCREENWIDTH 12 SCREENWIDTH) () \MOVE.WINDOWS.ONTO.SCREEN :D8 (P 4 REG P 3 YFACTOR P 2 XFACTOR P 1 W I 0 WINDOWS) Ú@Hµ+h´&```ëZ``ë[@HµAhYÉLLØmÿØ`óµLLØmÿØ`ó•Iµ¥i°¢HX°™Yd ð²\Ii @@ -815,11 +815,12 @@ NIL (PUTPROPS DISPLAYSTARTEDP MACRO (NIL \DisplayStarted)) (ADDTOVAR GLOBALVARS WHOLESCREEN) INITIALIZEDISPLAYSTREAMS :D8 -(F 0 \GUARANTEEDDISPLAYFONT F 1 DEFAULTFONT) Yodnÿdh`ld +(F 0 \GUARANTEEDDISPLAYFONT F 1 DEFAULTFONT) eodnÿdh`ld gl -ohg cgkPh -c(84 FONTCLASS 67 FONTCREATE 38 BITMAPCREATE) -(74 DEFAULTFONT 61 DISPLAY 48 GACHA 43 \SYSBBTEXTURE 30 \SYSPILOTBBT 24 |PILOTBBTTYPE#| 19 WHOLEDISPLAY) +ojg  cjP +gkPh +c(96 FONTCLASS 81 \CREATECHARSET 72 \CREATEDISPLAYFONT 67 MAKEFONTSPEC 38 BITMAPCREATE) +(86 DEFAULTFONT 61 DISPLAY 48 GACHA 43 \SYSBBTEXTURE 30 \SYSPILOTBBT 24 |PILOTBBTTYPE#| 19 WHOLEDISPLAY) ( 55 (MEDIUM REGULAR REGULAR) 4 -16383) (RPAQQ \DisplayStarted NIL) (RPAQQ \LastTTYLines 12) diff --git a/sources/LLREAD b/sources/LLREAD index b852e1504..918a40b43 100644 --- a/sources/LLREAD +++ b/sources/LLREAD @@ -1,14 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "13-Aug-2025 14:40:39" {WMEDLEY}LLREAD.;121 102895 +(FILECREATED "24-Aug-2025 11:47:11"  +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLREAD.;122 102955 :EDIT-BY rmk - :CHANGES-TO (VARS LLREADCOMS) - (FNS CHARCODE.ENCODE CHARSET.DECODE) + :CHANGES-TO (FNS CHARCODEP) - :PREVIOUS-DATE " 8-Aug-2025 10:13:49" -{DSK}kaplan>Local>medley3.5>working-medley>sources>LLREAD.;118) + :PREVIOUS-DATE "13-Aug-2025 14:40:39" +{DSK}kaplan>Local>medley3.5>working-medley>sources>LLREAD.;121) (PRETTYCOMPRINT LLREADCOMS) @@ -1558,12 +1558,12 @@ (CONCAT CSETNAME "," CHARNAME))]) (CHARCODEP - [LAMBDA (CHCODE) (* ; "Edited 8-Aug-2025 09:16 by rmk") + [LAMBDA (CHCODE) (* ; "Edited 24-Aug-2025 11:46 by rmk") + (* ; "Edited 8-Aug-2025 09:16 by rmk") (* gbn "22-Jul-85 16:35") (* ; "is CHCODE a legal character code?") (CL:WHEN (AND (SMALLP CHCODE) - (IGEQ CHCODE 0) - (ILEQ CHCODE \MAXNSCHAR)) + (<= 0 CHCODE \MAXFATCHAR)) CHCODE]) (CHARSET.DECODE @@ -1892,19 +1892,19 @@ (ADDTOVAR LAMA CL:PARSE-INTEGER CL:READ-DELIMITED-LIST CL:READ-PRESERVING-WHITESPACE CL:READ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3886 12330 (LASTC 3896 . 4202) (PEEKC 4204 . 4592) (PEEKCCODE 4594 . 5005) (RATOM 5007 - . 6088) (READ 6090 . 6650) (READC 6652 . 7293) (READCCODE 7295 . 8054) (READP 8056 . 8608) ( -SETREADMACROFLG 8610 . 8909) (SKIPSEPRCODES 8911 . 9991) (SKIPSEPRS 9993 . 10379) (SKREAD 10381 . -12328)) (12376 20985 (CL:READ 12386 . 12935) (CL:READ-PRESERVING-WHITESPACE 12937 . 13659) ( -CL:READ-DELIMITED-LIST 13661 . 14576) (CL:PARSE-INTEGER 14578 . 20983)) (21078 33555 (RSTRING 21088 . -21820) (READ-EXTENDED-TOKEN 21822 . 25694) (\RSTRING2 25696 . 33553)) (33591 64324 (\TOP-LEVEL-READ -33601 . 35584) (\SUBREAD 35586 . 60740) (\SUBREADCONCAT 60742 . 61365) (\ORIG-READ.SYMBOL 61367 . -62435) (\ORIG-INVALID.SYMBOL 62437 . 63336) (\APPLYREADMACRO 63338 . 63754) (INREADMACROP 63756 . -64322)) (64483 64658 (READQUOTE 64493 . 64656)) (64683 76587 (READVBAR 64693 . 66024) (READHASHMACRO -66026 . 71836) (DEFMACRO-LAMBDA-LIST-KEYWORD-P 71838 . 72058) (DIGITBASEP 72060 . 72794) ( -READNUMBERINBASE 72796 . 74682) (ESTIMATE-DIMENSIONALITY 74684 . 75009) (SKIP.HASH.COMMENT 75011 . -75979) (CMLREAD.FEATURE.PARSER 75981 . 76585)) (76631 77897 (CHARACTER.READ 76641 . 77895)) (77930 -93404 (CHARCODE.DECODE 77940 . 83109) (CHARCODE.ENCODE 83111 . 87553) (CHARCODEP 87555 . 88008) ( -CHARSET.DECODE 88010 . 88958) (CHARCODE.ENCODE 88960 . 93402)) (93405 97901 (HEXNUM? 93415 . 95758) ( -OCTALNUM? 95760 . 96573) (HEXSTRING 96575 . 97899))))) + (FILEMAP (NIL (3870 12314 (LASTC 3880 . 4186) (PEEKC 4188 . 4576) (PEEKCCODE 4578 . 4989) (RATOM 4991 + . 6072) (READ 6074 . 6634) (READC 6636 . 7277) (READCCODE 7279 . 8038) (READP 8040 . 8592) ( +SETREADMACROFLG 8594 . 8893) (SKIPSEPRCODES 8895 . 9975) (SKIPSEPRS 9977 . 10363) (SKREAD 10365 . +12312)) (12360 20969 (CL:READ 12370 . 12919) (CL:READ-PRESERVING-WHITESPACE 12921 . 13643) ( +CL:READ-DELIMITED-LIST 13645 . 14560) (CL:PARSE-INTEGER 14562 . 20967)) (21062 33539 (RSTRING 21072 . +21804) (READ-EXTENDED-TOKEN 21806 . 25678) (\RSTRING2 25680 . 33537)) (33575 64308 (\TOP-LEVEL-READ +33585 . 35568) (\SUBREAD 35570 . 60724) (\SUBREADCONCAT 60726 . 61349) (\ORIG-READ.SYMBOL 61351 . +62419) (\ORIG-INVALID.SYMBOL 62421 . 63320) (\APPLYREADMACRO 63322 . 63738) (INREADMACROP 63740 . +64306)) (64467 64642 (READQUOTE 64477 . 64640)) (64667 76571 (READVBAR 64677 . 66008) (READHASHMACRO +66010 . 71820) (DEFMACRO-LAMBDA-LIST-KEYWORD-P 71822 . 72042) (DIGITBASEP 72044 . 72778) ( +READNUMBERINBASE 72780 . 74666) (ESTIMATE-DIMENSIONALITY 74668 . 74993) (SKIP.HASH.COMMENT 74995 . +75963) (CMLREAD.FEATURE.PARSER 75965 . 76569)) (76615 77881 (CHARACTER.READ 76625 . 77879)) (77914 +93464 (CHARCODE.DECODE 77924 . 83093) (CHARCODE.ENCODE 83095 . 87537) (CHARCODEP 87539 . 88068) ( +CHARSET.DECODE 88070 . 89018) (CHARCODE.ENCODE 89020 . 93462)) (93465 97961 (HEXNUM? 93475 . 95818) ( +OCTALNUM? 95820 . 96633) (HEXSTRING 96635 . 97959))))) STOP diff --git a/sources/LLREAD.LCOM b/sources/LLREAD.LCOM index 1f897e324da91272afae5d6e1f50d29e061acbd5..be2bc677d0fa6a8a2b418eaa190954bd4f65cb15 100644 GIT binary patch delta 294 zcmdmUg7L)(#tGpnMkczBrRlmx21cd|hK5!q=2nJ=N(vfE$@#ejnK`K`3i){olaDjH z)f*XUDkvFRAgMO8GBmR?Fi=w9N-9c)t52;cC@NO9QgHTg4085&aSc$&%u`Tu3-$3) zK-R6Nr>CTll2`(?0h_6oN}606Zk|4_&Oxq@A+9b8qDt6Y3UV2Tk&%L-fsv)@=N4qNv$X-Dps{p$jdLu z$jnPu$OM|}7V6`pfUH$dPftl9B~h~kXfZZJO-+bd%XC@??RHAK(F6~xt4unGur4fFI54VKn*0XhX3N)||AU|?lvY-M6O dvD%Hv&|local>lde>lispcore>sources>VANILLADISK.;2| 5292 - |changes| |to:| (VARS VANILLADISKCOMS) +(FILECREATED "24-Aug-2025 11:50:09"  +|{DSK}kaplan>Local>medley3.5>working-medley>sources>VANILLADISK.;3| 5267 - |previous| |date:| " 7-Apr-88 17:53:38" |{DSK}local>lde>lispcore>sources>VANILLADISK.;1| -) + :EDIT-BY |rmk| + + :CHANGES-TO (FNS \\VANILLADISKINIT) + :PREVIOUS-DATE "17-May-90 16:13:16" +|{DSK}kaplan>Local>medley3.5>working-medley>sources>VANILLADISK.;2|) -; Copyright (c) 1985, 1986, 1988, 1990 by Venue & Xerox Corporation. All rights reserved. (PRETTYCOMPRINT VANILLADISKCOMS) (RPAQQ VANILLADISKCOMS ((FNS \\VANILLADISKINIT \\VANILLAHOSTNAMEP \\VANILLAEVENTFN) - (INITVARS (\\PSEUDODSK)) - (GLOBALVARS \\PSEUDODSK \\DISKNAMECASEARRAY) - (DECLARE\: DONTEVAL@LOAD (P (\\VANILLADISKINIT))) - (LOCALVARS . T))) + (INITVARS (\\PSEUDODSK)) + (GLOBALVARS \\PSEUDODSK \\DISKNAMECASEARRAY) + (DECLARE\: DONTEVAL@LOAD (P (\\VANILLADISKINIT))) + (LOCALVARS . T))) (DEFINEQ -(\\vanilladiskinit - (lambda nil (* |bvm:| "30-Jan-85 21:43") - (prog ((arr (copyarray uppercasearray))) - (* * |Set| |up| |array| |that| |maps| |illegal| |filename| |chars| |to| 0 - |and| |synonymous| |characters| |to| \a |canonical| |char|) - (|for| i |from| 0 |to| (sub1 (charcode 0)) |do| (setcasearray arr i 0)) +(\\VANILLADISKINIT + (LAMBDA NIL (* \; "Edited 24-Aug-2025 11:49 by rmk") + (* |bvm:| "30-Jan-85 21:43") + (PROG ((ARR (COPYARRAY UPPERCASEARRAY))) + + (* * |Set| |up| |array| |that| |maps| |illegal| |filename| |chars| |to| 0 |and| + |synonymous| |characters| |to| \a |canonical| |char|) + + (|for| I |from| 0 |to| (SUB1 (CHARCODE 0)) |do| (SETCASEARRAY ARR I 0)) (* |Non-printing| |characters| - |verboten|) - (|for| i |from| (add1 (charcode 9)) |to| (sub1 (charcode a)) - |do| (setcasearray arr i 0)) - (|for| i |from| (add1 (charcode z)) |to| (sub1 (charcode \a)) - |do| (setcasearray arr i 0)) - (|for| i |from| (add1 (charcode \z)) |to| \\maxchar - |do| (setcasearray arr i 0)) - (setcasearray arr (charcode \;) - (charcode \;)) - (setcasearray arr (charcode !) - (charcode \;)) - (setcasearray arr (charcode *) - (charcode *)) - (setcasearray arr (charcode escape) - (charcode *)) - (setcasearray arr (charcode ?) - (charcode \#)) - (setcasearray arr (charcode \.) - (charcode \.)) - (setcasearray arr (charcode -) - (charcode -)) - (setcasearray arr (charcode +) - (charcode +)) - (setcasearray arr (charcode $) - (charcode $)) - (setq \\disknamecasearray arr)) - (* * |Define| \a |device| |whose| |sole| |purpose| |is| |to| |select| |the| - |appropriate| dsk |device| |depending| |on| |which| |machine| |you're| |on|) - (\\definedevice nil (|create| fdev - devicename _ "VANILLADISK" - eventfn _ (function nill) - hostnamep _ (function \\vanillahostnamep))))) + |verboten|) + (|for| I |from| (ADD1 (CHARCODE 9)) |to| (SUB1 (CHARCODE A)) + |do| (SETCASEARRAY ARR I 0)) + (|for| I |from| (ADD1 (CHARCODE Z)) |to| (SUB1 (CHARCODE \a)) + |do| (SETCASEARRAY ARR I 0)) + (|for| I |from| (ADD1 (CHARCODE \z)) |to| \\MAXTHINCHAR |do| (SETCASEARRAY ARR I 0)) + (SETCASEARRAY ARR (CHARCODE \;) + (CHARCODE \;)) + (SETCASEARRAY ARR (CHARCODE !) + (CHARCODE \;)) + (SETCASEARRAY ARR (CHARCODE *) + (CHARCODE *)) + (SETCASEARRAY ARR (CHARCODE ESCAPE) + (CHARCODE *)) + (SETCASEARRAY ARR (CHARCODE ?) + (CHARCODE \#)) + (SETCASEARRAY ARR (CHARCODE \.) + (CHARCODE \.)) + (SETCASEARRAY ARR (CHARCODE -) + (CHARCODE -)) + (SETCASEARRAY ARR (CHARCODE +) + (CHARCODE +)) + (SETCASEARRAY ARR (CHARCODE $) + (CHARCODE $)) + (SETQ \\DISKNAMECASEARRAY ARR)) + + (* * |Define| \a |device| |whose| |sole| |purpose| |is| |to| |select| |the| + |appropriate| DSK |device| |depending| |on| |which| |machine| |you're| |on|) + + (\\DEFINEDEVICE NIL (|create| FDEV + DEVICENAME _ "VANILLADISK" + EVENTFN _ (FUNCTION NILL) + HOSTNAMEP _ (FUNCTION \\VANILLAHOSTNAMEP))))) (\\vanillahostnamep (lambda (name) (* \; "Edited 7-Apr-88 17:20 by masinter") @@ -115,8 +121,7 @@ (LOCALVARS . T) ) -(PUTPROPS VANILLADISK COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1988 1990)) (DECLARE\: DONTCOPY - (FILEMAP (NIL (784 4970 (\\VANILLADISKINIT 794 . 2901) (\\VANILLAHOSTNAMEP 2903 . 4547) ( -\\VANILLAEVENTFN 4549 . 4968))))) + (FILEMAP (NIL (736 5028 (\\VANILLADISKINIT 746 . 2959) (\\VANILLAHOSTNAMEP 2961 . 4605) ( +\\VANILLAEVENTFN 4607 . 5026))))) STOP diff --git a/sources/VANILLADISK.LCOM b/sources/VANILLADISK.LCOM index 86a815e3141ab1beabfd82e6dee433bf262de6a3..c5299515ac97196df29e3714c938f0fd2373ce4b 100644 GIT binary patch delta 450 zcmb7=F-yZh9K|U(Xm&d}{5c$&;X-mTtvw_Vn^cd+R-2?Cbcx9kOVgwz6)B$h2?UFu zMEbp)9gT>P!KL$q-+S-(b+~E1-FV~#TMr2)DltIQsG(A|i=c&~e6gIRJcc|21d@2N zy}|QYQ1YTQ=ixF9Gt0uhHR9#?Ta(SB=!E|R5I zpSezN>{z~I1N#5yuE&mb0S0MzfI2qw@%b%?VlfvW(cYysyl_11kKp~|py|m#ugA`W kjRFtb)r4wi2VaG2+*P46q3M;6-NiP@_Or3w->Wo9-@3hp$p8QV delta 492 zcmb7>%TB^T6owO4rh8qvIGKggMM@u+?lGaFyVlNpMw0{P?Xi?!+t%Vke$U(I`tp z#;KFBH4ka#%-liO^W0{4+$&uf0xE`WfCv{s@=Pn_P!~R$Wk#f3; z*gBJKa$!j#usWKXa;;VaY>|pd%-Z2t|B=D_$HM;PuINuE{%Gj`S`Uq(|1j!yZYJ_C nGn%X^T);i$>;)Q(r;G=yh$RTHU904ynhz;t+q$YMva#|FA?}c@ From 3b0b847812d6d3ec46df48ecc7ff3cc0ca2ebd0c Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:50:34 -0700 Subject: [PATCH 10/40] Eliminate finally reference to \COERCEFONTDESC --- sources/LLDATATYPE | 63 ++++++++++++++++++---------------------- sources/LLDATATYPE.LCOM | Bin 23851 -> 23625 bytes 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/sources/LLDATATYPE b/sources/LLDATATYPE index 8da265882..3f6faba2f 100644 --- a/sources/LLDATATYPE +++ b/sources/LLDATATYPE @@ -1,19 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Apr-2023 08:04:06" {DSK}larry>il>medley>sources>LLDATATYPE.;2 94197 +(FILECREATED " 5-Aug-2025 09:18:50" {WMEDLEY}LLDATATYPE.;3 93956 - :EDIT-BY "lmm" + :EDIT-BY rmk - :CHANGES-TO (VARS LLDATATYPECOMS) - (FNS \SET.STORAGE.STATE \MAPMDS) + :CHANGES-TO (FNS \DTEST.UFN) - :PREVIOUS-DATE "28-Jun-99 16:57:50" {DSK}larry>il>medley>sources>LLDATATYPE.;1) + :PREVIOUS-DATE "17-Apr-2023 08:04:06" {WMEDLEY}LLDATATYPE.;2) -(* ; " -Copyright (c) 1982-1995, 1999 by VENUE, Oakland, CA. -") - (PRETTYCOMPRINT LLDATATYPECOMS) (RPAQQ LLDATATYPECOMS @@ -800,7 +795,8 @@ Copyright (c) 1982-1995, 1999 by VENUE, Oakland, CA. (\DTEST.UFN OBJ TYPE]) (\DTEST.UFN - [LAMBDA (OBJ TYPEN) (* gbn " 3-Oct-86 10:49") + [LAMBDA (OBJ TYPEN) (* ; "Edited 5-Aug-2025 09:18 by rmk") + (* gbn " 3-Oct-86 10:49") (* ;; "ufn for DTEST opcode ") @@ -809,15 +805,14 @@ Copyright (c) 1982-1995, 1999 by VENUE, Oakland, CA. (PROG ((N (NTYPX OBJ))) LP (COND ((EQ (fetch DTDNAME of (\GETDTD N)) - TYPEN) (* ; - "should be happening in microcode") + TYPEN) (* ; "should be happening in microcode") (RETURN OBJ)) ([NEQ 0 (SETQ N (fetch DTDSUPERTYPE of (\GETDTD N] (GO LP)) (T (RETURN (SELECTQ (\INDEXATOMPNAME TYPEN) (FLOATP (\FLOAT OBJ)) (STREAM (* ; - "Should be able to get at the INPUT/OUTPUT flg--a second arg to \DTEST ?") + "Should be able to get at the INPUT/OUTPUT flg--a second arg to \DTEST ?") (\GETSTREAM OBJ (SELECTQ (STKNTHNAME -1 '\DTEST.UFN) ((\BINS \BIN BIN) 'INPUT) @@ -836,7 +831,7 @@ Copyright (c) 1982-1995, 1999 by VENUE, Oakland, CA. (CAR OBJ)) (T (LISPERROR "ARG NOT HARRAY" OBJ T)))) (FONTDESCRIPTOR - (\COERCEFONTDESC OBJ)) + (FONTCREATE OBJ)) (SMALLP [PROG (HI LO) (.UNBOX. OBJ HI LO) (RETURN (OR (SMALLP (\MAKENUMBER HI LO)) @@ -848,7 +843,7 @@ Copyright (c) 1982-1995, 1999 by VENUE, Oakland, CA. (TERMTABLEP (LISPERROR "ILLEGAL TERMINAL TABLE" OBJ T)) (ARRAYP (LISPERROR "ARG NOT ARRAY" OBJ T)) (\DISPLAYDATA (* ; - "Should be able to get at the stream--a second arg to \DTEST ?") + "Should be able to get at the stream--a second arg to \DTEST ?") (ERROR "ARG NOT DISPLAY STREAM" NIL)) (\LISPERROR OBJ (CONCAT "ARG NOT " (\INDEXATOMPNAME TYPEN)) T]) @@ -1744,25 +1739,23 @@ EVAL@COMPILE (FILESLOAD (LOADCOMP) DTDECLARE) ) -(PUTPROPS LLDATATYPE COPYRIGHT ("VENUE, Oakland, CA" 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 - 1992 1993 1994 1995 1999)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (6524 37135 (NTYPX 6534 . 7011) (\TYPEMASK.UFN 7013 . 7537) (\TYPEP.UFN 7539 . 7708) ( -\ALLOCMDSPAGE 7710 . 9112) (\ALLOCPAGEBLOCK 9114 . 9820) (\ALLOCVIRTUALPAGEBLOCK 9822 . 12437) ( -\MAPMDS 12439 . 13626) (\CHECKFORSTORAGEFULL 13628 . 18774) (\DOSTORAGEFULLINTERRUPT 18776 . 19070) ( -\SET.STORAGE.STATE 19072 . 19484) (\SETTYPEMASK 19486 . 20433) (\ADVANCE.STORAGE.STATE 20435 . 20943) -(\NEW2PAGE 20945 . 21131) (\MAKEMDSENTRY 21133 . 21579) (\INITMDSPAGE 21581 . 23373) (\ASSIGNDATATYPE1 - 23375 . 33003) (\RESOLVE.TYPENUMBER 33005 . 33470) (\TYPENUMBERFROMNAME 33472 . 34012) (CREATECELL -34014 . 34147) (\CREATECELL 34149 . 37133)) (37627 59689 (FETCHFIELD 37637 . 40828) (REPLACEFIELD -40830 . 46456) (BOXCOUNT 46458 . 46959) (CONSCOUNT 46961 . 47095) (\DTEST 47097 . 47230) (\TYPECHECK -47232 . 47369) (\DTEST.UFN 47371 . 50626) (\INSTANCEP.UFN 50628 . 51856) (\INSTANCE-P 51858 . 52121) ( -\TYPECHECK.UFN 52123 . 52686) (GETDESCRIPTORS 52688 . 53206) (GETSUPERTYPE 53208 . 53722) ( -GETFIELDSPECS 53724 . 54361) (NCREATE 54363 . 54535) (NCREATE2 54537 . 55252) (REPLACEFIELDVAL 55254 - . 55518) (PUTBASEPTRX 55520 . 55999) (/REPLACEFIELD 56001 . 56266) (TYPENAME 56268 . 57110) ( -TYPENAMEP 57112 . 57336) (\TYPENAMEFROMNUMBER 57338 . 57568) (\BLOCKDATAP 57570 . 57890) ( -USERDATATYPES 57892 . 58024) (DATATYPEP 58026 . 59175) (DATATYPES 59177 . 59687)) (61931 77082 ( -STORAGE 61941 . 66362) (STORAGE.LEFT 66364 . 69905) (\STORAGE.TYPE 69907 . 73967) (\STLINP 73969 . -74155) (\STMDSTYPE 74157 . 75356) (\STMDS.APPROX 75358 . 75626) (\STORAGE.HUNKTYPE 75628 . 77080)) ( -83752 92451 (CREATEMDSTYPETABLE 83762 . 85551) (INITDATATYPES 85553 . 90398) (INITDATATYPENAMES 90400 - . 92449))))) + (FILEMAP (NIL (6370 36981 (NTYPX 6380 . 6857) (\TYPEMASK.UFN 6859 . 7383) (\TYPEP.UFN 7385 . 7554) ( +\ALLOCMDSPAGE 7556 . 8958) (\ALLOCPAGEBLOCK 8960 . 9666) (\ALLOCVIRTUALPAGEBLOCK 9668 . 12283) ( +\MAPMDS 12285 . 13472) (\CHECKFORSTORAGEFULL 13474 . 18620) (\DOSTORAGEFULLINTERRUPT 18622 . 18916) ( +\SET.STORAGE.STATE 18918 . 19330) (\SETTYPEMASK 19332 . 20279) (\ADVANCE.STORAGE.STATE 20281 . 20789) +(\NEW2PAGE 20791 . 20977) (\MAKEMDSENTRY 20979 . 21425) (\INITMDSPAGE 21427 . 23219) (\ASSIGNDATATYPE1 + 23221 . 32849) (\RESOLVE.TYPENUMBER 32851 . 33316) (\TYPENUMBERFROMNAME 33318 . 33858) (CREATECELL +33860 . 33993) (\CREATECELL 33995 . 36979)) (37473 59579 (FETCHFIELD 37483 . 40674) (REPLACEFIELD +40676 . 46302) (BOXCOUNT 46304 . 46805) (CONSCOUNT 46807 . 46941) (\DTEST 46943 . 47076) (\TYPECHECK +47078 . 47215) (\DTEST.UFN 47217 . 50516) (\INSTANCEP.UFN 50518 . 51746) (\INSTANCE-P 51748 . 52011) ( +\TYPECHECK.UFN 52013 . 52576) (GETDESCRIPTORS 52578 . 53096) (GETSUPERTYPE 53098 . 53612) ( +GETFIELDSPECS 53614 . 54251) (NCREATE 54253 . 54425) (NCREATE2 54427 . 55142) (REPLACEFIELDVAL 55144 + . 55408) (PUTBASEPTRX 55410 . 55889) (/REPLACEFIELD 55891 . 56156) (TYPENAME 56158 . 57000) ( +TYPENAMEP 57002 . 57226) (\TYPENAMEFROMNUMBER 57228 . 57458) (\BLOCKDATAP 57460 . 57780) ( +USERDATATYPES 57782 . 57914) (DATATYPEP 57916 . 59065) (DATATYPES 59067 . 59577)) (61821 76972 ( +STORAGE 61831 . 66252) (STORAGE.LEFT 66254 . 69795) (\STORAGE.TYPE 69797 . 73857) (\STLINP 73859 . +74045) (\STMDSTYPE 74047 . 75246) (\STMDS.APPROX 75248 . 75516) (\STORAGE.HUNKTYPE 75518 . 76970)) ( +83642 92341 (CREATEMDSTYPETABLE 83652 . 85441) (INITDATATYPES 85443 . 90288) (INITDATATYPENAMES 90290 + . 92339))))) STOP diff --git a/sources/LLDATATYPE.LCOM b/sources/LLDATATYPE.LCOM index 7ad9d0a9e117741ebb721c450ad21745776d93cf..3150d76859a877d81b4a64b42f9d8cc87f3d8244 100644 GIT binary patch delta 370 zcmZ3zi}B#&$(YNn*gr2#U)Imp#9#MK3; z2&=0JxKhE=*wWNY!OGReGep-ZQlTg}TS3Rl*~8J#-8EP@#9u*!%grxXA;u-dH8?~s z)Xh&*!73ogHO$jLG*}ntTi40bjFNJAL&9jY5YsY4E;oO_5QtkhA2+_M!Q$uX!vz38 CLu7LR delta 582 zcmb7>KWoB37>98ySvqtoU0!ZVz=-*y=B_1>Ca0#2Nl2nakU}s4rHP8xK}wN+gM#0o zOGg*!H|U4xcj?_!hb}J9aNO^A&->o@q4N1vd4Jd{E!kQuWwowqP&bH2xvq+cAjX5pMGS7;9W3J}wy%qA+Fs?Y`&1@%>t@h9FCy+57+W=n9eqkr&tzwG!&=-YS>n zX^JXfUBN9N)NvE}cF2T_vP3}auH|=VEGGeo11pN*Z!o4FOCYxW7Rv}2AigcD$!L|@6*ibn%4xOXH(d1}x7#z$P<2r{T VaPkP|5zHf)NAMYzB*Aw*;THzNpfUge From 00a8f0eba3da7edc043cff5e04b06f5dadf2c4c0 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:52:37 -0700 Subject: [PATCH 11/40] EDITFONT uses FONTFACE subfunction --- lispusers/EDITFONT | 42 ++++++++++++++++++++++------------------ lispusers/EDITFONT.LCOM | Bin 9668 -> 9707 bytes 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/lispusers/EDITFONT b/lispusers/EDITFONT index 8c4eb47ed..e3872aade 100644 --- a/lispusers/EDITFONT +++ b/lispusers/EDITFONT @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "29-Aug-2025 22:34:31" {WMEDLEY}EDITFONT.;33 24939 +(FILECREATED " 4-Sep-2025 10:30:31" {WMEDLEY}EDITFONT.;35 25299 :EDIT-BY rmk - :CHANGES-TO (FNS EDITFONT EF.EDITBM EF.CHARITEMS EF.SAVE) + :CHANGES-TO (FNS EDITFONT) - :PREVIOUS-DATE "27-Aug-2025 22:50:51" {WMEDLEY}EDITFONT.;30) + :PREVIOUS-DATE " 2-Sep-2025 23:03:37" {WMEDLEY}EDITFONT.;34) (PRETTYCOMPRINT EDITFONTCOMS) @@ -179,15 +179,16 @@ (REDISPLAYW (WFROMMENU MENU]) (EF.DELETE - [LAMBDA (CHARITEM MENU) (* ; "Edited 4-Aug-2025 13:14 by rmk") + [LAMBDA (CHARITEM MENU) (* ; "Edited 2-Sep-2025 23:03 by rmk") + (* ; "Edited 4-Aug-2025 13:14 by rmk") (* kbr%: "15-Dec-84 15:20") (* ;  "Turn CHARITEM into a slug charitem.") (LET ((WINDOW (WFROMMENU MENU)) SLUGBITMAP) - [SETQ SLUGBITMAP (\GETCHARBITMAP.CSINFO SLUGCHARINDEX (\XGETCHARSETINFO (WINDOWPROP - WINDOW - 'FONT) + [SETQ SLUGBITMAP (\GETCHARBITMAP.CSINFO SLUGCHARINDEX (\GETCHARSETINFO (WINDOWPROP + WINDOW + 'FONT) (WINDOWPROP WINDOW 'CHARSET] (UNINTERRUPTABLY (replace (CHARITEM BITMAP) of CHARITEM with SLUGBITMAP) @@ -233,7 +234,8 @@ (T (LISPERROR "ILLEGAL ARG" BITMAP]) (EF.SAVE - [LAMBDA (WINDOW) (* ; "Edited 29-Aug-2025 11:35 by rmk") + [LAMBDA (WINDOW) (* ; "Edited 2-Sep-2025 23:03 by rmk") + (* ; "Edited 29-Aug-2025 11:35 by rmk") (* ; "Edited 4-Aug-2025 09:22 by rmk") (* ; "Edited 2-Aug-2025 08:47 by rmk") (* kbr%: "21-Oct-85 15:39") @@ -255,12 +257,12 @@ (* ;; "We'll install the slugbm at the end, include its dimensions") - (SETQ SLUGBM (\GETCHARBITMAP.CSINFO SLUGCHARINDEX (\XGETCHARSETINFO FONT CHARSET))) + (SETQ SLUGBM (\GETCHARBITMAP.CSINFO SLUGCHARINDEX (\GETCHARSETINFO FONT CHARSET))) (SETQ SLUGWIDTH (fetch (BITMAP BITMAPWIDTH) of SLUGBM)) (add CBWIDTH SLUGWIDTH) (SETQ CBHEIGHT (IMAX CBHEIGHT (fetch (BITMAP BITMAPHEIGHT) of SLUGBM))) (SETQ CB (BITMAPCREATE CBWIDTH CBHEIGHT)) - (SETQ CSINFO (create CHARSETINFO copying (\XGETCHARSETINFO FONT CHARSET) + (SETQ CSINFO (create CHARSETINFO copying (\GETCHARSETINFO FONT CHARSET) CHARSETBITMAP _ CB)) (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO))(* ; "Store new info in allocations") @@ -325,6 +327,7 @@ (BLANKCHARSETCREATE [LAMBDA (FAMILY SIZE FACE CHARSET FIRSTCHAR LASTCHAR ASCENT DESCENT WIDTH) + (* ; "Edited 2-Sep-2025 23:03 by rmk") (* ; "Edited 4-Aug-2025 13:29 by rmk") (* mjs "27-Mar-85 14:48") (* ; "Edited 3-Aug-2025 17:53 by rmk") @@ -343,7 +346,7 @@ (PROG (ROTATION DEVICE FONT CSINFO SLUGWIDTH OFFSETS WIDTHS SLUGOFFSET CB CBWIDTH CBHEIGHT) (SETQ FONT (\FONT.CHECKARGS FAMILY SIZE FACE 0 'DISPLAY CHARSET)) [if (type? FONTDESCRIPTOR FONT) - then (CL:WHEN (SETQ CSINFO (\XGETCHARSETINFO FONT CHARSET)) + then (CL:WHEN (SETQ CSINFO (\GETCHARSETINFO FONT CHARSET)) (RETURN FONT)) else (SPREADFONTSPEC FONT) (SETQ FONT @@ -418,7 +421,8 @@ (RETURN FONT]) (EDITFONT - [LAMBDA (FONT CHARSET) (* ; "Edited 29-Aug-2025 22:34 by rmk") + [LAMBDA (FONT CHARSET) (* ; "Edited 4-Sep-2025 09:27 by rmk") + (* ; "Edited 29-Aug-2025 22:34 by rmk") (* ; "Edited 17-Aug-2025 12:03 by rmk") (* ; "Edited 3-Aug-2025 23:25 by rmk") (* ; "Edited 2-Aug-2025 10:11 by rmk") @@ -440,7 +444,7 @@ " " (FONTPROP FONT 'SIZE) " " - (PACKC (for ATOM in (FONTPROP FONT 'FACE) collect (CHCON1 ATOM))) + (FONTFACETOATOM (FONTPROP FONT 'FACE)) " " (OCTALSTRING CHARSET))) (PUTMENUPROP MENU 'EDITFONTTITLE TITLE) @@ -477,10 +481,10 @@ (EF.INIT) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1141 16132 (EF.INIT 1151 . 1785) (EF.PROMPT 1787 . 2369) (EF.MESSAGE 2371 . 2583) ( -EF.CLOSEFN 2585 . 3112) (EF.CHARITEMS 3114 . 4436) (EF.BUTTONEVENTFN 4438 . 4850) (EF.WHENSELECTEDFN -4852 . 5256) (EF.EDITBM 5258 . 6752) (EF.MIDDLEBUTTONFN 6754 . 6999) (EF.CHANGESIZE 7001 . 8330) ( -EF.DELETE 8332 . 9407) (EF.ENTER 9409 . 10350) (EF.REPLACE 10352 . 11325) (EF.SAVE 11327 . 15424) ( -COPYFONT 15426 . 15701) (READSTRIKEFONTFILE 15703 . 16130)) (16133 24751 (BLANKCHARSETCREATE 16143 . -22120) (EDITFONT 22122 . 24749))))) + (FILEMAP (NIL (1110 16314 (EF.INIT 1120 . 1754) (EF.PROMPT 1756 . 2338) (EF.MESSAGE 2340 . 2552) ( +EF.CLOSEFN 2554 . 3081) (EF.CHARITEMS 3083 . 4405) (EF.BUTTONEVENTFN 4407 . 4819) (EF.WHENSELECTEDFN +4821 . 5225) (EF.EDITBM 5227 . 6721) (EF.MIDDLEBUTTONFN 6723 . 6968) (EF.CHANGESIZE 6970 . 8299) ( +EF.DELETE 8301 . 9482) (EF.ENTER 9484 . 10425) (EF.REPLACE 10427 . 11400) (EF.SAVE 11402 . 15606) ( +COPYFONT 15608 . 15883) (READSTRIKEFONTFILE 15885 . 16312)) (16315 25111 (BLANKCHARSETCREATE 16325 . +22410) (EDITFONT 22412 . 25109))))) STOP diff --git a/lispusers/EDITFONT.LCOM b/lispusers/EDITFONT.LCOM index 7c0e333a366b887f74989d4c1f747c7494a4f7bc..71354b58fc234eeb09560ba1dd0f1e66499a9b84 100644 GIT binary patch delta 2673 zcmZuzO>7%g5cb+>+9cFCwNsK1l4%;5I7-vqx9h)%L)P}%UVFXIwKqxArZtTm8j`4h z#Icg07q~&YH;|C%0U-fWf)xoxm3#n+1SwJu9D+E2P^C)HBB5RjVcxDCJ4r2h-@N(# z=DpdO{UQ5T_T$-ZkS-J#-@ZV25(I&t6#2VLQeQ9tox`mX9wox07`nSLN?Z986BENw zzVYs2`MCyCa5&I8np8C8E!l%Kg0P(b3C@KcXWW#&R8A@%&WSg6bjRMLyl<*iX(V{dnQADx zYWItwHtv*}_J+9AX2pA(+cKYdGu%Tntf(3%!>rQ)i~+*z!#W{^Fa`)JzGA@Y!AkN-`#dxy}$1GGULf~b6)DVMbvK@bTYk?|9$G`sNY%g*A^VLChcsY z+nV%us4?e#otX}mZ<>)le(G$kOwam!wN>Zp{@$Cm*IwlH`UY#8DbL0k`7NgYX9s&O zc-F?3N&~f0e~tEUxbCbwJ~6-Pi&X~EV9@8Rt?sY7_Ez@(u#`)HT<|$+SIbsz+m7og zPuYbTeQL?M2Z@zmmb;xjbc~KZt%^Dw+tqe3i?NlTOJi$KTwlCb%ea)NlD2Z-wAFYhLHhR3P`^w5*!`-*9de;oDL~4|$6HluTb;|Ej!o2h7 zov+bxXK8%xrz0`99<1&+5qX(3!skG-hdl4jM?s2oQ5{ZV%c=&)$oy&r#R63Temra>l$d&|48;p7qs&g580=iuL9YAvoP#YU*bWlu^L;Hgd45L-dA|+opvv>7!d^6 zXy}nB-{{g25<09V1doOaN2Nn5;m9#GA!1J)Jaj9VBt+#yHX@FQ+ik8EK*n5NIe#06 zKoAmmpqe}fgpah)g89|pNbuMp3jDF-i5!^W5XYMk%(fwa-}9zz0JzsqnV%26 zxjB?M;l`SGn;kG>z5-q5BIGL9%3RK=WtaN#SI$_~e!Xm!cG@ar-J+*jXxXAweYxD< z!nM@wy;Y&Q$1y4j1lvSHDd_c)E%G72xoYq711s7uB4cQb34C z!Jf+phC&qID(gF>KClJ6isOb6!Z0&eR*FI>3VAu69RndG0*xE8Rx}E#o&q6AyjJzG z!D&$0pg9nvu&E8tT;~N)k`u9M!=Sn{gEKj)<5h>?2q%0{t3X0_rQr8Q^LwZWLO29U cLN(Y6WvB*zQV9~dcYe_&1jE&(^YhOC0f%S9A^-pY delta 2608 zcmZuzO>7%g5cb+7B}r?XWNXsUpCPq^6VkBzc5SZ%in6iS_Qvad#@?h2q+N&%2}x9h zfLkR?y}+%7Mce?XLOoT&!HR^qEC?i;L!=y95e}t@3*uKo5#mOex9j{gttIc9H}mGr z%zHE6yx)u87O$P_BI&d0+w*6MKoUU6s3gC)ARm_op`)KDdlFF|O$eh2`MuRR-OnEx z8R>`G%Wu6>dx(NKDv*Q^H$%>B=L_v*N9Oz(jyBgie+@eEuBV&- zhNVLs=RDn$MRWNOO9nMN2!80D&BHK!mFPg2p0NOS&;LI0&Kto^(2oKVSdp#JD=K zI3K`Y=4cxm&ev++u<;YOuy!i*)5cn0=K4zDW+7rne8I;qjd%(jY?&S5Xe4My+_?bq zcj(|g`p_PIAGNylQoy-$JgIfNHQLSd?s9N>d-FAaR~~shf6DzLA6b1|eVtkQt(|@6 zA`Nk_&243lBd=Uj%d)T#y zTslmLwwiAh>G0C#27Whg1q|=I$qWyp;o-(T&K`H^7=3Q5dDEa{8+4q>#!xoq($Szj z+IZifG2hkL((Sq(YdBvnZ!g+$*B)?boDOU?-!W)>BOhUkaa4>q{xB|a0j5*bm`(QC zyijDk67q0Fe@c_+g?B81Ymc~8pd(wK6{*0M;0*T>8h_zZ7N_jm#HBJNTXkF_`%7e8 zA~*gjcyZrqUkxq#M{ujtPU3YW|Gw_hm$rY3p@bNTS59rm0kG! zB)NELd)q86PMW@v(0rXG$kD^>>svGVHa)9#?lD^T5a18_mUHWm`b0jw-tJQ^mpag8 zG{pP}uXp%NuO4(h&|2ta&-xRENFXi>SnjiRbvnv$WnF;(CK}wVR=LwV>dbO-oDzpNUl;pwC%sfJc zBuEGc=PN)`Dd)z?EA>>u13LyF6}@cX@^mu&04wnjmXDJA6=h)uUUV}@AuS=u`k?C1 z#nk{cMnd~| z)=XJDa~TL~X7Th4bp{9?^)4->ocYr+UO8w=6eQ=9)4-*iuTBrtv8NDFEn33vl0t+w zv)EwD2+d_$#W8{4pVz60q};-9gnTGydcI&GlYpgL25V6wlr(b+3Ey$Q{XMKx4FdPZ z(Lf+L&hpMV437n`J?iwrZ0Mr zTHk)Yx3b0X?9(vTiIkL~gsr(^woXh+qyQTu&gyu8sDb+bfb&G(=p@q%Pqc@eU7E328}5D?68nz2-)YMrd;W*$UL zaVE-uh)0zvWT+{Em=K&d`=>7^2zwVzOj#B+wP}0_4Uc_oA|!{*g9v%&uX2e!XB From 68138c470fdbbecd2b7f8a814793a2a084cd13cd Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:53:31 -0700 Subject: [PATCH 12/40] Tedit compatibility adjustments and small fixups --- library/tedit/TEDIT | 55 +++--- library/tedit/TEDIT-ABBREV | 252 +++++++++++++------------ library/tedit/TEDIT-ABBREV.LCOM | Bin 5019 -> 5862 bytes library/tedit/TEDIT-FILE | 218 ++++++++++++++-------- library/tedit/TEDIT-FILE.LCOM | Bin 40382 -> 40738 bytes library/tedit/TEDIT-HCPY | 77 ++------ library/tedit/TEDIT-HCPY.LCOM | Bin 12142 -> 10805 bytes library/tedit/TEDIT-LOOKS | 318 ++++++++++++-------------------- library/tedit/TEDIT-LOOKS.LCOM | Bin 40234 -> 38359 bytes library/tedit/TEDIT-MENU | 109 ++++------- library/tedit/TEDIT-MENU.LCOM | Bin 54602 -> 54213 bytes library/tedit/TEDIT-OLDFILE | 46 +++-- library/tedit/tedit-exports.all | 37 ++-- 13 files changed, 514 insertions(+), 598 deletions(-) diff --git a/library/tedit/TEDIT b/library/tedit/TEDIT index ae2db6a13..95cb160a5 100644 --- a/library/tedit/TEDIT +++ b/library/tedit/TEDIT @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 6-Sep-2025 09:54:48" {WMEDLEY}TEDIT>TEDIT.;837 145260 +(FILECREATED " 8-Sep-2025 22:10:20" {WMEDLEY}TEDIT>TEDIT.;838 145349 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.REPLACE.SELPIECES TEDIT.INSERT.OBJECT) + :CHANGES-TO (FNS TEDIT.NTHCHARCODE) - :PREVIOUS-DATE " 1-Aug-2025 14:50:15" {WMEDLEY}TEDIT>TEDIT.;835) + :PREVIOUS-DATE " 6-Sep-2025 09:54:48" {WMEDLEY}TEDIT>TEDIT.;837) (PRETTYCOMPRINT TEDITCOMS) @@ -1162,7 +1162,8 @@ (\TEDIT.RPLCHARCODE TSTREAM N NEWCHARCODE NEWCHARLOOKS DONTDISPLAY]) (TEDIT.NTHCHARCODE - [LAMBDA (TSTREAM N) (* ; "Edited 28-Mar-2025 14:10 by rmk") + [LAMBDA (TSTREAM N) (* ; "Edited 8-Sep-2025 22:09 by rmk") + (* ; "Edited 28-Mar-2025 14:10 by rmk") (* ; "Edited 7-Jul-2024 11:09 by rmk") (* ; "Edited 29-Apr-2024 13:06 by rmk") (* ; "Edited 17-Mar-2024 00:27 by rmk") @@ -1185,7 +1186,7 @@ (* ;; "Out of the selection: force NIL") (SETQ N 0))) - (SETQ TSTREAM (TSTREAM TSTREAM)) + (SETQ TSTREAM (TEXTSTREAM TSTREAM)) else (SETQ TSTREAM (TEXTSTREAM TSTREAM)) (CL:WHEN (ILESSP N 0) (SETQ N (IPLUS (TEDIT.NCHARS TSTREAM) @@ -2325,26 +2326,26 @@ (ADDTOVAR PRINTFILETYPES (TEDIT (TEST \TEDIT.GET.TRAILER) (EXTENSION (TEDIT)))) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4850 7244 (MAKE-TEDIT-EXPORTS.ALL 4860 . 5406) (UPDATE-TEDIT 5408 . 6337) (EDIT-TEDIT -6339 . 7242)) (8674 36732 (TEDIT 8684 . 11298) (TEXTSTREAM 11300 . 13189) (TEXTSTREAMP 13191 . 13575) -(COERCETEXTSTREAM 13577 . 17788) (TEDIT.CONCAT 17790 . 21092) (TEDITSTRING 21094 . 22008) (TEDIT-SEE -22010 . 22569) (TEDIT.COPY 22571 . 24716) (TEDIT.DELETE 24718 . 26079) (TEDIT.INSERT 26081 . 29455) ( -TEDIT.TERPRI 29457 . 30571) (TEDIT.KILL 30573 . 31555) (TEDIT.QUIT 31557 . 32923) (TEDIT.MOVE 32925 . -33813) (TEDIT.STRINGWIDTH 33815 . 34486) (TEDIT.CHARWIDTH 34488 . 36730)) (36733 38674 (TEXTOBJ 36743 - . 37208) (COERCETEXTOBJ 37210 . 38672)) (40074 41724 (TDRIBBLE 40084 . 41722)) (41765 53661 ( -TEDIT.INSERT.OBJECT 41775 . 45482) (TEDIT.EDIT.OBJECT 45484 . 48424) (TEDIT.OBJECT.CHANGED 48426 . -51616) (TEDIT.MAP.OBJECTS 51618 . 53189) (\TEDIT.FIRST.OBJPIECE 53191 . 53424) (\TEDIT.NEXT.OBJPIECE -53426 . 53659)) (53684 61127 (\TEDIT.CONCAT.PAGEFRAMES 53694 . 58761) (\TEDIT.GET.PAGE.HEADINGS 58763 - . 59792) (\TEDIT.CONCAT.INSTALL.HEADINGS 59794 . 61125)) (61128 64735 (\TEDIT.MOVE.MSG 61138 . 63219) - (\TEDIT.READONLY 63221 . 64733)) (64736 70511 (TEDIT.NCHARS 64746 . 65119) (TEDIT.RPLCHARCODE 65121 - . 68111) (TEDIT.NTHCHARCODE 68113 . 70040) (TEDIT.NTHCHAR 70042 . 70509)) (70557 127586 (\TEDIT1 -70567 . 72644) (\TEDIT.INSERT 72646 . 79011) (\TEDIT.MOVE 79013 . 86919) (\TEDIT.COPY 86921 . 91452) ( -\TEDIT.REPLACE.SELPIECES 91454 . 95990) (\TEDIT.INSERT.SELPIECES 95992 . 98989) (\TEDIT.RESTARTFN -98991 . 101496) (\TEDIT.CHARDELETE 101498 . 104427) (\TEDIT.COPYPIECE 104429 . 109591) ( -\TEDIT.APPLY.OBJFN 109593 . 112679) (\TEDIT.DELETE 112681 . 117049) (\TEDIT.DIFFUSE.PARALOOKS 117051 - . 119322) (\TEDIT.WORDDELETE 119324 . 120939) (\TEDIT.WORDDELETE.FORWARD 120941 . 122730) ( -\TEDIT.FINISHEDIT? 122732 . 127584)) (127587 128246 (\TEDIT.THELP 127597 . 128244)) (128280 137411 ( -\TEDIT.PARAPIECES 128290 . 130264) (\TEDIT.PARACHNOS 130266 . 131158) (\TEDIT.PARA.FIRST 131160 . -134261) (\TEDIT.PARA.LAST 134263 . 137409)) (137412 144507 (\TEDIT.WORD.FIRST 137422 . 141426) ( -\TEDIT.WORD.LAST 141428 . 144505)) (144708 144985 (TEDITSYSTEMDATE 144718 . 144983))))) + (FILEMAP (NIL (4823 7217 (MAKE-TEDIT-EXPORTS.ALL 4833 . 5379) (UPDATE-TEDIT 5381 . 6310) (EDIT-TEDIT +6312 . 7215)) (8647 36705 (TEDIT 8657 . 11271) (TEXTSTREAM 11273 . 13162) (TEXTSTREAMP 13164 . 13548) +(COERCETEXTSTREAM 13550 . 17761) (TEDIT.CONCAT 17763 . 21065) (TEDITSTRING 21067 . 21981) (TEDIT-SEE +21983 . 22542) (TEDIT.COPY 22544 . 24689) (TEDIT.DELETE 24691 . 26052) (TEDIT.INSERT 26054 . 29428) ( +TEDIT.TERPRI 29430 . 30544) (TEDIT.KILL 30546 . 31528) (TEDIT.QUIT 31530 . 32896) (TEDIT.MOVE 32898 . +33786) (TEDIT.STRINGWIDTH 33788 . 34459) (TEDIT.CHARWIDTH 34461 . 36703)) (36706 38647 (TEXTOBJ 36716 + . 37181) (COERCETEXTOBJ 37183 . 38645)) (40047 41697 (TDRIBBLE 40057 . 41695)) (41738 53634 ( +TEDIT.INSERT.OBJECT 41748 . 45455) (TEDIT.EDIT.OBJECT 45457 . 48397) (TEDIT.OBJECT.CHANGED 48399 . +51589) (TEDIT.MAP.OBJECTS 51591 . 53162) (\TEDIT.FIRST.OBJPIECE 53164 . 53397) (\TEDIT.NEXT.OBJPIECE +53399 . 53632)) (53657 61100 (\TEDIT.CONCAT.PAGEFRAMES 53667 . 58734) (\TEDIT.GET.PAGE.HEADINGS 58736 + . 59765) (\TEDIT.CONCAT.INSTALL.HEADINGS 59767 . 61098)) (61101 64708 (\TEDIT.MOVE.MSG 61111 . 63192) + (\TEDIT.READONLY 63194 . 64706)) (64709 70600 (TEDIT.NCHARS 64719 . 65092) (TEDIT.RPLCHARCODE 65094 + . 68084) (TEDIT.NTHCHARCODE 68086 . 70129) (TEDIT.NTHCHAR 70131 . 70598)) (70646 127675 (\TEDIT1 +70656 . 72733) (\TEDIT.INSERT 72735 . 79100) (\TEDIT.MOVE 79102 . 87008) (\TEDIT.COPY 87010 . 91541) ( +\TEDIT.REPLACE.SELPIECES 91543 . 96079) (\TEDIT.INSERT.SELPIECES 96081 . 99078) (\TEDIT.RESTARTFN +99080 . 101585) (\TEDIT.CHARDELETE 101587 . 104516) (\TEDIT.COPYPIECE 104518 . 109680) ( +\TEDIT.APPLY.OBJFN 109682 . 112768) (\TEDIT.DELETE 112770 . 117138) (\TEDIT.DIFFUSE.PARALOOKS 117140 + . 119411) (\TEDIT.WORDDELETE 119413 . 121028) (\TEDIT.WORDDELETE.FORWARD 121030 . 122819) ( +\TEDIT.FINISHEDIT? 122821 . 127673)) (127676 128335 (\TEDIT.THELP 127686 . 128333)) (128369 137500 ( +\TEDIT.PARAPIECES 128379 . 130353) (\TEDIT.PARACHNOS 130355 . 131247) (\TEDIT.PARA.FIRST 131249 . +134350) (\TEDIT.PARA.LAST 134352 . 137498)) (137501 144596 (\TEDIT.WORD.FIRST 137511 . 141515) ( +\TEDIT.WORD.LAST 141517 . 144594)) (144797 145074 (TEDITSYSTEMDATE 144807 . 145072))))) STOP diff --git a/library/tedit/TEDIT-ABBREV b/library/tedit/TEDIT-ABBREV index c385e5a6d..d56df6b10 100644 --- a/library/tedit/TEDIT-ABBREV +++ b/library/tedit/TEDIT-ABBREV @@ -1,12 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "11-Aug-2025 14:40:45" {WMEDLEY}tedit>TEDIT-ABBREV.;25 16417 +(FILECREATED " 5-Sep-2025 18:50:19"  +{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-ABBREV.;29 17935 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.ABBREV.PARSE) + :CHANGES-TO (VARS TEDIT-ABBREVCOMS) - :PREVIOUS-DATE " 7-Aug-2025 12:50:55" {WMEDLEY}tedit>TEDIT-ABBREV.;24) + :PREVIOUS-DATE " 5-Sep-2025 12:24:55" +{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-ABBREV.;28) (PRETTYCOMPRINT TEDIT-ABBREVCOMS) @@ -14,52 +16,60 @@ (RPAQQ TEDIT-ABBREVCOMS [(FNS \TEDIT.ABBREV.EXPAND \TEDIT.ABBREV.PARSE \TEDIT.EXPAND.DATE \TEDIT.TRY.ABBREV) (GLOBALVARS TEDIT.ABBREVS) - (INITVARS (TEDIT.ABBREVS '(("b" . "357,146") - ("n" . "357,44") - ("m" . "357,45") - ("T" . "357,57") - ("d" . "357,60") - ("D" . "357,61") - ("s" . "0,247") - ("'" . "0,271") - ("`" . "0,251") - ("%"" . "0,252") - ("~" . "0,272") - ("1/4" . "0,274") - ("1/2" . "0,275") - ("3/4" . "0,276") - ("1/3" . "357,375") - ("2/3" . "357,376") - ("c" . "0,323") - ("c/o" . "357,100") - ("%%" . "357,100") - ("->" . "0,256") - ("ra" . "0,256") - ("|" . "0,257") - ("da" . "0,257") - ("^" . "0,255") - ("ua" . "0,255") - ("<-" . "0,254") - ("la" . "0,254") - ("_" . "0,254") - ("L" . "0,243") - ("o" . "0,260") - ("Y" . "0,245") - ("+" . "0,261") - ("x" . "0,264") - ("/" . "0,270") - ("=" . "357,121") - ("p" . "0,266") - ("r" . "0,322") - ("t" . "0,324") - ("tm" . "0,324") - ("box" . "42,42") - ("cbox" . "42,61") - ("-" . "357,43") - ("=" . "357,42") - (" " . "357,41") - ("DATE" . \TEDIT.EXPAND.DATE) - (">>DATE<<" . \TEDIT.EXPAND.DATE]) + (INITVARS (TEDIT.ABBREVS '(("b" "357,146" Bullet) + ("n" "357,44" Endash) + ("--" "357,44" Endash) + ("m" EMDASH) + ("---" EMDASH) + ("T" THINSPACE) + ("d" "357,60" Dagger) + ("D" "357,61" DoubleDagger) + ("s" "0,247" Section) + ("'" "0,271" RSQ) + ("`" "0,251" LSQ) + ("%"" LEFT-DOUBLEQUOTE) + ("~" RIGHT-DOUBLEQUOTE) + ("1/4" "0,274") + ("1/2" "0,275") + ("3/4" "0,276") + ("1/3" "357,375") + ("2/3" "357,376") + ("c" "0,323" Copyright) + ("c/o" "357,100" c/o) + ("%%" "357,100" c/o) + ("->" "0,256" Rightarrow) + ("ra" "0,256" Rightarrow) + ("|" "0,257" Downarrow) + ("da" "0,257" Downarrow) + ("L" "0,243" English-pound) + ("o" "0,260" Degree) + ("Y" "0,245" Yen) + ("+" "0,261" PlusMinus) + ("x" "0,264" Times) + ("/" "0,270" Divide) + ("=" "357,121") + ("p" "0,266" Paragraph) + ("r" "0,322" Register) + ("t" "0,324" Trademark) + ("tm" "0,324" Trademark) + ("bbox" "42,43" Blackbox) + ("wbox" "43,42" Whitebox) + ("-" SOFT-HYPHEN) + ("=" NONBREAKING-HYPHEN) + (" " NONBREAKING-SPACE) + ("un" "357,127") + ("int" "357,126") + ("subset" "357,131") + ("superset" "357,130") + ("&" "357,266") + ("or" "357,267") + ("not" "357,152") + ("all" "357,265") + ("exist" "357,264") + ("def" "357,162") + ("compose" "357,147") + ("DATE" \TEDIT.EXPAND.DATE) + (">>DATE<<" \TEDIT.EXPAND.DATE]) (DEFINEQ (\TEDIT.ABBREV.EXPAND @@ -224,38 +234,46 @@ " " DAY ", " YEAR]) (\TEDIT.TRY.ABBREV - [LAMBDA (KEY TSTREAM) (* ; "Edited 20-Mar-2025 21:52 by rmk") + [LAMBDA (KEY TSTREAM) (* ; "Edited 5-Sep-2025 12:24 by rmk") + (* ; "Edited 20-Mar-2025 21:52 by rmk") (* ; "Edited 6-Aug-2020 14:41 by rmk:") (* jds "11-Jul-85 12:46") (* ;; "Decode the expansion. A string may be a character name, otherwise itself. A litatom is a function to be applied, anything else is evaled. ") - (LET ((ABBREV (SASSOC KEY TEDIT.ABBREVS))) + (LET [(ABBREV (CDR (SASSOC KEY TEDIT.ABBREVS] + (CL:WHEN (LISTP ABBREV) (* ; "Originally stored in the CDR") + (SETQ ABBREV (CAR ABBREV))) (if (NULL ABBREV) then (CL:WHEN (CHARCODE.DECODE KEY T) (CHARACTER (CHARCODE.DECODE KEY T))) - elseif (STRINGP (CDR ABBREV)) + elseif (STRINGP ABBREV) then (* ;; "Could be a character code") - (LET ((CH (CHARCODE.DECODE (CDR ABBREV) - T))) + (LET ((CH (CHARCODE.DECODE ABBREV T))) (CL:IF CH (CHARACTER CH) - (CDR ABBREV))) - elseif (SMALLP (CDR ABBREV)) + ABBREV)) + elseif (SMALLP ABBREV) then (* ;; "Treat a number as a character code.") - (CHARACTER (CDR ABBREV)) - elseif (AND (LITATOM (CDR ABBREV)) - (GETD (CDR ABBREV))) - then (* ; "It's a function to be called.") - (APPLY* (CDR ABBREV) - TSTREAM - (CAR ABBREV)) - else (* ; "Anything else is a form to EVAL.") - (EVAL (CDR ABBREV]) + (CHARACTER ABBREV) + elseif (AND (LITATOM ABBREV) + (GETD ABBREV)) + then (* ; " A function to be applied.") + (APPLY* ABBREV TSTREAM KEY) + elseif (LISTP ABBREV) + then (* ; "Form in the CADR, now") + (EVAL ABBREV) + elseif (AND (SETQ ABBREV (CDR (SASSOC KEY TEDIT.ABBREVS))) + (LITATOM (CAR ABBREV)) + (GETD (CAR ABBREV))) + then + (* ;; "Form in the CDR, originally") + + (EVAL ABBREV]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -263,53 +281,61 @@ ) (RPAQ? TEDIT.ABBREVS - '(("b" . "357,146") - ("n" . "357,44") - ("m" . "357,45") - ("T" . "357,57") - ("d" . "357,60") - ("D" . "357,61") - ("s" . "0,247") - ("'" . "0,271") - ("`" . "0,251") - ("%"" . "0,252") - ("~" . "0,272") - ("1/4" . "0,274") - ("1/2" . "0,275") - ("3/4" . "0,276") - ("1/3" . "357,375") - ("2/3" . "357,376") - ("c" . "0,323") - ("c/o" . "357,100") - ("%%" . "357,100") - ("->" . "0,256") - ("ra" . "0,256") - ("|" . "0,257") - ("da" . "0,257") - ("^" . "0,255") - ("ua" . "0,255") - ("<-" . "0,254") - ("la" . "0,254") - ("_" . "0,254") - ("L" . "0,243") - ("o" . "0,260") - ("Y" . "0,245") - ("+" . "0,261") - ("x" . "0,264") - ("/" . "0,270") - ("=" . "357,121") - ("p" . "0,266") - ("r" . "0,322") - ("t" . "0,324") - ("tm" . "0,324") - ("box" . "42,42") - ("cbox" . "42,61") - ("-" . "357,43") - ("=" . "357,42") - (" " . "357,41") - ("DATE" . \TEDIT.EXPAND.DATE) - (">>DATE<<" . \TEDIT.EXPAND.DATE))) + '(("b" "357,146" Bullet) + ("n" "357,44" Endash) + ("--" "357,44" Endash) + ("m" EMDASH) + ("---" EMDASH) + ("T" THINSPACE) + ("d" "357,60" Dagger) + ("D" "357,61" DoubleDagger) + ("s" "0,247" Section) + ("'" "0,271" RSQ) + ("`" "0,251" LSQ) + ("%"" LEFT-DOUBLEQUOTE) + ("~" RIGHT-DOUBLEQUOTE) + ("1/4" "0,274") + ("1/2" "0,275") + ("3/4" "0,276") + ("1/3" "357,375") + ("2/3" "357,376") + ("c" "0,323" Copyright) + ("c/o" "357,100" c/o) + ("%%" "357,100" c/o) + ("->" "0,256" Rightarrow) + ("ra" "0,256" Rightarrow) + ("|" "0,257" Downarrow) + ("da" "0,257" Downarrow) + ("L" "0,243" English-pound) + ("o" "0,260" Degree) + ("Y" "0,245" Yen) + ("+" "0,261" PlusMinus) + ("x" "0,264" Times) + ("/" "0,270" Divide) + ("=" "357,121") + ("p" "0,266" Paragraph) + ("r" "0,322" Register) + ("t" "0,324" Trademark) + ("tm" "0,324" Trademark) + ("bbox" "42,43" Blackbox) + ("wbox" "43,42" Whitebox) + ("-" SOFT-HYPHEN) + ("=" NONBREAKING-HYPHEN) + (" " NONBREAKING-SPACE) + ("un" "357,127") + ("int" "357,126") + ("subset" "357,131") + ("superset" "357,130") + ("&" "357,266") + ("or" "357,267") + ("not" "357,152") + ("all" "357,265") + ("exist" "357,264") + ("def" "357,162") + ("compose" "357,147") + ("DATE" \TEDIT.EXPAND.DATE) + (">>DATE<<" \TEDIT.EXPAND.DATE))) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2933 15073 (\TEDIT.ABBREV.EXPAND 2943 . 5163) (\TEDIT.ABBREV.PARSE 5165 . 12775) ( -\TEDIT.EXPAND.DATE 12777 . 13410) (\TEDIT.TRY.ABBREV 13412 . 15071))))) + (FILEMAP (NIL (3630 16182 (\TEDIT.ABBREV.EXPAND 3640 . 5860) (\TEDIT.ABBREV.PARSE 5862 . 13472) ( +\TEDIT.EXPAND.DATE 13474 . 14107) (\TEDIT.TRY.ABBREV 14109 . 16180))))) STOP diff --git a/library/tedit/TEDIT-ABBREV.LCOM b/library/tedit/TEDIT-ABBREV.LCOM index 233c332544d4b6190b4296e073ff03a3996ee514..be684734be8827d73effaf19766146f12b005c7f 100644 GIT binary patch literal 5862 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 J2v+2M;J*`id&d9( delta 2099 zcmbVM+fEZf81AkR!%DP3f?h~6PSQYQ54*Fo-Ozxc>2BScT1ZF zD`++`CcJ^(C`zJF;FHL;kKoMw+i44ET6@v<|MvUO|F>t!aPWf3XGac!zlEV=oLo2$7F!k5?ERo_+C zNroDB@Ljn*P$*YL0cIR!7b@;jaelFybXY9bmEF++$y$2WVjXB*u@w4sT^$`#NN{*9 z=D)ZSiKug{5%$se*T{(Co!*+;6vnst@Xru`6jjB~$(X0Y;}J!DaC+vcQLmv6D(~TO zRBf1ZzfZ>44T1lb_Y9H zLm|Ys!H{h%0ZRZi30SrO8WPCp0&v=ZA%J}W=m|o>V-m73z_)?1+G1E>$FKy52=S(6 z+h7}MDiJ8uNE3;ON;PbDkf1*!Z3+_a*|aU}^A<@L2*i3A%Os}AUr#rsqoG5eu^5L~ z8a}`fOWq3|i3Nf7*3JR1q|Jumv-FKN1IF`2GGO9|f}mkGFLtuL;+dqRK=WJe7yvvy zM<}&y3jIJgx}PB7(pES@-4k)Y)hQTw3&CPaPF?ccgx6T@BM}ZxH+hmizV$3 D_E3;U diff --git a/library/tedit/TEDIT-FILE b/library/tedit/TEDIT-FILE index 73ba463d5..5da0b586d 100644 --- a/library/tedit/TEDIT-FILE +++ b/library/tedit/TEDIT-FILE @@ -1,16 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 1-Aug-2025 14:53:19"  -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-FILE.;645 169238 +(FILECREATED " 9-Sep-2025 21:49:43" {WMEDLEY}tedit>TEDIT-FILE.;653 172778 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.GET.CHARLOOKS \TEDIT.FORMATTEDSTREAMP \TEDIT.GET.OBJECT - \TEDIT.PUT.PCTB.MERGEABLE \TEDIT.PUT.CHARLOOKS \TEDIT.GET.SINGLE.CHARLOOKS - \TEDIT.PUT.SINGLE.CHARLOOKS) + :CHANGES-TO (FNS \TEDIT.GET.PROPS3 \TEDIT.GET.FORMATTED.FILE \TEDIT.PUT.TRAILER \TEDIT.PUT.PCTB + ) - :PREVIOUS-DATE "29-Jul-2025 09:30:44" -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-FILE.;642) + :PREVIOUS-DATE " 9-Sep-2025 00:03:26" {WMEDLEY}tedit>TEDIT-FILE.;651) (PRETTYCOMPRINT TEDIT-FILECOMS) @@ -25,7 +22,8 @@ (\PieceDescriptorSAFEOBJECT 6) (\PieceDescriptorMETAINFO 7) (\PieceDescriptorPROPERTIES 8)) - (EXPORT (MACROS \SMALLPIN \SMALLPOUT))) + (EXPORT (MACROS \SMALLPIN \SMALLPOUT)) + (RECORDS \TEDIT.FILETRAILER)) (COMS (* ;; "Public entries ") @@ -39,7 +37,7 @@  "Until CL:COMPILE-FILE and any others are updated, They should use the public TEDIT.FORMATTEDFILEP") (P (MOVD? '\TEDIT.GET.TRAILER '\TEDIT.FORMATTEDP1] - (FNS \TEDIT.GET.PIECES3 \TEDIT.GET.IDATE3 \TEDIT.MAKE.STRINGPIECE) + (FNS \TEDIT.GET.PIECES3 \TEDIT.GET.PROPS3 \TEDIT.MAKE.STRINGPIECE) (FNS \TEDIT.GET.UNFORMATTED.FILE.MCCS \TEDIT.INTERPRET.MCCS.SHIFTS \TEDIT.CONVERT.XCCSTOMCCS) (* ; "XCCS") @@ -115,6 +113,11 @@ (* "END EXPORTED DEFINITIONS") + +(DECLARE%: EVAL@COMPILE + +(RECORD \TEDIT.FILETRAILER (PIECESTART TRAILERSIZE VERSION PCCOUNT IDATE PROPS)) +) ) @@ -242,7 +245,8 @@ (\TEDIT.GET.TRAILER STREAM))))]) (TEDIT.FILEDATE - [LAMBDA (FILE INTEGER) (* ; "Edited 26-Mar-2024 21:37 by rmk") + [LAMBDA (FILE INTEGER) (* ; "Edited 8-Sep-2025 18:26 by rmk") + (* ; "Edited 26-Mar-2024 21:37 by rmk") (* ; "Edited 18-Jan-2024 10:26 by rmk") (* ; "Edited 13-Jan-2024 10:20 by rmk") (* ; "Edited 19-Dec-2023 10:13 by rmk") @@ -253,7 +257,8 @@ (* ;; "FILE must be random access. If not, then presumably we first have to fetch the last 5+4+8 bytes to someplace else.") - (LET [(IDATE (CAR (LAST (TEDIT.FORMATTEDFILEP FILE] + (LET [(IDATE (CAR (NTH (TEDIT.FORMATTEDFILEP FILE) + 5] (CL:WHEN IDATE (CL:IF INTEGER IDATE @@ -702,7 +707,9 @@ (\TEDIT.INSERTPIECES PIECES NIL TEXTOBJ)))]) (\TEDIT.GET.FORMATTED.FILE - [LAMBDA (TEXT TSTREAM START END PROPS) (* ; "Edited 28-Mar-2025 14:15 by rmk") + [LAMBDA (TEXT TSTREAM START END PROPS) (* ; "Edited 9-Sep-2025 21:45 by rmk") + (* ; "Edited 7-Sep-2025 12:14 by rmk") + (* ; "Edited 28-Mar-2025 14:15 by rmk") (* ; "Edited 7-Feb-2025 08:19 by rmk") (* ; "Edited 28-Oct-2024 17:48 by rmk") (* ; "Edited 21-Oct-2024 00:33 by rmk") @@ -719,13 +726,14 @@ (* ;; "Returns NIL if TSTREAM is not a formatted file, otherwise the ") - (LET ((TEXTOBJ (TEXTOBJ! (GETTSTR TSTREAM TEXTOBJ))) + (LET ((TEXTOBJ (FTEXTOBJ TSTREAM)) (TRAILER (\TEDIT.GET.TRAILER TEXT END)) - PCCOUNT IDATE PC) + PCCOUNT IDATE PROPS PC) (CL:WHEN TRAILER (SETTOBJ TEXTOBJ TXTPAGEFRAMES NIL) - (SETQ PCCOUNT (CADDDR TRAILER)) - (SELECTQ (CADDR TRAILER) + (FSETTOBJ TEXTOBJ DOCPROPS (fetch (\TEDIT.FILETRAILER PROPS) of TRAILER)) + (SETQ PCCOUNT (fetch (\TEDIT.FILETRAILER PCCOUNT) of TRAILER)) + (SELECTQ (fetch (\TEDIT.FILETRAILER VERSION) of TRAILER) (3 (* ; "Version 3") (\TEDIT.INSERTPIECES (\TEDIT.GET.PIECES3 TEXT TSTREAM PCCOUNT START END) NIL TEXTOBJ)) @@ -740,7 +748,9 @@ (\TEDIT.THELP "File format version incompatible with this version of TEdit.")) (CL:WHEN (SETQ PC (\TEDIT.LASTPIECE TEXTOBJ)) (FSETPC PC PPARALAST T)) - (\TEDIT.TRANSLATE.ASCIICHARS TSTREAM NIL) + (CL:UNLESS (EQ 'MCCS (FGETMULTI (FGETTOBJ TEXTOBJ DOCPROPS) + 'CHARENCODING)) + (\TEDIT.MCCS.TRANSLATE TSTREAM)) TEXTOBJ)]) (\TEDIT.FORMATTEDSTREAMP @@ -844,19 +854,20 @@ (RETURN STR]) (\TEDIT.GET.TRAILER - [LAMBDA (STREAM LEN) (* ; "Edited 26-Mar-2024 21:36 by rmk") + [LAMBDA (STREAM LEN) (* ; "Edited 9-Sep-2025 00:03 by rmk") + (* ; "Edited 26-Mar-2024 21:36 by rmk") (* ; "Edited 18-Jan-2024 10:22 by rmk") (* ; "Edited 16-Jan-2024 22:39 by rmk") (* ; "Edited 15-Jan-2024 17:38 by rmk") (* ; "Edited 13-Jan-2024 21:49 by rmk") - (* ;; "For an open formatted stream, returns a list (VERSION PCCOUNT DESCPTR IDATE) where DESCPTR is the byte position of the first piece. Returns NIL if it is not a formatted stream. Either way, the file is left at position 0 FWIW ") + (* ;; "For an open formatted stream, returns a list (PIECESTART TRAILERSIZE VERSION PCCOUNT IDATE PROPS) where PIECESTART is the byte position of the first piece. Returns NIL if it is not a formatted stream. Either way, the file is left at position 0 FWIW ") (* ;; "If STREAM is the format-stream split of a complete Tedit file, then PIECESTART is the position in that larger file that this section was taken from, and 0 in STREAM corresponds to PIECESTART in that file. TRAILERSIZE") (SETQ LEN (OR LEN (GETEOFPTR STREAM))) (CL:WHEN (IGREATERP LEN 8) - (LET (PIECESTART TRAILERSIZE PCCOUNT VERSION IDATE) + (LET (PIECESTART TRAILERSIZE PCCOUNT VERSION IDATE PROPS) (SETFILEPTR STREAM (IDIFFERENCE LEN 8)) (* ;  "Move to start of FILEPTR to descriptions") (SETQ PIECESTART (\DWIN STREAM)) (* ; @@ -866,15 +877,21 @@ 31415)) (PROG1 (SELECTQ VERSION (3 (* ; "Current version") - [SETQ IDATE (OR (\TEDIT.GET.IDATE3 STREAM LEN) - (GETFILEINFO STREAM 'ICREATIONDATE] - (SETQ TRAILERSIZE (IPLUS 8 (CL:IF IDATE - (IPLUS (CONSTANT (NCHARS "DATE:")) - 4) - 0))) - (LIST PIECESTART TRAILERSIZE VERSION PCCOUNT IDATE)) + (CL:MULTIPLE-VALUE-SETQ (TRAILERSIZE IDATE PROPS) + (\TEDIT.GET.PROPS3 STREAM LEN)) + (create \TEDIT.FILETRAILER + PIECESTART _ PIECESTART + TRAILERSIZE _ TRAILERSIZE + VERSION _ VERSION + PCCOUNT _ PCCOUNT + IDATE _ IDATE + PROPS _ PROPS)) ((2 1 0) - (LIST PIECESTART 8 VERSION PCCOUNT)) + (create \TEDIT.FILETRAILER + PIECESTART _ PIECESTART + TRAILERSIZE _ 8 + VERSION _ VERSION + PCCOUNT _ PCCOUNT)) NIL) (SETFILEPTR STREAM 0))))]) @@ -1065,32 +1082,62 @@ NIL) (RETURN PC]) -(\TEDIT.GET.IDATE3 - [LAMBDA (STREAM END) (* ; "Edited 6-Dec-2023 16:55 by rmk") +(\TEDIT.GET.PROPS3 + [LAMBDA (STREAM END) (* ; "Edited 9-Sep-2025 21:49 by rmk") + (* ; "Edited 6-Dec-2023 16:55 by rmk") + + (* ;; "Returns the integer IDATE for slightly updated version 3 files, the directory idate if there is no date in the file. At exit resets to starting position (assumes an error wouldn't matter).") - (* ;; "Returns the integer IDATE for slightly updated version 3 files, otherwise NIL. 4 for the bytes of the IDATE, 8 for the header. Leaves resets to starting position (assumes an error wouldn't matter).") + (* ;; "Before the date there may also be a property list, unseen by pre MCCS code. This is headed by PROPS: followed by a pointer to the first byte of the property list, which can be READ.") - (CL:WHEN (IGREATERP END (IPLUS (CONSTANT (NCHARS "DATE:")) - 4 8)) - (LET ((FILEPTR (GETFILEPTR STREAM))) - (SETFILEPTR STREAM (IDIFFERENCE END (IPLUS (CONSTANT (NCHARS "DATE:")) - 4 8))) + (CL:WHEN (IGREATERP END (CONSTANT (IPLUS (NCHARS "DATE:") + 4 8))) + (LET ((ORIGPTR (GETFILEPTR STREAM)) + [DATEPTR (IDIFFERENCE END (CONSTANT (IPLUS (NCHARS "DATE:") + 4 8] + (TRAILERSIZE 8) + IDATE PROPSLEN PROPS) + (SETFILEPTR STREAM DATEPTR) (* ;;  "DATE: is the marker for this extension to version 3 (could be removed if version is update). ") - (PROG1 (CL:WHEN (AND (EQ (CHARCODE D) - (BIN STREAM)) - (EQ (CHARCODE A) - (BIN STREAM)) - (EQ (CHARCODE T) - (BIN STREAM)) - (EQ (CHARCODE E) - (BIN STREAM)) - (EQ (CHARCODE %:) - (BIN STREAM))) - (\DWIN STREAM)) - (SETFILEPTR STREAM FILEPTR))))]) + (CL:WHEN (AND (EQ (CHARCODE D) + (BIN STREAM)) + (EQ (CHARCODE A) + (BIN STREAM)) + (EQ (CHARCODE T) + (BIN STREAM)) + (EQ (CHARCODE E) + (BIN STREAM)) + (EQ (CHARCODE %:) + (BIN STREAM))) + (SETQ IDATE (\DWIN STREAM)) + (add TRAILERSIZE (CONSTANT (IPLUS (NCHARS "DATE:") + 4))) + (CL:WHEN [IGREATERP END (IPLUS TRAILERSIZE (CONSTANT (IPLUS (NCHARS "PROPS:") + 4] + [SETFILEPTR STREAM (IDIFFERENCE DATEPTR (CONSTANT (IPLUS (NCHARS "PROPS:") + 4] + (CL:WHEN (AND (EQ (CHARCODE P) + (BIN STREAM)) + (EQ (CHARCODE R) + (BIN STREAM)) + (EQ (CHARCODE O) + (BIN STREAM)) + (EQ (CHARCODE P) + (BIN STREAM)) + (EQ (CHARCODE S) + (BIN STREAM)) + (EQ (CHARCODE %:) + (BIN STREAM))) + (SETQ PROPSLEN (\DWIN STREAM)) + (SETFILEPTR STREAM (IDIFFERENCE DATEPTR PROPSLEN)) + (SETQ PROPS (CAR (READ STREAM *TEDIT-FILE-READTABLE*))) + (add TRAILERSIZE PROPSLEN)))) + (SETFILEPTR STREAM ORIGPTR) + (CL:VALUES TRAILERSIZE (OR IDATE (GETFILEINFO STREAM 'ICREATIONDATE)) + PROPS)))]) (\TEDIT.MAKE.STRINGPIECE [LAMBDA (PC STRING) (* ; "Edited 23-Jan-2024 14:32 by rmk") @@ -1456,7 +1503,8 @@ (for I from 1 to (\WIN FILE) collect (\TEDIT.GET.SINGLE.CHARLOOKS FILE TEXTOBJ]) (\TEDIT.GET.SINGLE.CHARLOOKS - [LAMBDA (FILE TEXTOBJ) (* ; "Edited 1-Aug-2025 13:43 by rmk") + [LAMBDA (FILE TEXTOBJ) (* ; "Edited 7-Sep-2025 11:04 by rmk") + (* ; "Edited 1-Aug-2025 13:43 by rmk") (* ; "Edited 26-Jul-2025 11:14 by rmk") (* ; "Edited 21-Jul-2025 23:41 by rmk") (* ; "Edited 20-Jul-2025 13:14 by rmk") @@ -1554,7 +1602,6 @@ 'R) 'R] (FSETCLOOKS LOOKS CLFONT FONT) - (FSETCLOOKS LOOKS CLNAME (FONTUNPARSE FONT)) (SETFILEPTR FILE (IPLUS FILEPOS LOOKSLEN)) (RETURN LOOKS]) @@ -1781,6 +1828,7 @@ (\TEDIT.PUT.PCTB [LAMBDA (TEXTOBJ CHARSTREAM FORMATSTREAM CONTINUE KEEPSEPARATE) + (* ; "Edited 9-Sep-2025 21:32 by rmk") (* ; "Edited 26-Apr-2025 00:11 by rmk") (* ; "Edited 21-Oct-2024 00:33 by rmk") (* ; "Edited 15-May-2024 17:03 by rmk") @@ -1908,7 +1956,7 @@ (CL:UNLESS UNFORMATTED? (\TEDIT.PUT.TRAILER FORMATSTREAM (\GETFILEPTR CHARSTREAM ) - PCCOUNT 3)) + PCCOUNT 3 (FGETTOBJ TEXTOBJ DOCPROPS))) (CL:UNLESS (OR UNFORMATTED? KEEPSEPARATE) (COPYBYTES FORMATSTREAM CHARSTREAM 0 (GETEOFPTR FORMATSTREAM @@ -1968,16 +2016,24 @@ (\TEDIT.THELP "OTHER PTYPES"]) (\TEDIT.PUT.TRAILER - [LAMBDA (FORMATSTREAM PIECESTART PCCOUNT VERSION) (* ; "Edited 13-Jan-2024 10:13 by rmk") + [LAMBDA (FORMATSTREAM PIECESTART PCCOUNT VERSION PROPS) (* ; "Edited 9-Sep-2025 17:55 by rmk") + (* ; "Edited 13-Jan-2024 10:13 by rmk") (* ;; "Finalize FORMATSTREAM. We sneak in the date here--at the end of the looks, after the last look but before the final pointers, so that it doesn't interfere with anything. TEDIT.FILEDATE pulls it out if it's there.") - (PRIN1 "DATE:" FORMATSTREAM) - (\DWOUT FORMATSTREAM (IDATE)) - (\DWOUT FORMATSTREAM PIECESTART) (* ; "Position of the first piece") - (\WOUT FORMATSTREAM PCCOUNT) (* ; + (LET ((PROPSPTR (GETFILEPTR FORMATSTREAM))) + (CL:WHEN PROPS (* ; "CONS to protect an atom or number") + (PRIN2 (CONS PROPS) + FORMATSTREAM *TEDIT-FILE-READTABLE*) + (PRIN1 "PROPS:" FORMATSTREAM) + (\DWOUT FORMATSTREAM (IPLUS 4 (IDIFFERENCE (GETFILEPTR FORMATSTREAM) + PROPSPTR)))) + (PRIN1 "DATE:" FORMATSTREAM) + (\DWOUT FORMATSTREAM (IDATE)) + (\DWOUT FORMATSTREAM PIECESTART) (* ; "Position of the first piece") + (\WOUT FORMATSTREAM PCCOUNT) (* ;  "Number of pieces followed by the password") - (\WOUT FORMATSTREAM (IPLUS 31415 VERSION]) + (\WOUT FORMATSTREAM (IPLUS 31415 VERSION]) (\TEDIT.PUT.PCTB.MERGEABLE [LAMBDA (PREVPC PC EDITSTENTATIVE EXTFORMAT TEXTOBJ) (* ; "Edited 1-Aug-2025 14:51 by rmk") @@ -2634,28 +2690,28 @@ (RPAQ? *TEDIT-FILE-READTABLE* (COPYREADTABLE \ORIGREADTABLE)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (5423 35544 (TEDIT.GET 5433 . 11843) (TEDIT.FORMATTEDFILEP 11845 . 13161) ( -TEDIT.FILEDATE 13163 . 14334) (TEDIT.INCLUDE 14336 . 22365) (TEDIT.RAW.INCLUDE 22367 . 23175) ( -TEDIT.PUT 23177 . 31533) (TEDIT.PUT.STREAM 31535 . 35542)) (35545 55851 (\TEDIT.GET.FOREIGN.FILE 35555 - . 38980) (\TEDIT.GET.UNFORMATTED.FILE 38982 . 43288) (\TEDIT.GET.FORMATTED.FILE 43290 . 46317) ( -\TEDIT.FORMATTEDSTREAMP 46319 . 49450) (\ARBIN 49452 . 50172) (\ATMIN 50174 . 50711) (\DWIN 50713 . -51092) (\STRINGIN 51094 . 51802) (\TEDIT.GET.TRAILER 51804 . 54320) (\TEDIT.CACHEFILE 54322 . 55849)) -(56017 70228 (\TEDIT.GET.PIECES3 56027 . 66990) (\TEDIT.GET.IDATE3 66992 . 68387) ( -\TEDIT.MAKE.STRINGPIECE 68389 . 70226)) (70229 83655 (\TEDIT.GET.UNFORMATTED.FILE.MCCS 70239 . 76472) -(\TEDIT.INTERPRET.MCCS.SHIFTS 76474 . 82719) (\TEDIT.CONVERT.XCCSTOMCCS 82721 . 83653)) (83677 89816 ( -\TEDIT.GET.UNFORMATTED.FILE.UTF8 83687 . 89814)) (89839 101019 (\TEDIT.GET.CHARLOOKS.LIST 89849 . -90580) (\TEDIT.GET.SINGLE.CHARLOOKS 90582 . 97492) (\TEDIT.GET.CHARLOOKS 97494 . 99050) ( -\TEDIT.GET.PARALOOKS.INDEX 99052 . 99596) (\TEDIT.GET.CHARLOOKS.INDEX 99598 . 101017)) (101020 108677 -(\TEDIT.GET.PARALOOKS.LIST 101030 . 101652) (\TEDIT.GET.SINGLE.PARALOOKS 101654 . 108675)) (108678 -112511 (\TEDIT.GET.OBJECT 108688 . 112509)) (112576 145141 (\TEDIT.PUT.PCTB 112586 . 122356) ( -\TEDIT.PUT.PCTB.PIECEDATA 122358 . 125556) (\TEDIT.PUT.TRAILER 125558 . 126325) ( -\TEDIT.PUT.PCTB.MERGEABLE 126327 . 130100) (\TEDIT.PUT.UTF8.SPLITPIECES 130102 . 134804) ( -\TEDIT.PUT.PCTB.NEXTNEW 134806 . 139302) (\TEDIT.INSERT.NEWPIECES 139304 . 142739) (\TEDIT.PUTRESET -142741 . 142983) (\ARBOUT 142985 . 143709) (\ATMOUT 143711 . 144316) (\DWOUT 144318 . 144597) ( -\STRINGOUT 144599 . 145139)) (145142 157767 (\TEDIT.PUT.CHARLOOKS.LIST 145152 . 146824) ( -\TEDIT.PUT.SINGLE.CHARLOOKS 146826 . 152997) (\TEDIT.PUT.CHARLOOKS 152999 . 154338) ( -\TEDIT.PUT.CHARLOOKS1 154340 . 155391) (\TEDIT.PUT.OBJECT 155393 . 157765)) (157768 165407 ( -\TEDIT.PUT.PARALOOKS.LIST 157778 . 158680) (\TEDIT.PUT.SINGLE.PARALOOKS 158682 . 164266) ( -\TEDIT.PUT.PARALOOKS 164268 . 165405)) (165502 168931 (TEDITFROMLISPSOURCE 165512 . 168180) ( -SHELLSCRIPTP 168182 . 168411) (TEDITFROMSHELLSCRIPT 168413 . 168929))))) + (FILEMAP (NIL (5387 35646 (TEDIT.GET 5397 . 11807) (TEDIT.FORMATTEDFILEP 11809 . 13125) ( +TEDIT.FILEDATE 13127 . 14436) (TEDIT.INCLUDE 14438 . 22467) (TEDIT.RAW.INCLUDE 22469 . 23277) ( +TEDIT.PUT 23279 . 31635) (TEDIT.PUT.STREAM 31637 . 35644)) (35647 56813 (\TEDIT.GET.FOREIGN.FILE 35657 + . 39082) (\TEDIT.GET.UNFORMATTED.FILE 39084 . 43390) (\TEDIT.GET.FORMATTED.FILE 43392 . 46927) ( +\TEDIT.FORMATTEDSTREAMP 46929 . 50060) (\ARBIN 50062 . 50782) (\ATMIN 50784 . 51321) (\DWIN 51323 . +51702) (\STRINGIN 51704 . 52412) (\TEDIT.GET.TRAILER 52414 . 55282) (\TEDIT.CACHEFILE 55284 . 56811)) +(56979 73017 (\TEDIT.GET.PIECES3 56989 . 67952) (\TEDIT.GET.PROPS3 67954 . 71176) ( +\TEDIT.MAKE.STRINGPIECE 71178 . 73015)) (73018 86444 (\TEDIT.GET.UNFORMATTED.FILE.MCCS 73028 . 79261) +(\TEDIT.INTERPRET.MCCS.SHIFTS 79263 . 85508) (\TEDIT.CONVERT.XCCSTOMCCS 85510 . 86442)) (86466 92605 ( +\TEDIT.GET.UNFORMATTED.FILE.UTF8 86476 . 92603)) (92628 103861 (\TEDIT.GET.CHARLOOKS.LIST 92638 . +93369) (\TEDIT.GET.SINGLE.CHARLOOKS 93371 . 100334) (\TEDIT.GET.CHARLOOKS 100336 . 101892) ( +\TEDIT.GET.PARALOOKS.INDEX 101894 . 102438) (\TEDIT.GET.CHARLOOKS.INDEX 102440 . 103859)) (103862 +111519 (\TEDIT.GET.PARALOOKS.LIST 103872 . 104494) (\TEDIT.GET.SINGLE.PARALOOKS 104496 . 111517)) ( +111520 115353 (\TEDIT.GET.OBJECT 111530 . 115351)) (115418 148681 (\TEDIT.PUT.PCTB 115428 . 125335) ( +\TEDIT.PUT.PCTB.PIECEDATA 125337 . 128535) (\TEDIT.PUT.TRAILER 128537 . 129865) ( +\TEDIT.PUT.PCTB.MERGEABLE 129867 . 133640) (\TEDIT.PUT.UTF8.SPLITPIECES 133642 . 138344) ( +\TEDIT.PUT.PCTB.NEXTNEW 138346 . 142842) (\TEDIT.INSERT.NEWPIECES 142844 . 146279) (\TEDIT.PUTRESET +146281 . 146523) (\ARBOUT 146525 . 147249) (\ATMOUT 147251 . 147856) (\DWOUT 147858 . 148137) ( +\STRINGOUT 148139 . 148679)) (148682 161307 (\TEDIT.PUT.CHARLOOKS.LIST 148692 . 150364) ( +\TEDIT.PUT.SINGLE.CHARLOOKS 150366 . 156537) (\TEDIT.PUT.CHARLOOKS 156539 . 157878) ( +\TEDIT.PUT.CHARLOOKS1 157880 . 158931) (\TEDIT.PUT.OBJECT 158933 . 161305)) (161308 168947 ( +\TEDIT.PUT.PARALOOKS.LIST 161318 . 162220) (\TEDIT.PUT.SINGLE.PARALOOKS 162222 . 167806) ( +\TEDIT.PUT.PARALOOKS 167808 . 168945)) (169042 172471 (TEDITFROMLISPSOURCE 169052 . 171720) ( +SHELLSCRIPTP 171722 . 171951) (TEDITFROMSHELLSCRIPT 171953 . 172469))))) STOP diff --git a/library/tedit/TEDIT-FILE.LCOM b/library/tedit/TEDIT-FILE.LCOM index 99e23b3d77b272d4ac069cba1d393676e55910f1..205a22b675132284e1304b458190e785c1057226 100644 GIT binary patch delta 3547 zcmZu!U5pdg752>jU>sPyU|85JaIm)EC0R57_E?mRe`fJ`XFaZGmY--F6SC0Fu6Lm{ z50y}5+EC@Cm4ZeK%1hOxsg%4RVuO_OXSG#R@sJ|5JitrUs@k`zGS7XW=iaeB1FB{D zo_o%B&%O8j-Q$P%*v}raAD`NxPTS`$P79nMgTQAbH6w}FR#FXFoPtOk0#aVih+Kvj z<8b!Ux%V!tUVOiPZV}G?_~NA>eJ2A8j$SaF_=JxxZrG9QO8fBiG~Z4?lVR z5S~3#sp=;TYu=tNpq`i2a9oBHGlFvM@*!5{TYqP_ZIOWqg;;HK2tW0q2pO1BCRDt= zC3~$HEmD3oln_)nPWABul$~Phz_zRVM`Wnvp#l=nQ@CFy&yIY%DHIyY{*kD;mi@?$ z9@#lj9X4(c{OqgHuZzQky%ckb21`CnY{5+(S#5m(&femqg@->N((*2rj-B6T>DI;Q z%Hxqx`_?}~30{?Y)}G7f?W9x9mTi;Vkyn(S#LU`G#nAJ}l+_;7De7hgcq!duP;cd( z90$ChCSK+8!1Mg8OaWB)<2QCS((+3ZvK9JVcu6&$%rNyTdX!HqKn{x@OGCbxt?K2x zRWQoOL6X4HPdQeugyGjGc?oO>17Hs19uKwPT_lVtj5}!E`LeJ+2zjdXt5riEiElBj?<5}Ojoxt4tOaAw(el0>J_I7DhCU5Crrb3;1$Do zxgeqs3ht-M{(-V#w*IQ9;qP^`BvVL75*56rcawe;nR*#RN(6&OTLlE@TGKY()=|O( z5s}9>8xMz-yF;lH?-}?QwhA8yihMIaF6gkKlj*X7NYGF88(;(FWQzK`Y1wvuyIHye= zBb>|>u;(i}C1vP(SCF8bog;o0M3}M44xt1vEo;{HA_J3U#@$*;uzxtF7`QjYjv6M#1CPxVFcy30-1wt?}ad`r3;Z&sLt*q;|=}-5FSph1=aV zn)`KSYFuNeOLn&{jlnO=>}gYmrMdsD>}?=tpb351tyot$et|f7X?(nGI>y zrdzxvSm|{txk`VnjQh1c(MV$aBx9krW*xTPd`h*Hur8=_I+(tyn5Mbnbq=74B2=>Z z*~5@lWKV#vq77-x%7vM?b*#*gB5!GrMs0l>ldVT9=?0dIE=ZBF()Vb5rFyiC?^>Uh z{KYco^CiXKSi;iL!;7kq5tRTfDo~ksvUbC^@*tA3f#)YAm+}N;BH-#SUr1pA@gTg! z!<;^s!-pLYpRMLd5hUmJ$W))g`*cgISMyY?Q}~`?*}-2v1qQxt4Hf2a5FrQYbSh}d zR0^MG?E9ukjmmrGO$kASB+~buRxU`RHOTAl%~FUA%<#5>85ZpRtO1H5`BPBvjC~=< zYEX?V2i3^D8bC_v;9(>wh?KY>QpEB~cJSJi2KFf;k84ezhb#d%p11WXeUk)ylk%oN zMPKJF)2f1i+xTn&ujR410Gn6EUN_Z;^7u%3P<{vAzT01SIkN0-J1OmyAmK5RkTWsV zr+^og)~S;}e{E90WWYCrhb$+E7%qT26B0uT&?tnITg-a~!z{FB7f0DaeYSPfJ#&6y zNPD!fb;$k6`9%C)C?R7zlea3TbEh5M202ZmMYm>1;~^_@>(A%6uuQ7;WT`bcMj8?N z1`?ssYlp%8Xf<=}>Hzk`-3RIbTWB6BERAbtNU8VgJ$))Pn%QlwKIkEf&%9i3yWgxT zd+wet{fh#OQvJmSrATiesBZR`I~r)AoHg%Y)^`cghZRl|7D>%6)$6AevI_OdLZ7;?y3k`r6+P z9)Luos^_h0!R|SebdS9rc?uG4em%D@;{A^zBHD3yQ=^QrRnWox&ARB;5AAXPv;I2% Y*%6tD``zojd*S-OhrFH6+<0gBf8kt&SpWb4 delta 3175 zcma)8-)|dv5w|x^&UMq&&bdi0ZNgyM%844^{`T5H2jsHd;maPY#N4sj2F!r6I1z!~1?11gA@^nr&86LO7}n% zd1pQ|-$mIcjYWO` z=6Zec*5*ci^KD@~AuWD$|IXe{V{5^I7D<>n9~33v4*U(eJ zN?g^fgpn<3ISWGM=}#^Z{hd>OAn(8T1rlpU*FtlUu2i+J6pU4KVF`B!F+R0We5>Az zS}HBDX;J(?Huu?kV?@5Sz?>ZwXZ=1OlR4$XKl{fY@%!@aQT5$?IBx@CUz|_EReKK{ z3%Y7rt#6Fo``nlal^j$+fC7~fR+=K05}7L>4f}k<>IgOXXv+R%av{n^_&}jO^!?xX z?&WQGJ8F>+6StacN2k?oTO%Lddpzdr9RAlA=cFX`B4t(8vZcMArSbi9(1jvshshQ|xR68C=XEIwfayIk(dQg8*AFcf6(Y=ju%N zqm{kxhbz0?_GrEyTq$l(<6maiUev+taS{inX3;{gSXD?VfU%%lp}cH>B6-hEQ|Z^p z7v;<2@f2p(z8M9hOfx*!+K^MhsGV&A(o0GxUI7-UCGzRwE6wY)l2m(#_2BWdw(gt| z>nSrppV+&~Kz*s(zK9>S+n&LX)ooAUN9(rF;wRm0_o9=@4^E+o-a{lY`%BjfWf0^( zJV6h~VWkd^Iu|Mz^j0(Tr?XA0gG$w?m{_m8;*v?o7AzZ-pM|7cGQ_@ z*fH<|SbP*ZO&7c%BCl2_nsS5joviJ4kIv}BL+zk$caQCEjqez8!|yx!DixKesMHsU zoub_ePyu`=U)$~evOGNWuxyLp-@Ci}cr5H{gncKqvEA;kjj`dO17plpVpytF!A+r^ zAZmrt(^(^ou1*=@p0DVrYbk&_>VT`mxTn}7zcMFF%)oFWI?^%bH-o#+j*4fWQ>c(rT<6X>^A}Q_1Qj*6G7k!NcY2v}*xOA|I1bj9U)S&gLoz8N-Rv>6-}eQqIG|-& zacKb?drwD7(Z$YMNp{ytc+vZ~m~wFuJLdrBTpgjQ2m^tDXY4BpI4LWu7H-I(640S&_Z$o& z3)tjY34fJT3JUnkK?xLW^jT2klsB+a3g;ERMixB5mPD@xHbd8T5@Ta?P1@cdiK-qU z9@ph$h4*rz?B#HauBMdqT9Gge9vRDdI8p9zrb*q4*vVa0A>}nAVC1MwE9Z=*Lis8P zEbc&m0pf9_teRTY9)o-`g>sjb1;`n?QNw8+?LQ$a7;?@Y&iFPGAx7~uzQyqwJl*=+{?X;Y9K=K97Z0=K y-w$W}A@b6JK>l!fikJuIk^7lHM(!U($Oi`;a(_Sg&xrFRA!qVat$+Mj8~Go%x+=Z^ diff --git a/library/tedit/TEDIT-HCPY b/library/tedit/TEDIT-HCPY index 094b520cf..a112833e8 100644 --- a/library/tedit/TEDIT-HCPY +++ b/library/tedit/TEDIT-HCPY @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "21-Apr-2025 19:07:23" {WMEDLEY}tedit>TEDIT-HCPY.;176 32823 +(FILECREATED "10-Sep-2025 19:05:00" {WMEDLEY}tedit>TEDIT-HCPY.;179 30623 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.HARDCOPY.DISPLAYLINE) + :CHANGES-TO (VARS TEDIT-HCPYCOMS) - :PREVIOUS-DATE "17-Apr-2025 13:35:29" {WMEDLEY}tedit>TEDIT-HCPY.;174) + :PREVIOUS-DATE " 9-Sep-2025 21:52:28" {WMEDLEY}tedit>TEDIT-HCPY.;177) (PRETTYCOMPRINT TEDIT-HCPYCOMS) @@ -22,27 +22,14 @@ (* ;; "Functions for scaling regions as needed during hardcopy.") (FNS \TEDIT.SCALEREGION)) + [COMS (* ; + "0.75 inches from bottom, 1 from top") + (INITVARS (TEDIT.DEFAULTPAGEREGION (\TEDIT.SCALEREGION MICASPERINCH + (CREATEREGION 1.1 0.75 6.4 9.25] (COMS - (* ;; "PRESS-specific code") - - (VARS (TEDIT.DEFAULTPAGEREGION (CREATEREGION 2794 1905 16256 23495))) - (* ; - "0.75 inches from bottom, 1 from top")) - [COMS (* ;; "Support for the window-menu's HARDCOPY button, LISTFILES, etc. THIS IS SCREWY") - (FNS TEDIT.HARDCOPYFN \TEDIT.HARDCOPYFILEFN \TEDIT.POSTSCRIPT.HARDCOPY - \TEDIT.PRESS.HARDCOPY) - [P (LET [(IPVALUES (ASSOC 'CONVERSION (ASSOC 'INTERPRESS PRINTFILETYPES] - (CL:WHEN IPVALUES - (* ; - "Only install INTERPRESS printing if INTERPRESS is loaded.") - (LISTPUT IPVALUES 'TEDIT (FUNCTION \TEDIT.POSTSCRIPT.HARDCOPY)))] - (P (LET [(PRESSVALUES (ASSOC 'CONVERSION (ASSOC 'PRESS PRINTFILETYPES] - (CL:WHEN PRESSVALUES - (* ; - "Only install PRESS printing if PRESS is loaded.") - (LISTPUT PRESSVALUES 'TEDIT (FUNCTION \TEDIT.PRESS.HARDCOPY)))] + (FNS TEDIT.HARDCOPYFN \TEDIT.HARDCOPYFILEFN \TEDIT.POSTSCRIPT.HARDCOPY)) [COMS (* ;; "vars for Japanese Line Break") @@ -421,16 +408,11 @@ -(* ;; "PRESS-specific code") - - -(RPAQ TEDIT.DEFAULTPAGEREGION (CREATEREGION 2794 1905 16256 23495)) - - - (* ; "0.75 inches from bottom, 1 from top") +(RPAQ? TEDIT.DEFAULTPAGEREGION (\TEDIT.SCALEREGION MICASPERINCH (CREATEREGION 1.1 0.75 6.4 9.25))) + (* ;; "Support for the window-menu's HARDCOPY button, LISTFILES, etc. THIS IS SCREWY") @@ -486,33 +468,8 @@ (replace (TEXTOBJ EDITOPACTIVE) of (TEXTOBJ TEXT-STREAM) with 'Hardcopy) (TEDIT.FORMAT.HARDCOPY TEXT-STREAM PFILE T NIL NIL NIL 'POSTSCRIPT) PFILE)]) - -(\TEDIT.PRESS.HARDCOPY - [LAMBDA (FILE PFILE) (* ; "Edited 12-Jun-90 18:36 by mitani") - (* Send the text to the printer.) - [SETQ FILE (OPENTEXTSTREAM (COND - ((STRINGP FILE) - (MKATOM FILE)) - (T FILE] - (RESETLST - [RESETSAVE (\TEDIT.MARKACTIVE (TEXTOBJ FILE)) - '(AND (\TEDIT.MARKINACTIVE OLDVALUE] - (replace (TEXTOBJ EDITOPACTIVE) of (TEXTOBJ FILE) with 'Hardcopy) - (TEDIT.FORMAT.HARDCOPY FILE PFILE T NIL NIL NIL 'PRESS) - (CLOSEF? PFILE) - PFILE)]) ) -[LET [(IPVALUES (ASSOC 'CONVERSION (ASSOC 'INTERPRESS PRINTFILETYPES] - (CL:WHEN IPVALUES (* ; - "Only install INTERPRESS printing if INTERPRESS is loaded.") - (LISTPUT IPVALUES 'TEDIT (FUNCTION \TEDIT.POSTSCRIPT.HARDCOPY)))] - -[LET [(PRESSVALUES (ASSOC 'CONVERSION (ASSOC 'PRESS PRINTFILETYPES] - (CL:WHEN PRESSVALUES (* ; - "Only install PRESS printing if PRESS is loaded.") - (LISTPUT PRESSVALUES 'TEDIT (FUNCTION \TEDIT.PRESS.HARDCOPY)))] - (* ;; "vars for Japanese Line Break") @@ -548,11 +505,11 @@ (CLOSEF DOC]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3475 26032 (TEDIT.HARDCOPY 3485 . 4618) (\TEDIT.PRINT.MENU 4620 . 5586) (TEDIT.HCPYFILE - 5588 . 7762) (\TEDIT.HARDCOPY.DISPLAYLINE 7764 . 16987) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 16989 . -18718) (\TEDIT.HARDCOPY.MODIFYLOOKS 18720 . 20901) (\TEDIT.HCPYFMTSPEC 20903 . 24361) ( -\TEDIT.INTEGER.IMAGEBOX 24363 . 25034) (\TEDIT.DISPLAY.DIACRITIC 25036 . 26030)) (26107 26937 ( -\TEDIT.SCALEREGION 26117 . 26935)) (27196 30736 (TEDIT.HARDCOPYFN 27206 . 28511) ( -\TEDIT.HARDCOPYFILEFN 28513 . 29074) (\TEDIT.POSTSCRIPT.HARDCOPY 29076 . 30007) (\TEDIT.PRESS.HARDCOPY - 30009 . 30734)) (31999 32800 (TEDIT-BOOK 32009 . 32798))))) + (FILEMAP (NIL (2652 25209 (TEDIT.HARDCOPY 2662 . 3795) (\TEDIT.PRINT.MENU 3797 . 4763) (TEDIT.HCPYFILE + 4765 . 6939) (\TEDIT.HARDCOPY.DISPLAYLINE 6941 . 16164) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 16166 . +17895) (\TEDIT.HARDCOPY.MODIFYLOOKS 17897 . 20078) (\TEDIT.HCPYFMTSPEC 20080 . 23538) ( +\TEDIT.INTEGER.IMAGEBOX 23540 . 24211) (\TEDIT.DISPLAY.DIACRITIC 24213 . 25207)) (25284 26114 ( +\TEDIT.SCALEREGION 25294 . 26112)) (26367 29180 (TEDIT.HARDCOPYFN 26377 . 27682) ( +\TEDIT.HARDCOPYFILEFN 27684 . 28245) (\TEDIT.POSTSCRIPT.HARDCOPY 28247 . 29178)) (29799 30600 ( +TEDIT-BOOK 29809 . 30598))))) STOP diff --git a/library/tedit/TEDIT-HCPY.LCOM b/library/tedit/TEDIT-HCPY.LCOM index 7d6c71eaa4441823d6ec75ad65b095f4c7d63517..9c76df19871b538f2409aed3e8f38f7ac4e3bd85 100644 GIT binary patch delta 539 zcmb7A&r8B^6lYeK9X#YIFnujH9kub@Z0dGU*EVycZft4^5mXKmD#fBYcdbM4J$CKV ztr-0i-Gd0acI?=><-mT}rPF&nKJWAEZS%fyxyA^HbG<$%B2fZCR*FxKs zdtL{62S5RSA((>90!jVA=M_m%q&x-N18?-;o%RQZv;qx7HyeCKb#%?L+kj{3IfBFm zx`ZJb54I~>i@`>Say7MTIL3-;)p0SU?+&lrvSqD8H_$IPt5x`}%=0`<BqJFgRvO zRFF)uWV&ot4b3ssfb17&l=Cy!lnfb^#V15UZmEtN`sON{-PWv{%YtG%M$5FCE~f`n zK^gK_V`30rRKz@fCRifpPeyLy6GAS7Zxc_$d7fM!&e!Clug*s&u+OCM9UH^P%yely zJCHR~Q(fC|%(_;Abm%_p1q5CI#OEZ)@=GA|qJ+%_!0*h3f5t9GB1OPGW~TTD>3=x= I2kx5q0OTx>>Hq)$ delta 1887 zcmb`HOOM-B6vy*`QY=7Jtq>XwlT*`a?Wq#^nVGmKU=nA>trL5E?RiKQQi#*3HEt3m zQ=t*6%z`Zv#ez@30@foo2nqNIERgys3hY^MY$q9~&smU#Z+!2$=lp-?{;z*>9)I%n z?mqBk_5MLw-~<_XQIV<&C(*#rz2Uu)AM`yK4uA&g^Cr3V-~)HkA5ZFs-BHjT)Qw@U z8`SUhy`X)d=KUZoA@GVUD_o6+qqstF%>y3` zv|Pi0Y+R*Mp~34Op@3)X=c_bJF)iKD8n&i7S`&kiV>F&})D&)A5kxxb7OuTo1yR_D zzACH~TOAVp{{Aw{f@0a)j&8c7+{Eob^Xr-2q9V$QfD);P53c5=ledaLE*Cc>F8aCj zC>g(ny=43w{(R#$R@a>h<|8D!UaCaDytf?2%Af^2Skr$35M5E$Fi3M+rrjoMEaV!w zVlF?-;m>+KekPB*OH1}r@0E1sTs(acKQ7g+ZU3(4B`9a^-qSMiH?#5I10}JNA0R(J_c3M(sJ~$2X(LE7HYyy|Sg+&4y|1 zgVNlfm}tKwg){v+a4-cC!O)4dx1|#Y38Z2^SNJH=@m)H6kq)2c$c4*=MC>Wr`B?R@ zSI*^8vLq)RNgCpIcJ)pZBo1!3cQCyJq72wqd*0Z&IF;i#9{3uVmez?8h=T@b11~`P zmg<;oz`TyFcQ!3Fh{!!z9teOfEVSil&X0}Mmy){bhp8UaQn z#B2bw?V4!3hS}NCY=V_AdSOLJJUdaz;sN4Yd;reAr4g)-!3{&%-O@UMiNk5;HMl_m zZ4QECyi=2-ZV$${K>eCm~F62etIc}KpChH5R=}d-_%3v;}TO@r7 zbm5Z3XONtN*~TM9At&!%Efqq%Rk076T1#~e$5J=7sg0Pkn2MU3<+S-{>)iY}LqcBM zzKjjC&HKN+@=n@9YUY+{52L?USI{3byoIKpkucfw61IiBPvRX0)6Zb`8YDX)kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-LOOKS.;443 160489 +(FILECREATED " 9-Sep-2025 21:55:31" {WMEDLEY}tedit>TEDIT-LOOKS.;455 154986 :EDIT-BY rmk - :CHANGES-TO (RECORDS CHARLOOKS) - (FNS \TEDIT.EQCLOOKS \TEDIT.TRANSLATE.ASCIICHARS \TEDIT.UNIQUIFY.ALL - \TEDIT.FLUSH.UNUSED.LOOKS TEDIT.GET.LOOKS TEDIT.SUBLOOKS TEDIT.FINDLOOKS - \TEDIT.CHANGE.CHARLOOKS) + :CHANGES-TO (VARS TEDIT-LOOKSCOMS) + (FNS \TEDIT.MCCS.TRANSLATE) - :PREVIOUS-DATE "29-Jul-2025 09:30:33" {WMEDLEY}tedit>TEDIT-LOOKS.;435) + :PREVIOUS-DATE " 9-Sep-2025 09:42:42" {WMEDLEY}tedit>TEDIT-LOOKS.;452) (PRETTYCOMPRINT TEDIT-LOOKSCOMS) @@ -56,15 +53,15 @@ TEDIT.COPY.LOOKS \TEDIT.UNPARSE.CHARLOOKS.LIST \TEDIT.MODIFYLOOKS TEDIT.NEW.FONT \TEDIT.CARETLOOKS.VERIFY \TEDIT.CARETPIECE \TEDIT.GET.INSERT.CHARLOOKS \TEDIT.GET.TERMSA.WIDTHS \TEDIT.PARSE.CHARLOOKS.LIST) - (COMS (FNS \TEDIT.TRANSLATE.ASCIICHARS \TEDIT.CONVERT.TO.FORMATTED) - (MACROS \TEDIT.TRANSLATE.ASCII.CHARLOOKS)) + (COMS (FNS \TEDIT.MCCS.TRANSLATE \TEDIT.CONVERT.TO.FORMATTED) + (MACROS \TEDIT.MCCS.TRANSLATE.CHARLOOKS)) (FNS \TEDIT.UNIQUIFY.CHARLOOKS \TEDIT.UNIQUIFY.PARALOOKS \TEDIT.UNIQUIFY.ALL \TEDIT.FLUSH.UNUSED.LOOKS) (* ;; "Public entries") (FNS TEDIT.LOOKS TEDIT.GET.LOOKS TEDIT.SUBLOOKS TEDIT.FINDLOOKS) - [INITVARS (TEDIT.FONTCLASSES '(DISPLAY PDF POSTSCRIPT INTERPRESS PRESS] + [INITVARS (TEDIT.FONTCLASSES '(DISPLAY PDF POSTSCRIPT INTERPRESS] (FNS \TEDIT.CHANGE.CHARLOOKS \TEDIT.CHANGE.CHARLOOKS.NEW \TEDIT.CHARLOOKS.CHANGE.FONT \TEDIT.FONT.NEXTSIZE \TEDIT.LOOKS \TEDIT.FONTCOPY \TEDIT.COERCE.FONTCLASS \TEDIT.FONTCLASS.TO.FONT)) @@ -153,9 +150,7 @@ CLOFFSET _ 0 CLCOLOR _ 'BLACK (INIT (DEFPRINT 'CHARLOOKS (FUNCTION \TEDIT.CHARLOOKS.DEFPRINT ))) - (ASSOCRECORD CLPROPS (CLUSERINFO CLCHARENCODING)) - [ACCESSFNS ((CLNAME (fetch (CHARLOOKS CLFONTUNPARSE) of DATUM) - (replace (CHARLOOKS CLFONTUNPARSE) of DATUM with NEWVALUE]) + (ASSOCRECORD CLPROPS (CLUSERINFO CLCHARENCODING))) (DATATYPE PARALOOKS ( (* ;; "Describe the paragraph formatting for a paragraph in a TEdit document.") @@ -544,7 +539,8 @@ (DEFINEQ (\TEDIT.CHARLOOKS.FROM.FONT - [LAMBDA (FONT NOERROR) (* ; "Edited 19-Mar-2025 12:47 by rmk") + [LAMBDA (FONT NOERROR) (* ; "Edited 7-Sep-2025 11:02 by rmk") + (* ; "Edited 19-Mar-2025 12:47 by rmk") (* ; "Edited 2-Jan-2025 10:21 by rmk") (* ; "Edited 31-Dec-2024 23:33 by rmk") (* ; "Edited 28-Dec-2024 12:28 by rmk") @@ -567,11 +563,11 @@ (CL:WHEN (type? FONTCLASS FONT) (SETQ FONT (\TEDIT.COERCE.FONTCLASS FONT))) (create CHARLOOKS - CLFONT _ FONT - CLNAME _ (FONTUNPARSE FONT]) + CLFONT _ FONT]) (\TEDIT.EQCLOOKS - [LAMBDA (CLOOK1 CLOOK2) (* ; "Edited 1-Aug-2025 11:43 by rmk") + [LAMBDA (CLOOK1 CLOOK2) (* ; "Edited 7-Sep-2025 10:59 by rmk") + (* ; "Edited 1-Aug-2025 11:43 by rmk") (* ; "Edited 21-Jul-2025 23:43 by rmk") (* ; "Edited 15-Apr-2025 16:45 by rmk") (* ; "Edited 2-Jan-2025 21:01 by rmk") @@ -587,10 +583,8 @@ (* ;; "Given two sets of CHARLOOKS, are they effectively the same?") (OR (EQ CLOOK1 CLOOK2) - (AND (OR (EQ (FGETCLOOKS CLOOK1 CLFONT) - (FGETCLOOKS CLOOK2 CLFONT)) - (EQUAL (FGETCLOOKS CLOOK1 CLNAME) - (FGETCLOOKS CLOOK2 CLNAME))) + (AND (EQ (FGETCLOOKS CLOOK1 CLFONT) + (FGETCLOOKS CLOOK2 CLFONT)) (EQ (FGETCLOOKS CLOOK1 CLPROTECTED) (FGETCLOOKS CLOOK2 CLPROTECTED)) (EQ (FGETCLOOKS CLOOK1 CLINVISIBLE) @@ -931,147 +925,81 @@ ) (DEFINEQ -(\TEDIT.TRANSLATE.ASCIICHARS - [LAMBDA (TSTREAM NOASCIIFONTS) (* ; "Edited 31-Jul-2025 09:56 by rmk") +(\TEDIT.MCCS.TRANSLATE + [LAMBDA (TSTREAM) (* ; "Edited 9-Sep-2025 21:48 by rmk") + (* ; "Edited 7-Sep-2025 22:42 by rmk") + (* ; "Edited 31-Jul-2025 09:56 by rmk") (* ; "Edited 28-Jul-2025 23:35 by rmk") - (* ; "Edited 24-Apr-2025 23:47 by rmk") - (* ; "Edited 30-Mar-2025 22:00 by rmk") - (* ; "Edited 28-Mar-2025 14:24 by rmk") - (* ; "Edited 2-Jan-2025 23:30 by rmk") - (* ; "Edited 30-Dec-2024 21:30 by rmk") - (* ; "Edited 22-Dec-2024 11:42 by rmk") - (* ; "Edited 20-Dec-2024 13:34 by rmk") - (* ; "Edited 23-Sep-2024 00:50 by rmk") - (* ; "Edited 17-Mar-2024 00:25 by rmk") - (* ; "Edited 1-Dec-2023 22:28 by rmk") - (* ; "Edited 27-Nov-2023 16:13 by rmk") (* ; "Edited 26-Nov-2023 11:19 by rmk") (* ; "Edited 14-Nov-2023 19:21 by rmk") (* ; "Edited 9-Nov-2023 23:56 by rmk") - (* ;; "Converts characters in Alto/Ascii font pieces to their MCCS character and font (more or less) equivalents. The affected characters are put in their own string pieces with their new CHARLOOKS. Asciifont pieces are completely replaced if NOASCIIFONTS, otherwise untranslated characters remain in their Asciifonts.") - - (* ;; "ASCIITONSTRANSLATIONS and the mapping arrays are from INTERPRESS.") - - (* ;; "\ASCII2MCCS is the default translation array, for Gacha, Timesroman. HIPPO, MATH ... have their own.") - - (DECLARE (GLOBALVARS ASCIITONSTRANSLATIONS \ASCII2MCCS)) - (LET - ((TEXTOBJ (TEXTOBJ TSTREAM))) - (CL:WHEN (thereis CL FAMILY in (FGETTOBJ TEXTOBJ TXTCHARLOOKSLIST) - unless [EQ 'CLASSIC (SETQ FAMILY (FONTPROP (GETCLOOKS CL CLFONT) - 'FAMILY] suchthat - - (* ;; "CLASSIC is in the list presumably to provide a coercion to MODERN for Interpress. We don't want to translate it.") - - (ASSOC FAMILY - ASCIITONSTRANSLATIONS) - ) - (for CHNO CLOOKS TRANS MAPARRAY NEWFONTNAME STRING FAT CLOOKSLIST FAMILY TARRAYLAST - from 1 by (PLEN PC) as PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) - eachtime (SETQ CLOOKS (PCHARLOOKS PC)) - (SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT) - 'FAMILY)) unless (OR (EQ OBJECT.PTYPE (PTYPE PC)) - (EQ FAMILY 'CLASSIC)) - when (SETQ TRANS (ASSOC FAMILY ASCIITONSTRANSLATIONS)) - do - (* ;; "PC needs some work.") - - (SETQ MAPARRAY (CADR TRANS)) - (SETQ NEWFONTNAME (CADDR TRANS)) - (CL:WHEN MAPARRAY (* ; - "Idiosyncratic fonts (MATH, CYRILLIC). ") - (SETQ MAPARRAY (GETATOMVAL MAPARRAY)) (* ; "Global value") - (CL:WHEN (AND NOASCIIFONTS (PREVPIECE PC)) - - (* ;; " Look backward for NEWFONTNAME, since that piece has already been coerced. The idea is to get Cyrillic to continue the previous looks (serif, san-serif)") - - (SETQ NEWFONTNAME (FONTPROP (GETCLOOKS (PCHARLOOKS (PREVPIECE PC)) - CLFONT) - 'FAMILY)))) - (if (OR MAPARRAY NOASCIIFONTS) - then - (* ;; "Translate all characters in idiosyncratic fonts, flush everything and change the looks even for Helvetica etc. if NO ALTOFONTS") - - (CL:UNLESS MAPARRAY (SETQ MAPARRAY \ASCII2MCCS)) - (SETQ TARRAYLAST (SUB1 (ARRAYSIZE MAPARRAY))) - - (* ;; "Create a string with the translated codes, then convert the existing piece to a string piece holding that string.") - - (SETQ STRING (ALLOCSTRING (PLEN PC))) - (for OFFSET OLDCODE NEWCODE from 1 to (PLEN PC) - do - (* ;; - "Out-of-range alone and zero newcodes alone (some arrays are not filled in).") - - (SETQ OLDCODE (\TEDIT.PIECE.NTHCHARCODE PC OFFSET)) - (RPLCHARCODE STRING OFFSET - (if [OR (IGREATERP OLDCODE TARRAYLAST) - (ZEROP (SETQ NEWCODE (ELT MAPARRAY OLDCODE] - then OLDCODE - else NEWCODE))) - (SETQ FAT (ffetch (STRINGP FATSTRINGP) of STRING)) - (FSETPC PC PTYPE (CL:IF FAT - FATSTRING.PTYPE - THINSTRING.PTYPE)) - (FSETPC PC PCONTENTS STRING) - (FSETPC PC PFPOS NIL) - (FSETPC PC PBINABLE (NOT FAT)) - (FSETPC PC PBYTESPERCHAR (CL:IF FAT - 2 - 1)) - (FSETPC PC PBYTELEN (CL:IF FAT - (UNFOLD (PLEN PC) - 2) - (PLEN PC))) - (FSETPC PC PCHARLOOKS (\TEDIT.TRANSLATE.ASCII.CHARLOOKS TEXTOBJ CLOOKS - NEWFONTNAME)) - else - (* ;; "Must be a text font (GACHA, TIMESROMAN, HELVETICA) \ASCIITONS is the translation array, mostly identities. ") - - (* ;; "Find the first change quickly, in piece coordinates. Then change whatever else needs it, slowly, in document coordinates. It would be more complicated to do the replacements in piece coordinates, because the pieces would get split on the fly. ") - - (for OFFSET OLDCODE NEWLOOKS from 1 to (PLEN PC) - eachtime (SETQ OLDCODE (\TEDIT.PIECE.NTHCHARCODE PC OFFSET)) - when (ILEQ OLDCODE 255) unless (EQ OLDCODE (ELT \ASCII2MCCS OLDCODE)) - do - (* ;; "First hit, scan/change the rest of PC") - - (SETQ NEWLOOKS (\TEDIT.TRANSLATE.ASCII.CHARLOOKS TEXTOBJ CLOOKS - NEWFONTNAME)) - (for I NEWCODE from (IPLUS CHNO (SUB1 OFFSET)) - to (SUB1 (IPLUS CHNO (PLEN PC))) eachtime (SETQ OLDCODE - (\TEDIT.NTHCHARCODE TSTREAM - I)) - when (ILEQ OLDCODE 255) unless (EQ OLDCODE (SETQ NEWCODE - (ELT \ASCII2MCCS OLDCODE)) - ) - do (\TEDIT.RPLCHARCODE TSTREAM I NEWCODE NEWLOOKS)) - (RETURN))) finally - - (* ;; "Here we change the caret looks. Perhaps this should be done only if NOASCIIFONTS. But there is a risk that Ascii fonts and characters would slip in by future editing. ") - - (CL:WHEN NOASCIIFONTS - (SETQ CLOOKS (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS)) - (SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT) - 'FAMILY)) - (SETQ CLOOKS (FGETTOBJ TEXTOBJ CARETLOOKS)) - (SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT) - 'FAMILY)) - (CL:WHEN (AND (NEQ FAMILY 'CLASSIC) - (SETQ TRANS (ASSOC FAMILY - ASCIITONSTRANSLATIONS - ))) - (FSETTOBJ TEXTOBJ CARETLOOKS ( - \TEDIT.TRANSLATE.ASCII.CHARLOOKS - TEXTOBJ CLOOKS - (CADDR TRANS))))) - (CL:WHEN CLOOKSLIST - - (* ;; - "Something happened, get rid of any lingering old looks") - - (\TEDIT.UNIQUIFY.ALL TEXTOBJ))))]) + (* ;; "Nothing to do if all non-MCCScharacters in TSTREAM have already been converted to their MCCS equivalents. Otherwise, the characters in each piece are converted by the MCCS conversion function of its font. We know that all characters outside of charset-0 are already MCCS, no need to work on those.") + + (* ;; "If the font charencoding is not MCCS (e.g. HIPPO), then the font itself must be changed (e.g. to Classic).") + + (* ;; "If every piece has a translation function, do the translations and return T. Otherwise return NIL. ") + + (* ;; " ") + + (LET ((TEXTOBJ (FTEXTOBJ TSTREAM))) + (CL:WHEN (for PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) unless (EQ OBJECT.PTYPE (PTYPE PC)) + always (fetch (FONTDESCRIPTOR FONTTOMCCSFN) of (FGETCLOOKS (PCHARLOOKS PC) + CLFONT))) + (for PC CLOOKS CLFONT TOMCCSFN CLOOKSLIST inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) + unless (EQ OBJECT.PTYPE (PTYPE PC)) when [SETQ TOMCCSFN + (fetch (FONTDESCRIPTOR FONTTOMCCSFN) + of (SETQ CLFONT (FGETCLOOKS + (SETQ CLOOKS + (PCHARLOOKS PC)) + CLFONT] + do [for OFFSET OLDCODE STRING FAT from 1 to (PLEN PC) eachtime (SETQ OLDCODE + ( + \TEDIT.PIECE.NTHCHARCODE + PC OFFSET)) + unless (EQ OLDCODE (APPLY* TOMCCSFN OLDCODE)) + do + (* ;; "This piece has recoded character. Start over to convert it to a string piece with necessary code conversions. (The logic to split the original piece at just the changes while still preserving the iteration would be very complicated).") + + (SETQ STRING (ALLOCSTRING (PLEN PC))) + [for OFFSET from 1 to (PLEN PC) do (RPLCHARCODE STRING OFFSET + (APPLY* TOMCCSFN ( + \TEDIT.PIECE.NTHCHARCODE + PC OFFSET] + (SETQ FAT (ffetch (STRINGP FATSTRINGP) of STRING)) + (FSETPC PC PTYPE (CL:IF FAT + FATSTRING.PTYPE + THINSTRING.PTYPE)) + (FSETPC PC PCONTENTS STRING) + (FSETPC PC PFPOS NIL) + (FSETPC PC PBINABLE (NOT FAT)) + (FSETPC PC PBYTESPERCHAR (CL:IF FAT + 2 + 1)) + (FSETPC PC PBYTELEN (CL:IF FAT + (UNFOLD (PLEN PC) + 2) + (PLEN PC))) + (CL:UNLESS (EQ 'MCCS (fetch (FONTDESCRIPTOR FONTCHARENCODING) of CLFONT)) + + (* ;; + "Can't stay with this font (SYMBOL), find the coercion that was used for its characters.") + + (FSETPC PC PCHARLOOKS (\TEDIT.MCCS.TRANSLATE.CHARLOOKS TEXTOBJ CLOOKS + CLFONT)))] + finally + + (* ;; "CLOOKSLIST maps any old charlooks to the new ones that we might have created for them, because of font coercion for non-MCCS fonts. The stream must know about the changes. ") + + (CL:WHEN CLOOKSLIST + + (* ;; "Discard orphan old looks and uniquify what's left.") + + (\TEDIT.UNIQUIFY.ALL TEXTOBJ)) + (FPUTMULTI (FGETTOBJ TEXTOBJ DOCPROPS) + 'CHARENCODING + 'MCCS)) + T)]) (\TEDIT.CONVERT.TO.FORMATTED [LAMBDA (TSTREAM START END) (* ; "Edited 20-Apr-2025 13:25 by rmk") @@ -1156,21 +1084,19 @@ ) (DECLARE%: EVAL@COMPILE -(PUTPROPS \TEDIT.TRANSLATE.ASCII.CHARLOOKS MACRO - [OPENLAMBDA (TEXTOBJ CLOOKS NEWFONTNAME) +(PUTPROPS \TEDIT.MCCS.TRANSLATE.CHARLOOKS MACRO + [OPENLAMBDA (TEXTOBJ CLOOKS CLFONT) (* ;; "Macro because CLOOKSLIST is set. The alist avoids creating and then uniquifying each time we want to make the same translation.") - (CDR (OR (ASSOC CLOOKS CLOOKSLIST) - (CAR (PUSH CLOOKSLIST - (CONS CLOOKS - (\TEDIT.UNIQUIFY.CHARLOOKS - (LET ((NEWFONT (\TEDIT.FONTCOPY (GETCLOOKS CLOOKS CLFONT) - (LIST 'FAMILY NEWFONTNAME) - TEXTOBJ))) - (create CHARLOOKS using CLOOKS CLFONT _ NEWFONT CLNAME _ - (FONTUNPARSE NEWFONT))) - TEXTOBJ]) + (OR (FGETMULTI CLOOKSLIST CLOOKS) + (FPUTMULTI CLOOKSLIST CLOOKS (\TEDIT.UNIQUIFY.CHARLOOKS + [create CHARLOOKS + using CLOOKS CLFONT _ + (CAR (\COERCECHARSET (FONTPROP CLFONT + 'SPEC) + 0 NIL 'CHARCOERCIONS] + TEXTOBJ]) ) (DEFINEQ @@ -1448,7 +1374,7 @@ (RETURN (\TEDIT.COPYSEL (FGETTOBJ TEXTOBJ SEL])]) ) -(RPAQ? TEDIT.FONTCLASSES '(DISPLAY PDF POSTSCRIPT INTERPRESS PRESS)) +(RPAQ? TEDIT.FONTCLASSES '(DISPLAY PDF POSTSCRIPT INTERPRESS)) (DEFINEQ (\TEDIT.CHANGE.CHARLOOKS @@ -1577,7 +1503,8 @@ (RETURN DIRTY]) (\TEDIT.CHANGE.CHARLOOKS.NEW - [LAMBDA (NEWLOOKS OLDCHARLOOKS TEXTOBJ) (* ; "Edited 15-Apr-2025 16:47 by rmk") + [LAMBDA (NEWLOOKS OLDCHARLOOKS TEXTOBJ) (* ; "Edited 7-Sep-2025 11:03 by rmk") + (* ; "Edited 15-Apr-2025 16:47 by rmk") (* ; "Edited 2-Jan-2025 15:49 by rmk") (* ; "Edited 1-Jan-2025 09:04 by rmk") (* ; "Edited 2-Dec-2024 23:52 by rmk") @@ -1588,7 +1515,7 @@ (* ;; "Make a new CHARLOOKS reflecting the properties in NEWLOOKS, with defaults taken from OLDCHARLOOKS, if given, or the DEFAULTCHARLOOKS of TEXTOBJ, if given,;") - (* ;; "OLDCHARLOOKS is also used as the base for increments.") + (* ;; "OLDCHARLOOKS is also used as the base for increments.") (CL:UNLESS OLDCHARLOOKS (SETQ OLDCHARLOOKS (OR (AND TEXTOBJ (GETTOBJ TEXTOBJ DEFAULTCHARLOOKS)) @@ -1600,8 +1527,7 @@ (CL:UNLESS (SETQ NEWFONT (\TEDIT.CHARLOOKS.CHANGE.FONT NEWLOOKS OLDCHARLOOKS TEXTOBJ)) (* ; "Bad font specification") (RETURN NIL)) - (SETQ NEWCHARLOOKS (create CHARLOOKS using OLDCHARLOOKS CLFONT _ NEWFONT CLNAME _ - (FONTUNPARSE NEWFONT))) + (SETQ NEWCHARLOOKS (create CHARLOOKS using OLDCHARLOOKS CLFONT _ NEWFONT)) do (SETQ VAL (CADR NLTAIL)) (CL:WHEN (MEMB VAL '(NEUTRAL OFF)) (* ; "Off and NEUTRAL both turn off") (SETQ VAL NIL)) @@ -2533,26 +2459,26 @@ (ADDTOVAR LAMA ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (22579 24521 (\TEDIT.CHARLOOKS.DEFPRINT 22589 . 23725) (\TEDIT.PARALOOKS.DEFPRINT 23727 - . 24519)) (24625 25011 (\TEDIT.CREATE.FACE.MENU 24635 . 24807) (\TEDIT.CREATE.SIZE.MENU 24809 . 25009 -)) (26015 27904 (\TEDIT.CHARLOOKS.FEATURE.CHECK 26025 . 27902)) (28176 53365 ( -\TEDIT.CHARLOOKS.FROM.FONT 28186 . 30399) (\TEDIT.EQCLOOKS 30401 . 33435) (\TEDIT.SAMECLOOKS 33437 . -36608) (TEDIT.CARETLOOKS 36610 . 38156) (TEDIT.COPY.LOOKS 38158 . 41441) ( -\TEDIT.UNPARSE.CHARLOOKS.LIST 41443 . 44937) (\TEDIT.MODIFYLOOKS 44939 . 47099) (TEDIT.NEW.FONT 47101 - . 47548) (\TEDIT.CARETLOOKS.VERIFY 47550 . 48387) (\TEDIT.CARETPIECE 48389 . 48694) ( -\TEDIT.GET.INSERT.CHARLOOKS 48696 . 51743) (\TEDIT.GET.TERMSA.WIDTHS 51745 . 52161) ( -\TEDIT.PARSE.CHARLOOKS.LIST 52163 . 53363)) (53366 70096 (\TEDIT.TRANSLATE.ASCIICHARS 53376 . 63832) ( -\TEDIT.CONVERT.TO.FORMATTED 63834 . 70094)) (71108 78445 (\TEDIT.UNIQUIFY.CHARLOOKS 71118 . 72778) ( -\TEDIT.UNIQUIFY.PARALOOKS 72780 . 74047) (\TEDIT.UNIQUIFY.ALL 74049 . 76137) ( -\TEDIT.FLUSH.UNUSED.LOOKS 76139 . 78443)) (78478 90436 (TEDIT.LOOKS 78488 . 80877) (TEDIT.GET.LOOKS -80879 . 83214) (TEDIT.SUBLOOKS 83216 . 87596) (TEDIT.FINDLOOKS 87598 . 90434)) (90511 120140 ( -\TEDIT.CHANGE.CHARLOOKS 90521 . 99299) (\TEDIT.CHANGE.CHARLOOKS.NEW 99301 . 103095) ( -\TEDIT.CHARLOOKS.CHANGE.FONT 103097 . 111404) (\TEDIT.FONT.NEXTSIZE 111406 . 113027) (\TEDIT.LOOKS -113029 . 116358) (\TEDIT.FONTCOPY 116360 . 117861) (\TEDIT.COERCE.FONTCLASS 117863 . 119014) ( -\TEDIT.FONTCLASS.TO.FONT 119016 . 120138)) (120183 151831 (\TEDIT.EQFMTSPEC 120193 . 123408) ( -TEDIT.GET.PARALOOKS 123410 . 127457) (\TEDIT.PARSE.PARALOOKS.LIST 127459 . 135492) (TEDIT.PARALOOKS -135494 . 136534) (\TEDIT.CHANGE.PARALOOKS 136536 . 143504) (\TEDIT.CHANGE.PARALOOKS.NEW 143506 . -147489) (TEDIT.COPY.PARALOOKS 147491 . 150165) (\TEDIT.PARABOUNDS 150167 . 151829)) (151891 159607 ( -TEDIT.SUBPARALOOKS 151901 . 156003) (SAMEPARALOOKS 156005 . 159605)) (159608 160295 ( -\TEDIT.MARK.REVISION 159618 . 160293))))) + (FILEMAP (NIL (22140 24082 (\TEDIT.CHARLOOKS.DEFPRINT 22150 . 23286) (\TEDIT.PARALOOKS.DEFPRINT 23288 + . 24080)) (24186 24572 (\TEDIT.CREATE.FACE.MENU 24196 . 24368) (\TEDIT.CREATE.SIZE.MENU 24370 . 24570 +)) (25576 27465 (\TEDIT.CHARLOOKS.FEATURE.CHECK 25586 . 27463)) (27737 52994 ( +\TEDIT.CHARLOOKS.FROM.FONT 27747 . 30031) (\TEDIT.EQCLOOKS 30033 . 33064) (\TEDIT.SAMECLOOKS 33066 . +36237) (TEDIT.CARETLOOKS 36239 . 37785) (TEDIT.COPY.LOOKS 37787 . 41070) ( +\TEDIT.UNPARSE.CHARLOOKS.LIST 41072 . 44566) (\TEDIT.MODIFYLOOKS 44568 . 46728) (TEDIT.NEW.FONT 46730 + . 47177) (\TEDIT.CARETLOOKS.VERIFY 47179 . 48016) (\TEDIT.CARETPIECE 48018 . 48323) ( +\TEDIT.GET.INSERT.CHARLOOKS 48325 . 51372) (\TEDIT.GET.TERMSA.WIDTHS 51374 . 51790) ( +\TEDIT.PARSE.CHARLOOKS.LIST 51792 . 52992)) (52995 64710 (\TEDIT.MCCS.TRANSLATE 53005 . 58446) ( +\TEDIT.CONVERT.TO.FORMATTED 58448 . 64708)) (65590 72927 (\TEDIT.UNIQUIFY.CHARLOOKS 65600 . 67260) ( +\TEDIT.UNIQUIFY.PARALOOKS 67262 . 68529) (\TEDIT.UNIQUIFY.ALL 68531 . 70619) ( +\TEDIT.FLUSH.UNUSED.LOOKS 70621 . 72925)) (72960 84918 (TEDIT.LOOKS 72970 . 75359) (TEDIT.GET.LOOKS +75361 . 77696) (TEDIT.SUBLOOKS 77698 . 82078) (TEDIT.FINDLOOKS 82080 . 84916)) (84987 114637 ( +\TEDIT.CHANGE.CHARLOOKS 84997 . 93775) (\TEDIT.CHANGE.CHARLOOKS.NEW 93777 . 97592) ( +\TEDIT.CHARLOOKS.CHANGE.FONT 97594 . 105901) (\TEDIT.FONT.NEXTSIZE 105903 . 107524) (\TEDIT.LOOKS +107526 . 110855) (\TEDIT.FONTCOPY 110857 . 112358) (\TEDIT.COERCE.FONTCLASS 112360 . 113511) ( +\TEDIT.FONTCLASS.TO.FONT 113513 . 114635)) (114680 146328 (\TEDIT.EQFMTSPEC 114690 . 117905) ( +TEDIT.GET.PARALOOKS 117907 . 121954) (\TEDIT.PARSE.PARALOOKS.LIST 121956 . 129989) (TEDIT.PARALOOKS +129991 . 131031) (\TEDIT.CHANGE.PARALOOKS 131033 . 138001) (\TEDIT.CHANGE.PARALOOKS.NEW 138003 . +141986) (TEDIT.COPY.PARALOOKS 141988 . 144662) (\TEDIT.PARABOUNDS 144664 . 146326)) (146388 154104 ( +TEDIT.SUBPARALOOKS 146398 . 150500) (SAMEPARALOOKS 150502 . 154102)) (154105 154792 ( +\TEDIT.MARK.REVISION 154115 . 154790))))) STOP diff --git a/library/tedit/TEDIT-LOOKS.LCOM b/library/tedit/TEDIT-LOOKS.LCOM index 2eba0287fc4d07b2c789d0562516a4cb98b3a861..ec3337d875683352ada70dba82fd629e18647876 100644 GIT binary patch delta 2245 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.5>working-medley>library>tedit>TEDIT-MENU.;491 179623 +(FILECREATED "10-Sep-2025 17:08:43" {WMEDLEY}TEDIT>TEDIT-MENU.;492 178438 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.SHOW.PARALOOKS \TEDIT.SHOW.CHARLOOKS) + :CHANGES-TO (VARS TEDIT-MENUCOMS) - :PREVIOUS-DATE "13-Jul-2025 22:35:15" {WMEDLEY}TEDIT>TEDIT-MENU.;488) + :PREVIOUS-DATE "28-Jul-2025 23:26:01" {WMEDLEY}TEDIT>TEDIT-MENU.;491) (PRETTYCOMPRINT TEDIT-MENUCOMS) @@ -16,17 +15,7 @@ [ (* ;; "TEdit-specific menus and support") - [DECLARE%: DOEVAL@COMPILE DONTCOPY (RECORDS MARGINBAR) - (EXPORT (CONSTANTS (PTSPERPICA 12) - (PTSPERINCH 72) - (PICASPERINCH 6) - (MICASPERINCH 2540) - (PTSPERCM (FQUOTIENT PTSPERINCH 2.54)) - (PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) - (MICASPERPOINT (FQUOTIENT MICASPERINCH PTSPERINCH] - - (* ;; "") - + (DECLARE%: DOEVAL@COMPILE DONTCOPY (RECORDS MARGINBAR)) (* ; "Middle button in title") [COMS (* ; "Menu interfacing") (FNS TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENUFN TEDIT.REMOVE.MENUITEM \TEDIT.CREATEMENU @@ -111,44 +100,10 @@ (EQ (IMAGEOBJPROP DATUM 'DISPLAYFN) 'MB.MARGINBAR.DISPLAYFN]) ) - -(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE - -(RPAQQ PTSPERPICA 12) - -(RPAQQ PTSPERINCH 72) - -(RPAQQ PICASPERINCH 6) - -(RPAQQ MICASPERINCH 2540) - -(RPAQ PTSPERCM (FQUOTIENT PTSPERINCH 2.54)) - -(RPAQ PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) - -(RPAQ MICASPERPOINT (FQUOTIENT MICASPERINCH PTSPERINCH)) - - -(CONSTANTS (PTSPERPICA 12) - (PTSPERINCH 72) - (PICASPERINCH 6) - (MICASPERINCH 2540) - (PTSPERCM (FQUOTIENT PTSPERINCH 2.54)) - (PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) - (MICASPERPOINT (FQUOTIENT MICASPERINCH PTSPERINCH))) -) - -(* "END EXPORTED DEFINITIONS") - ) -(* ;; "") - - - - (* ; "Middle button in title") @@ -2912,32 +2867,32 @@ (ADDTOVAR LAMA ) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (6087 17725 (TEDIT.ADD.MENUITEM 6097 . 8214) (TEDIT.DEFAULT.MENUFN 8216 . 14937) ( -TEDIT.REMOVE.MENUITEM 14939 . 15936) (\TEDIT.CREATEMENU 15938 . 16503) (\TEDIT.MENU.WHENHELDFN 16505 - . 17410) (\TEDIT.MENU.WHENSELECTEDFN 17412 . 17723)) (18539 65182 (DRAWMARGINSCALE 18549 . 22008) ( -MARGINBAR 22010 . 29135) (MARGINBAR.CREATE 29137 . 32556) (MB.MARGINBAR.BUTTONEVENTINFN 32558 . 40360) - (MB.MARGINBAR.SELFN.TABS 40362 . 45602) (MB.MARGINBAR.SELFN.TABS.KIND 45604 . 46539) ( -MARGINBAR.GETSTATEFN 46541 . 50528) (MARGINBAR.SETSTATEFN 50530 . 50740) (MARGINBAR.NEUTRALIZE 50742 - . 51155) (MARGINBAR.LOOKS 51157 . 54263) (MB.MARGINBAR.SIZEFN 54265 . 54868) (MB.MARGINBAR.DISPLAYFN -54870 . 57931) (MDESCALE 57933 . 58473) (MSCALE 58475 . 58805) (MB.MARGINBAR.SHOWTAB 58807 . 61130) ( -MB.MARGINBAR.TABTRACK 61132 . 62517) (MARGINBAR.INIT 62519 . 63912) (\TEDIT.PARALOOKS.TO.MARBAR 63914 - . 65180)) (66007 73289 (TEDIT.MENUSTREAM 66017 . 67017) (TEDITMENUP 67019 . 67988) (\TEDIT.MENU.START - 67990 . 72337) (\TEDIT.MENU.OPEN? 72339 . 72713) (\TEDIT.MENU.BUTTONEVENTFN 72715 . 73287)) (73608 -81530 (\TEDIT.MENU.CREATE 73618 . 75429) (\TEDIT.MENU.PARSE 75431 . 79120) (\TEDIT.MENU.NEUTRALIZE -79122 . 81193) (\TEDITMENU.RECORD.UNFORMATTED 81195 . 81528)) (81596 101377 ( -\TEDIT.EXPANDEDMENU.CREATE 81606 . 87073) (\TEDIT.EXPANDEDMENU.START 87075 . 88699) ( -\TEDIT.EXPANDEDMENU.FN 88701 . 91956) (\TEDIT.EXPANDEDMENU.ACTIONFN 91958 . 101375)) (101439 117496 ( -\TEDIT.PARAMENU.CREATE 101449 . 107843) (\TEDIT.PARAMENU.START 107845 . 108970) ( -\TEDIT.APPLY.PARALOOKS 108972 . 110024) (\TEDIT.SHOW.PARALOOKS 110026 . 112743) ( -\TEDIT.PARAMENU.FILLIN 112745 . 117494)) (117701 144543 (\TEDIT.CHARMENU.CREATE 117711 . 120315) ( -\TEDIT.CHARMENU.START 120317 . 121607) (\TEDIT.CHARMENU.SPEC 121609 . 126292) (\TEDIT.CHARMENU.PARSE -126294 . 129462) (\TEDIT.CHARMENU.FILLIN 129464 . 134094) (\TEDIT.SHOW.CHARLOOKS 134096 . 137641) ( -\TEDIT.APPLY.CHARLOOKS 137643 . 138804) (\TEDIT.OFFSETTYPE.STATEFN 138806 . 140769) ( -\TEDIT.OTHER.STATECHANGEFN 140771 . 142416) (\TEDIT.OTHER.SELECTFN 142418 . 144541)) (144605 173663 ( -\TEDIT.PAGEMENU.CREATE 144615 . 153127) (\TEDIT.PAGEMENU.START 153129 . 153480) (\TEDIT.SHOW.PAGELOOKS - 153482 . 155368) (\TEDIT.PAGEMENU.FILLIN 155370 . 156920) (\TEDIT.PAGEREGION.UNPARSE 156922 . 166321) - (\TEDIT.APPLY.PAGELOOKS 166323 . 168250) (\TEDIT.CHANGE.PAGELOOKS 168252 . 172819) ( -\TEDIT.PAGEMENU.CHARLOOKS.STATEFN 172821 . 173661)) (173664 179467 (\TEDIT.PAGEMENU.CREATE.HEADINGS -173674 . 176486) (\TEDIT.PAGEMENU.HEADINGS.SETSTATEFN 176488 . 177913) ( -\TEDIT.PAGEMENU.HEADINGS.STATEFN 177915 . 179465))))) + (FILEMAP (NIL (4902 16540 (TEDIT.ADD.MENUITEM 4912 . 7029) (TEDIT.DEFAULT.MENUFN 7031 . 13752) ( +TEDIT.REMOVE.MENUITEM 13754 . 14751) (\TEDIT.CREATEMENU 14753 . 15318) (\TEDIT.MENU.WHENHELDFN 15320 + . 16225) (\TEDIT.MENU.WHENSELECTEDFN 16227 . 16538)) (17354 63997 (DRAWMARGINSCALE 17364 . 20823) ( +MARGINBAR 20825 . 27950) (MARGINBAR.CREATE 27952 . 31371) (MB.MARGINBAR.BUTTONEVENTINFN 31373 . 39175) + (MB.MARGINBAR.SELFN.TABS 39177 . 44417) (MB.MARGINBAR.SELFN.TABS.KIND 44419 . 45354) ( +MARGINBAR.GETSTATEFN 45356 . 49343) (MARGINBAR.SETSTATEFN 49345 . 49555) (MARGINBAR.NEUTRALIZE 49557 + . 49970) (MARGINBAR.LOOKS 49972 . 53078) (MB.MARGINBAR.SIZEFN 53080 . 53683) (MB.MARGINBAR.DISPLAYFN +53685 . 56746) (MDESCALE 56748 . 57288) (MSCALE 57290 . 57620) (MB.MARGINBAR.SHOWTAB 57622 . 59945) ( +MB.MARGINBAR.TABTRACK 59947 . 61332) (MARGINBAR.INIT 61334 . 62727) (\TEDIT.PARALOOKS.TO.MARBAR 62729 + . 63995)) (64822 72104 (TEDIT.MENUSTREAM 64832 . 65832) (TEDITMENUP 65834 . 66803) (\TEDIT.MENU.START + 66805 . 71152) (\TEDIT.MENU.OPEN? 71154 . 71528) (\TEDIT.MENU.BUTTONEVENTFN 71530 . 72102)) (72423 +80345 (\TEDIT.MENU.CREATE 72433 . 74244) (\TEDIT.MENU.PARSE 74246 . 77935) (\TEDIT.MENU.NEUTRALIZE +77937 . 80008) (\TEDITMENU.RECORD.UNFORMATTED 80010 . 80343)) (80411 100192 ( +\TEDIT.EXPANDEDMENU.CREATE 80421 . 85888) (\TEDIT.EXPANDEDMENU.START 85890 . 87514) ( +\TEDIT.EXPANDEDMENU.FN 87516 . 90771) (\TEDIT.EXPANDEDMENU.ACTIONFN 90773 . 100190)) (100254 116311 ( +\TEDIT.PARAMENU.CREATE 100264 . 106658) (\TEDIT.PARAMENU.START 106660 . 107785) ( +\TEDIT.APPLY.PARALOOKS 107787 . 108839) (\TEDIT.SHOW.PARALOOKS 108841 . 111558) ( +\TEDIT.PARAMENU.FILLIN 111560 . 116309)) (116516 143358 (\TEDIT.CHARMENU.CREATE 116526 . 119130) ( +\TEDIT.CHARMENU.START 119132 . 120422) (\TEDIT.CHARMENU.SPEC 120424 . 125107) (\TEDIT.CHARMENU.PARSE +125109 . 128277) (\TEDIT.CHARMENU.FILLIN 128279 . 132909) (\TEDIT.SHOW.CHARLOOKS 132911 . 136456) ( +\TEDIT.APPLY.CHARLOOKS 136458 . 137619) (\TEDIT.OFFSETTYPE.STATEFN 137621 . 139584) ( +\TEDIT.OTHER.STATECHANGEFN 139586 . 141231) (\TEDIT.OTHER.SELECTFN 141233 . 143356)) (143420 172478 ( +\TEDIT.PAGEMENU.CREATE 143430 . 151942) (\TEDIT.PAGEMENU.START 151944 . 152295) (\TEDIT.SHOW.PAGELOOKS + 152297 . 154183) (\TEDIT.PAGEMENU.FILLIN 154185 . 155735) (\TEDIT.PAGEREGION.UNPARSE 155737 . 165136) + (\TEDIT.APPLY.PAGELOOKS 165138 . 167065) (\TEDIT.CHANGE.PAGELOOKS 167067 . 171634) ( +\TEDIT.PAGEMENU.CHARLOOKS.STATEFN 171636 . 172476)) (172479 178282 (\TEDIT.PAGEMENU.CREATE.HEADINGS +172489 . 175301) (\TEDIT.PAGEMENU.HEADINGS.SETSTATEFN 175303 . 176728) ( +\TEDIT.PAGEMENU.HEADINGS.STATEFN 176730 . 178280))))) STOP diff --git a/library/tedit/TEDIT-MENU.LCOM b/library/tedit/TEDIT-MENU.LCOM index d7a85ffb1281e030cec83ad3b156b49c87d0771a..80237952a0d103483219113581ab5733a2c9bb61 100644 GIT binary patch delta 453 zcmZXOOG^S_6oye3kwLU5F)#5osW^etI9_rl61NZ(->JiC<1B;62fUsDJZmfq z`A|kc*okLdNq#*SNhJjmap?@7kEe2iD~kJ|qA@{QYtyps?y)xU2zNavy!5OZJ$&?n zz=}>x1u+PhBEs|_a?lc^fGx+i;FTusC0Yb{KVN+q?Tp=;tD-^sdeoPkC4qJ2_;u~H;li~mX delta 904 zcmb7CO=}ZT6s2~fQxH*0?N_`E4a^iX&AiE1CuJli6Em7jVrHTh1WB7gLenHntF=hU zTHLg~8-Ia97jEj-MM)+}-S`8YBy$9X;e{%CyvUV}t@ zw;oq~#7}}iB$M z(rP@f#^@rn>5rlR8PfdElpuzeLqr1E4S(Z4*qa-`$njK6zo{BNGYec&$JFW7UO1iy zIhR-OYT1I}OVB-m6{V5e5LpV!VvyeAV9$Fd5;^`nmOg0!r>^F*c@wyJRyWL;ZW_Sl zOe3e}b6PwGBH;(MrpHqdc5C|5>u{M6ZODug3<(DO!>M?NE_tVrH8oW?p|9-D5g{1h z8^gYy#9ul`)oDtO84$UwMm0y|2M?~nFE76L0k;UzD6niF0h=k8O1RRT8)I;_Igd}8 z3Po?59DZ`qYzy#P8}LDEhVqv_NO;r|Df-x&!S68-UUsg~>Y6i;`%9Df&{?F_b7ukH zI4cx=alCk;9iS-DCb-jHqUcrIkB3v!__aMvt8*P5rH(*Ru@l0V9WO=iI#FCZyoeLs kDV#Mtc)dG2$kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-OLDFILE.;38 73837 +(FILECREATED " 8-Sep-2025 22:10:10" {WMEDLEY}TEDIT>TEDIT-OLDFILE.;40 73888 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.GET.CHARLOOKS2 \TEDIT.GET.PCTB1 \TEDIT.GET.PCTB2 - \TEDIT.GET.SINGLE.CHARLOOKS2 \TEDIT.GET.CHARLOOKS0 \TEDIT.GET.CHARLOOKS1) + :CHANGES-TO (FNS \TEDIT.GET.PCTB2) - :PREVIOUS-DATE "28-Jul-2025 23:43:57" -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-OLDFILE.;34) + :PREVIOUS-DATE " 7-Sep-2025 11:07:57" {WMEDLEY}TEDIT>TEDIT-OLDFILE.;39) (PRETTYCOMPRINT TEDIT-OLDFILECOMS) @@ -49,7 +46,8 @@ (DEFINEQ (\TEDIT.GET.PCTB2 - [LAMBDA (TEXT TSTREAM PCCOUNT START END) (* ; "Edited 1-Aug-2025 14:55 by rmk") + [LAMBDA (TEXT TSTREAM PCCOUNT START END) (* ; "Edited 8-Sep-2025 22:08 by rmk") + (* ; "Edited 1-Aug-2025 14:55 by rmk") (* ; "Edited 28-Jul-2025 23:39 by rmk") (* ; "Edited 8-Feb-2025 20:21 by rmk") (* ; "Edited 21-Oct-2024 00:33 by rmk") @@ -73,7 +71,7 @@ (* ;; "END = use this as eofptr of file. For use in reading files within files.") - (LET ((TEXTOBJ (FTEXTOBJ (TSTREAM))) + (LET ((TEXTOBJ (FTEXTOBJ TSTREAM)) PIECEINFOCH# (CURFILECH# (OR START 0)) LOOKSHASH PARAHASH) @@ -283,7 +281,8 @@ (for I from 1 to (\WIN FILE) collect (\TEDIT.GET.SINGLE.CHARLOOKS2 FILE]) (\TEDIT.GET.SINGLE.CHARLOOKS2 - [LAMBDA (FILE) (* ; "Edited 1-Aug-2025 12:13 by rmk") + [LAMBDA (FILE) (* ; "Edited 7-Sep-2025 11:03 by rmk") + (* ; "Edited 1-Aug-2025 12:13 by rmk") (* ; "Edited 7-Jan-2025 12:29 by rmk") (* ; "Edited 2-Jan-2025 11:09 by rmk") (* ; "Edited 31-Jul-2024 00:05 by rmk") @@ -327,7 +326,6 @@ (BOLD 'BOLD) (ITALIC 'ITALIC] (FSETCLOOKS LOOKS CLFONT FONT) - (FSETCLOOKS LOOKS CLNAME (FONTUNPARSE FONT)) (RETURN LOOKS]) (\TEDIT.PUT.SINGLE.PARALOOKS2 @@ -730,7 +728,8 @@ (\TEDIT.PARSE.PAGEFRAMES1 (pop PAGELIST]) (\TEDIT.GET.CHARLOOKS1 - [LAMBDA (PC FILE) (* ; "Edited 1-Aug-2025 12:18 by rmk") + [LAMBDA (PC FILE) (* ; "Edited 7-Sep-2025 11:03 by rmk") + (* ; "Edited 1-Aug-2025 12:18 by rmk") (* ; "Edited 28-Jul-2025 23:40 by rmk") (* ; "Edited 2-Jan-2025 11:09 by rmk") (* ; "Edited 31-Jul-2024 00:05 by rmk") @@ -788,7 +787,6 @@ (ITALIC 'ITALIC] else (* ; "Should never happen") (FONTCREATE DEFAULTFONT))) - (FSETCLOOKS LOOKS CLNAME (FONTUNPARSE FONT)) (FSETCLOOKS LOOKS CLFONT FONT]) (\TEDIT.GET.PARALOOKS1 @@ -956,7 +954,8 @@ (\TEDIT.INSERTPIECE PC NIL TEXTOBJ) finally (\TEDIT.UNIQUIFY.ALL TEXTOBJ]) (\TEDIT.GET.CHARLOOKS0 - [LAMBDA (PC FILE) (* ; "Edited 1-Aug-2025 12:17 by rmk") + [LAMBDA (PC FILE) (* ; "Edited 7-Sep-2025 11:03 by rmk") + (* ; "Edited 1-Aug-2025 12:17 by rmk") (* ; "Edited 28-Jul-2025 23:39 by rmk") (* ; "Edited 2-Jan-2025 11:09 by rmk") (* ; "Edited 31-Jul-2024 00:05 by rmk") @@ -1015,7 +1014,6 @@ else (* ; "Should never happen") (FONTCREATE DEFAULTFONT))) (FSETCLOOKS LOOKS CLFONT FONT) - (FSETCLOOKS LOOKS CLNAME (FONTUNPARSE FONT)) (RETURN LOOKS]) (\TEDIT.GET.OBJECT0 @@ -1102,14 +1100,14 @@ PARALOOKS]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1867 37890 (\TEDIT.GET.PCTB2 1877 . 12526) (\TEDIT.GET.PARALOOKS2 12528 . 13117) ( -\TEDIT.GET.CHARLOOKS2 13119 . 14676) (\TEDIT.PARSE.PAGEFRAMES2 14678 . 17417) ( -\TEDIT.GET.CHARLOOKS.LIST2 17419 . 17926) (\TEDIT.GET.SINGLE.CHARLOOKS2 17928 . 21234) ( -\TEDIT.PUT.SINGLE.PARALOOKS2 21236 . 25486) (\TEDIT.PUT.SINGLE.CHARLOOKS2 25488 . 29198) ( -\TEDIT.GET.PARALOOKS.LIST2 29200 . 29707) (\TEDIT.GET.SINGLE.PARALOOKS2 29709 . 34608) ( -\TEDIT.PUT.CHARLOOKS.LIST2 34610 . 36689) (\TEDIT.PUT.PARALOOKS.LIST2 36691 . 37888)) (37967 59193 ( -\TEDIT.GET.PCTB1 37977 . 44994) (\TEDIT.GET.PAGEFRAMES1 44996 . 45448) (\TEDIT.PARSE.PAGEFRAMES1 45450 - . 48103) (\TEDIT.GET.CHARLOOKS1 48105 . 52416) (\TEDIT.GET.PARALOOKS1 52418 . 57329) ( -TEDIT.GET.OBJECT1 57331 . 59191)) (59253 73814 (\TEDIT.GET.PCTB0 59263 . 63344) (\TEDIT.GET.CHARLOOKS0 - 63346 . 67732) (\TEDIT.GET.OBJECT0 67734 . 69809) (\TEDIT.GET.PARALOOKS0 69811 . 73812))))) + (FILEMAP (NIL (1649 37832 (\TEDIT.GET.PCTB2 1659 . 12415) (\TEDIT.GET.PARALOOKS2 12417 . 13006) ( +\TEDIT.GET.CHARLOOKS2 13008 . 14565) (\TEDIT.PARSE.PAGEFRAMES2 14567 . 17306) ( +\TEDIT.GET.CHARLOOKS.LIST2 17308 . 17815) (\TEDIT.GET.SINGLE.CHARLOOKS2 17817 . 21176) ( +\TEDIT.PUT.SINGLE.PARALOOKS2 21178 . 25428) (\TEDIT.PUT.SINGLE.CHARLOOKS2 25430 . 29140) ( +\TEDIT.GET.PARALOOKS.LIST2 29142 . 29649) (\TEDIT.GET.SINGLE.PARALOOKS2 29651 . 34550) ( +\TEDIT.PUT.CHARLOOKS.LIST2 34552 . 36631) (\TEDIT.PUT.PARALOOKS.LIST2 36633 . 37830)) (37909 59190 ( +\TEDIT.GET.PCTB1 37919 . 44936) (\TEDIT.GET.PAGEFRAMES1 44938 . 45390) (\TEDIT.PARSE.PAGEFRAMES1 45392 + . 48045) (\TEDIT.GET.CHARLOOKS1 48047 . 52413) (\TEDIT.GET.PARALOOKS1 52415 . 57326) ( +TEDIT.GET.OBJECT1 57328 . 59188)) (59250 73865 (\TEDIT.GET.PCTB0 59260 . 63341) (\TEDIT.GET.CHARLOOKS0 + 63343 . 67783) (\TEDIT.GET.OBJECT0 67785 . 69860) (\TEDIT.GET.PARALOOKS0 69862 . 73863))))) STOP diff --git a/library/tedit/tedit-exports.all b/library/tedit/tedit-exports.all index 51f7ba461..bf6bd5421 100644 --- a/library/tedit/tedit-exports.all +++ b/library/tedit/tedit-exports.all @@ -1,12 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 1-Aug-2025 14:59:31"  -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;239 53083 +(FILECREATED " 9-Sep-2025 21:49:59"  +{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;241 52904 :EDIT-BY rmk - :PREVIOUS-DATE "28-Jul-2025 23:52:50" -{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;238) + :PREVIOUS-DATE " 8-Sep-2025 23:06:31" {WMEDLEY}TEDIT>tedit-exports.all;240) (PRETTYCOMPRINT ((E (MAPC (MKLIST FROMFILES) (FUNCTION (LAMBDA (F) (MAPC (IMPORTFILE F FLG) (FUNCTION @@ -18,7 +17,7 @@ PRINT)))))))) (PUTPROPS FTEXTOBJ MACRO ((X) (TEXTOBJ! (CL:IF (type? TEXTOBJ X) X (GETTSTR X TEXTOBJ))))) (GLOBALVARS CHECK-TEDIT-ASSERTIONS) (RPAQ? CHECK-TEDIT-ASSERTIONS T) -(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE " 1-Aug-2025 14:50:15")) +(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE " 8-Sep-2025 22:10:20")) (RPAQQ \BTREEWORDSPERSLOT 4) (RPAQQ \BTREEMAXCOUNT 8) (CONSTANTS (\BTREEWORDSPERSLOT 4) (\BTREEMAXCOUNT 8)) @@ -209,8 +208,8 @@ ITEM collect (FIXR (FTIMES SCALE ITEM))) (FIXR (FTIMES SCALE ITEM))))) (PUTPROPS SCALEDOWN MACRO (OPENLAMBDA (SCALE ITEM) (* ; "List = region?") (CL:IF (LISTP ITEM) (for I in ITEM collect (FIXR (FQUOTIENT I SCALE))) (FIXR (FQUOTIENT ITEM SCALE))))) (GLOBALVARS TEDIT.DONT.BREAK.CHARS TEDIT.DONT.LAST.CHARS) -(ADDTOVAR CHARACTERNAMES (EM-DASH "357,045") (SOFT-HYPHEN "357,043") (NONBREAKING-HYPHEN "357,042") ( -NONBREAKING-SPACE "357,041")) +(ADDTOVAR CHARACTERNAMES (SOFT-HYPHEN "357,043") (NONBREAKING-HYPHEN "357,042") (NONBREAKING-SPACE +"357,041")) (PUTPROPS DIACRITICP MACRO (OPENLAMBDA (CHAR) (* ;; "An XCCS diacritic") (AND (SMALLP CHAR) (IGEQ CHAR 192) (ILEQ CHAR 207)))) (PUTPROPS \TEDIT.LINE.TALLP MACRO ((LINE HEIGHT) (OR (IGREATERP (FGETLD LINE LHEIGHT) 50) (IGREATERP ( @@ -261,7 +260,7 @@ NEXTAVAILABLECHARSLOT) of THISLINE))) (T $$STARTSLOT))) (SETQ $$CHARSLOTLIMIT (F ) by (PREVCHARSLOT I.V.) eachtime (SETQ CHAR (fetch (CHARSLOT CHAR) of I.V.)) (SETQ CHARW (fetch ( CHARSLOT CHARW) of I.V.)) (SETQ CHARCL (fetch (CHARSLOT CHARCL) of I.V.)) repeatuntil (EQ I.V. $$CHARSLOTLIMIT))))) T) -(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE "28-Jul-2025 23:23:33")) +(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE " 7-Aug-2025 12:51:00")) (DATATYPE PIECE ((* ; "The piece describes either a string or part of a file. , or a generalized OBJECT.") PCONTENTS (* ; "The background source of data for this piece (stream, string, block, object, depending on the PTYPE)." @@ -345,7 +344,7 @@ TXTAPPENDONLY FLAG) (* ; "T if we're holding off on screen updates until later. Used, e.g., by the menu-SHOW code so that you don't get piecemeal updates, but only one at the end of the SHOW." ) TXTRAWINCLUDESTREAM (* ; "NODIRCORE stream used to cache RAW includes (and maybe later, all includes?)") DOCPROPS (* ; -"Document properties that are stored with the document (not used yet)") TXTSTYLESHEET (* ; +"Document properties that are stored with the document. Not used before 9/2025") TXTSTYLESHEET (* ; "Style sheet local to this document. Not currently saved as part of the file.")) (ACCESSFNS TEXTOBJ ( (\DIRTY (ffetch (TEXTOBJ \XDIRTY) of DATUM) (PROGN (FSETTOBJ DATUM LASTARROWX NIL) (CL:UNLESS (EQ NEWVALUE (ffetch (TEXTOBJ \XDIRTY) of DATUM)) (\TEDIT.WINDOW.TITLE DATUM NEWVALUE) (freplace \XDIRTY @@ -441,7 +440,7 @@ UTF8.PTYPE UTF16BE.PTYPE UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE F BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (THIN.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE))) (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV) -(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE "29-Jul-2025 11:58:01")) +(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE " 9-Sep-2025 21:49:53")) (PUTPROPS \TEDIT.MOUSESTATE MACRO (BUTTON (* ;; "Test to see if only the specified mouse button is down. DOES NOT call GETMOUSESTATE, so the mouse-button info is the same as the last time it was called." ) (SELECTQ (CAR BUTTON) (LEFT (QUOTE (EQ LASTMOUSEBUTTONS 4))) (MIDDLE (QUOTE (EQ LASTMOUSEBUTTONS 1)) @@ -455,8 +454,8 @@ I in ARGS as J on ARGS when (NOT (STRINGP I)) collect (LIST (QUOTE OR) I (LIST ( \BIN STREAM)) BITSPERWORD))) (PUTPROPS \SMALLPOUT MACRO (OPENLAMBDA (STREAM W) (* ; "Signed smallp, unlike \WOUT") (\BOUT STREAM ( LOGAND 255 (LRSH W 8))) (\BOUT STREAM (LOGAND W 255)))) -(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE " 1-Aug-2025 14:53:19")) -(PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE " 1-Aug-2025 14:58:21")) +(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE " 9-Sep-2025 21:49:43")) +(PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE " 8-Sep-2025 22:10:10")) (DATATYPE CHARLOOKS ((* ;; "Describes the appearance (%"Looks%") of characters in a TEdit document.") (* ;; "NOTE: If fields change EQCLOOKS should change too.") CLFONT (* ; "The font descriptor for these characters") CLFONTUNPARSE (* ;; @@ -484,9 +483,7 @@ LOGAND 255 (LRSH W 8))) (\BOUT STREAM (LOGAND W 255)))) "Used for a mark-&-sweep of looks at PUT time -- T means this set of looks really IS in use in the document" ) (CLSELBEFORE FLAG) (* ; "T if TEDIT can put selection before this char (for menu fields).") CLCOLOR) CLOFFSET _ 0 CLCOLOR _ (QUOTE BLACK) (INIT (DEFPRINT (QUOTE CHARLOOKS) (FUNCTION -\TEDIT.CHARLOOKS.DEFPRINT))) (ASSOCRECORD CLPROPS (CLUSERINFO CLCHARENCODING)) (ACCESSFNS ((CLNAME ( -fetch (CHARLOOKS CLFONTUNPARSE) of DATUM) (replace (CHARLOOKS CLFONTUNPARSE) of DATUM with NEWVALUE))) -)) +\TEDIT.CHARLOOKS.DEFPRINT))) (ASSOCRECORD CLPROPS (CLUSERINFO CLCHARENCODING))) (DATATYPE PARALOOKS ((* ;; "Describe the paragraph formatting for a paragraph in a TEdit document.") 1STLEFTMAR (* ; "Left margin of the first line of the paragraph") LEFTMAR (* ; "Left margin of the rest of the lines in the paragraph") RIGHTMAR (* ; @@ -540,7 +537,7 @@ LINELEAD _ 0) (PUTPROPS FSETPLOOKS MACRO ((PLOOKS FIELD NEWVALUE) (freplace (PARALOOKS FIELD) of PLOOKS with NEWVALUE))) (PUTPROPS PARALOOKS! MACRO ((PL) (\DTEST PL (QUOTE PARALOOKS)))) -(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE " 1-Aug-2025 13:43:51")) +(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE " 9-Sep-2025 21:48:14")) (PUTPROP (QUOTE TEDIT-STYLES) (QUOTE IMPORTDATE) (IDATE "28-Jul-2025 23:25:43")) (DATATYPE TEDITCARET (TCNOWTIME (* Used to hold the current time, when checking to see if a transition is due) TCTHENTIME (* Time when the next transition is to take place) TCFORCEDDOWN (* TCFORCEDOWN = T @@ -603,7 +600,7 @@ OR (CL:IF (TYPENAMEP $$BODY (QUOTE TEXTOBJ)) (FGETTOBJ $$BODY PRIMARYPANE) $$BOD GETPANEPROP (PANEPROPS P) NEXTPANE))) (GO $$OUT))) by (OR (GETPANEPROP (PANEPROPS I.V.) PREVPANE) (GO $$OUT))))) (PUTPROPS ALLBUTTONSUP MACRO (NIL (ZEROP (LOGAND 7 LASTMOUSEBUTTONS)))) -(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE "26-Jul-2025 15:45:59")) +(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE "11-Aug-2025 21:22:37")) (PUTPROP (QUOTE TEDIT-BUTTONS) (QUOTE IMPORTDATE) (IDATE "30-Apr-2025 14:09:18")) (RPAQQ PTSPERPICA 12) (RPAQQ PTSPERINCH 72) @@ -622,7 +619,7 @@ UNDO 6) (CMD 7) (NEXT 8) (EXPAND 9) (CHARDELETE.FORWARD 10) (WORDDELETE.FORWARD 21) (WHITESPACE 22))) (CONSTANTS \TEDIT.TTCCODES) (PUTPROPS \TEDIT.TTC MACRO ((CLASS) (CONSTANT (CADR (ASSOC (QUOTE CLASS) \TEDIT.TTCCODES))))) -(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE "29-May-2025 16:20:30")) +(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE " 7-Aug-2025 15:00:51")) (PUTPROP (QUOTE TEDIT-HCPY) (QUOTE IMPORTDATE) (IDATE "21-Apr-2025 19:07:23")) (DATATYPE TEDITHISTORYEVENT ((* ;; "Describes one event on the TEdit edit history list.") THACTION (* ; "A keyword specifying what the event was") THPOINT (* ; "Was the selection to the left or right?") @@ -673,8 +670,8 @@ $$VALUES)) (PROG1 (CAR $$VALUES) (\,@ (FOR V IN (CAR ARGS) collect (COND (V (BQU $$VALUES)))) (T (BQUOTE (SETQ $$VALUES (CDR $$VALUES)))))))))))) (PUTPROPS TEDIT.VALUES MACRO (ARGS (BQUOTE (LIST (\,@ ARGS))))) (PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE " 5-Jun-2025 08:24:12")) -(PUTPROP (QUOTE TEDIT-ABBREV) (QUOTE IMPORTDATE) (IDATE "24-Apr-2025 23:45:12")) -(PUTPROP (QUOTE TEDIT-TFBRAVO) (QUOTE IMPORTDATE) (IDATE "28-Jul-2025 23:34:14")) +(PUTPROP (QUOTE TEDIT-ABBREV) (QUOTE IMPORTDATE) (IDATE " 6-Sep-2025 00:10:45")) +(PUTPROP (QUOTE TEDIT-TFBRAVO) (QUOTE IMPORTDATE) (IDATE " 7-Sep-2025 11:11:43")) (DECLARE%: DONTCOPY (FILEMAP (NIL))) STOP From 5cede0432838c7f7ef7c271423a0992fa144c07f Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Thu, 11 Sep 2025 23:53:49 -0700 Subject: [PATCH 13/40] More Tedit --- library/tedit/TEDIT-OLDFILE.LCOM | Bin 18016 -> 17598 bytes library/tedit/TEDIT-STREAM | 133 +++++++++++++++---------------- library/tedit/TEDIT-STREAM.LCOM | Bin 38035 -> 38207 bytes library/tedit/TEDIT-TFBRAVO | 49 ++++++------ library/tedit/TEDIT-TFBRAVO.LCOM | Bin 28413 -> 28368 bytes library/tedit/TEDIT.LCOM | Bin 33226 -> 33194 bytes 6 files changed, 90 insertions(+), 92 deletions(-) diff --git a/library/tedit/TEDIT-OLDFILE.LCOM b/library/tedit/TEDIT-OLDFILE.LCOM index 18bcf0b7deac7a631cddfdd2cc1b9b019302213d..c5e337dbd13175b1c378dfbfc6dc3432187683ad 100644 GIT binary patch delta 776 zcmaJ-O=}ZD7|w1I5`z}44Hd=mx}_zt?lQBxvtPzSOeXExH3^%oF%pp0<`AqVMh}WD z(VKz?agH85_!IUfsCe`0MUN_8{0klgCrz3Lgu*a9%=^sq@&0%re0VOryxzCuTB|Fo zNF|`E4o3V)kdbb6?sVJRtu5%>1qmM4uhODN8@svf_GWLR_h>nwMK>7Ua>Xl_T#qUj zb(Dpa1QU{&OIi+5CD`n>#+t2%-QN8L2buwWB_#XRLU37yHa9A*dmc>wR}@8pt&Imf z$p6B&gH$P-$_&g4KF#w?JnMw}L7~G6oD3!#fT>xQ#Xbv5^}SqKaH>AN=2q5ga*vk@XkcTo3cgUqE!U_YR9#x2VAy2; zIasA$6%50MX6Xj?D+7$!r({sZ*O%c%eW delta 1219 zcmcIiO-~b16z#N>KnL=^hvE{RrZQ$!*HY<>rqTloI$sp&=4qzg$ifxwzfOj~ag*Q`_FhV>$Kh46gs2q*xrzIG=W2s6%Pfx7+6-Y z-iHDqf*2l(su>3?h!8i7_$omd(wdrIG?xJL$R zwmBGqSu}~H4S5O~HL04b1$FKSctL>fKk&TlAS}Q}zes%b5J&Pj zi0LC%kbl>c1n7HUSuoWVliV@6Ij1N)HR1+D23yDT(;a4H*-O3bJRW=Ep8Jp;wqH3n zYOmw&tlt$DI0@2v-Yn${aige$<@SFa<1i$b;)bT{xgvDF`FAJWr&Cr#q&rU|E%*GO zNN(JfvxP)?K&a!nJw%O(>}93l=!TEtI@@B{Gdn0k1SG@_3cOPmsjCtrT~;_>I3M{5 D!|y-H diff --git a/library/tedit/TEDIT-STREAM b/library/tedit/TEDIT-STREAM index 3d4abb27e..94102138e 100644 --- a/library/tedit/TEDIT-STREAM +++ b/library/tedit/TEDIT-STREAM @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "29-Jul-2025 11:58:01" {WMEDLEY}TEDIT>TEDIT-STREAM.;912 190401 +(FILECREATED " 9-Sep-2025 22:08:09" {WMEDLEY}tedit>TEDIT-STREAM.;915 190872 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS) + :CHANGES-TO (FNS OPENTEXTSTREAM) + (RECORDS TEXTOBJ) - :PREVIOUS-DATE "28-Jul-2025 23:52:41" {WMEDLEY}TEDIT>TEDIT-STREAM.;911) + :PREVIOUS-DATE " 8-Sep-2025 22:10:32" {WMEDLEY}tedit>TEDIT-STREAM.;913) (PRETTYCOMPRINT TEDIT-STREAMCOMS) @@ -234,7 +235,7 @@ TXTRAWINCLUDESTREAM (* ;  "NODIRCORE stream used to cache RAW includes (and maybe later, all includes?)") DOCPROPS (* ; - "Document properties that are stored with the document (not used yet)") + "Document properties that are stored with the document. Not used before 9/2025") TXTSTYLESHEET (* ;  "Style sheet local to this document. Not currently saved as part of the file.") ) @@ -1232,6 +1233,8 @@ (OPENTEXTSTREAM [LAMBDA (TEXT WINDOW START/PROPS END PROPS) + (* ;; "Edited 9-Sep-2025 22:07 by rmk") + (* ;; "Edited 17-Feb-2025 08:57 by rmk") (* ;; "Edited 30-Jan-2025 11:15 by rmk") @@ -1244,32 +1247,14 @@ (* ;; "Edited 30-Jun-2024 16:17 by rmk") - (* ;; "Edited 25-Jun-2024 11:59 by rmk") - (* ;; "Edited 10-May-2024 22:42 by rmk") - (* ;; "Edited 6-May-2024 12:38 by rmk") - (* ;; "Edited 31-Mar-2024 11:43 by rmk") - (* ;; "Edited 17-Mar-2024 12:05 by rmk") - - (* ;; "Edited 15-Mar-2024 14:23 by rmk") - - (* ;; "Edited 10-Mar-2024 22:10 by rmk") - (* ;; "Edited 21-Jan-2024 10:31 by rmk") (* ;; "Edited 20-Dec-2023 10:47 by rmk") - (* ;; "Edited 11-Dec-2023 09:50 by rmk") - - (* ;; "Edited 26-Oct-2023 10:59 by rmk") - - (* ;; "Edited 23-Oct-2023 22:14 by rmk") - - (* ;; "Edited 21-Oct-2023 12:21 by rmk") - (* ;; "Edited 12-Oct-2023 23:44 by rmk") (* ;; "Edited 31-Jan-2022 17:25 by rmk: A string TEXT is converted here to a stream") @@ -1330,10 +1315,17 @@ else (\TEDIT.WINDOW.CREATE WINDOW TSTREAM PROPS))) else (SETQ TSTREAM (\TEDIT.CREATE.TEXTSTREAM PROPS)) (SETQ TEXTOBJ (FGETTSTR TSTREAM TEXTOBJ)) - (CL:WHEN TEXT (* ; + (if TEXT + then (* ;  "Verify/open the file before the window") - (SETQ TEXT (\TEDIT.OPENTEXTFILE TEXT PROPS)) - (FSETTOBJ TEXTOBJ TXTFILE TEXT)) + (SETQ TEXT (\TEDIT.OPENTEXTFILE TEXT PROPS)) + (FSETTOBJ TEXTOBJ TXTFILE TEXT) + else + (* ;; "An empty document starts in an MCCS environment") + + (FPUTMULTI (FGETTOBJ TEXTOBJ DOCPROPS) + 'CHARENCODING + 'MCCS)) (* ;; "If we swap the window before the pieces, the local promptwindow is availabe for messages and queries. Otherwise, those show up in the system prompt. But if we do it in the opposite order, we don't know how to estimate the width for the window region.") @@ -1441,7 +1433,8 @@ TSTREAM]) (\TEDIT.OPENTEXTSTREAM.PIECES - [LAMBDA (TEXT TSTREAM START END PROPS) (* ; "Edited 29-May-2025 19:02 by rmk") + [LAMBDA (TEXT TSTREAM START END PROPS) (* ; "Edited 8-Sep-2025 22:05 by rmk") + (* ; "Edited 29-May-2025 19:02 by rmk") (* ; "Edited 26-Apr-2025 12:59 by rmk") (* ; "Edited 24-Apr-2025 17:09 by rmk") (* ; "Edited 26-Sep-2024 22:27 by rmk") @@ -1460,11 +1453,10 @@ (* ;; "The intent is that the window's promptwindow is available for local messages during the fetch, and the RESETSAVE of PROMPTWINDOW would make even messages to the global promptwindow appear locally. An example is the mouseconfirm in READIMAGEOBJ that asks whether the imageobj code should be loaded from a given file. The problem is that the Tedit prompt window is usually just 1 line hight and doesn't automatically grow to show multiple lines, so key information may not be displayed. If the Tedit prompt grows (and it can be determined when/if it should later shrink), then this feature can be enabled.") (RESETLST - (LET* [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM))) + (LET* [(TEXTOBJ (FTEXTOBJ TSTREAM)) (PWINDOW (GETTOBJ TEXTOBJ PROMPTWINDOW)) (READONLY (GETTEXTPROP TEXTOBJ 'READONLY] (* ;  "READONLY only after creation, if specified") - (AND NIL (CL:WHEN PWINDOW (RESETSAVE PROMPTWINDOW PWINDOW))) (FSETTOBJ TEXTOBJ TXTREADONLY NIL) (FSETTOBJ TEXTOBJ TXTDON'TUPDATE T) (* ;  "Don't display or record histories until done") @@ -1666,7 +1658,8 @@ (SETTOBJ TEXTOBJ DEFAULTPARALOOKS PARALOOKS]) (\TEDIT.OPENTEXTFILE - [LAMBDA (TEXT PROPS) (* ; "Edited 21-Nov-2024 11:38 by rmk") + [LAMBDA (TEXT PROPS) (* ; "Edited 8-Sep-2025 21:52 by rmk") + (* ; "Edited 21-Nov-2024 11:38 by rmk") (* ; "Edited 20-Dec-2023 10:49 by rmk") (* ; "Edited 28-Oct-2023 10:33 by rmk") (* ; "Edited 26-Sep-2023 18:00 by rmk") @@ -1678,15 +1671,19 @@ (STRINGP TEXT) (CL:PATHNAMEP TEXT)) then (* ; "String detects empty extension") - [OPENSTREAM (OR (if (OR (CL:PATHNAMEP TEXT) - (FILENAMEFIELD.STRING TEXT 'EXTENSION)) - then (FINDFILE TEXT T) - elseif (FINDFILE-WITH-EXTENSIONS TEXT NIL *TEDIT-EXTENSIONS*)) - TEXT) - 'INPUT - 'OLD - `((TYPE TEXT) - (FORMAT ,(LISTGET PROPS 'FORMAT] + [RESETSAVE [SETQ TEXT (OPENSTREAM (OR (if (OR (CL:PATHNAMEP TEXT) + (FILENAMEFIELD.STRING TEXT + 'EXTENSION)) + then (FINDFILE TEXT T) + elseif (FINDFILE-WITH-EXTENSIONS TEXT NIL + *TEDIT-EXTENSIONS*)) + TEXT) + 'INPUT + 'OLD + `((TYPE TEXT) + (FORMAT ,(LISTGET PROPS 'FORMAT] + '(PROGN (AND RESETSTATE (CLOSEF? OLDVALUE] + TEXT elseif (\GETSTREAM TEXT 'INPUT T) else (* ;; "Don't know what it is") @@ -3123,34 +3120,34 @@ (ADDTOVAR LAMA TEXTPROP) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (36908 67724 (\TEDIT.TEXTBIN 36918 . 47668) (\TEDIT.TEXTPEEKBIN 47670 . 53220) ( -\TEDIT.TEXTBACKFILEPTR 53222 . 58895) (\TEDIT.TEXTBOUT 58897 . 63514) (\TEDIT.INSTALL.FILEBUFFER 63516 - . 67722)) (68622 72913 (\TEDIT.TEXTOUTCHARFN 68632 . 70188) (\TEDIT.TEXTINCCODEFN 70190 . 70929) ( -\TEDIT.TEXTBACKCCODEFN 70931 . 71523) (\TEDIT.TEXTFORMATBYTESTREAM 71525 . 72362) ( -\TEDIT.TEXTFORMATBYTESTRING 72364 . 72911)) (72960 84601 (OPENTEXTSTREAM 72970 . 79922) ( -COPYTEXTSTREAM 79924 . 83824) (TEDIT.STREAMCHANGEDP 83826 . 84128) (TXTFILE 84130 . 84599)) (84602 -114584 (\TEDIT.REOPENTEXTSTREAM 84612 . 85964) (\TEDIT.OPENTEXTSTREAM.PIECES 85966 . 90900) ( -\TEDIT.OPENTEXTSTREAM.PROPS 90902 . 92004) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 92006 . 97247) ( -\TEDIT.OPENTEXTSTREAM.WINDOW 97249 . 100040) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 100042 . 101981) ( -\TEDIT.OPENTEXTFILE 101983 . 103696) (\TEDIT.CREATE.TEXTSTREAM 103698 . 104845) (\TEDIT.REOPEN.STREAM -104847 . 107183) (\TEDIT.TEXTINIT 107185 . 114582)) (114622 115810 (\TEDIT.TTYBOUT 114632 . 115808)) ( -115928 135925 (\TEDIT.TEXTCLOSEF 115938 . 117262) (\TEDIT.TEXTDSPFONT 117264 . 118462) ( -\TEDIT.TEXTEOFP 118464 . 120219) (\TEDIT.TEXTGETEOFPTR 120221 . 120544) (\TEDIT.TEXTSETEOFPTR 120546 - . 121833) (\TEDIT.TEXTGETFILEPTR 121835 . 124670) (\TEDIT.TEXTSETFILEINFO 124672 . 125180) ( -\TEDIT.TEXTOPENF 125182 . 126113) (\TEDIT.TEXTSETEOF 126115 . 126731) (\TEDIT.TEXTSETFILEPTR 126733 . -128843) (\TEDIT.TEXTDSPXPOSITION 128845 . 129862) (\TEDIT.TEXTDSPYPOSITION 129864 . 130605) ( -\TEDIT.TEXTLEFTMARGIN 130607 . 131198) (\TEDIT.TEXTCOLOR 131200 . 131783) (\TEDIT.TEXTRIGHTMARGIN -131785 . 135074) (\TEDIT.TEXTDSPCHARWIDTH 135076 . 135380) (\TEDIT.TEXTDSPSTRINGWIDTH 135382 . 135688) - (\TEDIT.TEXTDSPLINEFEED 135690 . 135923)) (135963 148576 (\TEDIT.NTHCHARCODE 135973 . 137424) ( -\TEDIT.PIECE.NTHCHARCODE 137426 . 141336) (\TEDIT.RPLCHARCODE 141338 . 142796) ( -\TEDIT.PIECE.RPLCHARCODE 142798 . 148221) (\TEDIT.NTHCHARLOOKS 148223 . 148574)) (149623 170717 ( -\TEDIT.DELETE.SELPIECES 149633 . 153258) (\TEDIT.INSERTCH 153260 . 161299) (\TEDIT.INSERTCH.HISTORY -161301 . 164765) (\TEDIT.INSERTEOL 164767 . 166592) (\TEDIT.INSERTCH.INSERTION 166594 . 169431) ( -\TEDIT.INSERTCH.EXTEND 169433 . 170715)) (170718 172222 (\TEDIT.NEXTCHANGEABLE.CHNO 170728 . 171443) ( -\TEDIT.LASTCHANGEABLE.CHNO 171445 . 172220)) (172223 173927 (\SETUPGETCH 172233 . 173925)) (173985 -178443 (\TEDIT.INSTALL.PIECE 173995 . 178441)) (178481 187582 (TEXTPROP 178491 . 178838) (GETTEXTPROP -178840 . 179084) (PUTTEXTPROP 179086 . 179343) (GETTEXTPROPS 179345 . 179789) (PUTTEXTPROPS 179791 . -180695) (TEXTPROP.ADD 180697 . 180960) (\TEDIT.TEXTPROP 180962 . 187580)) (187583 189653 ( -\TEDIT.TEXTOBJ.PROPNAMES 187593 . 188545) (\TEDIT.TEXTOBJ.PROPFETCHFN 188547 . 189063) ( -\TEDIT.TEXTOBJ.PROPSTOREFN 189065 . 189651))))) + (FILEMAP (NIL (36924 67740 (\TEDIT.TEXTBIN 36934 . 47684) (\TEDIT.TEXTPEEKBIN 47686 . 53236) ( +\TEDIT.TEXTBACKFILEPTR 53238 . 58911) (\TEDIT.TEXTBOUT 58913 . 63530) (\TEDIT.INSTALL.FILEBUFFER 63532 + . 67738)) (68638 72929 (\TEDIT.TEXTOUTCHARFN 68648 . 70204) (\TEDIT.TEXTINCCODEFN 70206 . 70945) ( +\TEDIT.TEXTBACKCCODEFN 70947 . 71539) (\TEDIT.TEXTFORMATBYTESTREAM 71541 . 72378) ( +\TEDIT.TEXTFORMATBYTESTRING 72380 . 72927)) (72976 84540 (OPENTEXTSTREAM 72986 . 79861) ( +COPYTEXTSTREAM 79863 . 83763) (TEDIT.STREAMCHANGEDP 83765 . 84067) (TXTFILE 84069 . 84538)) (84541 +115055 (\TEDIT.REOPENTEXTSTREAM 84551 . 85903) (\TEDIT.OPENTEXTSTREAM.PIECES 85905 . 90833) ( +\TEDIT.OPENTEXTSTREAM.PROPS 90835 . 91937) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 91939 . 97180) ( +\TEDIT.OPENTEXTSTREAM.WINDOW 97182 . 99973) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 99975 . 101914) ( +\TEDIT.OPENTEXTFILE 101916 . 104167) (\TEDIT.CREATE.TEXTSTREAM 104169 . 105316) (\TEDIT.REOPEN.STREAM +105318 . 107654) (\TEDIT.TEXTINIT 107656 . 115053)) (115093 116281 (\TEDIT.TTYBOUT 115103 . 116279)) ( +116399 136396 (\TEDIT.TEXTCLOSEF 116409 . 117733) (\TEDIT.TEXTDSPFONT 117735 . 118933) ( +\TEDIT.TEXTEOFP 118935 . 120690) (\TEDIT.TEXTGETEOFPTR 120692 . 121015) (\TEDIT.TEXTSETEOFPTR 121017 + . 122304) (\TEDIT.TEXTGETFILEPTR 122306 . 125141) (\TEDIT.TEXTSETFILEINFO 125143 . 125651) ( +\TEDIT.TEXTOPENF 125653 . 126584) (\TEDIT.TEXTSETEOF 126586 . 127202) (\TEDIT.TEXTSETFILEPTR 127204 . +129314) (\TEDIT.TEXTDSPXPOSITION 129316 . 130333) (\TEDIT.TEXTDSPYPOSITION 130335 . 131076) ( +\TEDIT.TEXTLEFTMARGIN 131078 . 131669) (\TEDIT.TEXTCOLOR 131671 . 132254) (\TEDIT.TEXTRIGHTMARGIN +132256 . 135545) (\TEDIT.TEXTDSPCHARWIDTH 135547 . 135851) (\TEDIT.TEXTDSPSTRINGWIDTH 135853 . 136159) + (\TEDIT.TEXTDSPLINEFEED 136161 . 136394)) (136434 149047 (\TEDIT.NTHCHARCODE 136444 . 137895) ( +\TEDIT.PIECE.NTHCHARCODE 137897 . 141807) (\TEDIT.RPLCHARCODE 141809 . 143267) ( +\TEDIT.PIECE.RPLCHARCODE 143269 . 148692) (\TEDIT.NTHCHARLOOKS 148694 . 149045)) (150094 171188 ( +\TEDIT.DELETE.SELPIECES 150104 . 153729) (\TEDIT.INSERTCH 153731 . 161770) (\TEDIT.INSERTCH.HISTORY +161772 . 165236) (\TEDIT.INSERTEOL 165238 . 167063) (\TEDIT.INSERTCH.INSERTION 167065 . 169902) ( +\TEDIT.INSERTCH.EXTEND 169904 . 171186)) (171189 172693 (\TEDIT.NEXTCHANGEABLE.CHNO 171199 . 171914) ( +\TEDIT.LASTCHANGEABLE.CHNO 171916 . 172691)) (172694 174398 (\SETUPGETCH 172704 . 174396)) (174456 +178914 (\TEDIT.INSTALL.PIECE 174466 . 178912)) (178952 188053 (TEXTPROP 178962 . 179309) (GETTEXTPROP +179311 . 179555) (PUTTEXTPROP 179557 . 179814) (GETTEXTPROPS 179816 . 180260) (PUTTEXTPROPS 180262 . +181166) (TEXTPROP.ADD 181168 . 181431) (\TEDIT.TEXTPROP 181433 . 188051)) (188054 190124 ( +\TEDIT.TEXTOBJ.PROPNAMES 188064 . 189016) (\TEDIT.TEXTOBJ.PROPFETCHFN 189018 . 189534) ( +\TEDIT.TEXTOBJ.PROPSTOREFN 189536 . 190122))))) STOP diff --git a/library/tedit/TEDIT-STREAM.LCOM b/library/tedit/TEDIT-STREAM.LCOM index db86558028c990abff5be3e70c89b60c9bbca66b..c061e90d6edb4a919521a2aaa0018345e6c3b37f 100644 GIT binary patch delta 2252 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 K*gWCkaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-TFBRAVO.;185 97353 +(FILECREATED " 7-Sep-2025 11:11:43"  +{DSK}kaplan>Local>medley3.5>working-medley>library>tedit>TEDIT-TFBRAVO.;187 97463 :EDIT-BY rmk - :CHANGES-TO (FNS \TFBRAVO.INSERT.RUN \TFBRAVO.INIT.PARALOOKS) + :CHANGES-TO (FNS TEDITFROMBRAVO \TFBRAVO.FONT.FROM.CHARLOOKS) - :PREVIOUS-DATE "10-May-2025 12:53:24" {WMEDLEY}TEDIT>TEDIT-TFBRAVO.;183) + :PREVIOUS-DATE "28-Jul-2025 23:34:14" {WMEDLEY}TEDIT>TEDIT-TFBRAVO.;185) (PRETTYCOMPRINT TEDIT-TFBRAVOCOMS) @@ -186,7 +186,8 @@ (RETURN T]) (TEDITFROMBRAVO - [LAMBDA (BFILE TSTREAM PROPS USER.CM) (* ; "Edited 9-May-2025 09:18 by rmk") + [LAMBDA (BFILE TSTREAM PROPS USER.CM) (* ; "Edited 7-Sep-2025 11:09 by rmk") + (* ; "Edited 9-May-2025 09:18 by rmk") (* ; "Edited 28-Mar-2025 14:16 by rmk") (* ; "Edited 19-Feb-2025 12:13 by rmk") (* ; "Edited 8-Feb-2025 23:03 by rmk") @@ -248,7 +249,7 @@ (for CHARLOOKS in (GETTOBJ TEXTOBJ TXTCHARLOOKSLIST) do (SETCLOOKS CHARLOOKS CLUSERINFO NIL)) (\TEDIT.UNIQUIFY.ALL TEXTOBJ) (* ; "Lists are complete and unique") - (\TEDIT.TRANSLATE.ASCIICHARS TSTREAM) + (\TEDIT.MCCS.TRANSLATE TSTREAM) (TEDIT.SETSEL TEXTOBJ 1 0 'LEFT) (RETURN TSTREAM)))]) ) @@ -783,11 +784,12 @@ RUNLAST _ LAST]) (\TFBRAVO.FONT.FROM.CHARLOOKS - [LAMBDA (CHARLOOKS FAMILY SIZE BOLD ITALIC) (* ; "Edited 2-Jan-2025 23:43 by rmk") + [LAMBDA (CHARLOOKS FAMILY SIZE BOLD ITALIC) (* ; "Edited 7-Sep-2025 11:02 by rmk") + (* ; "Edited 2-Jan-2025 23:43 by rmk") (* ; "Edited 1-Aug-2023 13:21 by rmk") (* ; "Edited 31-May-91 15:26 by jds") - (* ;; "Takes a TEDIT CHARLOOKS with fields filled in (CLNAME = family name) and creates the font to fill it.") + (* ;; "Takes a TEDIT CHARLOOKS with fields filled in and creates the font to fill it.") [LET ((OLDFONT (GETCLOOKS CHARLOOKS CLFONT))) (CL:WHEN (EQ FAMILY 'OFF) @@ -798,14 +800,13 @@ [SETQ BOLD (EQ 'BOLD (FONTPROP OLDFONT 'WEIGHT]) (CL:WHEN (EQ ITALIC 'OFF) [SETQ ITALIC (EQ 'ITALIC (FONTPROP OLDFONT 'SLOPE]) - [SETCLOOKS CHARLOOKS CLFONT (FONTCREATE FAMILY SIZE (LIST (CL:IF BOLD + (SETCLOOKS CHARLOOKS CLFONT (FONTCREATE FAMILY SIZE (LIST (CL:IF BOLD 'BOLD 'MEDIUM) (CL:IF ITALIC 'ITALIC 'REGULAR) 'REGULAR] - (SETCLOOKS CHARLOOKS CLNAME (FONTUNPARSE (GETCLOOKS CHARLOOKS CLFONT] CHARLOOKS]) (\TFBRAVO.READNUM? @@ -1555,18 +1556,18 @@ (AND NIL (\TEDIT.NAMEDTAB.INIT)) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (7665 14656 (TEDIT.BRAVOFILE? 7675 . 9405) (TEDITFROMBRAVO 9407 . 14654)) (14767 31183 ( -\TFBRAVO.GET.USER.CM 14777 . 17957) (\TFBRAVO.USER.CM.LOOKS 17959 . 19452) (\TFBRAVO.READ.USER.CM -19454 . 24077) (\TFBRAVO.INIT.PARALOOKS 24079 . 26296) (\TFBRAVO.INIT.PAGEFORMAT 26298 . 27178) ( -\TFBRAVO.GETPARAMS 27180 . 30034) (\TFBRAVO.FIND.LAST.TRAILER 30036 . 31181)) (31225 51923 ( -\TFBRAVO.PARSE.PARA 31235 . 35162) (\TFBRAVO.READ.PARALOOKS 35164 . 42054) (\TFBRAVO.CREATE.RUNS 42056 - . 43444) (\TFBRAVO.READ.CHARLOOKS 43446 . 48475) (\TFBRAVO.FONT.FROM.CHARLOOKS 48477 . 50024) ( -\TFBRAVO.READNUM? 50026 . 51921)) (51960 63001 (\TFBRAVO.HANDLE.HEADING 51970 . 54697) ( -\TFBRAVO.PARSE.PROFILE.PARA 54699 . 62999)) (63044 85378 (\TFBRAVO.INSERT.PARA 63054 . 63895) ( -\TFBRAVO.INSERT.RUN 63897 . 67388) (\TFBRAVO.SPLIT.PARA 67390 . 74814) (\TFBRAVO.RUN.TABSPEC 74816 . -79683) (\TFBRAVO.INSTALL.PAGEFORMAT 79685 . 85376)) (85379 89522 (\TFBRAVO.ASSERT 85389 . 85919) ( -\TEST.CHARACTER.LOOKS 85921 . 87807) (\TEST.PARAGRAPH.LOOKS 87809 . 89520)) (90532 97187 ( -\TFBRAVO.ADD.NAMEDTAB 90542 . 94145) (\TFBRAVO.COPY.NAMEDTAB 94147 . 94595) (\TFBRAVO.PUT.NAMEDTAB -94597 . 94877) (\TFBRAVO.GET.NAMEDTAB 94879 . 95256) (\NAMEDTABNYET 95258 . 95418) (\NAMEDTABSIZE -95420 . 95935) (\NAMEDTABPREPRINT 95937 . 96135) (\TEDIT.NAMEDTAB.INIT 96137 . 97185))))) + (FILEMAP (NIL (7665 14759 (TEDIT.BRAVOFILE? 7675 . 9405) (TEDITFROMBRAVO 9407 . 14757)) (14870 31286 ( +\TFBRAVO.GET.USER.CM 14880 . 18060) (\TFBRAVO.USER.CM.LOOKS 18062 . 19555) (\TFBRAVO.READ.USER.CM +19557 . 24180) (\TFBRAVO.INIT.PARALOOKS 24182 . 26399) (\TFBRAVO.INIT.PAGEFORMAT 26401 . 27281) ( +\TFBRAVO.GETPARAMS 27283 . 30137) (\TFBRAVO.FIND.LAST.TRAILER 30139 . 31284)) (31328 52033 ( +\TFBRAVO.PARSE.PARA 31338 . 35265) (\TFBRAVO.READ.PARALOOKS 35267 . 42157) (\TFBRAVO.CREATE.RUNS 42159 + . 43547) (\TFBRAVO.READ.CHARLOOKS 43549 . 48578) (\TFBRAVO.FONT.FROM.CHARLOOKS 48580 . 50134) ( +\TFBRAVO.READNUM? 50136 . 52031)) (52070 63111 (\TFBRAVO.HANDLE.HEADING 52080 . 54807) ( +\TFBRAVO.PARSE.PROFILE.PARA 54809 . 63109)) (63154 85488 (\TFBRAVO.INSERT.PARA 63164 . 64005) ( +\TFBRAVO.INSERT.RUN 64007 . 67498) (\TFBRAVO.SPLIT.PARA 67500 . 74924) (\TFBRAVO.RUN.TABSPEC 74926 . +79793) (\TFBRAVO.INSTALL.PAGEFORMAT 79795 . 85486)) (85489 89632 (\TFBRAVO.ASSERT 85499 . 86029) ( +\TEST.CHARACTER.LOOKS 86031 . 87917) (\TEST.PARAGRAPH.LOOKS 87919 . 89630)) (90642 97297 ( +\TFBRAVO.ADD.NAMEDTAB 90652 . 94255) (\TFBRAVO.COPY.NAMEDTAB 94257 . 94705) (\TFBRAVO.PUT.NAMEDTAB +94707 . 94987) (\TFBRAVO.GET.NAMEDTAB 94989 . 95366) (\NAMEDTABNYET 95368 . 95528) (\NAMEDTABSIZE +95530 . 96045) (\NAMEDTABPREPRINT 96047 . 96245) (\TEDIT.NAMEDTAB.INIT 96247 . 97295))))) STOP diff --git a/library/tedit/TEDIT-TFBRAVO.LCOM b/library/tedit/TEDIT-TFBRAVO.LCOM index b6b5aa02709d1e9b092e0e8fc6dca3fa69ffc695..70a477eb30e20d8ef351df0aef401c50df5c8477 100644 GIT binary patch delta 295 zcmex+m+`_~#t9L^=DNYD1-eECMy3jehE_miVlpv1rQTdqflEoj3`x?`%Gkil$V^Eg zsVFr$Ker$=CpASOwW6S?Sk+1)#MQ+!#4X6**D1&`%wHihPeI8o)W=5w*#td3Jtc*d z#1f!3Y(^WKDQR+PxOw`xItRH*IRZ^oP*T8jo$+K}#t=4h1xs@iv&qXD75PxDp1g`r zcJgONAz>p6U9Zv{h{ueKt&B~q3@1x4=`xybc4J~^;q!HN4%Q0^a`X%K0a~>=k&RoO ZaoOZt-Q_F}0t_0H?ev^C&(%wC0000#O~n8J delta 351 zcmca`m+|ji#t9L^hPsZW>AFS+My3je##Sb#RtA<6vr{rmH5Is&j4XA%N^>BRMut|V zAW0>KlH~l{f*kb}h0Ht!CAUx?9|dG}dU|?F3Mq*tsVNFr^c$KfX>w_}dHT3I2e~?i zxVlW1W0IO!AE0KcU}f#xq>lCR_l$))oXEt^A`%kh z=ojn*RH^3}?Cj|YG&d-Ca~T`AI^&+nO}fjq_B*gK00D$N$-oKXh%h+_FlZQB7%8~< o`-O!11pxK9DoobZbCxzYRR9^`Gw_}dHT3I2e~=|^(&xQ2Xo70M@D513k5?HQ)3g$$vKP)iWpXDDp&;s gxrTZAhX(7q08N^#&1kimnQ6T>lWWB0jkc0500vAx00000 delta 250 zcmZ40%yg=mX+ngsnQm}ufv%B(k*R`#rIo3Pm5If~Y-4?MO$9C`1yh8ip@o&Hk(H^j zl0s5ZYI1&VL1s>Bib85dK~b@)mBM6xA4%8DJOw4UP#+%!WPN&idP)i@i6ubAmS-^t6> zIYd*zDj>);%+o(KSl0!pQ9((;P}i|E9pV*36Dv~#D??Ky1+K~a7!?^!H$PxpZ@qbv Ht%M5z2eCma From a0c7fb37b671ffbd13a5b086e4983aa992cfdce0 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Fri, 12 Sep 2025 12:21:44 -0700 Subject: [PATCH 14/40] You CLOSEF? instead of CLOSEF in COPYFILE resetsave --- sources/FILEIO | 79 ++++++++++++++++++++++---------------------- sources/FILEIO.LCOM | Bin 45945 -> 45873 bytes 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/sources/FILEIO b/sources/FILEIO index 189bad26a..2c5fb1ede 100644 --- a/sources/FILEIO +++ b/sources/FILEIO @@ -1,11 +1,10 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "11-Sep-2025 20:49:24"  -{DSK}kaplan>Local>medley3.5>working-medley>sources>FILEIO.;140 166949 +(FILECREATED "12-Sep-2025 08:19:06" {WMEDLEY}FILEIO.;141 166968 :EDIT-BY rmk - :CHANGES-TO (FNS COPYCHARS) + :CHANGES-TO (FNS COPYFILE COPYCHARS) :PREVIOUS-DATE "24-Apr-2025 22:16:47" {DSK}kaplan>Local>medley3.5>working-medley>sources>FILEIO.;139) @@ -2287,6 +2286,8 @@ update the map") (COPYFILE [LAMBDA (FROMFILE TOFILE) + (* ;; "Edited 12-Sep-2025 08:18 by rmk") + (* ;; "Edited 18-Dec-2024 21:07 by rmk") (* ;; "Edited 8-Jul-2022 10:41 by rmk") @@ -2306,7 +2307,7 @@ update the map") `((SEQUENTIAL T) (DON'TCACHE T) (CREATIONDATE ,(GETFILEINFO FROMSTREAM 'CREATIONDATE] - '(AND RESETSTATE (SETQ OLDVALUE (CLOSEF OLDVALUE)) + '(AND RESETSTATE (SETQ OLDVALUE (CLOSEF? OLDVALUE)) (DELFILE OLDVALUE] (COPYBYTES FROMSTREAM TOSTREAM) (CLOSEF FROMSTREAM) @@ -3166,39 +3167,39 @@ update the map") (ADDTOVAR LAMA \IS.NOT.RANDACCESSP \ILLEGAL.DEVICEOP STREAMPROP) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (27784 31900 (STREAMPROP 27794 . 28228) (GETSTREAMPROP 28230 . 28979) (PUTSTREAMPROP -28981 . 31748) (STREAMP 31750 . 31898)) (31943 35322 (\DEFPRINT.BY.NAME 31953 . 33105) ( -\STREAM.DEFPRINT 33107 . 35015) (\FDEV.DEFPRINT 35017 . 35320)) (35580 40621 (\GETACCESS 35590 . 36044 -) (\SETACCESS 36046 . 40619)) (60847 66816 (\DEFINEDEVICE 60857 . 63173) (\GETDEVICEFROMNAME 63175 . -63648) (\GETDEVICEFROMHOSTNAME 63650 . 64694) (\REMOVEDEVICE 64696 . 65819) (\REMOVEDEVICE.NAMES 65821 - . 66814)) (66856 94587 (\CLOSEFILE 66866 . 67691) (\DELETEFILE 67693 . 67987) (\DEVICEEVENT 67989 . -69759) (\GENERATEFILES 69761 . 70708) (\GENERATENEXTFILE 70710 . 71361) (\GENERATEFILEINFO 71363 . -71824) (\GETFILENAME 71826 . 72215) (\GENERIC.OUTFILEP 72217 . 72687) (\OPENFILE 72689 . 75267) ( -\DO.PARAMS.AT.OPEN 75269 . 79465) (\RENAMEFILE 79467 . 80423) (\REVALIDATEFILE 80425 . 83027) ( -\PAGED.REVALIDATEFILELST 83029 . 84587) (\PAGED.REVALIDATEFILES 84589 . 86308) (\PAGED.REVALIDATEFILE -86310 . 88593) (\BUFFERED.REVALIDATEFILE 88595 . 90881) (\BUFFERED.REVALIDATEFILELST 90883 . 92067) ( -\PRINT-REVALIDATION-RESULT 92069 . 92911) (\TRUNCATEFILE 92913 . 93304) (\FILE-CONFLICT 93306 . 94585) -) (94623 99286 (\GENERATENOFILES 94633 . 96729) (\NULLFILEGENERATOR 96731 . 96975) (\NOFILESNEXTFILEFN - 96977 . 98968) (\NOFILESINFOFN 98970 . 99284)) (99405 101313 (\FILE.NOT.OPEN 99415 . 99928) ( -\FILE.WONT.OPEN 99930 . 100258) (\ILLEGAL.DEVICEOP 100260 . 100542) (\IS.NOT.RANDACCESSP 100544 . -100990) (\STREAM.NOT.OPEN 100992 . 101311)) (101448 103746 (\FDEVINSTANCE 101458 . 103744)) (104948 -112322 (CNDIR 104958 . 106263) (DIRECTORYNAME 106265 . 110448) (DIRECTORYNAMEP 110450 . 111066) ( -HOSTNAMEP 111068 . 111875) (\ADD.CONNECTED.DIR 111877 . 112320)) (112367 141263 (\BACKFILEPTR 112377 - . 112565) (\BACKPEEKBIN 112567 . 112928) (\BACKBIN 112930 . 113281) (BIN 113283 . 113500) (\BIN -113502 . 113779) (\BINS 113781 . 114067) (BOUT 114069 . 114431) (\BOUT 114433 . 114748) (\BOUTS 114750 - . 115061) (COPYBYTES 115063 . 118395) (COPYCHARS 118397 . 122195) (COPYFILE 122197 . 123506) ( -\COPYOPENFILE 123508 . 126707) (\INFER.FILE.TYPE 126709 . 127663) (EOFP 127665 . 127962) (FORCEOUTPUT -127964 . 128211) (\FLUSH.OPEN.STREAMS 128213 . 128569) (CHARSET 128571 . 129930) (ACCESS-CHARSET -129932 . 130569) (GETEOFPTR 130571 . 130821) (GETFILEINFO 130823 . 134016) (\TYPE.FROM.FILETYPE 134018 - . 134488) (\FILETYPE.FROM.TYPE 134490 . 134669) (GETFILEPTR 134671 . 134923) (SETFILEINFO 134925 . -139162) (SETFILEPTR 139164 . 140883) (BOUT16 140885 . 141070) (BIN16 141072 . 141261)) (141366 148546 -(\GENERIC.BINS 141376 . 141656) (\GENERIC.BOUTS 141658 . 141923) (\GENERIC.RENAMEFILE 141925 . 144173) - (\GENERIC.OPENP 144175 . 145490) (\GENERIC.READP 145492 . 146644) (\GENERIC.CHARSET 146646 . 148544)) - (148547 148886 (\MAP-OPEN-STREAMS 148557 . 148884)) (150741 152821 (\EOF.ACTION 150751 . 151002) ( -\EOSERROR 151004 . 151197) (\GETEOFPTR 151199 . 151381) (\INCFILEPTR 151383 . 151733) (\PEEKBIN 151735 - . 151926) (\SETCLOSEDFILELENGTH 151928 . 152262) (\SETEOFPTR 152264 . 152452) (\SETFILEPTR 152454 . -152819)) (152822 153364 (\FIXPOUT 152832 . 153132) (\FIXPIN 153134 . 153362)) (153365 153931 (\BOUTEOL - 153375 . 153929)) (156827 166691 (\BUFFERED.BIN 156837 . 157689) (\BUFFERED.PEEKBIN 157691 . 158473) -(\BUFFERED.BOUT 158475 . 159335) (\BUFFERED.BINS 159337 . 163022) (\BUFFERED.BOUTS 163024 . 164825) ( -\BUFFERED.COPYBYTES 164827 . 166689))))) + (FILEMAP (NIL (27752 31868 (STREAMPROP 27762 . 28196) (GETSTREAMPROP 28198 . 28947) (PUTSTREAMPROP +28949 . 31716) (STREAMP 31718 . 31866)) (31911 35290 (\DEFPRINT.BY.NAME 31921 . 33073) ( +\STREAM.DEFPRINT 33075 . 34983) (\FDEV.DEFPRINT 34985 . 35288)) (35548 40589 (\GETACCESS 35558 . 36012 +) (\SETACCESS 36014 . 40587)) (60815 66784 (\DEFINEDEVICE 60825 . 63141) (\GETDEVICEFROMNAME 63143 . +63616) (\GETDEVICEFROMHOSTNAME 63618 . 64662) (\REMOVEDEVICE 64664 . 65787) (\REMOVEDEVICE.NAMES 65789 + . 66782)) (66824 94555 (\CLOSEFILE 66834 . 67659) (\DELETEFILE 67661 . 67955) (\DEVICEEVENT 67957 . +69727) (\GENERATEFILES 69729 . 70676) (\GENERATENEXTFILE 70678 . 71329) (\GENERATEFILEINFO 71331 . +71792) (\GETFILENAME 71794 . 72183) (\GENERIC.OUTFILEP 72185 . 72655) (\OPENFILE 72657 . 75235) ( +\DO.PARAMS.AT.OPEN 75237 . 79433) (\RENAMEFILE 79435 . 80391) (\REVALIDATEFILE 80393 . 82995) ( +\PAGED.REVALIDATEFILELST 82997 . 84555) (\PAGED.REVALIDATEFILES 84557 . 86276) (\PAGED.REVALIDATEFILE +86278 . 88561) (\BUFFERED.REVALIDATEFILE 88563 . 90849) (\BUFFERED.REVALIDATEFILELST 90851 . 92035) ( +\PRINT-REVALIDATION-RESULT 92037 . 92879) (\TRUNCATEFILE 92881 . 93272) (\FILE-CONFLICT 93274 . 94553) +) (94591 99254 (\GENERATENOFILES 94601 . 96697) (\NULLFILEGENERATOR 96699 . 96943) (\NOFILESNEXTFILEFN + 96945 . 98936) (\NOFILESINFOFN 98938 . 99252)) (99373 101281 (\FILE.NOT.OPEN 99383 . 99896) ( +\FILE.WONT.OPEN 99898 . 100226) (\ILLEGAL.DEVICEOP 100228 . 100510) (\IS.NOT.RANDACCESSP 100512 . +100958) (\STREAM.NOT.OPEN 100960 . 101279)) (101416 103714 (\FDEVINSTANCE 101426 . 103712)) (104916 +112290 (CNDIR 104926 . 106231) (DIRECTORYNAME 106233 . 110416) (DIRECTORYNAMEP 110418 . 111034) ( +HOSTNAMEP 111036 . 111843) (\ADD.CONNECTED.DIR 111845 . 112288)) (112335 141282 (\BACKFILEPTR 112345 + . 112533) (\BACKPEEKBIN 112535 . 112896) (\BACKBIN 112898 . 113249) (BIN 113251 . 113468) (\BIN +113470 . 113747) (\BINS 113749 . 114035) (BOUT 114037 . 114399) (\BOUT 114401 . 114716) (\BOUTS 114718 + . 115029) (COPYBYTES 115031 . 118363) (COPYCHARS 118365 . 122163) (COPYFILE 122165 . 123525) ( +\COPYOPENFILE 123527 . 126726) (\INFER.FILE.TYPE 126728 . 127682) (EOFP 127684 . 127981) (FORCEOUTPUT +127983 . 128230) (\FLUSH.OPEN.STREAMS 128232 . 128588) (CHARSET 128590 . 129949) (ACCESS-CHARSET +129951 . 130588) (GETEOFPTR 130590 . 130840) (GETFILEINFO 130842 . 134035) (\TYPE.FROM.FILETYPE 134037 + . 134507) (\FILETYPE.FROM.TYPE 134509 . 134688) (GETFILEPTR 134690 . 134942) (SETFILEINFO 134944 . +139181) (SETFILEPTR 139183 . 140902) (BOUT16 140904 . 141089) (BIN16 141091 . 141280)) (141385 148565 +(\GENERIC.BINS 141395 . 141675) (\GENERIC.BOUTS 141677 . 141942) (\GENERIC.RENAMEFILE 141944 . 144192) + (\GENERIC.OPENP 144194 . 145509) (\GENERIC.READP 145511 . 146663) (\GENERIC.CHARSET 146665 . 148563)) + (148566 148905 (\MAP-OPEN-STREAMS 148576 . 148903)) (150760 152840 (\EOF.ACTION 150770 . 151021) ( +\EOSERROR 151023 . 151216) (\GETEOFPTR 151218 . 151400) (\INCFILEPTR 151402 . 151752) (\PEEKBIN 151754 + . 151945) (\SETCLOSEDFILELENGTH 151947 . 152281) (\SETEOFPTR 152283 . 152471) (\SETFILEPTR 152473 . +152838)) (152841 153383 (\FIXPOUT 152851 . 153151) (\FIXPIN 153153 . 153381)) (153384 153950 (\BOUTEOL + 153394 . 153948)) (156846 166710 (\BUFFERED.BIN 156856 . 157708) (\BUFFERED.PEEKBIN 157710 . 158492) +(\BUFFERED.BOUT 158494 . 159354) (\BUFFERED.BINS 159356 . 163041) (\BUFFERED.BOUTS 163043 . 164844) ( +\BUFFERED.COPYBYTES 164846 . 166708))))) STOP diff --git a/sources/FILEIO.LCOM b/sources/FILEIO.LCOM index a50f65aa6267a3c82397078caae5adcd60b8b48a..2b24260f3601eb23b6008399cc25c6339808d601 100644 GIT binary patch delta 236 zcmezQjA`RDrU?--M!LbN1-eECMy3h|7FLFqRt9ED3K~ku`MCv|IjJcM`FRRT3f1Ah zt}Z^Vk+n9(`K3k4sl|3~o<6Rg{(9DiCWe{{TuO$92xAP*tV|88j180&Cf=1`0V$mL zOOcUlvNWT5B39e*nyz4IW@c$-pMR g;Orj|39@SQVaCs~jP{f7r^rw4sd3&ck&qY+0FV6g(Oq?q&$CXr+3YSc+C@3mcwNh~Q4~TU3a108bctLUECv{;=Lrp-2XqXr%7@C<` znpi4Wxw?3U=sHCz6y;_sSON9=xw{7IhWIORX}I|XZ?0ne96Nb>iu~r@_$9#r{5CZ& From 76f09ee3cd8c9048091a02b0839cd356e78f9c3b Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Sat, 20 Sep 2025 10:37:27 -0700 Subject: [PATCH 15/40] Update fontfamily lists, missing translation functions, minor bug --- .../c0/CREAM12-MRR-C0.DISPLAYFONT | Bin 1930 -> 1928 bytes library/tedit/TEDIT-WINDOW | 117 +++++++++--------- library/tedit/TEDIT-WINDOW.LCOM | Bin 63144 -> 62759 bytes sources/FONT | 89 ++++++------- sources/FONT.LCOM | Bin 68727 -> 68767 bytes sources/MCCS | 105 ++++++++-------- sources/MCCS.LCOM | Bin 21214 -> 21011 bytes 7 files changed, 157 insertions(+), 154 deletions(-) diff --git a/fonts/displayfonts/c0/CREAM12-MRR-C0.DISPLAYFONT b/fonts/displayfonts/c0/CREAM12-MRR-C0.DISPLAYFONT index b3692631e881247e1666838543eca6ed261b35c6..91165d7be0130e4de7d319710de5086f81617e4e 100644 GIT binary patch delta 277 zcmY+xJt%~690%~<_xsgTp43w(DU!*{pv%A@EEmIt#Y-7(Axe?y>J~i8OV@R!OX=z? zM2bN-D2qCS!gPaTBFk;hVseA>H~M^XK{oKW&DpX*m9igtp=W=a+!pJw?tkMp zGqz}}ma!cx*s*)=maXDG*t1pb%|0!%y8S?CL=5fdL@)XWGhipyMQhWk8Vkte+1HE(#wN4LsX qzO%-NU#tuAiv4}`3JtYX|BM0m9M>^Aux+LjZU+*S?50q8*q{~ zX4AG{E0(b>%h{<@a&D~bJlcy@?A^XBw3_{*4jy8NqaEGoK_7-Nf(gtZg+;6)jdg5e zA6XnBk272bxWfaU@rqAW5#onrJ)>-5E4$dsK_)rLS*EzeHDtedit>TEDIT-WINDOW.;863 229545 +(FILECREATED "18-Sep-2025 23:09:24"  +{DSK}kaplan>Local>medley3.5>working-medley>library>TEDIT>TEDIT-WINDOW.;864 229645 :EDIT-BY rmk - :CHANGES-TO (FNS \TEDIT.LIKELY.FILENAME) + :CHANGES-TO (FNS TEDIT.PROMPTCLEAR) - :PREVIOUS-DATE "26-Jul-2025 15:45:59" {WMEDLEY}tedit>TEDIT-WINDOW.;862) + :PREVIOUS-DATE "11-Aug-2025 21:22:37" +{DSK}kaplan>Local>medley3.5>working-medley>library>TEDIT>TEDIT-WINDOW.;863) (PRETTYCOMPRINT TEDIT-WINDOWCOMS) @@ -2055,34 +2057,33 @@ else (PROMPTPRINT MSG]) (TEDIT.PROMPTCLEAR - [LAMBDA (TEXTSTREAM FONT) (* ; "Edited 14-Mar-98 12:52 by rmk:") + [LAMBDA (TSTREAM FONT) (* ; "Edited 18-Sep-2025 23:08 by rmk") + (* ; "Edited 14-Mar-98 12:52 by rmk:") (* ; "Edited 14-Oct-87 15:35 by bvm:") - (* ;; "Clears the promptwindow attached to TEXTSTREAM and shrinks it back to a single line in font FONT (or TEDIT.PROMPT.FONT) if it has grown. TEXTSTREAM could actually be a stream on the promptwindow itself.") - - (LET [MW (PW (IF (CAR (NLSETQ (GETPROMPTWINDOW (\TEDIT.MAINW TEXTSTREAM) - NIL NIL T))) - ELSEIF (WINDOWPROP (WFROMDS TEXTSTREAM) - 'TEDIT.PROMPTWINDOW) - THEN (WFROMDS TEXTSTREAM] - (CL:WHEN PW - (WINDOWPROP PW 'TEDIT.NLINES 1) - (CL:WHEN [AND (SETQ MW (WINDOWPROP PW 'MAINWINDOW)) - (SETQ MW (LISTP (WINDOWPROP MW 'PROMPTWINDOW] - (RPLACD MW 1)) - (LET [PROP [HEIGHT (HEIGHTIFWINDOW (FONTPROP (OR FONT TEDIT.PROMPT.FONT) - 'HEIGHT] - (REG (WINDOWPROP PW 'REGION] - (CL:UNLESS (EQ HEIGHT (FETCH HEIGHT OF REG)) - (WINDOWPROP PW 'MINSIZE (CONS 0 HEIGHT)) + (* ;; "Clears the promptwindow attached to TSTREAM and shrinks it back to a single line in font FONT (or TEDIT.PROMPT.FONT) if it has grown. [TSTREAM could actually be a stream on the promptwindow itself.--is that true, does this code need to deal with that?]") + + (LET* [(MW (\TEDIT.MAINW TSTREAM)) + (PW (AND MW (WINDOWPROP (\TEDIT.MAINW TSTREAM) + 'TEDIT.PROMPTWINDOW] + (CL:WHEN PW + (WINDOWPROP PW 'TEDIT.NLINES 1) + (CL:WHEN [AND (SETQ MW (WINDOWPROP PW 'MAINWINDOW)) + (SETQ MW (LISTP (WINDOWPROP MW 'PROMPTWINDOW] + (RPLACD MW 1)) + (LET [PROP [HEIGHT (HEIGHTIFWINDOW (FONTPROP (OR FONT TEDIT.PROMPT.FONT) + 'HEIGHT] + (REG (WINDOWPROP PW 'REGION] + (CL:UNLESS (EQ HEIGHT (FETCH HEIGHT OF REG)) + (WINDOWPROP PW 'MINSIZE (CONS 0 HEIGHT)) - (* ;; + (* ;;  "Have to adjust the fixed size of the window before shaping, since SHAPEW obeys the minimum.") - (WINDOWPROP PW 'MAXSIZE (CONS 64000 HEIGHT)) - (SHAPEW PW (CREATE REGION USING REG HEIGHT _ HEIGHT))) - (CL:WHEN (OPENWP PW) - (CLEARW PW))))]) + (WINDOWPROP PW 'MAXSIZE (CONS 64000 HEIGHT)) + (SHAPEW PW (CREATE REGION USING REG HEIGHT _ HEIGHT))) + (CL:WHEN (OPENWP PW) + (CLEARW PW))))]) (TEDIT.PROMPTFLASH [LAMBDA (TSTREAM) (* ; "Edited 25-Apr-2025 17:58 by rmk") @@ -3621,36 +3622,36 @@ (RPAQ? TEDIT.TITLED.ICON.TEMPLATE (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (17102 17998 (TEDIT.DEFER.UPDATES 17112 . 17996)) (17999 43944 (\TEDIT.WINDOW.CREATE -18009 . 25339) (\TEDIT.WINDOW.GETREGION 25341 . 28831) (\TEDIT.WINDOW.SETUP 28833 . 33163) ( -\TEDIT.MINIMAL.WINDOW.SETUP 33165 . 40576) (\TEDIT.CLEARPANE 40578 . 41295) (\TEDIT.FILL.PANES 41297 - . 43942)) (43945 67646 (\TEDIT.CURSORMOVEDFN 43955 . 49565) (\TEDIT.CURSOROUTFN 49567 . 50255) ( -\TEDIT.ACTIVE.WINDOWP 50257 . 51327) (\TEDIT.EXPANDFN 51329 . 51892) (\TEDIT.MAINW 51894 . 53174) ( -\TEDIT.MAINSTREAM 53176 . 53510) (\TEDIT.PRIMARYPANE 53512 . 54282) (\TEDIT.PANELIST 54284 . 54780) ( -\TEDIT.NEWREGIONFN 54782 . 57298) (\TEDIT.SET.WINDOW.EXTENT 57300 . 62282) (\TEDIT.SHRINK.ICONCREATE -62284 . 65017) (\TEDIT.SHRINKFN 65019 . 65428) (\TEDIT.PANEREGION 65430 . 67644)) (67678 100724 ( -\TEDIT.BUTTONEVENTFN 67688 . 80661) (\TEDIT.BUTTONEVENTFN.DOOPERATION 80663 . 87926) ( -\TEDIT.BUTTONEVENTFN.GETOPERATION 87928 . 89770) (\TEDIT.BUTTONEVENTFN.CURSEL.INIT 89772 . 93442) ( -\TEDIT.BUTTONEVENTFN.INACTIVE 93444 . 95874) (\TEDIT.BUTTONEVENTFN.INTITLE 95876 . 97711) ( -\TEDIT.COPYINSERTFN 97713 . 98845) (\TEDIT.FOREIGN.COPY 98847 . 100722)) (100725 117967 ( -\TEDIT.PANE.SPLIT 100735 . 104683) (\TEDIT.SPLITW 104685 . 112423) (\TEDIT.UNSPLITW 112425 . 116624) ( -\TEDIT.LINKPANES 116626 . 117389) (\TEDIT.UNLINKPANE 117391 . 117965)) (119401 120292 (TEDITWINDOWP -119411 . 120290)) (120329 123432 (TEDIT.GETINPUT 120339 . 122782) (\TEDIT.MAKEFILENAME 122784 . 123430 -)) (123481 131108 (TEDIT.PROMPTWINDOW 123491 . 123805) (TEDIT.PROMPTPRINT 123807 . 126434) ( -TEDIT.PROMPTCLEAR 126436 . 128155) (TEDIT.PROMPTFLASH 128157 . 129415) (\TEDIT.PROMPT.PAGEFULLFN -129417 . 131106)) (131346 141924 (\TEDIT.FILENAME 131356 . 132128) (\TEDIT.DEFAULT.TITLE 132130 . -134509) (\TEDIT.WINDOW.TITLE 134511 . 136680) (\TEDIT.LIKELY.FILENAME 136682 . 139406) ( -\TEDIT.UPDATE.TITLE 139408 . 141922)) (141967 154451 (TEDIT.DEACTIVATE.WINDOW 141977 . 147550) ( -\TEDIT.RESHAPEFN 147552 . 149637) (\TEDIT.REPAINTFN 149639 . 149863) (\TEDIT.CLOSESPLITS 149865 . -152310) (\TEDIT.CLOSEPANE 152312 . 154449)) (154452 197251 (\TEDIT.SCROLLFN 154462 . 156693) ( -\TEDIT.SCROLLCH.TOP 156695 . 158806) (\TEDIT.SCROLLCH.BOTTOM 158808 . 163138) (\TEDIT.SCROLLUP 163140 - . 168866) (\TEDIT.TOPLINE.YTOP 168868 . 170537) (\TEDIT.SCROLLDOWN 170539 . 177578) ( -\TEDIT.SCROLL.CARET 177580 . 180418) (\TEDIT.VISIBLECARETP 180420 . 182714) (\TEDIT.VISIBLECHARP -182716 . 183807) (\TEDIT.BITMAPLINES 183809 . 187729) (\TEDIT.SETPANE.TOPLINE 187731 . 188343) ( -\TEDIT.SHIFTLINES 188345 . 197249)) (197252 208121 (\TEDIT.ONSCREEN? 197262 . 201813) ( -\TEDIT.ONSCREEN.REGION 201815 . 205466) (\TEDIT.AFTERMOVEFN 205468 . 206365) (OFFSCREENP 206367 . -208119)) (208163 210977 (\TEDIT.PROCIDLEFN 208173 . 209833) (\TEDIT.PROCENTRYFN 209835 . 210280) ( -\TEDIT.PROCEXITFN 210282 . 210975)) (211056 224281 (\TEDIT.DOWNCARET 211066 . 211859) ( -\TEDIT.FLASHCARET 211861 . 213972) (\TEDIT.UPCARET 213974 . 215078) (TEDIT.NORMALIZECARET 215080 . -218298) (\TEDIT.SETCARET 218300 . 223651) (\TEDIT.CARET 223653 . 224279))))) + (FILEMAP (NIL (17179 18075 (TEDIT.DEFER.UPDATES 17189 . 18073)) (18076 44021 (\TEDIT.WINDOW.CREATE +18086 . 25416) (\TEDIT.WINDOW.GETREGION 25418 . 28908) (\TEDIT.WINDOW.SETUP 28910 . 33240) ( +\TEDIT.MINIMAL.WINDOW.SETUP 33242 . 40653) (\TEDIT.CLEARPANE 40655 . 41372) (\TEDIT.FILL.PANES 41374 + . 44019)) (44022 67723 (\TEDIT.CURSORMOVEDFN 44032 . 49642) (\TEDIT.CURSOROUTFN 49644 . 50332) ( +\TEDIT.ACTIVE.WINDOWP 50334 . 51404) (\TEDIT.EXPANDFN 51406 . 51969) (\TEDIT.MAINW 51971 . 53251) ( +\TEDIT.MAINSTREAM 53253 . 53587) (\TEDIT.PRIMARYPANE 53589 . 54359) (\TEDIT.PANELIST 54361 . 54857) ( +\TEDIT.NEWREGIONFN 54859 . 57375) (\TEDIT.SET.WINDOW.EXTENT 57377 . 62359) (\TEDIT.SHRINK.ICONCREATE +62361 . 65094) (\TEDIT.SHRINKFN 65096 . 65505) (\TEDIT.PANEREGION 65507 . 67721)) (67755 100801 ( +\TEDIT.BUTTONEVENTFN 67765 . 80738) (\TEDIT.BUTTONEVENTFN.DOOPERATION 80740 . 88003) ( +\TEDIT.BUTTONEVENTFN.GETOPERATION 88005 . 89847) (\TEDIT.BUTTONEVENTFN.CURSEL.INIT 89849 . 93519) ( +\TEDIT.BUTTONEVENTFN.INACTIVE 93521 . 95951) (\TEDIT.BUTTONEVENTFN.INTITLE 95953 . 97788) ( +\TEDIT.COPYINSERTFN 97790 . 98922) (\TEDIT.FOREIGN.COPY 98924 . 100799)) (100802 118044 ( +\TEDIT.PANE.SPLIT 100812 . 104760) (\TEDIT.SPLITW 104762 . 112500) (\TEDIT.UNSPLITW 112502 . 116701) ( +\TEDIT.LINKPANES 116703 . 117466) (\TEDIT.UNLINKPANE 117468 . 118042)) (119478 120369 (TEDITWINDOWP +119488 . 120367)) (120406 123509 (TEDIT.GETINPUT 120416 . 122859) (\TEDIT.MAKEFILENAME 122861 . 123507 +)) (123558 131208 (TEDIT.PROMPTWINDOW 123568 . 123882) (TEDIT.PROMPTPRINT 123884 . 126511) ( +TEDIT.PROMPTCLEAR 126513 . 128255) (TEDIT.PROMPTFLASH 128257 . 129515) (\TEDIT.PROMPT.PAGEFULLFN +129517 . 131206)) (131446 142024 (\TEDIT.FILENAME 131456 . 132228) (\TEDIT.DEFAULT.TITLE 132230 . +134609) (\TEDIT.WINDOW.TITLE 134611 . 136780) (\TEDIT.LIKELY.FILENAME 136782 . 139506) ( +\TEDIT.UPDATE.TITLE 139508 . 142022)) (142067 154551 (TEDIT.DEACTIVATE.WINDOW 142077 . 147650) ( +\TEDIT.RESHAPEFN 147652 . 149737) (\TEDIT.REPAINTFN 149739 . 149963) (\TEDIT.CLOSESPLITS 149965 . +152410) (\TEDIT.CLOSEPANE 152412 . 154549)) (154552 197351 (\TEDIT.SCROLLFN 154562 . 156793) ( +\TEDIT.SCROLLCH.TOP 156795 . 158906) (\TEDIT.SCROLLCH.BOTTOM 158908 . 163238) (\TEDIT.SCROLLUP 163240 + . 168966) (\TEDIT.TOPLINE.YTOP 168968 . 170637) (\TEDIT.SCROLLDOWN 170639 . 177678) ( +\TEDIT.SCROLL.CARET 177680 . 180518) (\TEDIT.VISIBLECARETP 180520 . 182814) (\TEDIT.VISIBLECHARP +182816 . 183907) (\TEDIT.BITMAPLINES 183909 . 187829) (\TEDIT.SETPANE.TOPLINE 187831 . 188443) ( +\TEDIT.SHIFTLINES 188445 . 197349)) (197352 208221 (\TEDIT.ONSCREEN? 197362 . 201913) ( +\TEDIT.ONSCREEN.REGION 201915 . 205566) (\TEDIT.AFTERMOVEFN 205568 . 206465) (OFFSCREENP 206467 . +208219)) (208263 211077 (\TEDIT.PROCIDLEFN 208273 . 209933) (\TEDIT.PROCENTRYFN 209935 . 210380) ( +\TEDIT.PROCEXITFN 210382 . 211075)) (211156 224381 (\TEDIT.DOWNCARET 211166 . 211959) ( +\TEDIT.FLASHCARET 211961 . 214072) (\TEDIT.UPCARET 214074 . 215178) (TEDIT.NORMALIZECARET 215180 . +218398) (\TEDIT.SETCARET 218400 . 223751) (\TEDIT.CARET 223753 . 224379))))) STOP diff --git a/library/tedit/TEDIT-WINDOW.LCOM b/library/tedit/TEDIT-WINDOW.LCOM index f3846c1f48f41bc79e232da052ce56fa512feb99..014c34901785284e9769ce46a8887a5e125b326e 100644 GIT binary patch delta 1045 zcmbtTF>ljA6t-OoG+o-FqSEQ%DH&q<>^N~kiHI5}xh8Rp?cfM?AT&`Fk|t47QB?>< zVqsw@%ErLJ0wd6Nr2`B63|1s0W+tA`X(@%RC(G~MclW+~@7;Ire$2f6KC@pN>rtmU zh$^z8fug45WJ-yN5Ei%k+ko1J)lqXeN_XmmZoQW-^|$KX^men+ zZSJX(mfr0TJMCU88X)Oz`{A%Y+)KMgmb$?|>QOUW@uXXNJQjhFND@(J;q-8lQneJ3 zUw*niW-*dwSIU;VUNSN^v@wfZwNwH><|IUtBoP|*9n3NyJ6TW|mm-UiP&h|R#=31} zkP}4m-)hfSm%n&5N0mWIaV!G(a;5sh$tsDXF^DM^+cjh=8 zi#%62TnhY_4}=1gr;RrsxK|A7%=;K^apRNq+Uvrf%`>&5QRe8%1Ai0a{1Re@vj5l1 zi%XX_ih>~UKM&TB1jnO|RYrLnOnbk$Q=rHf1^fh_g$S!SSVqS_8{xRas{!po=f?5- z7hIU=31E`)P)bRtScd6g4-yJEg^XoP?(QxdN)oK98;F(ljmQKxsp(X0BS0akO&dsa zQ$*KU=K`rgf=u|)H9^yTGaE}F;bi~$%4B{tHzo<#3{+9hP}2kLuPI8FsBtJ~Y7V_` z08t2(@o3-IRXD3AiQQB@?%ypwlxZHCim^z`o*Kl+G{h`X({NChuzZ#y*oJ2w+}`Ot F`wjbv3-JH| delta 1350 zcmaJ>-)qxQ6i!prt%|I32o}^sKv*X&xi?MPMi~q3?G{ban51Tk1Alb5y3Lj9KoKeU z;;Ybi1z+@0+4kha9(+;%3tt6MUw!iArfaQE1MRsv=icv}@0{=E)tBV!ugPbNU6M04 zZ|A5?RiH$tR9A`;OiQ;m*4wSMj# z4K+}}H+9{yd=^~FT{f%+%Ytx96h)ymmlhM=xPZ?}vvq{q%&mjBqs4?UO-eA&0@thC zZV*oih#a*&Vq+Vo6JpP35p<{S*@lHL*%S}CI^Jq0#VCMWnfJ+tZ z5KRHx$SA#c>u{X%GH2pCYnCxTgCWxUv3{%~|HS}IAW*A20WM@1p<9L-Ok82CnyVN- z^JlOHM8*^+yU6?7xG0F}3E_IgF`Ue_Huz#HlTId0-ib+0|NC}wVKT9knd3h0N<}-j z$6`-9eZXqId@H=*q1D4t%o=W6dTtM2l1n=ejGaT*yU`|&_aViN#s5DZOizwE^`khE z#P_Ya80C(W;h4Me>)oHiz)?S%z|GN5OvJ~;3_iTP-57FvEVdJ?CwAXF6{e{|pkj5I z;e{wm1?nzyLKm;B2L6KKvJgl~1Gmv1Ganq$%71zaIDOOc8y?$}gHq@Z)vWEgP!Q2z z;(G)H6@wz;!EV^_na9D)#esL|{Hp{_gRqA3tNNgFEyg(pD237>PD`kQNS6qYa;;d% z)sSVGpejjG1KU{iyXI8}L?d7$3BIOuFONT.;602 281058 +(FILECREATED "20-Sep-2025 09:39:57" {WMEDLEY}FONT.;603 281160 :EDIT-BY rmk - :CHANGES-TO (FNS \STRINGWIDTH.GENERIC) + :CHANGES-TO (VARS NSFONTFAMILIES ALTOFONTFAMILIES) - :PREVIOUS-DATE " 9-Sep-2025 23:55:03" {WMEDLEY}FONT.;600) + :PREVIOUS-DATE "10-Sep-2025 23:28:04" {WMEDLEY}FONT.;602) (PRETTYCOMPRINT FONTCOMS) @@ -492,9 +492,10 @@ DEVICE NEWFONT)))) ) -(RPAQQ NSFONTFAMILIES (CLASSIC MODERN TERMINAL OPTIMA TITAN BOLDPS PCTERMINAL)) +(RPAQQ NSFONTFAMILIES (CLASSIC MODERN TERMINAL OPTIMA TITAN BOLDPS PCTERMINAL PALATINO)) -(RPAQQ ALTOFONTFAMILIES (TIMESROMAN TIMESROMAND HELVETICA)) +(RPAQQ ALTOFONTFAMILIES (TIMESROMAN TIMESROMAND HELVETICA HELVETICAD CLARITY BRAVOX TONTO CREAM + OLDENGLISH)) @@ -4575,43 +4576,43 @@ (ADDTOVAR LAMA FONTCOPY) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (11678 21391 (CHARWIDTH 11688 . 12473) (CHARWIDTHY 12475 . 13992) (STRINGWIDTH 13994 . -15087) (\CHARWIDTH.DISPLAY 15089 . 15502) (\STRINGWIDTH.DISPLAY 15504 . 15928) (\STRINGWIDTH.GENERIC -15930 . 21389)) (21392 27912 (DEFAULTFONT 21402 . 22687) (FONTCLASS 22689 . 24851) (FONTCLASSUNPARSE -24853 . 25752) (FONTCLASSCOMPONENT 25754 . 26342) (SETFONTCLASSCOMPONENT 26344 . 26786) ( -GETFONTCLASSCOMPONENT 26788 . 27910)) (29510 53778 (FONTCREATE 29520 . 32765) (FONTCREATE1 32767 . -35269) (FONTCREATE.SLUGFD 35271 . 36753) (\FONT.CHECKARGS 36755 . 43345) (\FONT.CHECKARGS1 43347 . -47870) (\FONTCREATE1.NOFN 47872 . 48086) (FONTFILEP 48088 . 48976) (\READCHARSET 48978 . 53776)) ( -53779 60696 (\FONT.CHECKARGS 53789 . 60379) (\CHARSET.CHECK 60381 . 60694)) (60697 63603 ( -COERCEFONTSPEC 60707 . 63601)) (65673 66463 (MAKEFONTSPEC 65683 . 66461)) (66464 73129 (COMPLETE.FONT -66474 . 68888) (COMPLETEFONTP 68890 . 69513) (COMPLETE.CHARSET 69515 . 72200) (PRUNESLUGCSINFOS 72202 - . 73127)) (73168 81089 (FONTASCENT 73178 . 73562) (FONTDESCENT 73564 . 74049) (FONTHEIGHT 74051 . -74453) (FONTPROP 74455 . 80366) (\AVGCHARWIDTH 80368 . 81087)) (81746 82654 (FONTDEVICEPROP 81756 . -82652)) (82700 83554 (EDITCHAR 82710 . 83552)) (83600 95790 (GETCHARBITMAP 83610 . 84734) ( -PUTCHARBITMAP 84736 . 86894) (\GETCHARBITMAP.CSINFO 86896 . 88912) (\PUTCHARBITMAP.CSINFO 88914 . -95788)) (95791 116172 (MOVECHARBITMAP 95801 . 97695) (MOVEFONTCHARS 97697 . 101657) (\MOVEFONTCHAR -101659 . 106403) (\MOVEFONTCHARS.SOURCEDATA 106405 . 112510) (\MAKESLUGCHAR 112512 . 115047) ( -SLUGCHARP.DISPLAY 115049 . 116170)) (117106 137123 (FONTFILES 117116 . 118949) (\FINDFONTFILE 118951 - . 120668) (\FONTFILENAMES 120670 . 121544) (\FONTFILENAME 121546 . 125529) (\FONTFILENAME.OLD 125531 - . 128480) (\FONTFILENAME.NEW 128482 . 130739) (FONTSPECFROMFILENAME 130741 . 134842) ( -\FONTINFOFROMFILENAME.OLD 134844 . 137121)) (137390 172537 (FONTCOPY 137400 . 142463) (FONTP 142465 . -142764) (FONTUNPARSE 142766 . 144485) (SETFONTDESCRIPTOR 144487 . 145951) (\STREAMCHARWIDTH 145953 . -150117) (\COERCECHARSET 150119 . 152058) (\BUILDSLUGCSINFO 152060 . 155683) (\FONTSYMBOL 155685 . -156335) (\DEVICESYMBOL 156337 . 157206) (\FONTFACE 157208 . 164398) (\FONTFACE.COLOR 164400 . 171320) -(SETFONTCHARENCODING 171322 . 172535)) (172538 191523 (FONTSAVAILABLE 172548 . 177294) (FONTEXISTS? -177296 . 181153) (\SEARCHFONTFILES 181155 . 184240) (FLUSHFONTSINCORE 184242 . 186079) (FINDFONTFILES -186081 . 189295) (SORTFONTSPECS 189297 . 191521)) (191524 194947 (MATCHFONTFACE 191534 . 192349) ( -MAKEFONTFACE 192351 . 193191) (FONTFACETOATOM 193193 . 194945)) (195175 195667 (\UNITWIDTHSVECTOR -195185 . 195665)) (211267 213334 (FONTDESCRIPTOR.DEFPRINT 211277 . 212856) (FONTCLASS.DEFPRINT 212858 - . 213332)) (217163 219845 (\CREATEKERNELEMENT 217173 . 217531) (\FSETLEFTKERN 217533 . 218024) ( -\FGETLEFTKERN 218026 . 219843)) (219846 229268 (\CREATEFONT 219856 . 221187) (\CREATECHARSET 221189 . -225019) (\INSTALLCHARSETINFO 225021 . 228355) (\INSTALLCHARSETINFO.CHARENCODING 228357 . 229266)) ( -229590 230954 (\FONTRESETCHARWIDTHS 229600 . 230952)) (231584 241498 (\CREATEDISPLAYFONT 231594 . -233443) (\CREATECHARSET.DISPLAY 233445 . 239021) (\FONTEXISTS?.DISPLAY 239023 . 241496)) (241499 -256364 (STRIKEFONT.FILEP 241509 . 242397) (STRIKEFONT.GETCHARSET 242399 . 247991) (WRITESTRIKEFONTFILE - 247993 . 252904) (STRIKECSINFO 252906 . 256362)) (256395 272712 (MAKEBOLD.CHARSET 256405 . 260054) ( -MAKEBOLD.CHAR 260056 . 261808) (MAKEITALIC.CHARSET 261810 . 265483) (MAKEITALIC.CHAR 265485 . 267831) -(\SFMAKEBOLD 267833 . 270057) (\SFMAKEITALIC 270059 . 272710)) (272713 276862 (\SFMAKEROTATEDFONT -272723 . 274124) (\SFROTATECSINFO 274126 . 274763) (\SFROTATEFONTCHARACTERS 274765 . 275145) ( -\SFROTATECSINFOOFFSETS 275147 . 276860)) (276863 278244 (\SFMAKECOLOR 276873 . 278242))))) + (FILEMAP (NIL (11690 21403 (CHARWIDTH 11700 . 12485) (CHARWIDTHY 12487 . 14004) (STRINGWIDTH 14006 . +15099) (\CHARWIDTH.DISPLAY 15101 . 15514) (\STRINGWIDTH.DISPLAY 15516 . 15940) (\STRINGWIDTH.GENERIC +15942 . 21401)) (21404 27924 (DEFAULTFONT 21414 . 22699) (FONTCLASS 22701 . 24863) (FONTCLASSUNPARSE +24865 . 25764) (FONTCLASSCOMPONENT 25766 . 26354) (SETFONTCLASSCOMPONENT 26356 . 26798) ( +GETFONTCLASSCOMPONENT 26800 . 27922)) (29612 53880 (FONTCREATE 29622 . 32867) (FONTCREATE1 32869 . +35371) (FONTCREATE.SLUGFD 35373 . 36855) (\FONT.CHECKARGS 36857 . 43447) (\FONT.CHECKARGS1 43449 . +47972) (\FONTCREATE1.NOFN 47974 . 48188) (FONTFILEP 48190 . 49078) (\READCHARSET 49080 . 53878)) ( +53881 60798 (\FONT.CHECKARGS 53891 . 60481) (\CHARSET.CHECK 60483 . 60796)) (60799 63705 ( +COERCEFONTSPEC 60809 . 63703)) (65775 66565 (MAKEFONTSPEC 65785 . 66563)) (66566 73231 (COMPLETE.FONT +66576 . 68990) (COMPLETEFONTP 68992 . 69615) (COMPLETE.CHARSET 69617 . 72302) (PRUNESLUGCSINFOS 72304 + . 73229)) (73270 81191 (FONTASCENT 73280 . 73664) (FONTDESCENT 73666 . 74151) (FONTHEIGHT 74153 . +74555) (FONTPROP 74557 . 80468) (\AVGCHARWIDTH 80470 . 81189)) (81848 82756 (FONTDEVICEPROP 81858 . +82754)) (82802 83656 (EDITCHAR 82812 . 83654)) (83702 95892 (GETCHARBITMAP 83712 . 84836) ( +PUTCHARBITMAP 84838 . 86996) (\GETCHARBITMAP.CSINFO 86998 . 89014) (\PUTCHARBITMAP.CSINFO 89016 . +95890)) (95893 116274 (MOVECHARBITMAP 95903 . 97797) (MOVEFONTCHARS 97799 . 101759) (\MOVEFONTCHAR +101761 . 106505) (\MOVEFONTCHARS.SOURCEDATA 106507 . 112612) (\MAKESLUGCHAR 112614 . 115149) ( +SLUGCHARP.DISPLAY 115151 . 116272)) (117208 137225 (FONTFILES 117218 . 119051) (\FINDFONTFILE 119053 + . 120770) (\FONTFILENAMES 120772 . 121646) (\FONTFILENAME 121648 . 125631) (\FONTFILENAME.OLD 125633 + . 128582) (\FONTFILENAME.NEW 128584 . 130841) (FONTSPECFROMFILENAME 130843 . 134944) ( +\FONTINFOFROMFILENAME.OLD 134946 . 137223)) (137492 172639 (FONTCOPY 137502 . 142565) (FONTP 142567 . +142866) (FONTUNPARSE 142868 . 144587) (SETFONTDESCRIPTOR 144589 . 146053) (\STREAMCHARWIDTH 146055 . +150219) (\COERCECHARSET 150221 . 152160) (\BUILDSLUGCSINFO 152162 . 155785) (\FONTSYMBOL 155787 . +156437) (\DEVICESYMBOL 156439 . 157308) (\FONTFACE 157310 . 164500) (\FONTFACE.COLOR 164502 . 171422) +(SETFONTCHARENCODING 171424 . 172637)) (172640 191625 (FONTSAVAILABLE 172650 . 177396) (FONTEXISTS? +177398 . 181255) (\SEARCHFONTFILES 181257 . 184342) (FLUSHFONTSINCORE 184344 . 186181) (FINDFONTFILES +186183 . 189397) (SORTFONTSPECS 189399 . 191623)) (191626 195049 (MATCHFONTFACE 191636 . 192451) ( +MAKEFONTFACE 192453 . 193293) (FONTFACETOATOM 193295 . 195047)) (195277 195769 (\UNITWIDTHSVECTOR +195287 . 195767)) (211369 213436 (FONTDESCRIPTOR.DEFPRINT 211379 . 212958) (FONTCLASS.DEFPRINT 212960 + . 213434)) (217265 219947 (\CREATEKERNELEMENT 217275 . 217633) (\FSETLEFTKERN 217635 . 218126) ( +\FGETLEFTKERN 218128 . 219945)) (219948 229370 (\CREATEFONT 219958 . 221289) (\CREATECHARSET 221291 . +225121) (\INSTALLCHARSETINFO 225123 . 228457) (\INSTALLCHARSETINFO.CHARENCODING 228459 . 229368)) ( +229692 231056 (\FONTRESETCHARWIDTHS 229702 . 231054)) (231686 241600 (\CREATEDISPLAYFONT 231696 . +233545) (\CREATECHARSET.DISPLAY 233547 . 239123) (\FONTEXISTS?.DISPLAY 239125 . 241598)) (241601 +256466 (STRIKEFONT.FILEP 241611 . 242499) (STRIKEFONT.GETCHARSET 242501 . 248093) (WRITESTRIKEFONTFILE + 248095 . 253006) (STRIKECSINFO 253008 . 256464)) (256497 272814 (MAKEBOLD.CHARSET 256507 . 260156) ( +MAKEBOLD.CHAR 260158 . 261910) (MAKEITALIC.CHARSET 261912 . 265585) (MAKEITALIC.CHAR 265587 . 267933) +(\SFMAKEBOLD 267935 . 270159) (\SFMAKEITALIC 270161 . 272812)) (272815 276964 (\SFMAKEROTATEDFONT +272825 . 274226) (\SFROTATECSINFO 274228 . 274865) (\SFROTATEFONTCHARACTERS 274867 . 275247) ( +\SFROTATECSINFOOFFSETS 275249 . 276962)) (276965 278346 (\SFMAKECOLOR 276975 . 278344))))) STOP diff --git a/sources/FONT.LCOM b/sources/FONT.LCOM index 88e8a0e44ea33ba054c6a9e1ea091f347c7d2a41..e22513ac78b4711f4a77728a80da34476fbb95d2 100644 GIT binary patch delta 793 zcmZuvL2DC16n0H(+aOYDENIjA5fBZSFf*G?vQe!GjkM zdX=JaE_(9d#an9^@z~$sPw2%uF}*``-J$@4fl`e&XYYiMQ)Hf=X)p zNr@oh0rDHJ-|%XKM|ZBfMaUNZNg~|v@L+#o?QFbUE*D^H^V#+moWqj_LWN@Xc9RPh zB#deno&${-P2R~*yFls~SCLt97Q7x!6l5dSl#y=I4i}s$phC;Dfg&{Gg!Q=Ws#0jX zn@f(Hesg}_n1?2K5V9ui3O%eS!iB?$i)Jt1n+)mKOxIjl+{sjYFoWgXJYd&@2V;Rj z+Y&PkzH2@$wr^Fy$__PM6)Xl^CBQqh#bm4idmbolvmL<1JUyAa?4H4uPLJ`ge%^Y))iLpy zQ1@e|ir{>obm#v)17rNrQLT0>tkqF^*gIlKn0C7@~Bm2Yh5b9^}O_GciCA& zFodxU%_7BRq`)OL`1?%VH=hd&mbd;N+6%|ijyd|WG*vykil)|Q&CJ28%w2m94w?@M zD4C2Vu3{D_AhvBcvJ60w3lU9Pc5?MPD5{hU0N1R*(`yw$Acg%Xx?`8d0i&_VIFT_} zoS;gBM~t7|%wWG}Hq+cSGP0p)k8&~G(P%5?<$lh^9y%Qbj{=$4OvMEmi9Yz2(rSZx TZB!gG6(l^?GD%O;7aM;7-%{7f delta 741 zcmZuu&1(}u6wgZRNAO^=7PLuyEVURR>C8?xnT?{IZYIgXW_R7$#0Da$v>=G6peGSQ zJc%Do=b|UC9wni>!#n3s z8AZtH7?s4vy^?_p6R=fBX1!7yewe?ozg{kvby&agU}GH)!JAdRm^;^WTyBS)MZ6(5 zH8KeX#mJ;`MVmj`^aSMOurRw+gnAJ2p5u2#siCl-gY}Q!Aa&EMBO>!!UPJM=_UrUS z5i;9ZO@7b!rrYe(1B?@CdA${9I@+Qc!vt5nFY6 z0JvHOr^8y@4+LP-0uiZhM}7@w3mDh-LoEXuyve$5)bzb5b{6iQkl*mdc-i>fS9-J` z$20NDi_6;7qxg2J=h@3Gox&i2i+*R-ccFr4!r*wVGQZMgE)bK(^wk-S5J+HrE#jVV ze3c9#2=<;pj7q9A)fe>xF5-u;-|I;dJ5w1+M+-UY%M99$;@arx#HCcl&r$QHV)etZ zZV_->fT8%hp5g%mS>Um-rQBN;5KIW)22AnZwMxMDUA4uiqpUlCQ7SbE{QzndTqYtg zP5C@N`@~Saf#58(+liZG`D!kuV{d}>nByj~1Fn$+ZdCgJ;}}8+tGXIG&d~8}KUBXf eRq#Ex50kaplan>Local>medley3.5>working-medley>sources>MCCS.;137 51129 +(FILECREATED "20-Sep-2025 09:45:41" {WMEDLEY}MCCS.;138 51315 :EDIT-BY rmk - :CHANGES-TO (FNS \MCCS.24BITENCODING.ERROR \MCCSINCCODE \MCCSPEEKCCODE) + :CHANGES-TO (FNS MCCSMAPPAIRS) - :PREVIOUS-DATE " 7-Sep-2025 22:43:03" -{DSK}kaplan>Local>medley3.5>working-medley>sources>MCCS.;136) + :PREVIOUS-DATE " 9-Sep-2025 22:45:13" {WMEDLEY}MCCS.;137) (PRETTYCOMPRINT MCCSCOMS) @@ -1240,45 +1238,48 @@ NIL]) (MCCSMAPPAIRS - [LAMBDA (FROMENCODING NONIDENTITY) (* ; "Edited 6-Sep-2025 16:43 by rmk") + [LAMBDA (FROMENCODING NONIDENTITY) (* ; "Edited 20-Sep-2025 09:45 by rmk") + (* ; "Edited 6-Sep-2025 16:43 by rmk") (* ; "Edited 31-Aug-2025 16:16 by rmk") - (* ;; "Returns the pairs for MOVEFONTCHARS to use to move charset-0 glyphs into their MCCS positions. For example, the Leftarrow and Lowline glyphs switch positions in an XCCS$ font.") - - (LET (PAIRS) - [SETQ PAIRS (SELECTQ FROMENCODING - (GACHA (* ; "ctrl and upper are slugged") - [APPEND (XCCSUNDEFINEDPAIRS) - '(((Uparrow TERMINAL) - Circumflex) - (^X Lowline]) - (ALTOTEXT (APPEND (XCCSUNDEFINEDPAIRS) - ALTOTEXT2MCCS)) - (XCCS$ '((Uparrow Circumflex) - (Leftarrow Lowline) - (Lowline Leftarrow) - (Circumflex Uparrow))) - (for C M (FN _ (MCCSMAPFN FROMENCODING)) from 0 to \MAXTHINCHAR - when (SETQ M (APPLY* FN C NONIDENTITY)) collect (LIST C M] - - (* ;; "Weed out interspersed comments") - - (for P in PAIRS when (LISTP P) unless (EQ '* (CAR P)) - collect (LIST (if (LISTP (CAR P)) - then - (* ;; - "Allows for the (Uparrow TERMINAL) case above, for MOVEFONTCHARS") - - (CONS (CL:IF (CHARCODEP (CAAR P)) - (CAAR P) - (CHARCODE.DECODE (CAAR P))) - (CDAR P)) - elseif (CHARCODEP (CAR P)) - then (CAR P) - else (CHARCODE.DECODE (CAR P))) - (CL:IF (CHARCODEP (CADR P)) - (CADR P) - (CHARCODE.DECODE (CADR P)))]) + (* ;; "Returns the pairs for MOVEFONTCHARS to use to move charset-0 glyphs into their MCCS positions. For example, the Leftarrow and Lowline glyphs switch positions in an XCCS$ font. Returns NIL (= nothing to do) if there is no function.") + + (LET ((FN (MCCSMAPFN FROMENCODING)) + PAIRS) + (CL:WHEN FN + [SETQ PAIRS (SELECTQ FROMENCODING + (GACHA (* ; "ctrl and upper are slugged") + [APPEND (XCCSUNDEFINEDPAIRS) + '(((Uparrow TERMINAL) + Circumflex) + (^X Lowline]) + (ALTOTEXT (APPEND (XCCSUNDEFINEDPAIRS) + ALTOTEXT2MCCS)) + (XCCS$ '((Uparrow Circumflex) + (Leftarrow Lowline) + (Lowline Leftarrow) + (Circumflex Uparrow))) + (for C M from 0 to \MAXTHINCHAR when (SETQ M (APPLY* FN C NONIDENTITY)) + collect (LIST C M] + + (* ;; "Weed out interspersed comments") + + [for P in PAIRS when (LISTP P) unless (EQ '* (CAR P)) + collect (LIST (if (LISTP (CAR P)) + then + (* ;; + "Allows for the (Uparrow TERMINAL) case above, for MOVEFONTCHARS") + + (CONS (CL:IF (CHARCODEP (CAAR P)) + (CAAR P) + (CHARCODE.DECODE (CAAR P))) + (CDAR P)) + elseif (CHARCODEP (CAR P)) + then (CAR P) + else (CHARCODE.DECODE (CAR P))) + (CL:IF (CHARCODEP (CADR P)) + (CADR P) + (CHARCODE.DECODE (CADR P)))])]) (XCCSUNDEFINEDPAIRS [LAMBDA NIL (* ; "Edited 2-Sep-2025 13:14 by rmk") @@ -1366,14 +1367,14 @@ CCODE]) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2914 14485 (\MCCSINCCODE 2924 . 6012) (\MCCSPEEKCCODE 6014 . 8901) (\MCCSOUTCHAR 8903 - . 11002) (\MCCSBACKCCODE 11004 . 12548) (\MCCSFORMATBYTESTREAM 12550 . 13280) (\MCCSCHARSETFN 13282 - . 14483)) (14486 15368 (\CREATE.MCCS.EXTERNALFORMAT 14496 . 15366)) (15369 16346 ( -\MCCS.24BITENCODING.ERROR 15379 . 16344)) (17722 20360 (MTOXCODE 17732 . 18529) (XTOMCODE 18531 . -19188) (XTOMSTRING 19190 . 19775) (MTOXSTRING 19777 . 20358)) (20361 22021 (MTOX$CODE 20371 . 21103) ( -X$TOMCODE 21105 . 22019)) (22022 22662 (KANJICHARSETP 22032 . 22288) (CHINESECHARSETP 22290 . 22660)) -(40783 42657 (MCCSCODEMAPARRAY 40793 . 42655)) (43186 47041 (MCCSMAPFN 43196 . 44408) (MCCSMAPPAIRS -44410 . 46733) (XCCSUNDEFINEDPAIRS 46735 . 47039)) (47117 51106 (GACHATOMCODE 47127 . 47639) ( -SYMBOLTOMCODE 47641 . 48289) (SIGMATOMCODE 48291 . 48937) (ATOMCODE 48939 . 49471) (MATHTOMCODE 49473 - . 50129) (HIPPOTOMCODE 50131 . 50668) (CYRILLICTOMCODE 50670 . 51104))))) + (FILEMAP (NIL (2791 14362 (\MCCSINCCODE 2801 . 5889) (\MCCSPEEKCCODE 5891 . 8778) (\MCCSOUTCHAR 8780 + . 10879) (\MCCSBACKCCODE 10881 . 12425) (\MCCSFORMATBYTESTREAM 12427 . 13157) (\MCCSCHARSETFN 13159 + . 14360)) (14363 15245 (\CREATE.MCCS.EXTERNALFORMAT 14373 . 15243)) (15246 16223 ( +\MCCS.24BITENCODING.ERROR 15256 . 16221)) (17599 20237 (MTOXCODE 17609 . 18406) (XTOMCODE 18408 . +19065) (XTOMSTRING 19067 . 19652) (MTOXSTRING 19654 . 20235)) (20238 21898 (MTOX$CODE 20248 . 20980) ( +X$TOMCODE 20982 . 21896)) (21899 22539 (KANJICHARSETP 21909 . 22165) (CHINESECHARSETP 22167 . 22537)) +(40660 42534 (MCCSCODEMAPARRAY 40670 . 42532)) (43063 47227 (MCCSMAPFN 43073 . 44285) (MCCSMAPPAIRS +44287 . 46919) (XCCSUNDEFINEDPAIRS 46921 . 47225)) (47303 51292 (GACHATOMCODE 47313 . 47825) ( +SYMBOLTOMCODE 47827 . 48475) (SIGMATOMCODE 48477 . 49123) (ATOMCODE 49125 . 49657) (MATHTOMCODE 49659 + . 50315) (HIPPOTOMCODE 50317 . 50854) (CYRILLICTOMCODE 50856 . 51290))))) STOP diff --git a/sources/MCCS.LCOM b/sources/MCCS.LCOM index c59ae01b85d5ba5ae2377917c6e7de5a1d9ed47d..3f8baaf22dd86356cf9935029abac8c64b54a329 100644 GIT binary patch delta 728 zcmcb&lyUMB#tGr|Mh3dUsRg=521cd|29{PPrdB3KN(vfE$@#ejnK`K`3i){oN($BC zzOF7lu93Ai#rdU0$*IM5zRu3Ude(-<7McoNN@#`{7+RScDk&rtrNT`~ttcoeR<%+9 zY4ddq2ypZa3RcL>Q>a&R3-$3)KsG>6Pftl9C9wo(H>Sx(Rt5%2np_%go<6S5L9UJ= zt}Y7b)`R>2v>uO}6-*6{4NVoSTwNw#U=$a0^9xqsLU!3?MJ8bbOGLmJ8G!=E&={Yg z=9_z&w(|=)D+DMQDnR@fpkScj<~KP^$Xu6)myvSun z01SK!I1i@6(9#qx2K0~xrWuB2$Yz)sD8vAx)z#0%NWs)tAp#i9p?)r|Zk~Rw2`-S( zFg8ahF)~L{0##uOOCD~1z$i8}HB!)00NMgFOhv)ORKd|F#6QF}A_V9j1$RfFr+}&y T%uOcOiG(s48*RQS!f6KpJJGy- delta 879 zcmbQdgz?@|#tGr|3YNOTsRg=521cd|Mn+a9rdEa~N(vfE$@#ejnK`K`3i){oN(x-n zF2UZlHlf9-Ma6d6i3K@{d3HYe$%#33xv42Rsg=fhrgr7|McJ8o>ADaRyW;%PqU6+K zJ6~t#U_EO?V{=WQIY^cnnpznfSeY6c15HmVN`>2(T2W9`tZJnY1JdZ}=j`n7;tJse zxVm~nxRd2MrCc+C4s#3j@lilFRZmY3XkJQU3DD(OtTQrJ(&W-`^Yn3b4svx2adny8 z%P8SR4c{r48X6i|P7Y+0X5^ZjFCklx&jXqYRslh-VV?e>!MZL$X8@gQjv5WdRtBJe zAwSqTVc~AJ`2gc~ejztMg#ZO31!o{>pb+5b85BIZQ_!4)iF4SK4h#h&3xpCw3oI&t>Bi91KtW5v6e6plU~Hz~=o8`};u;a6V5#8l e2=o+Ckpj>e8j~Z Date: Sat, 20 Sep 2025 10:43:00 -0700 Subject: [PATCH 16/40] Pushing all of the medleyformat display fonts --- .../AMTEX10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3208 bytes .../APL14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3172 bytes .../ARROWS10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5326 bytes .../ARROWSTWO10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2074 bytes .../ASTERISK10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2656 bytes .../BLOCKFONT10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3348 bytes .../BOLDPS10-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 25667 bytes .../BOLDPS10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 27861 bytes .../BOLDPS10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 25700 bytes .../BOLDPS10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 28213 bytes .../BRAVOX12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 9533 bytes .../CARDSTWO12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2908 bytes .../CARDSZERO12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2956 bytes .../CHINESE12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1924 bytes .../CLARITY12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2835 bytes .../CLARITY14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5521 bytes .../CLASSIC06-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 24439 bytes .../CLASSIC06-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 20395 bytes .../CLASSIC06-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 24199 bytes .../CLASSIC08-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 38579 bytes .../CLASSIC08-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 30636 bytes .../CLASSIC08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 260095 bytes .../CLASSIC10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 40043 bytes .../CLASSIC10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 31494 bytes .../CLASSIC10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 292865 bytes .../CLASSIC12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 35213 bytes .../CLASSIC12-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 31017 bytes .../CLASSIC12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 483833 bytes .../CLASSIC14-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 34507 bytes .../CLASSIC14-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 29761 bytes .../CLASSIC14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 378245 bytes .../CLASSIC18-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 36877 bytes .../CLASSIC18-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 31373 bytes .../CLASSIC18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 431807 bytes .../CLASSIC24-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 45421 bytes .../CLASSIC24-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 38579 bytes .../CLASSIC24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 821279 bytes .../CLASSIC48-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 97619 bytes .../CLASSIC48-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 65727 bytes .../CLASSIC48-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 93069 bytes .../CLASSIC72-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 125055 bytes .../CLASSIC72-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 119449 bytes .../CLASSIC72-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 130955 bytes .../CLASSICPIONE08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2702 bytes .../CLASSICPIONE10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3106 bytes .../CLASSICPIONE12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3468 bytes .../CLASSICPIONE14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4012 bytes .../CLASSICTHIN16-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 7724 bytes .../CLASSICTHIN16-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 7732 bytes .../CLASSICTHIN20-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 7816 bytes .../CLASSICTHIN20-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 7824 bytes .../CLASSICTHIN26-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 7800 bytes .../CLASSICTHIN26-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 7762 bytes .../CLASSICTHIN30-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 7916 bytes .../CLASSICTHIN30-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 7862 bytes .../CREAM10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 9221 bytes .../CREAM12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 9553 bytes .../CYRILLIC10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 20703 bytes .../CYRILLIC12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 24183 bytes .../DANATEN10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4402 bytes .../DANATWELVE12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2000 bytes .../DANATWELVE14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2038 bytes .../DANCER10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5847 bytes .../DANCER12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5157 bytes .../ELITE10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2932 bytes .../GACHA08-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 13109 bytes .../GACHA08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 13302 bytes .../GACHA10-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 13627 bytes .../GACHA10-MRR.MEDLEYDISPLAYFONT | Bin 14590 -> 13976 bytes .../GACHA12-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 16155 bytes .../GACHA12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 16617 bytes .../GATES10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2386 bytes .../GATES32-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4912 bytes .../HELVETICA03-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 8017 bytes .../HELVETICA04-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 8117 bytes .../HELVETICA05-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4565 bytes .../HELVETICA07-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 8726 bytes .../HELVETICA07-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 8693 bytes .../HELVETICA08-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26284 bytes .../HELVETICA08-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 26229 bytes .../HELVETICA08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 28707 bytes .../HELVETICA09-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 9082 bytes .../HELVETICA09-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 10450 bytes .../HELVETICA10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 25542 bytes .../HELVETICA10-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 26618 bytes .../HELVETICA10-MRR.MEDLEYDISPLAYFONT | Bin 14680 -> 29739 bytes .../HELVETICA11-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 10990 bytes .../HELVETICA12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 27943 bytes .../HELVETICA12-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 26386 bytes .../HELVETICA12-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 30680 bytes .../HELVETICA12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 34731 bytes .../HELVETICA13-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 11402 bytes .../HELVETICA14-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 27416 bytes .../HELVETICA14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 31446 bytes .../HELVETICA16-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 32102 bytes .../HELVETICA18-BRC.MEDLEYDISPLAYFONT | Bin 0 -> 21075 bytes .../HELVETICA18-LRR.MEDLEYDISPLAYFONT | Bin 0 -> 17540 bytes .../HELVETICA18-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 29314 bytes .../HELVETICA18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 33576 bytes .../HELVETICA24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 45452 bytes .../HELVETICA30-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 49441 bytes .../HELVETICA32-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 51893 bytes .../HELVETICA36-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 19244 bytes .../HELVETICAD24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 13486 bytes .../HIPPO08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 22918 bytes .../HIPPO10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 24351 bytes .../HIPPO12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 27703 bytes .../HIPPO18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 23154 bytes .../IBM-US14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5430 bytes .../IBM-US16-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4630 bytes .../IBM14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5412 bytes .../IBM16-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4612 bytes .../IBMREV14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5430 bytes .../IBMREV16-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4630 bytes .../LETTERGOTHIC10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 22492 bytes .../LETTERGOTHIC10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 22036 bytes .../LETTERGOTHIC12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3234 bytes .../LOGO12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1924 bytes .../LOGO14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1934 bytes .../LOGO18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1990 bytes .../LOGO20-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2030 bytes .../LOGO24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3553 bytes .../LOGO26-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2158 bytes .../MATH08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 27039 bytes .../MATH10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 27787 bytes .../MATH12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 28547 bytes .../MATH12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 32797 bytes .../MODERN06-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 20615 bytes .../MODERN06-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 21619 bytes .../MODERN06-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 20457 bytes .../MODERN06-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 24203 bytes .../MODERN08-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 27319 bytes .../MODERN08-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 28919 bytes .../MODERN08-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 27346 bytes .../MODERN08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 38045 bytes .../MODERN10-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 28011 bytes .../MODERN10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 30168 bytes .../MODERN10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 28049 bytes .../MODERN10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 43370 bytes .../MODERN12-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 30915 bytes .../MODERN12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 31350 bytes .../MODERN12-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 30843 bytes .../MODERN12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 188300 bytes .../MODERN14-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 29701 bytes .../MODERN14-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 29084 bytes .../MODERN14-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 29603 bytes .../MODERN14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 43377 bytes .../MODERN18-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 31897 bytes .../MODERN18-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 31040 bytes .../MODERN18-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 31675 bytes .../MODERN18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 47549 bytes .../MODERN24-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 38239 bytes .../MODERN24-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 37038 bytes .../MODERN24-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 38031 bytes .../MODERN24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 59033 bytes .../MODERN30-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 34885 bytes .../MODERN30-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 35135 bytes .../MODERN30-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 34267 bytes .../MODERN30-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 48127 bytes .../MODERN36-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 41575 bytes .../MODERN36-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 41943 bytes .../MODERN36-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 40651 bytes .../MODERN36-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 58817 bytes .../MODERN48-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 91169 bytes .../MODERN48-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 64085 bytes .../MODERN48-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 93649 bytes .../MODERN72-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 119295 bytes .../MODERN72-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 120111 bytes .../MODERN72-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 119177 bytes .../MODERN72-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 129277 bytes .../MUSIC08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1900 bytes .../MUSIC09-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1912 bytes .../MUSIC10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1912 bytes .../MUSIC12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1960 bytes .../MUSIC14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1976 bytes .../MUSICFONT10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4720 bytes .../OLDENGLISH10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 6501 bytes .../OLDENGLISH18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 8311 bytes .../OPTIMA06-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 26523 bytes .../OPTIMA06-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 27461 bytes .../OPTIMA06-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 26523 bytes .../OPTIMA06-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 27361 bytes .../OPTIMA07-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 26199 bytes .../OPTIMA07-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26209 bytes .../OPTIMA07-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 26219 bytes .../OPTIMA07-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 26229 bytes .../OPTIMA08-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 32821 bytes .../OPTIMA08-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 33603 bytes .../OPTIMA08-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 32894 bytes .../OPTIMA08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 34911 bytes .../OPTIMA09-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 26093 bytes .../OPTIMA09-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26119 bytes .../OPTIMA09-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 25589 bytes .../OPTIMA09-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 26021 bytes .../OPTIMA10-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 34115 bytes .../OPTIMA10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 35969 bytes .../OPTIMA10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 33637 bytes .../OPTIMA10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 36164 bytes .../OPTIMA11-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 27059 bytes .../OPTIMA11-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26849 bytes .../OPTIMA11-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 26949 bytes .../OPTIMA11-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 26815 bytes .../OPTIMA12-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 37143 bytes .../OPTIMA12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 37466 bytes .../OPTIMA12-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 37239 bytes .../OPTIMA12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 40626 bytes .../OPTIMA14-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 36017 bytes .../OPTIMA14-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 35416 bytes .../OPTIMA14-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 35287 bytes .../OPTIMA14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 37477 bytes .../OPTIMA18-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 38331 bytes .../OPTIMA18-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 37618 bytes .../OPTIMA18-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 37689 bytes .../OPTIMA18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 40413 bytes .../OPTIMA24-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 45191 bytes .../OPTIMA24-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 44278 bytes .../OPTIMA24-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 44199 bytes .../OPTIMA24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 48307 bytes .../PALATINO10-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 4003 bytes .../PALATINO10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 3786 bytes .../PALATINO10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 3635 bytes .../PALATINO10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3660 bytes .../PALATINO12-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 4499 bytes .../PALATINO12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 4502 bytes .../PALATINO12-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 4375 bytes .../PALATINO12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 4378 bytes .../PALATINO14-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 5357 bytes .../PALATINO14-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 5330 bytes .../PALATINO14-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 5153 bytes .../PALATINO14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 5246 bytes .../PALATINO18-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 7547 bytes .../PALATINO18-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 7474 bytes .../PALATINO18-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 7211 bytes .../PALATINO18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 7366 bytes .../PALATINO24-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 11303 bytes .../PALATINO24-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 11162 bytes .../PALATINO24-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 10781 bytes .../PALATINO24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 10976 bytes .../PCTERMINAL12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 30845 bytes .../PCTERMINAL12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 30075 bytes .../PCTERMINAL14-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 30905 bytes .../PCTERMINAL14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 30839 bytes .../PHONETICTR12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3186 bytes .../ROMANPS10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2688 bytes .../ROMANPS12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2970 bytes .../SAIL10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 3148 bytes .../SAIL10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3154 bytes .../SAIL12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3598 bytes .../SIGMA20-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 21370 bytes .../SMALLTALK10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2964 bytes .../SNAIL10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 3154 bytes .../SNAIL10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3160 bytes .../SNAIL12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3604 bytes .../SYMBOL10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 27548 bytes .../TEMPLATE10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2364 bytes .../TEMPLATE64-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 11738 bytes .../TERMINAL06-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 30369 bytes .../TERMINAL06-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 33302 bytes .../TERMINAL08-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 41152 bytes .../TERMINAL08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 41292 bytes .../TERMINAL10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 42923 bytes .../TERMINAL10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 43457 bytes .../TERMINAL12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 46167 bytes .../TERMINAL12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 49724 bytes .../TESTFONT12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3514 bytes .../TIMESROMAN06-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 15159 bytes .../TIMESROMAN08-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26406 bytes .../TIMESROMAN08-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 23209 bytes .../TIMESROMAN08-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 26019 bytes .../TIMESROMAN08-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 25758 bytes .../TIMESROMAN09-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 8908 bytes .../TIMESROMAN09-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 10479 bytes .../TIMESROMAN10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26286 bytes .../TIMESROMAN10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 23678 bytes .../TIMESROMAN10-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 27032 bytes .../TIMESROMAN10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 30030 bytes .../TIMESROMAN11-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 10951 bytes .../TIMESROMAN12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 26556 bytes .../TIMESROMAN12-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 26716 bytes .../TIMESROMAN12-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 30574 bytes .../TIMESROMAN12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 34856 bytes .../TIMESROMAN13-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 11551 bytes .../TIMESROMAN14-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 27326 bytes .../TIMESROMAN14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 31702 bytes .../TIMESROMAN16-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 12191 bytes .../TIMESROMAN18-MRC.MEDLEYDISPLAYFONT | Bin 0 -> 28988 bytes .../TIMESROMAN18-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 33556 bytes .../TIMESROMAN36-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 11135 bytes .../TIMESROMAND24-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 12845 bytes .../TIMESROMAND30-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 18579 bytes .../TIMESROMAND36-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 20801 bytes .../TIMESROMAND72-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 43051 bytes .../TITAN10-BIR.MEDLEYDISPLAYFONT | Bin 0 -> 25399 bytes .../TITAN10-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 24730 bytes .../TITAN10-MIR.MEDLEYDISPLAYFONT | Bin 0 -> 25414 bytes .../TITAN10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 25124 bytes .../TITAN12-BRR.MEDLEYDISPLAYFONT | Bin 0 -> 31473 bytes .../TITAN12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 34510 bytes .../TITAN14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 14455 bytes .../TITANLEGAL12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 16197 bytes .../TITANLEGAL14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 14481 bytes .../TONTO14-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3117 bytes .../VISIBLE10-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 1918 bytes .../XEROXBOOK12-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 2896 bytes .../XEROXLOGO48-MRR.MEDLEYDISPLAYFONT | Bin 0 -> 3448 bytes 305 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 fonts/medleydisplayfonts/AMTEX10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/APL14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/ARROWS10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/ARROWSTWO10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/ASTERISK10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/BLOCKFONT10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/BOLDPS10-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/BOLDPS10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/BOLDPS10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/BOLDPS10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/BRAVOX12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CARDSTWO12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CARDSZERO12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CHINESE12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLARITY12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLARITY14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC06-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC06-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC06-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC08-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC08-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC12-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC14-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC14-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC18-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC18-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC24-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC24-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC48-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC48-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC48-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC72-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC72-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSIC72-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICPIONE08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICPIONE10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICPIONE12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICPIONE14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN16-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN16-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN20-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN20-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN26-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN26-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN30-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CLASSICTHIN30-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CREAM10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CREAM12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CYRILLIC10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/CYRILLIC12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/DANATEN10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/DANATWELVE12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/DANATWELVE14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/DANCER10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/DANCER12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/ELITE10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GACHA08-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GACHA08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GACHA10-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GACHA12-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GACHA12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GATES10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/GATES32-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA03-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA04-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA05-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA07-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA07-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA08-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA08-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA09-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA09-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA10-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA11-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA12-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA12-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA13-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA14-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA16-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA18-BRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA18-LRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA18-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA30-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA32-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICA36-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HELVETICAD24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HIPPO08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HIPPO10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HIPPO12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/HIPPO18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/IBM-US14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/IBM-US16-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/IBM14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/IBM16-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/IBMREV14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/IBMREV16-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LETTERGOTHIC10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LETTERGOTHIC10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LETTERGOTHIC12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LOGO12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LOGO14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LOGO18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LOGO20-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LOGO24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/LOGO26-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MATH08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MATH10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MATH12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MATH12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN06-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN06-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN06-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN06-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN08-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN08-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN08-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN10-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN12-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN12-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN14-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN14-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN14-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN18-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN18-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN18-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN24-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN24-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN24-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN30-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN30-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN30-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN30-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN36-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN36-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN36-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN36-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN48-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN48-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN48-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN72-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN72-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN72-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MODERN72-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MUSIC08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MUSIC09-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MUSIC10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MUSIC12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MUSIC14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/MUSICFONT10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OLDENGLISH10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OLDENGLISH18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA06-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA06-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA06-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA06-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA07-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA07-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA07-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA07-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA08-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA08-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA08-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA09-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA09-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA09-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA09-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA10-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA11-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA11-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA11-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA11-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA12-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA12-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA14-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA14-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA14-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA18-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA18-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA18-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA24-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA24-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA24-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/OPTIMA24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO10-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO12-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO12-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO14-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO14-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO14-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO18-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO18-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO18-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO24-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO24-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO24-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PALATINO24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PCTERMINAL12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PCTERMINAL12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PCTERMINAL14-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PCTERMINAL14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/PHONETICTR12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/ROMANPS10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/ROMANPS12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SAIL10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SAIL10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SAIL12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SIGMA20-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SMALLTALK10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SNAIL10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SNAIL10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SNAIL12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/SYMBOL10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TEMPLATE10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TEMPLATE64-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL06-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL06-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL08-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TERMINAL12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TESTFONT12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN06-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN08-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN08-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN08-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN08-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN09-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN09-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN10-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN11-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN12-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN12-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN13-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN14-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN16-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN18-MRC.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN18-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAN36-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAND24-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAND30-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAND36-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TIMESROMAND72-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN10-BIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN10-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN10-MIR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN12-BRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITAN14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITANLEGAL12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TITANLEGAL14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/TONTO14-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/VISIBLE10-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/XEROXBOOK12-MRR.MEDLEYDISPLAYFONT create mode 100644 fonts/medleydisplayfonts/XEROXLOGO48-MRR.MEDLEYDISPLAYFONT diff --git a/fonts/medleydisplayfonts/AMTEX10-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/AMTEX10-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..3e2f438de1d62b67902b43c50d95a6c2d84d08d2 GIT binary patch literal 3208 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/ARROWS10-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/ARROWS10-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..394fbb47180d8f5b828bf59fdb7b93e0a32c9f71 GIT binary patch literal 5326 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 H^H1hal!n-# literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/ASTERISK10-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/ASTERISK10-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..c0f553ab31c32ec4890d1c27ca774e60622c34d7 GIT binary patch literal 2656 zcmeHJZ-@<16hG%&*)?UOh_W#~5%To**<~#)vom-04fE$U_wKG;e`?vsZZOT+q7$2ANZu_19Lx|IcLs2=lA>FQ+K>vM|ZAY zU$<%F7Ok0w!U=pG0W`~yT!%zDl@z(2WIC0u(NhcRs^`_EYZ6)@Gd#2dUuMG~D|GN3 zR~sDsUZz48Z+6URtL2ESYqV-AW(Ho?<&tN0ka55^JjZR-!4Q&%j#w54h115P-dZ6; z6`A32%W3lTkT*8DMp(2nwUxp)de`PQZizOODbLCkT~KZ&*R{Sg|1k`tA&ayW8sRoI zwm6o|#Cugl2A*jO+s`u@Vj;5J)U~Q%IMXq}xxYbH9c6%4GbDhJLBv~0l-DgUkZLka zy%?8ixDjWSsa&JE(aad(&q!5-`(|J{e&aA$DnDZgm)mj~5B19L&J8sYo+t0 z^KhgFs+8bT$S|&zNF}sFC}v;^$G3w##Bvcdh0%HZK`CrUaZT)KiB8z%tveT~3GA)! z=<4n1Ztu@KYg6^b0jWwQy)aCgsX2wYQrs3+MUcfWBq{RLVgZHD0Fa>U|N6%j04=a> zHTQ*yfJl!D7!Q>&6=p#d)WTx0!2<~^U=4IZ4{U>7un!KwF*pTh;UZjx8*m%$!UK2= z&)_Azg%9uLo+=B=3FrL8Ecn&Y)HN1&; z@E$(IC-@v+<2(F_UvQ8{(r6k-lPEzmDMj9@+8Cjj!k!VJ6jJ{+KjVLdf=>vHwJiqk#tdf~NsO@<*u)m_R cWae*hEZG4T8udY`pTE&jUBtux@`~5*4~4$}8vpuV{p9=ZJ?Gr>JLlZEyQS6P>@>oQPM7sKvrwcS$F~H8^92*;W48=;`_G)k4drZQ^B0#KTekR51-{3Wdfx5wTD--)7|i4BXg=w%d0SAe zQD9zItJUhUx2dUYr{QTAtVX_eXP|XTga`jiXot`O_~*7u;PJXJb5y# zz^oQ0Ce19_(sH8N+G274Yp6^jv{_v?M_cpGxY&jki^nP0y~hQ2Tj5lgRCw9zw%8ql z(^jYYR^##VzGT&t`t40QK-9A9gliOXP()YMN{<3JgEB_kt;;VBuuXA z)TmV}Hg40|>Wg^+@3Pxj>l>Ah-~<4rvQNTZ_y(9cfn9J!8IM6Tw1O8-!Yj}NXJH5? z;D_*YcpH8LAE4E3_!#~Ke})un5K79)SBa7ACHu&;LWPPV!yiC#T8x z$vHAcE|Awrg#3tHB~#>=9ntPgimOH>5;_B6WztH1x-r}(eZC-rymGd^CIOq5m9o|+; zyODD3pa*=jf96N}OzHnA)XJ&knjT{2-im~FCKLj|?_4wiU>($*ZTv} zk>wE1p`mPjp)qBS`d@o8&@edP`0lrRI%kKqVW!f6j)bCS1G6i9($Nr`1?1ICRaQDQu1oO}>hxGnGhM&>^Wh4WS=^W)j>=-llNYhH$fhCqgM zcAp0@EKUvtmJAQ>&yUXMWHGaAW~C`Q5ZO$N@l@r_rR9juH+O4152Kq)qnoo^NWuxL zYf#*JZD3-z)P%37wD{?yfqOtA3D7B|+$&qjwL8|m42^xAYJdXbT;^CTz6g45>s;Wt=W?_jn8^TE&{_kuL0mmx1QbTFYP!Mdr0J~n3JwM5>1#E-`l+wubq~v;MJTwtDe))WikChJdLCe zKQ#Ed!rG9`NLV|Sbg5EYN>z1*y0wFNzE@!7FzCm?2S*c770O~qB|Vo>PO;<#St`>k0|(=%nEV%^YXY`*O3{z*24I`uwQmlg-%L5pgNFV(z=K)psp} zq^5I+@p+Pycs!Y=IEHd_X*7bGyWw1Nc~4Xt3kBGdTkQigtKMOJY9Ta{TV7K%2>TE|8 jMb%T#kJAE45h5vH)PA1#D(tVvN$hvy&VMGwAB+D4NHI+2 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/BOLDPS10-BIR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/BOLDPS10-BIR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..e87f2527704c17188c998b86918f065dcb8dc62f GIT binary patch literal 25667 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/BOLDPS10-BRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/BOLDPS10-BRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..75286380318e79f03ab5fe66c1c286eb279a9d3f GIT binary patch literal 27861 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/BOLDPS10-MIR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/BOLDPS10-MIR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..6c5a182dc9202b9fe53e2cb5557f4ed836d4e6c9 GIT binary patch literal 25700 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/BOLDPS10-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/BOLDPS10-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..5995635f5ae4c1a5e7b7a623adb39e16597b6c29 GIT binary patch literal 28213 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 Rux3o#LPo!6T?nbe2l_z$*fFtVM0RZk5V!kv1( zgK$!f&KF2>y4tE`hx8sC2|+9Msg?TYys(O_;o0>jcui2yzZiVcA zv%7YH5J*J0W4cIKOzZ+`pD%=hiAdxi#I9~w8Dd-ILAR43iRkT1|{AP`cy9AUQs z87=0+p`nq(7PI9=gSqqQk(ZA07NaT<_PT?fKySD&80ZTbP_NIgLWopik;{G3=Y*~< zU#QRTIHSTcXP~Fg?+&~B3@9uLJdPfp|BL}04?0c;PK%lZ7SuNLN6<_ahyL=~l z3_*AI3BMy)yFaV?Zph;piwwQ-7IbLBCD%}`_!KUBhh7_g6<4;Xf`PCjTze?Y67rwu zKILF~p2+Lom3@(bjj*#E&34hxi z?3L#OYjB?q2OS=t+wZbSY9*Ag3Tp|u!v=rADOx84)7P*MJ@&tYPXNPXH^Nr{Us>QG zE%5XUQU~^fhwNByUULbda8UFtMzgUd68)JoeWB!90A1x^IPK|eCL=<#8{XMFn< zIDEhR%sVz5j>ftMUmF{Fy?TwAt+!Bwegf@6Y6|}(#Ys2I16Kk<%ER*CakgDNo21ygN#=V=M_impa_s5!= zWKH<46!Z8wB<(Hoy#dDGJf7+v$>tV&Uq-5c#{(fyUJ;7^-CeMclwkX3&^OUb$b(Lx zSI`jp0g9qHx`Hxj7X1Q!fNr2g^cPe>|3YPgBAN*;(MCK=93fmpfH+OOO8k&`m$*v& zjQBP2J7SUeh*%|VlO%b7WXTuEmq{OaiX0+G$w~4GIYa)6yiWds{44n}`3dYr(K$1P z4%k57j9Pn1-^EW&d&ZL`eqo85<(6!@@!SRO7FXgkiy+Ko64$hMG%LNfVQyw%JdqTp zR?~J3E7`3B>}F>-*ln>srxF`EFgTu^y4q&C%Qi_4dSmCKnT5=JjcqK=mCV_)U4M2( zmq?~YtHP4{8H;X)pX&0&k`=x@E3u8`E|{0irH+Ng#BDw^joGw|!`Aboi-j@FHlLcH znVh0KPm`Cs|dRf}s%WV;S~VK6DA z+DtIJGTUNNeYU+n18l2cH(HO`QllkxKBLtY)J!^^5URrM&en6D7Jg_B&66#*))Ge#waY89bUHOUM=bGA4{Ayh+xqnuZ1lnms>yr)U$|QWG$z*lt}NOmU;#A`6RydEEe)vu1_*oDRnwS23G7r{LeN z6)+oKZxUMvuwA}#&UQm&8<+Q~T}xxO8Q7<{`SML{H#O|j^T3wlGdJ-*P1e|kxjTjN zM0yJEQ(*J^T4_s%2D52RlHFQiPQ7zyyLH3dRcm(Ldb{MviELJBFI+3A$C76=<%JBe z(QIo+PJL{WYqn*X%i4n4nTU)2jn`F(-y68OEcS2ZAK*gKybr{@ZU#0GQPsEfcprI-O@o0cY9Xqsjs4Q7{-SsBS+ALd$K&eCNl~aVUP!ir%MmQMr_4q+Q^pL$cDr7&hd2n zSYO!8R*$E0tY;z>J0-If^tQ&j-5}PB@f7dVTC6uQ2(e?ZLCxUIJNe)#0Jm3%K`wa;gJq5F%f z6ED{dAM+k`EA7~>0nuBwc@A}MDc=iW+g>RB;_KYeO?o6ZnXbawBE1IAZ)0vXZIfm5 zDV>;0a_xzBF&C#%Tp{N~8JJT^*LuY1dAVJZTb0|Tg;iMwIawd%>SL^KB&bi%1H0iP z`1cR_M_mF5pJz8Lxv9N-4{ZL-ocV4Xt_psy*-iiZ_uV3(kb|8MhpT>t<8 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CARDSTWO12-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CARDSTWO12-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..6593597f759c0ff6bef12128e9ce89450d9e2633 GIT binary patch literal 2908 zcmeHJO>Epm6n@X^WL+m|7pMeCG@V#QO+i7MO@p9~QhRN0)?#COs6+`-X%UBV=z#+gRmFh=(jq{m5*H5Kij?$HaRABzRHTaX#@=n5WcgD# zc19k*_vXzv-+S|R*7?%pROuvp`RI{j@{sAcmR(>7ARC%zGEh>P+sA z@Js~+d;W&mZt?)RcO?O?XH(ofMPc5;1o2HG*$a5-T8?7oo?O+22K21v)R~59;TE%? z+lEybh|uExScYV=6Khk5zeNm`*rnj-Kk{6*$vBd3a`e>ZOyRGLh`B7f5%iEAKd6 zdh)4SUGdoVb`xdyFH%yEQw|d7vKRmg(7fR;K^)p32AiRU#x@!y*hEh&J#l(ulK!bn z&_xJ)Q|%pU>k&52{5}HD0LXSG!|Oh*2;uRKb^todE$|p@hc0*q_Cgk1cmXD1 z3Qm9z^Y9j2fJ<;0K7(uU9W29-@H;l)1Go)$VJ~W!$5AZdEBG3o!ZOa|89a-Ncpl%! z5AYIxh#%o)`~*M6ukc&^9)G}J1r*wZM>op*{`y)5o|H9LHwzwJdo8kI)@4ynTV7r( zGC@ev`O>YvstK#Kf2~a4^Bf~7mbs^{6%uO=QJul|rG2-^(#`;GZhJzFPDW*#1{mW* zgVv|EvNY|ZcBp`ReubH&0nj{$JaY?i_cTm7$sIE zlw7&v`k1QDGZdu77vHP+e9_v5bWOtB3b9__2xVmFm#1$i#HDieiyM+Me&!K>y&s4I z{bX@}i8Yu5LYdrQl$HLSchpLyLy*$x%F)#*;qH8n-5+H%<3B=nme<3KTgaix(CGoigW~%(7o_y~ z`N|w*W59&DH#wYNhPh?Regf2Zc_N`n>bVOkH? zJ^t{yd`A10f3%CC1@h6+zc+&s? literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CARDSZERO12-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CARDSZERO12-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..bc353389f228a96c9bf7b51b3871249bdf3f9415 GIT binary patch literal 2956 zcmeH}QEU`N7=Zto+g@+iQtp;BIkCugsoI(pj{};52)nnt*V}M+d)?gvMI%ROMGRoI z1VxJ8U6ovGLJ>8=h-o2`_~MHZ#qi*jR*MgiK;nbq15$+tBLUHX5?g0>?@ANI2l2@` zlb!khe`db<|9|H8Hrd&+xpRl`-h6iTU2YO3Cr6ilt9Eg_rbzJYt(ipkv@I=5~k z3plE&on_TS)p+NojZe|R8Jua@vR#ggx??5UT2||-9Vf$HXEWPKDvA|LxuM()!%Az4 zz%7{WXvFbw;orEnh|BIQi`GKsg~(}(FJkYN@y{ArDmo|r$VjT8rzg(x|UEQF5C6T=76#+&9-dQfr(*} zE18@S6iZLV4A)1WWwe>(ME=cW#B>_1xN|i*9~YZ<+T-OD>Rb$4xEzr$5FgqKfU zk_C~*q-i!P;rXS@MWcIU0dd;8T~^AWa!wL0!2^IWc<-<>zz{+edF}$1v}N5xB+qTw zbWW91D@e zg;VJapEIk1^wc-%_5T$(BNn4qUvO>&9=Nj#01O@=84kj1xSvS#Ap%XX4C1g73@~90 zJOLf>G<3ms=z%;GU=O?r`{4k*4?J zqsLGO+Jd&B9<&<`pm)%F=mT^FeTqIqBj^is27QIjqVLcJ^b@*@enXSki#c44gE)jm z+<+g(P54n9#Vt62E!>XRc`Ylej6fI?wHy_8TT3PmRQQc0; zX#wLQm;vO?j=Tan?pw<8TP%NVC`>nFRw60}PhU|=O9G%~#p}B=*nH0UiH3)n`zno* z8`pmsKYFRVxA*Ay*vQ!M#cOlEy>#jM?(5_yAM%0U15zRHLMaR?*>w|y$-LSs4fT=# z9juM^h4KN-4qN0`pRb^*qUa}A*cXB@lP#j%)0mha zEHSe~g>!_dO1V%TX}pjD$mn%@Sic%Tm?6v@(t>fmo)?8YVMe2ZKwde4*J@6WhSG%( z8@QS^r&AYB9{Kp}8FO&rGT^x*d^TA@{A5%q-!O_B_}c7>Vu-8jXZ=hdz=P~>K_zBw zHt$P6l*>sH@eL;qN9I4UY5$?^?}|SxJQLOK4w~zVb19QWGs1n0GEq&KyXzm!H(&OW z1ztYhKa()8{9OIA!{p<$PRuGwC8m-q0-QKF>-)NR;ZR+ls0FGhGrdnLF>`t=0|NL+ z+TuY~^`k66NYv;0_EJCH*c$?I-p5NMcH(C?n}11}9F8C48Nxj7Ffn2J(s`gvSdokN z*Or+*lnI#?#f+#2DAUcSj9ezorx3tW4ub@kGDBrQaWu*WTd~8$d_}aslQQ?J(N;DX zS4HRCaZ`XCM=gsOnI~PqKPob!%VdN+=P(b?t`o{k-aO9*#b}9H`O52W6J}=bl53~f z@j~?|(2O!~bt{foH#k@6?&WjU|_ literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CHINESE12-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CHINESE12-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..b2c30551edc9a000f947cb8bf064d87f6fc3cfe5 GIT binary patch literal 1924 zcmc&#-D=c86h7J3Ql<+F-ibHkUWiiGX47rKDur=!k_=5UVP^hkdPUq zFbw>WE-yxbAM8>8>A__GU@{&OX%bYC%uS(Wp(*4dCAYUfiF1WG6Wsn93SFdZUirAp ziWChN6inraSSHdr1)hi;HC8??UZLH(-vqcEk1`C!G@}aRY06aleN0~Kh%Hab^Go}~ zmb1dLH9co0<=MOUZn004G|aTD96+5;<6{w;#4c}Cn;DsLuA{srvLc}iKAz7@{j-k literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLARITY12-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLARITY12-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..f73a89b884b0bc5ba657fc73f2dba9d1dd3f589c GIT binary patch literal 2835 zcmds3Z)_Ar6n`_fcir2Zba!c_8nAQAMG8sH^(;^*;%#sDdJFfD+ijsr6lhPuklIQW z5!7pY%26A7tuY}A0!9PI7{w17V@yg(S~SKcYJvtE+mz@RC7NiW35qj&cLfX@lk$n# z?7Vqz-uun(y*GE+Sh{^@dJlQ%(T;ARMNgSVB2Ey1psAKlKneJ3%yef>z#mvn{Hs>i ztyo>RToDphL{EhiaVwchBuxTwBPv|J{1?wmn%-iBXsBkG$*9^YFk2`QOGb4|PZF?f zLs*R&(N+SXsG2gYf|F_7r_-Z7MF)ma9n&?VIYv@?Q#17}$)&<(Gpz1vOLuhB05{XL zbV+qEHIm-(@OHN85mE_DwMtnrGG?^7X``W85xVWN53>@nP{<6&38-wD&~)2e$iz(Q zAtKaX;To`E@BR;Vb<_id}De(B>9Wqcm^k$yBwaDHKstCANZX zWEMS6SsL*s0*twBj;Ll-4_oW?RJ_;`hM;eGOd)2qxcn} zXtLRdOd}pn6#C1XiRKjT$BnB(*kEZYdpFVsNA=dH*RcDyYi;|EU7b6(?kOm3{W4p;_tuoBjQ3K2+v z39Yahw!wDjfNppSGVnYMz%U$wSK&Ck0dK)6_y9hJPvA>94>Ry1{0f(l6U{?1T7U?u zMs?^O6h<-Bf*wHaXeW9cJ&RsIFQQk_Yv=@e8@-1<#C_;A8b_a_uh4lkjlM@eq2JIS z=ugaH9?ST4Oz;w1g9CUaZonbD9yjCraT|UFcj0clcW$}gB+&;1)ePxzi~ixc1x+ul z9YUjF#ndFhI8T3x^uHVkeQC3A)WFHeliy;_w~PV~h-X}tZ3BJ?k}dnVs{IcRPMkT> zaOAV8sf%4R(=*fWT-?2Aa&mIwa9;*c24yN;_*T!=L>zZgjUvA3b8?Lf>3X=<*H5y; z5y*%`y&NAotNDD}Bt941GNwqfB=7Jkd@h&E=QA0gcQfO|fVl!9HPFF%>4Z02I$li? zDMuuWq~8m}h6KE{O5l?bUp9v&J|Enm``i_78F3WxIVTc>S-$?%*ul;(#scl{uUPo? zxg*~knS5e$BI|{6z>x1e>k9VpB12p(OQ$`C44h&J<#~R|{+#0%eyWH#-NSjsX6(db z@SwM9higrF+-(^GCgkGM_UfMVBinqSuKzuX_-{@q2Z}5JlVv6ftwu zt;jqA9*w=ilyPK;94&_GBjUuK4zLU?n zMtk`}9TE9?@w^d=81#8o&0zniXR8<_YERd9`;QJzIK~@Jja|BMaqCRa%*$u`MuN(s z@hVZw!s@Q^c;^qh7j#U1ba>Ob`ld!MJX%G2UCw$==-UVoq@plHDxN7Rvobil66w`p z1BsAiGROh|D%kC@5t&92Gfdip6y>$TKda6nPQeytoT|6CJl7!lY}@~w7CJK5_jI@@ ONA~$}^@nNc!{Kl6HUH=U literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLARITY14-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLARITY14-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..153521f57adae40ec202164ad594e7f127fdc73d GIT binary patch literal 5521 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC06-MIR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC06-MIR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..7e0252eebd0137c96cd096052ceb1d80122dccfe GIT binary patch literal 20395 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC06-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC06-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..a9aed8819af595acf0fa562d9d7d7b24b192598b GIT binary patch literal 24199 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC08-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC08-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..8a85979967046931fd68c50a0e506dd4a2ad2ce9 GIT binary patch literal 260095 zcmeEv30xD`xBs06Z^B-A`>l24xe`TqNZ1?<0e~zPDkT_TW0OXQFJCo!oZq;K*jWFm z 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

    !9pa*b$Up@i4gc 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 *VklNdSag@Xqj>GOz~ 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 C_a6ZO literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC10-BRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC10-BRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..a98d935d53bbcd88c43ed8dab7d7b085e447249f GIT binary patch literal 40043 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 N*aBs7rDesE`#*&A=xqQ1 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC10-MIR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC10-MIR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..53bd28b151cd0d4acd97e7e023c7babf231dc432 GIT binary patch literal 31494 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC10-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC10-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..35d98b975bb59cc50cb11e2e444254ad47c71b0b GIT binary patch literal 292865 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�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 z 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 G+5Z8a!_k!h literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC12-BRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC12-BRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..2536ce445380e5dfaaeab6237872800cf3c74aea GIT binary patch literal 35213 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 A@&Et; literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC12-MIR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC12-MIR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..127e2bbbd4b6146e04f88317c0c8469952fe1f68 GIT binary patch literal 31017 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 C@Lb{m literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC12-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC12-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..72fc75822fc3fed15985d8a77694347128fbd41d GIT binary patch literal 483833 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

    hpp;V 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 literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC14-BRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC14-BRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..54e405e89ca659b7c958c378592e29b19192fb71 GIT binary patch literal 34507 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 C%(@-` literal 0 HcmV?d00001 diff --git a/fonts/medleydisplayfonts/CLASSIC18-MRR.MEDLEYDISPLAYFONT b/fonts/medleydisplayfonts/CLASSIC18-MRR.MEDLEYDISPLAYFONT new file mode 100644 index 0000000000000000000000000000000000000000..41059a9aa7391638acff483be08ac49f0f2c35c6 GIT binary patch literal 431807 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