60

Whow... Tout ça pour remplacer la commande "mid()" du basic tsss
Je sens que ça va être long pour faire mon truc...

Et puis mes problèmes deviennent de plus en plus bas comme niveau sad
Je sais même pas comment on "vide" une chaine, quand je fais strcpy(chaine,"") ou strcpy(chaine,(char*)"") ça plante completement sad

Pim > C'est à dire ? T'as pas des sources interessantes ? grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

61

Ouais, j'avais lu, mais j'ai essayé avec memcpy et ça a marché...

62

Bob 64> Pour mettre à 0 une chaine, tu fais : memset(chaine,0,n); (n est la longueur de la chaine).

Au fait, c'est pour Vertel ou bien tu est en train de faire un pseudo BASIC ??

63

Pour mettre à 0 une chaine, tu peux mettre à 0 le premier caractère grin

64

Un pseudo basic ? Tu veux dire un basic-like en C ?
J'aimerais bien mais c'est de la haute voltige, je ne me lancerais pas la dedant... Rien que pour faire les 'variants' ça doit être horriblement galère.

Non pour l'instant c'est un prog que je fais pr manipuler des chaines, si il marche bien et qu'il est pas trop gros je l'integre à Vertel.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

65

zdrubal a écrit :
Pour mettre à 0 une chaine, tu peux mettre à 0 le premier caractère grin


Ah oui, merde, j'avais pas pensé...

66

Allez hop encore une...

quand on fait GetStrnArg(variable_esi);, ça "passe" au prochain argument. Si on veut retourner en arrière pour le capturer une 2e fois, il faut faire comment ?

