Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 02 May 2004 08:28:18

madjar
Membre Communauté Graph100
Lieu: Un bled dans ch'nord !
Date d'inscription: 27 Jan 2004
Messages: 342
Site web

La ligne de commande

Salut !

je m'adresse à ceux qui ont déja de l'experience :

quand on execute un lien mort depuis le menu, ou quand execute un prog contenant la commande "scanf"  on arrive à un mode d'entrée de caractere assez étrange.

en apuyant sur les touches de lettres, elle s'affiche, mais ni del ni exe ne réponde, et en apuyant sur "<-", un caractere s'efface

Pouvez vous m'eclairer sur ce mode ?


Programmeur-glandeur de jeux baclés : craceur et xox
Bija : C'est moche
Madjar : Je sais, je suis devellopeur, pas graphiste

Hors ligne

 

#2 02 May 2004 08:46:19

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: La ligne de commande

y'a pas la touche Return sur le clavier de la calc, ce mode de saisie est donc inutilisable, c'est pourquoi chaque programmeur a été obligé de refaire un système de saisie de caractère...


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#3 02 May 2004 10:54:02

madjar
Membre Communauté Graph100
Lieu: Un bled dans ch'nord !
Date d'inscription: 27 Jan 2004
Messages: 342
Site web

Re: La ligne de commande

génial ! ça c'est bien foutu !

bon bah je vais me mettre au getch alors ! (il marche au moin celui là ?)


Programmeur-glandeur de jeux baclés : craceur et xox
Bija : C'est moche
Madjar : Je sais, je suis devellopeur, pas graphiste

Hors ligne

 

#4 02 May 2004 11:44:25

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: La ligne de commande

getch est utilisé par scanf il me semble neutral


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#5 03 May 2004 02:03:58

Tekkeitserktok
Membre Communauté Graph100
Lieu: Nancy(54)
Date d'inscription: 12 Jan 2004
Messages: 416

Re: La ligne de commande

en fai le mieu C de créer ta propre fonction ki joue le role de scanf...pa le choix lol!


Démo disponible:
-->The legend of Zelda:The revenge of Ganon
-->v0.1b
-->http://linkoncasio.free.fr

http://tekkeitserktok.free.fr/Cat.gif

Hors ligne

 

#6 03 May 2004 07:09:58

madjar
Membre Communauté Graph100
Lieu: Un bled dans ch'nord !
Date d'inscription: 27 Jan 2004
Messages: 342
Site web

Re: La ligne de commande

bon bah je vais apprendre encore un peu avant de m'y mettre alors !


Programmeur-glandeur de jeux baclés : craceur et xox
Bija : C'est moche
Madjar : Je sais, je suis devellopeur, pas graphiste

Hors ligne

 

#7 04 May 2004 03:18:19

krach
Membre
Lieu: Le Mans(72), le Finistère(29)
Date d'inscription: 27 Oct 2003
Messages: 346

Re: La ligne de commande

Ah oui c'est toujours difficile d'apprendre ça au début lol Mais on est tous passé par là wink


© 2003 - 2006 Krach

Hors ligne

 

#8 04 May 2004 06:52:57

madjar
Membre Communauté Graph100
Lieu: Un bled dans ch'nord !
Date d'inscription: 27 Jan 2004
Messages: 342
Site web

Re: La ligne de commande

bah, d'ici quelques jour je vais pouvoir attaquer mon premier prog ! (adaptation d'un jeu en basic)


Programmeur-glandeur de jeux baclés : craceur et xox
Bija : C'est moche
Madjar : Je sais, je suis devellopeur, pas graphiste

Hors ligne

 

#9 26 Nov 2005 17:52:40

duff76
Membre
Date d'inscription: 26 Nov 2005
Messages: 4

Re: La ligne de commande

Bonjour,

Désolé d'en remettre une couche sur le scanf() mais étant débutant dans la programmation de graph100 j'ai deja passé un peu de temps et eu un peu de mal a creer un executable qui m'affiche qqc sur l'ecran de la calto et je voulais savoir si qqun avait créé une fonction scanf() utilisable parce que malgré la lecture de plusieurs tuto je ne vois pas vraiment comment gérer ca.
Merci d'avance et bravo pour ce forum ca aide bien quand on débute!

