Forum tama's team
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Forum tama's team

cp: ne peut évaluer `brain': Aucun fichier ou dossier de ce type
 
AccueilPortailGalerieRechercherDernières imagesS'enregistrerConnexion
Connexion
Nom d'utilisateur:
Mot de passe:
Connexion automatique: 
:: Récupérer mon mot de passe
Derniers sujets
» Numbers
[C] VAT : application du cours Icon_minitimepar Ver2guerre Dim 02 Avr 2023, 00:47

» Mort ?
[C] VAT : application du cours Icon_minitimepar godbod Dim 22 Aoû 2021, 12:23

» Network, essai 1
[C] VAT : application du cours Icon_minitimepar godbod Dim 09 Juil 2017, 02:18

» GODBOD
[C] VAT : application du cours Icon_minitimepar godbod Sam 08 Juil 2017, 14:05

» mon humeur
[C] VAT : application du cours Icon_minitimepar Ver2guerre Sam 30 Juil 2016, 19:44

» [A voir] Programme de traduction original : WikiTranslate
[C] VAT : application du cours Icon_minitimepar AdRiWeB Lun 01 Fév 2016, 04:50

» Reprise ?
[C] VAT : application du cours Icon_minitimepar Emyl Jeu 14 Juin 2012, 21:17

» Euh, ah ?
[C] VAT : application du cours Icon_minitimepar Ver2guerre Dim 27 Mai 2012, 12:11

» Problème TI 89 Titanium non visible après mise à jour
[C] VAT : application du cours Icon_minitimepar abdoukid Mer 23 Mai 2012, 13:37

» Y'a quelqu'un ?
[C] VAT : application du cours Icon_minitimepar Ver2guerre Sam 21 Avr 2012, 23:10

Quick message
Qui est en ligne ?
Il y a en tout 13 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 13 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
tama

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

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

[C] VAT : application du cours Vide
MessageSujet: [C] VAT : application du cours   [C] VAT : application du cours Icon_minitimeMer 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
tama
Admin
Admin
tama

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

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

[C] VAT : application du cours Vide
MessageSujet: Re: [C] VAT : application du cours   [C] VAT : application du cours Icon_minitimeMer 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
 

[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 | Signaler un abus | Forum gratuit