(le but est de malloc-er une chaine, en allouant juste la mémoire qu'il faut pour la stocker)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

67

Pourquoi tu as besoin de le capturer une 2ème fois ?
chaine=GetStrnArg(variable_esi);
Et c'est bon, tu l'as dans chaine, non ?

68

bah oué mais si la chaine est énorme et dépasse 16Ko ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

69

La chaine est-elle ton premier argument ?
Si oui, tu fais variable_esi=top_estack; je crois.

70

Dans le cas d'argument passés à un programme seulement.

71

et si ça ne l'est pas ? grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

72

Tu sauvegardes le pointeur ESI avant d'y toucher.

73

zdrubal
a écrit : Dans le cas d'argument passés à un programme seulement.

Y a quoi d'autre comme possibilité ?

74

Exemple :

HSym HSymVar;
SYM_ENTRY *pSymEntry;
ESI Tag;

HSymVar = SymFind(SYMSTR(VarName));
if (HSymVar.folder == H_NULL) return FALSE;
if ((pSymEntry = DerefSym(HSymVar)) == NULL) return FALSE;
Tag = HToESI(pSymEntry->handle);

Si VarName est le nom d'une matrice, mais que tu ne veux pas afficher la matrice entière, seulement un élément.

75

erf, la manip de VAT et pile .... sicksicksick
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

76

ok je v utiliser la sauvegarde smile

Pim89 > Erf j'ai galéré pour Vertel... 50% des fonctions ça oblige a faire un peu de manipulation de VAT...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

77

quelle galère !!! eeksick

mieux vaut le graphisme ! gringrin
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

78

Bof... bof bof bof...

C pas terrible... Le graphisme c'est ce qui change le moins entre le basic et le C > aucun interet je trouve... Alors que les manipulations de VAT c nouveau pr moi.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

79

Et c'est hyper intéressant en plus smile

80

oui

(c parfois hyper tordu aussi... mais bon roll)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

81

le graph c ce qui change le moins entre basic et c...
lol
sauf au point de vue rapidité grin
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

82

roll
Même pas, si on utilise Flib ou Vertel, ça se vaut. (à ce moment la c les instructions autours qui font ralentir grin)

Bon j'ai ENCORE un problème sadsadsad
V poster la source parceque c assez gros...
 while(int_cur<=int_len)   {   int_jmp=1;   int_lgn=0;   memset(chr_lgn,0,500);   memset(chr_tmp,0,100);   /**************************************/   FontSetSys(0);   /**************************************/      while(int_jmp==1 && int_cur<=int_len)    {    int_mid=fsc_next(chr_str,int_cur);    memcpy(chr_tmp,chr_str+int_cur,int_mid-int_cur);        /**************************************/    printf_xy(20,20,"Mot : [%s]                               ",chr_tmp,A_NORMAL);    ngetchx();    /**************************************/        if((DrawStrWidth(chr_lgn,int_pol)+DrawStrWidth(chr_tmp,int_pol))<=int_max)     {     int_cur=int_mid;     strcpy(chr_lgn+int_lgn,chr_tmp);     int_lgn+=strlen(chr_tmp);     }    else int_jmp=2;    }       /**************************************/   printf_xy(20,20,"Ligne : [%s]                              ",chr_lgn,A_NORMAL);   ngetchx();   /**************************************/      }

Bon les memset je suis pas sûr que ça soit bon, c'est sensé vider les 2 chaines (tableaux respectivements de 500 et 100 elements, donc).
Toutes les variables sont précedées de int_ pour des int, et de chr_ pour des char.

Ce truc est sensé découper la chaine "chr_str" en plusieurs petites, qui ne dépassent pas "int_len" pixels de long dans la police choisie ("int_pol").
La fonction "fsc_next" retourne le rang du prochain espace après "int_cur" dans la chaine "chr_str".

Voilà le principe, en gros :

while(*on est pas arrivé à la fin de la chaine*)
{
réinitialiser qq variables
fontsetsys(0) pour afficher des chaines de débuggage
while(int_jmp==1 et *on est pas arrivé à la fin de la chaine*)
{
Trouver le prochain espace dans la chaine
On a donc un mot (suivi d'un espace), on le stoque dans chr_tmp
if(*La taille de la ligne sur laquelle on travaille + la taille du mot chr_tmp sont inferieurs à la limite en pixels*)
{
On ajoute à la ligne sur laquelle on travaille le mot qu'on vient d'extraire
On avance le curseur de lecture pour travailler sur le mot suivant
}
else int_jmp=2;
}
Normalement ici on a extrait une ligne de chr_str, qui ne dépasse pas int_max pixels de long
}


Mais le problème c'est que chr_tmp, il bug... J'ai cru comprendre (mais j'en suis pas sûr) qu'il n'était pas correctement effacé... Mais je comprends pas ce qu'il se passe. Qqun peut m'aider svp ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

83

Déjà, si tu arrêtais d'utiliser la notation hongroise, on comprendrait peut-être mieux ta source... roll

Dans le nombre de caractères que tu gaspilles pour mettre le type, tu pourrais mettre qqch. qui décrirait mieux le contenu de la variable. Parce que des noms comme jmp...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

84

À priori, chr_temp est effacé correctement par la ligne n°5:
memset(chr_tmp,0,100);


Ah non, mets ce memset dans la 2ème boucle while, juste avant:
memcpy(chr_tmp,chr_str+int_cur,int_mid-int_cur);

Mais j'ai bien peur que ce ne soit pas la seule erreur, même si je ne comprends pas du tout ton algorithme vu les noms de variables cryptiques utilisées, l'absence totale de commentaires (sauf les /**************************************/ sans aucun mot de texte), et le fait que la source n'est pas complète et compilable (donc impossible de regarder ce qui se passe avec VTI).

S'il te plaît, la prochaine fois, si tu veux que je t'aide pour un problème en C, donne une source complète et compilable (pas nécessairement le programme entier, mais déclare les variables et initialise-les avec des données permettant de tester l'algorithme).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

85

int_jmp = Integer, Jump. C'est la variable qui sert à "sauter" certaines boucles.

Bon ça se précise, mais je comprends tjrs pas :

Si chr_tmp="Bonjour " et qu'a la boucle d'après elle doit être fixée à "Lol ", alors elle ne vaudra pas "Lol " mais "Lol our " (le précedent mot n'est pas effacé)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

86

J'ai trouvé pourquoi. Cf. l'édition du message n°83.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

87

Ah oui en effet il y a un problème avec la mise à zéro de la chaine, je vais essayer ça, merci smile

Les noms de variables "cryptiques", en fait ce sont ceux que j'utilise toujours (j'y suis habitué donc rien qu'en voyant le nom d'une variable je sais ce que c'est).
Par contre les commentaires j'aurais du faire un effort, d'ailleurs c pour ça que j'ai expliqué l'algorithme en français en-dessous.

Et enfin pour la source c'est parceque je ne pensais pas que voudrais compiler, mais là voilà : (je n'ai pas encore apporté ta modifications)
#define USE_TI89 #define USE_TI92PLUS #define USE_V200 #include <tigcclib.h> int fsc_next(char*,int); void _main(void) { // Declaration des variables int int_jmp,int_max,int_pol; unsigned int int_cur,int_len,int_lgn,int_mid; char *chr_str=NULL,*chr_lgn=NULL,*chr_tmp=NULL,*chr_var=NULL; ESI esi_arg,esi_bkp; // Initialisation des variables chr_lgn=malloc(500*sizeof(char)); chr_tmp=malloc(100*sizeof(char)); int_cur=0; int_jmp=1; int_len=0; int_lgn=0; int_max=0; int_mid=0; int_pol=0; // Capture des arguments InitArgPtr(esi_arg); if(GetArgType(esi_arg)==STR_TAG)  {  esi_bkp=esi_arg;  int_len=strlen(GetStrnArg(esi_arg));  esi_arg=esi_bkp;  chr_str=malloc((int_len+1)*sizeof(char));  strcpy(chr_str,GetStrnArg(esi_arg));  } else int_jmp=0; if(GetArgType(esi_arg)==STR_TAG) chr_var=(char*)GetStrnArg(esi_arg); else int_jmp=0; if(GetArgType(esi_arg)==POSINT_TAG) int_max=GetIntArg(esi_arg); else int_jmp=0; if(GetArgType(esi_arg)==POSINT_TAG) int_pol=GetIntArg(esi_arg); else int_jmp=0; // Decoupage if(int_jmp)  {  while(int_cur<=int_len)   {   int_jmp=1;   int_lgn=0;   memset(chr_lgn,0,500);   memset(chr_tmp,0,100);   /**************************************/   FontSetSys(0);   /**************************************/      while(int_jmp==1 && int_cur<=int_len)    {    int_mid=fsc_next(chr_str,int_cur);    memcpy(chr_tmp,chr_str+int_cur,int_mid-int_cur);        /**************************************/    printf_xy(20,20,"Mot : [%s]                               ",chr_tmp,A_NORMAL);    ngetchx();    /**************************************/        if((DrawStrWidth(chr_lgn,int_pol)+DrawStrWidth(chr_tmp,int_pol))<=int_max)     {     int_cur=int_mid;     strcpy(chr_lgn+int_lgn,chr_tmp);     int_lgn+=strlen(chr_tmp);     }    else int_jmp=2;    }       /**************************************/   printf_xy(20,20,"Ligne : [%s]                              ",chr_lgn,A_NORMAL);   ngetchx();   /**************************************/      }  free(chr_str);  free(chr_lgn);  free(chr_tmp);  } // Fin } int fsc_next(char *chr_str,int int_stt) { int int_len=strlen(chr_str); while(int_stt<=int_len && chr_str[int_stt++]!=' '); return int_stt; }
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

88

Ah oui, autre chose: les tags pre sont plus pratiques à copier-coller que les sources avec coloration syntaxique avec leurs numéros de ligne... Mais ce n'est pas si important que ça.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

89

Kevin Kofler
a écrit : Ah oui, autre chose: les tags pre sont plus pratiques à copier-coller que les sources avec coloration syntaxique avec leurs numéros de ligne... Mais ce n'est pas si important que ça.


Avec UltraEdit il suffit de faire une selection de colonne et un petit suppr et bye bye les numéros de lignes... grin
So much code to write, so little time.

90

Eh bien voilà LA solution gringringrin

P.S : Mon découpeur MAAAAAAAAARCHE !!! Merci love
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)