Hors ligne

 

#10 27 Nov 2005 07:18:11

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Re: La ligne de commande

regarde db-lib tu y trouvera ton bonheur (fonction getkey())


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#11 27 Nov 2005 08:24:36

Gentil Kiwi
Membre Communauté Graph100
Lieu: Caché dans son T2 à Paris :)
Date d'inscription: 11 Sep 2003
Messages: 353
Site web

Re: La ligne de commande

n'y t'il pas ENTER.COM ki donne accès a certaines touches ? j'aimerais bien avoir le code source de ce programme pour remapper certaines touche...

ca m'arrangerais d'avoir accès à iostream completement kan meme ^^


http://www.gentilkiwi.com/signature.png

Hors ligne

 

#12 27 Nov 2005 15:05:01

duff76
Membre
Date d'inscription: 26 Nov 2005
Messages: 4

Re: La ligne de commande

merci du conseil je vais aller faire un tour ds cette librairie et voir si je trouve mon bonheur....

Hors ligne

 

#13 27 Nov 2005 15:27:13

duff76
Membre
Date d'inscription: 26 Nov 2005
Messages: 4

Re: La ligne de commande

Je viens de lire l'aide de db-lib mais (d'apres ce que j'ai suivi) le getkey ne fait que renvoyer le code de la touche comme la fonction basic or ce que je recherche (c'est pour une gestion de texte donc aucun besoin de vitesse) c'est une fonction scanf (avec affichage du texte saisi) mais utilisable parce que d'apres ce que j'ai testé les lettres du pavé numérique ne sont pas accessibles et le exe ne fonctionne pas non plus.
Voila, est ce que vous savez si ca existe ou est ce que vous avez d'autres conseil (l'utilisation de db-lib me parait assez obscure).
Merci.

Hors ligne

 

#14 27 Nov 2005 16:57:36

[neo]f4kill
Programmeur Graph100
Lieu: montauban
Date d'inscription: 05 Oct 2003
Messages: 678
Site web

Re: La ligne de commande

Gentil Kiwi > les sources sont dispo sur le net, je sais pas trop ou ...
je les avai sur mon disque elles y trainent ptetre encore


=> Auteur de : Code, Hot-dog (v alpha), Aspirin v1.2, Memory v1.0, Slider v1.0 + 2 ou 3 progs à la noi wink


http://www.danasoft.com/sig-fre.jpg

Hors ligne

 

#15 28 Nov 2005 08:55:43

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: La ligne de commande

:!: Pour les pressés, voir en bas :!:

j'avais créer une suite de fonction pour un explorateur afin de traiter l'ensemble des caracteres utiles..
La démarche, déjà, c'est de créer les choses suivantes:

Code:

#define MODE_NUM 0
#define MODE_ALPHA 1
#define MODE_alpha 2
// Eventuellement un autre mode?
char getchar2(int mode);

// Remplacer les ? par des valeurs non utilisées dans les caracteres courants (voir une table ascii)
#define GETCHAR_DELETE ?
#define GETCHAR_INSERT ?
#define GETCHAR_SHIFT ?
#define GETCHAR_ALPHA ?
#define GETCHAR_ESC ?
#define GETCHAR_ENTER ?
// Eventuellement d'autres, pour les F1-F6 par exemple?

Ta fonction getchar2, ce qu'elle doit faire:
>Elle doit absolument attendre la pression d'une touche!
>Elle doit convertir le code de pression de cette touche en char, le moyen le plus facile à mon gout étant une table de correspondance
>Elle doit prendre en compte le mode passé en parametre (exemple, si on appuie sur la touche [7, M]: MODE_ALPHA te donne 'M', MODE_NUM te donne '7', MODE_alpha te donne 'm', etc)

Comment faire alors?
Getkey de DB-LIB renvoie une valeur correspondant à une certaine touche pressée. Faut aller donc jeter un oeil pour connaitre à quoi correspond telle valeur. Ensuite, le moyen le plus rapide et surement le plus économique en mémoire, est de créer une table correspondante à 2 dimensions qui renvoie un char:

Code:

// Combien de mode a t on? 
#define NOMBRE_DE_MODE 3
// Valeur maximale renvoyée par Getkey (dans son utilisation courante!)
#define GETKEY_MAX 106
char getchar2_table[NOMBRE_DE_MODE][GETKEY_MAX]=
{
  // La on remplit avec les char correspondants!
  // Mode Numérique
  {
    // ...
  },
  // Mode Alphanumérique, Majuscule
  {
    // ...
  },
  // Mode Alphanumérique, Minuscule
  {
    // ...
  },
  // Eventuellement un autre mode? 
};

Ainsi, le code source de ton getchar2 devient:

Code:

char getchar2(int mode)
{
  // Eventuellement un ti contrôle d'erreur au cas ou?
  return getchar2_table[mode][Getkey(WAIT_KEY) - 1];
}

(ptit postage au cas ou)

Bon maintenant, qu'est ce qu'il te faut, une fonction du genre scanf?
Si j'me souviens bien, scanf et sscanf font exactement la meme chose, à l'exception que scanf prend de l'entrée standard (qui déconne un poil sur G100) et sscanf... d'une chaine de caractere!!
Attention toutefois, sscanf prends pas mal de ressources (on pourrait la refaire en simplifiée, notemment sans nos cheres floating point)!!

Mais admettons qu'on utilise sscanf.
Le but, c'est d'avoir une chaine de caractere non?
Mais nous, on ne peut avoir, avec getchar2, que 1 seul caractere... Et bin puisqu'une chaine de caractere c'est une mise bout-à-bout de caractere, c'est c'qu'on va devoir faire pour la construire ^^

Notre fonction sera alors:

Code:

char *getstring(int *mode);

le parametre mode, c'est pour indiquer le mode dans lequel on sera par défaut (ça le fait toujours, si l'utilisateur retrouve son mode smile ) (note: fucking smiley qui m'a ramenné tout en haut <_<') La variable pointée par mode sera modifiée au cas ou et utilisée dans tout les cas.

Cette fonction renvoie un pointeur de type char. Parfait pour une chaine, mais comment le stocker? Ce qu'on pourrait faire, c'est l'allouer dynamiquement à chaque fois, mais... ça pose un soucis car faut libérer la mémoire ainsi allouée et c'est souvent ce qu'on peut oublier (comme sur G100 on en a pas des masses, on va éviter).
Donc la meilleure solution reste, je pense, un tableau de char déclaré comme ceci:

Code:

// Nombre de caracteres maximum pour la chinae
#define GETSTRING_MAXBUFFER 128
char getstring_buffer[GETSTRING_MAXBUFFER];

à déclarer en variable globale, ou statique si on la met dans la fonction, car cet espace mémoire doit absolument rester valide!!

Bon maintenant, voyons la fonction getstring...
Que doit-elle faire?
>Elle doit retourner la chaine, c'est le but. Facile, il suffit de toujours retourner getstring_buffer!
>Elle doit capter les caracteres tapés par l'utilisateur. Notre fonction getchar2 permet de le faire très facilement.
>Elle doit analyser le caractere renvoyé pour savoir ce qu'il faut faire: si c'est GETCHAR_DELETE, elle doit reculer d'un caractere SI POSSIBLE, si c'est 'm' elle doit rajouter 'm' dans la chaine SI POSSIBLE et avancer d'un caractere, si c'est GETCHAR_ENTER, elle doit terminer la chaine par un NULL et la renvoyer, si c'est GETCHAR_ESCAPE, peut etre qu'elle doit effacer la chaine, la terminer par un NULL et la renvoyer aussi? etc, c'est limité par ce qu'on veut ^^
>Eventuellement, si taper afficher quelque chose à l'écran, il faut le faire pendant l'analyse de la chaine!

