Forum tama's team

cp: ne peut évaluer `brain': Aucun fichier ou dossier de ce type
AccueilPortailGalerieCalendrierFAQRechercherS'enregistrerMembresGroupesConnexion
Connexion
Nom d'utilisateur:
Mot de passe:
Connexion automatique: 
:: Récupérer mon mot de passe
Derniers sujets
» Network, essai 1
par godbod Dim 09 Juil 2017, 02:18

» GODBOD
par godbod Sam 08 Juil 2017, 14:05

» Numbers
par godbod Sam 08 Juil 2017, 13:54

» Mort ?
par godbod Sam 08 Juil 2017, 13:47

» mon humeur
par Ver2guerre Sam 30 Juil 2016, 19:44

» [A voir] Programme de traduction original : WikiTranslate
par AdRiWeB Lun 01 Fév 2016, 04:50

» Reprise ?
par Emyl Jeu 14 Juin 2012, 21:17

» Euh, ah ?
par Ver2guerre Dim 27 Mai 2012, 12:11

» Problème TI 89 Titanium non visible après mise à jour
par abdoukid Mer 23 Mai 2012, 13:37

» Y'a quelqu'un ?
par Ver2guerre Sam 21 Avr 2012, 23:10

Quick message
Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 367 le Dim 18 Oct 2009, 00:16

Partagez | 
 

 [C] VAT : application du cours

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
tama
Admin
Admin
avatar

Nombre de messages : 12375
Age : 26
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 7028
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

MessageSujet: [C] VAT : application du cours   Mer 25 Juin 2008, 00:05

Bah voilà, la théorie c'est bien beau, mais sans exemple on avance pas trop en général.

C'est un tutorial très court, qui sert d'application à ce qui a été dit auparavant.
Le but du programme qu'on va étudier est de donner la liste de tous les programmes de tous les dossiers sur la calculette, et de donner leur taille et le type de fichier (texte, programme, ASM ...)
Normalement, si vous avez bien suivi le cours, il ne devrait y avoir aucune difficulté.

Allons-y !




Voici donc le code de notre programme :

Citation :

#include < tigcclib.h >

void _main(void)
{
........LCD_BUFFER bufr;
........LCD_save(bufr);
........clrscr();

........SYM_ENTRY *sym = SymFindFirst(NULL, FO_RECURSE);

........short s, key;
........HANDLE handle;
........char *ptrFILE, *end;
........unsigned char type;
........char type_str[10];
........unsigned short size;

........while(sym)
........{
.................s = sym -> flags.bits.folder;

.................
if (!s)
.................{
.........................handle = sym -> handle;
.........................ptrFILE = HeapDeref(handle);
.........................size = *(unsigned short*)ptrFILE + 2;
.........................end = ptrFILE + size - 1;
.........................type = *(unsigned char*)end;

.........................
switch(type)
.........................{
........................................case 0x2D:
...................................................strcpy(type_str,"STRING");
...................................................break;

........................................case 0xDB:
..................................................strcpy(type_str,"MATRIX");
..................................................break;

........................................case 0xDC:
..................................................strcpy(type_str,"FUNCTION");
..................................................break;

........................................case 0xDD:
.................................................strcpy(type_str,"DATA");
.................................................break;

........................................case 0xDE:
.................................................strcpy(type_str,"GDB");
.................................................break;

........................................case 0xDF:
.................................................strcpy(type_str,"PICTURE");
.................................................break;

........................................
case 0xE0:
.................................................strcpy(type_str,"TEXT");
.................................................break;

........................................case 0xF3:
.................................................strcpy(type_str,"ASM PRGM");
.................................................break;

........................................
case 0xF8:
.................................................strcpy(type_str,"OTHER");
.................................................break;
.........................}

.........................printf(" FILE : %s\n...SIZE : %u\n...TYPE : %s [%i]\n",sym->name,size,type_str,type);
.................}
.................else
.................{
.........................printf("FOLDER : %s\n",sym->name);
.................}

.................key = ngetchx();

.................if (key == KEY_ESC)
.................{
.........................LCD_restore(bufr);
.........................exit(0);
.................}

.................sym = SymFindNext();
........}

........LCD_restore(bufr);
}


Et voilà ! ^_^

Citation :

Oui, mais encore ? -__-'

Patience, j'vais expliquer, mais y a pas grand-chose de nouveau, vous devriez à ce stade être capable de comprendre comment ça fonctionne "en gros"

Bon, allons-y :

Tout d'abord :
Citation :

........LCD_BUFFER bufr;
........LCD_save(bufr);
........clrscr();


Ces lignes servent à créer un "buffer écran", c'est un peu comme un tableau de taille très grande, correspondant à l'écran (de mémoire 3840 éléments pour la TI89), qui sert à sauvegarder l'état de l'écran ensuite (LCD_save(bufr);), puis on efface l'écran (clrscr();)

Citation :

........SYM_ENTRY *sym = SymFindFirst(NULL, FO_RECURSE);

Ici, on initialise la recherche.
Drôles d'arguments n'est-ce pas ? En fait, il faut s'intéresser au 2ème argument, nommé le flag
FO_RECURSE (=0x02) est un flag qui permet de créer une recherche dans tous les dossiers présents sur la calculette, le premier argument sert à initialiser la recherche, c'est pourquoi il est mis à NULL pour pouvoir commencer au 1er dossier

Ainsi, si vous avez les dossiers MAIN, MATHS, PHYSIQUES et que vous "lancez la recherche" à l'aide de l'instruction :
Citation :

........SYM_ENTRY *sym = SymFindFirst(SYMSTR("MATHS"), FO_RECURSE);..//attention ! le 1er argument est un SYM_STR!)

Le dossier MAIN sera alors ignoré car situé avant MATHS dans l'ordre alphabétique

Capiche ? Non, relisez, oui, on continue:

Citation :

........short s, key;
........HANDLE handle;
........char *ptrFILE, *end;
........unsigned char type;
........char type_str[10];
........unsigned short size;

Ici, on initialise les variables qu'on va utiliser pour la suite :

  • s : fichier ou dossier ? (cf suite)
  • key : touche appuyée
  • handle : handle du fichier
  • ptrFILE : pointeur sur le début des données
  • end : pointeur sur la fin des données
  • type : type du fichier
  • type_str : chaine correspondant au nombre type
  • size : taille du fichier
Citation :

........while(sym)
........{
........//...
........sym = SymFindNext();
........}

Rien à dire ? cf chapitre II du tuto


Intéressons-nous au corps du programme, ce qu'il y a à l'intérieur de la boucle :

Citation :

.................s = sym -> flags.bits.folder;

Ici, on regarde si ce qu'on "analyse" actuellement est un fichier ou un dossier. Si s vaut 0, c'est un fichier, sinon c'est un dossier
(cf structure d'une SYM_ENTRY :
Citation :

typedef struct {

char name[8];
unsigned short compat;
union {

unsigned short flags_n;
struct {

unsigned int busy : 1, local : 1, flag1_5 : 1, flag1_4 : 1, collapsed : 1, twin : 1, archived : 1, in_view : 1;
unsigned int folder : 1, overwritten : 1, checked : 1, hidden : 1, locked : 1, statvar : 1, graph_ref_1 : 1, graph_ref_0 : 1;
} bits;
} flags;
HANDLE handle;
} SYM_ENTRY;



Citation :

.................if (!s)
.................{
.................//...
.................else
.................//...
.................}

Mise en application de ce qui a été dit précedemment

_________________


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
tama
Admin
Admin
avatar

Nombre de messages : 12375
Age : 26
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 7028
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

MessageSujet: Re: [C] VAT : application du cours   Mer 25 Juin 2008, 00:22

suite du tuto à venir... j'l'avais fini et un malheureux clic m'a tout fait perdre snif

_________________


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 

[C] VAT : application du cours

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum tama's team :: TI :: TI 68k :: Tutoriels-
Créer un forum | © phpBB | Forum gratuit d'entraide | Contact | Signaler un abus | Forum gratuit