From 78df30d844c7c6b4be6ba0ce66e332f197763396 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Tue, 16 Dec 2008 19:26:19 +0000 Subject: [PATCH] Fix broken characters >127 in the help window. Fix broken characters >127 in normal fonts. (Pkm: I unsigned the characters during gcc port, please don't re-sign them :) Got rid of OEM->ANSI character translation in normal text. Now displays the nice '...' character for filenames that dont fit windows/menus. (dev) Added a sample Amstrad CPC picture with wide pixels. Remember to run grafx2 with '/wide' git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@394 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- aide.c | 4 +-- const.h | 1 + dat/FONTE1.FNT | Bin 2048 -> 2048 bytes dat/FONTE2.FNT | Bin 2048 -> 2048 bytes dat/FONTS.PKM | Bin 38138 -> 38130 bytes dat/MAKEFNT.BAT | 36 +++++++++++++------------- files.c | 4 +-- gfx2.dat | Bin 78440 -> 78440 bytes graph.c | 53 ++++++++++++++------------------------ pic-samples/cpc_mode0.gif | Bin 0 -> 7357 bytes 10 files changed, 42 insertions(+), 56 deletions(-) create mode 100644 pic-samples/cpc_mode0.gif diff --git a/aide.c b/aide.c index 079c3842..c5685336 100644 --- a/aide.c +++ b/aide.c @@ -90,7 +90,7 @@ void Afficher_aide(void) short Largeur; // Largeur physique d'une ligne de texte char TypeLigne; // N: Normale, T: Titre, S: Sous-titre // -: Ligne inférieur de sous-titre - const char * Ligne; + const unsigned char * Ligne; char Buffer[44]; // Buffer texte utilisé pour formater les noms de // raccourcis clavier short Position_lien=0; // Position du premier caractère "variable" @@ -122,7 +122,7 @@ void Afficher_aide(void) else if (TypeLigne == 'K') { const char *Lien; - Position_lien = strstr(Ligne,"%s") - Ligne; + Position_lien = (unsigned char *)strstr(Ligne,"%s") - Ligne; Lien=Valeur_Raccourci_Clavier(Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne].valeur); Taille_lien=strlen(Lien); sprintf(Buffer, Ligne, Lien); diff --git a/const.h b/const.h index 106b40df..353f3dfe 100644 --- a/const.h +++ b/const.h @@ -69,6 +69,7 @@ // Caractères présents dans les deux fontes #define CARACTERE_TRIANGLE_DROIT 16 #define CARACTERE_TRIANGLE_GAUCHE 17 +#define CARACTERE_SUSPENSION '…' // On impose à l'allocation dynamique des pages de backups de conserver un // minimum de 256 Ko pour que le reste du programme puisse continuer à diff --git a/dat/FONTE1.FNT b/dat/FONTE1.FNT index c2fa61f9926763237f11be35343258ea558b6434..d61fa3a576bb02a36090c43c3eda4724c4dced35 100644 GIT binary patch delta 1039 zcmYL{J7^n05QYa~gb6|%BE=TLTyX>!DYg*D5`=M~LPZJ}BDhF#q&PxYj0zKkS@y07 zsY19iMF=KUaAi`2AWT?XTp@(ZkirC2u2Q53#)UXC57}8EecG9wnSW-tjLPVEqu9wp z6S5tErmpJ-cxjzMSE+$ge|T^0PjSE)qR2(KnD`I$biuyi=e>A*av!Ym!L?TaItwAw z;H&CGRr&wfAP(Lyip=bU>B@MGJoiS%$7Ht*1J}8Z&EWc%-(*Ve@o~zixRt>UVCy zT8THq*{9jifZBMFY@w-_Sex|N*R)zp7H$qtzMSAWmXG~|N)lF~l*iN_mQhyH;Fl48 zkaQii(lqtYLkWI9pC8@pqD9N70AjtVA6iVP&>$s!@IAcvu3m{`?DjV1)*8nclN4PReeNjz;HFustK#mfYL%^ zg%*T(vocwYiczz%!UgDp4KB~G^V~syAFi%{U4T|t5QQl%G*)R(ioNar0e0wDMgRZ+ delta 1039 zcmYLIziS&Y6#gi|^$-%_NmK3NhTE#47!4-rkRfB1LPq1Ebhsg7DB{k9(y0{FsY588 z^H+!tq7;)cWC*2G$xxb`LWXeH?@2O!^67g&KE3yJ_qwRp!TaF!2`YpTYG~s^ z=N)Y21~u&p35`x@%Y;DfeXUQ(i+u7Tl9z3(wVp8#sLWt=Lg9rjfO!NP7VP|k?*RN6 z)vFqNN2|xx>WdsC!$CR_WP*tF$3~4N#0CWhF4D-0VIqsp=QFLJ8FOmp9YSTDatiHr zyS`ip?2w>!)5?wGO|?lK5@R84Qh^u8c%%m6@B5#Z$S;JQMViylCwzr8Us8Avw?zTo zfB0;wZ|`;l-~9Oaggg<9imEC`z+o|+7R@1Wv01M!(&{hbQvan*YO6#k%kq{_$x;sq zH~!mU42YA$aJFxU4Mv%m&8hHFb)UKl7`m&gD>uR3+;@Jy2isIKWC7^n z;)v87ks96(EX#wt9T1;xZ^z-0&6r<+kTkEwspJp3D8v%s`6%+)usa;Cj*cccE-19^ PmY&RF*jh^*MxEO~1ROyK diff --git a/dat/FONTE2.FNT b/dat/FONTE2.FNT index ba632692380f6ee7acc51019272f42dd466f748f..3893c9486de563a60667ebc8e68371f1e2da2e03 100644 GIT binary patch delta 1039 zcmYL{J!l&-6o4Nl7*k9*LI({Y+;9XB9Wt`LFhb` zPNjJ4&>?gxnL>wBOeiA54aRsZ9!l_(sY8bnGMJ<9Np>n@e}3=j{c9KvqqB{2FL$-e z_W5A**$|$b^69A#yuIaP<_eHPA>_l0v+691UH=Aui z8vOR-;^;olx={_98Z7xjI06J8`pxp3OgmB*GN&A4#4%l|P#J2TZ~3oTTpV`WcYqlD z)xr4l_&|Z!*iLpxwUr*D ztKF%(doycL8-vnS26AO+_Z75Pj5|5NSrN=Lyie@)Kb41ejP7>7Bu`cx0y2f+w(~ zQrUr8hV19{LQ)heocz4Jo`Bcerg8hl(_()CEuPTq Hq-p*Eo%~GH delta 1039 zcmYLHv1%MK5PbyWTw(0Rl?s!);t1PCg;`V_b_y3R(*&+Oj>ehh3c;jG z;UcxaVo4!FI9wVRCZu!`;;oE}u$woMjy&0VGo#VG(cUbxW%hNWo|H}FojS27z4sNA zo|IkVVC-Vc(YJ`KRb-P#2Appybz*GHw}`CO+BZt;1?#{lHGx) znnwx(zjv$i3dMBV-Q4_?i_Uw-6SF|@8E2~DT>4UhW=M>ZlKOsNJ zOM>rk8wBv-;}>nez26po`{UCS<_WMnwsyP=9FL1)Tpt6M>-G9FuKqHt>_6IQwwV}t zp5O65r_^KQb^LA+4kSqMIQe&jMTm!O=-_%IvN zV8It6L>e7R0uDzpa33#lzfb29moic)&+kK=9UGVGxMIqLj{i zVd*P%mL3M_FY6QJs+euUPD0<;eH5NQTwFZNu~$5|rT@F^yl)6}R^ZXiwbJtrsK2jP zs|AXpsOHTQcz2s=&B4jc(GfQe4zD^6(Ak-{e>fs~A^EV~=gtBHcYS^BMmU%?T{Am? zsjU|PU058EiX&2?F`I_+;BGd_Pq((h@W`h1FF=wMpT()?%wv8JQRvHqSTqWS*?R%Ck9(%|V2jnSp)tMk#4Vb_RYh+ or -@ write to the Free Software Foundation, Inc., -@ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +@rem Grafx2 - The Ultimate 256-color bitmap paint program +@rem +@rem Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) +@rem +@rem Grafx2 is free software; you can redistribute it and/or +@rem modify it under the terms of the GNU General Public License +@rem as published by the Free Software Foundation; version 2 +@rem of the License. +@rem +@rem Grafx2 is distributed in the hope that it will be useful, +@rem but WITHOUT ANY WARRANTY; without even the implied warranty of +@rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +@rem GNU General Public License for more details. +@rem +@rem You should have received a copy of the GNU General Public License +@rem along with Grafx2; if not, see or +@rem write to the Free Software Foundation, Inc., +@rem 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @echo off img2fnt fonts fonte1 diff --git a/files.c b/files.c index cda38ca2..f04d1c7a 100644 --- a/files.c +++ b/files.c @@ -118,7 +118,7 @@ char * Nom_formate(char * Nom, int Type) Resultat[Curseur]=Nom[Curseur]; // Un caractère spécial pour indiquer que l'affichage est tronqué if (Curseur >= 12) - Resultat[11]=CARACTERE_TRIANGLE_DROIT; + Resultat[11]=CARACTERE_SUSPENSION; } else { @@ -131,7 +131,7 @@ char * Nom_formate(char * Nom, int Type) } // Un caractère spécial pour indiquer que l'affichage est tronqué if (Curseur > 8) - Resultat[7]=CARACTERE_TRIANGLE_DROIT; + Resultat[7]=CARACTERE_SUSPENSION; // On recherche le dernier point dans le reste du nom for (Pos_DernierPoint = Curseur; Nom[Curseur]!='\0'; Curseur++) if (Nom[Curseur]=='.') diff --git a/gfx2.dat b/gfx2.dat index 3c7d94661958d81c123c57ebb4a1bb47c699baaf..1b89fd3751c5cb849e5df844efc72a770a428e01 100644 GIT binary patch delta 2088 zcmeH|KWI}y9LImg5Q>Bnio*@1WO$Se4mX6yA&=6bNC$@wK{7ZzL>?kX$2bcj{xMz%lPn1r0J1bqGjL7H5T=C)g!tk5S|9KL)Sy%{C2WrP3uLqB#+E*; zlxy2JK`Wb>!Vo})NfJu1t=8*S%TCrG`(efx15ygNkPvd@)E{x|Tp8soU>LyRR!yDy zKkwIS#7Zd$Rj~;miiJW^phbWA+FrfzGfp&u2osFy1#SWaHGBqPh(mKyHf4xDI$C$| zl~gN($u_>*)CVch zAqFNSQ)%Yv9@7PczC%8V2J6=?P4h){2T!0lYTcZk4B2)oOrFO(f9G%@3 zOtRR#+gu#L6x$2t{dzn9Ukq?Vx$%jm=YKK41Bc=;5rf(4Lz{xC1de{ao*f(QTa$@a@)Fzd(jI!cEq2F;>z zV!%|IIT3@Ay~3P`0SclMgCL?yFCvVf delta 2075 zcmeHHziSjh6n>cFydoq^swskZ#Uk4|ML4Ed5{ncm(+F1{hb$ITq%oW_?uH;%B8N5> z!9O5a1cG3>SPUXZ%8=p+7D28MvsJhv?E1Z#JuDQ#R(*T7-@G^9`!TaKZ+g*~UNnv# zzRiryb8Ey7X|mR)B&4xrZb)g)WI2(dZ33f?{cqIuMp@G3F#B8_2?QS0)DwVKcRX< zP?@6{L1G762=y)m>o5%n(X;2TrT*}AiSfaw7dOCTp_NeUaD`|q>~_O!i|BCv+&lD7 zb?BbphZKHT1U!hMXo`P?R5Oor`?TdI*a*RNtxsDskYQq=08t7a5EYpZ9JE=(xMGA< zb2}sJY~*=wZwGA*5bzEs0(3T*KpP!zxbzNqU)J+%=P(>7iY}cU;j-Eg)rmo<6FR>r za&ZHsYr6zKF=wjhD@LxXuB=`daeYBm3%l~LsAaj9s>&*#cyM)aa5dmBI<|JQS6W<) zJf~8#SSkln$N>&%_HjHO52@Sjrh|Ns= z?Ckt^jR2Lp#^8`I{>d&kg1FWJf7S^6ihgbcyd{SBd6FavW3oFL6M4F+^ZjoGxQTyD WBUtU;)``9Try9Z5@w@lOkG=zk^?hLg diff --git a/graph.c b/graph.c index e19defa2..98ac65a6 100644 --- a/graph.c +++ b/graph.c @@ -1571,25 +1571,6 @@ void Afficher_menu(void) } } -// Table de conversion ANSI->OEM -// Les deux fontes générales sont en encodage OEM -unsigned char Caractere_OEM[] = { 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, 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, 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, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 63, 63, 39, 159, 34, 46, 197, 206, 94, 37, 83, 60, 79, 63, 90, 63, - 63, 39, 39, 34, 34, 7, 45, 45, 126, 84, 115, 62, 111, 63, 122, 89, - 255, 173, 189, 156, 207, 190, 221, 245, 249, 184, 166, 174, 170, 240, 169, 238, - 248, 241, 253, 252, 239, 230, 244, 250, 247, 251, 167, 175, 172, 171, 243, 168, - 183, 181, 182, 199, 142, 143, 146, 128, 212, 144, 210, 211, 222, 214, 215, 216, - 209, 165, 227, 224, 226, 229, 153, 158, 157, 235, 233, 234, 154, 237, 232, 225, - 133, 160, 131, 198, 132, 134, 145, 135, 138, 130, 136, 137, 141, 161, 140, 139, - 208, 164, 149, 162, 147, 228, 148, 246, 155, 151, 163, 150, 129, 236, 231}; - // -- Affichage de texte ----------------------------------------------------- // -- Afficher une chaîne n'importe où à l'écran -- @@ -1597,9 +1578,9 @@ unsigned char Caractere_OEM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond) { word Indice; - short Pos_X; - short Pos_Y; - short Caractere; + int Pos_X; + int Pos_Y; + byte *Caractere; short Reel_X; short Reel_Y; byte Repeat_Menu_Facteur_X; @@ -1611,10 +1592,11 @@ void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur Reel_X=0; // Position dans le buffer for (Indice=0;Chaine[Indice]!='\0';Indice++) { - Caractere=(Chaine[Indice])<<6; + // Pointeur sur le premier pixel du caractère + Caractere=Fonte+(((unsigned char)Chaine[Indice])<<6); for (Pos_X=0;Pos_X<8<<3;Pos_X+=1<<3) for (Repeat_Menu_Facteur_X=0;Repeat_Menu_Facteur_X Taille) + if (strlen(Chaine) > Taille) { - Chaine_affichee[Taille-1]=CARACTERE_TRIANGLE_DROIT; - Chaine_affichee[Taille]='\0'; + Chaine_affichee[Taille-1]=CARACTERE_SUSPENSION; } Print_dans_fenetre(X, Y, Chaine_affichee, Couleur_texte, Couleur_fond); } @@ -1727,15 +1710,17 @@ void Print_coordonnees(void) void Print_nom_fichier(void) { short Debut_X; - + char Nom_affiche[12+1]; + int Taille_nom; if (Menu_visible) { // Si le nom de fichier fait plus de 12 caractères, on n'affiche que les 12 derniers - char * Nom_affiche = Principal_Nom_fichier; - int Taille_nom =strlen(Principal_Nom_fichier); + strncpy(Nom_affiche,Principal_Nom_fichier,12); + Taille_nom=strlen(Principal_Nom_fichier); + Nom_affiche[12]='\0'; if (Taille_nom>12) { - Nom_affiche=Principal_Nom_fichier + Taille_nom - 12; + Nom_affiche[11]=CARACTERE_SUSPENSION; Taille_nom = 12; } diff --git a/pic-samples/cpc_mode0.gif b/pic-samples/cpc_mode0.gif new file mode 100644 index 0000000000000000000000000000000000000000..569bbe758ba3bba64c000f86c98934b32761f577 GIT binary patch literal 7357 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