Comment faire tout ceci?
>Déjà, excepté si l'on appuie sur [EXE], [ESC] ou tout autre touche, la fonction ne doit pas quitter. L'emploi d'une boucle do-while est donc justifié dans ce cas précis.
>Ensuite, on doit garder une trace du caractere renvoyé par getchar2 tout au long de son analyse, y compris pour sortir de la boucle! donc une variable de type char est la bienvenue ici.
>Le mode doit etre stocké pour pouvoir le modifier et l'utiliser, bien entendu.
>L'analyse de ce caractere dépend de ce qu'on veux en faire, mais généralement, le mieux est d'utiliser une construction de type switch-case et d'analyser les cas spéciaux: GETCHAR_ENTER, GETCHAR_DELETE, etc... Enfin, si le caractere n'est pas compris dans ces cas spéciaux(donc dans le cas default), c'est que c'est juste un caractere à rajouter!
> Rajouter les caracteres aux fur et à mesure, éventuellement reculer.. Un index parcourant notre buffer est ok pour ce genre de chose, un pointeur idéal. Il suffira d'incrémenter lorsqu'on rajoute, et de décrémenter lorsqu'on supprimer. SI POSSIBLE, hein...
>J'ai insisté sur les SI POSSIBLE parce que c'est vraiment important si on veut éviter d'écraser la mémoire! en effet, si on est au tout début de notre buffer, on ne peut pas reculer!! et si on est à la fin, on ne peut rien rajouter! attention parce que si le buffer est de 128 caracteres, la chaine ne contiendra que 127 caracteres puisque le dernier est réservé au NULL terminal.

Ce qui devrait nous donner une fonction comme ceci:

Code:

char *getstring(int *mode)
{
  char *scan;
  char character;
  
  scan= getstring_buffer;
  do
  {
    character= getchar2(*mode);
    switch(character)
    {
    case GETSTRING_ENTER:
      // On termine la chaine par un NULL
      (*scan)= NULL;
      break;
    case GETSTRING_DELETE:
      // Si on est pas au début de la chaine, alors on revient d'un cran en
      // arriere
      if (scan > getstring_buffer)
      {
        scan--;
        // Ici, on efface le caractere précédent affiché sur l'écran!
        // ...
      }
      break;
    case GETSTRING_ESCAPE:
      // On débute la chaine par un NULL pour ne rien renvoyer
      getstring_buffer[0]= NULL;
      break;
    default:
      // Dans tout les autres cas, on rajoute le caractere si possible!
      if (scan < getstring_buffer + GETSTRING_MAXBUFFER - 1)
      {
        (*scan)= character;
        scan++;
        // On affiche le caractere à l'écran!
        // ..
      }
      break;
  }
  while ((character != GETSTRING_ENTER) &&
    (character != GETSTRING_ESCAPE));
}

Voila, j'espere que je t'ai éclairé l'esprit!!

(Nota: il se peut que des erreurs NE SE SOIENT PAS glissées dans ce code smile aux lecteurs de ce topic de bien l'analyser et d'en comprendre le bon fonctionnement avant de le mettre en oeuvre!)

(Nota2: un modo devrait bouger ce topic en Techniques de Programmation j'pense!)

:!: Pour les pressés, voir en haut :!:


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#16 29 Nov 2005 00:40:40

Gentil Kiwi
Membre Communauté Graph100
Lieu: Caché dans son T2 à Paris :)
Date d'inscription: 11 Sep 2003
Messages: 353
Site web

Re: La ligne de commande

merci de cette aide complete, javou ne pas connaitre sscanf, mais d'apres docu, tres simple, je vais essayer de travailler la dessus


keske ca peut etre chiant cette gestion des touches casio kan meme, ca maide vraiment pas a prog vraiment pour cte calcos....


http://www.gentilkiwi.com/signature.png

Hors ligne

 

#17 30 Nov 2005 05:01:47

duff76
Membre
Date d'inscription: 26 Nov 2005
Messages: 4

Re: La ligne de commande

Merci pour ce post fleuve auquel j'ai a peu pres compris tout (bon ok j'ai pas encore trop regardé le code) je vais essayer de coder ca et on verra ce que ca donne....

Hors ligne

 

#18 16 Dec 2005 08:59:59

Superna
Ex-Trouvetou G100
Lieu: Sous Linux ^^
Date d'inscription: 01 Feb 2002
Messages: 2275
Site web

Re: La ligne de commande

Hey n'oubliez pas http://libg100.sourceforge.net/ , il y normalement une grande partie des libs existantes smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr