Folco (./60) :
Et les lignes sont découpées proprement ? ie sur les tirets/espaces/tabulations ?
Mais ça reste intéressant.
). Par conséquent, la chaîne est copiée caractère par caractère, et la taille en pixels est calculée caractère par caractère, en accédant directement aux données binaires de la font (ce qui est d'ailleurs plus facile en kernel-based qu'en AMS native... en kernel-based, il y a des RAM_CALLs, alors qu'en AMS native, il faut faire des choses plus compliquées, voir SetupCharSet()).
Lionel Debroux (./68) :
Si tu commences ta routine par un appel à DrawStrWidth, avec en entrée une chaîne contenant un paragraphe de quelques centaines de caractères (personnellement, c'est avec le minimum de retours à la ligne que je ferais une page de man), ça va lagger
Pour avoir la largeur en pixels d'un caractère dans la font 0, il y a sf_width, mais je viens de voir que PedroM ne l'implémente pas, ce qui me surprend un peu: quelques lignes d'assembleur suffisent, et cette routine peut difficilement être moins utilisée "dans la nature" que bsearch, par exemple.


Lionel Debroux (./71) :
./70: exact, mais PedroM contient au moins deux routines (GetDataType et SmapTypeStrings, je les ai faites parce que j'en avais besoin pour TICT-Explorer) et une variable (FiftyMsecTick) qui ne sont exportées dans la table de jump (GetDataType et SmapTypeStrings), ou tout simplement n'existent (FiftyMsecTick), que sur AMS 2.00+![]()
Lionel Debroux (./71) :
En séparant la copie et le calcul de la taille en pixels, tu risques d'avoir du code qui est à la fois plus gros et plus lent.

Donc copie d'un char + DrawStrWidth dessus dans la foulée ?
Suffit d'initialiser le buffer à 0 avant (ça c'est rapide)

Folco (./80) :
Question : la font pourrait-elle être packagée séparément ? Genre non compressée dans /system ou que sais-je ? Histoire que si l'on veut builder PedroM sans SIDE un jour, mais avec man, ça marche toujours ?

... Qu'est-ce que tu veux faire toi encore ????
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x00 .byte 0x22, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x22, 0x77 .byte 0x22, 0x77, 0x22, 0x00, 0x33, 0x66, 0x77, 0x33, 0x66, 0x00 .byte 0x55, 0x11, 0x22, 0x44, 0x55, 0x00, 0x22, 0x55, 0x22, 0x55 .byte 0x33, 0x00, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x11, 0x22 .byte 0x22, 0x22, 0x11, 0x00, 0x22, 0x11, 0x11, 0x11, 0x22, 0x00 .byte 0x00, 0x55, 0x22, 0x55, 0x00, 0x00, 0x00, 0x22, 0x77, 0x22
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x03, 0x06, 0x07, 0x03, 0x06, 0x00, 0x05, 0x01, 0x02, 0x04, 0x05, 0x00, 0x02, 0x05, 0x02, 0x05, 0x03, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x02, 0x07, 0x02,
|======================================================= | compute the mask to apply on the chars |======================================================= moveq.l #0x0f,%d1 |if the char is at an ord multiple of 4+n*2 btst.b #2,%d2 |is it? bne.s MaskOk |yes, so continue moveq.l #0xfffffff0,%d1 |else change the mask