Forums Casio - Projets de programmation

Index du Forum | Projets de programmation | libg1m - une interface mieux pensée que son format
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Posté le 01/11/2016 10:05

libg1m - une interface mieux pensée que son format :

Le saviez-vous ? L'ensemble des formats de fichiers dont vous avez l'habitude (g1m, g1e, g1a, g3a, ...) sont en réalité des déclinaisons d'un seul même format ? Ce format, comme d'habitude, n'a pas vraiment de nom public, donc je l'ai nommé par le nom de l'une de ses déclinaisons les plus complexes, le G1M.

Ça fait un petit moment que je souhaite faire une lib qui soit capable de lire (d'analyser) et d'écrire dans toutes ces déclinaisons (ou au moins les plus communes), avec une interface assez facile d'accès (parce que le faire directement, c'est quand même bien casse-gueule). Eh bien ça y est, je me suis lancé dessus depuis quelques temps. Pour l'instant, je ne m'occupe que de la partie lecture pour avoir une idée globale de toutes les déclinaisons du format, pour savoir ensuite comment je stockerai ça pour le renvoyer à l'utilisateur.

Les sources sont d'ores et déjà disponibles sur ma forge personnelle.

Pour le moment, je ne me concentre que sur la capacité d'analyse de la lib, puis je me concentrerai sur le fait de lire pour renvoyer à l'utilisateur. Ne comptez pas sur une capacité d'écriture avant un moment.

Les formats actuellement "gérés" (ou en cours de décortiquage) sont :
- G1A, G3A : add-ins pour les calculatrices monochromes et Classpads (/Prizm) ;
- G[1-3][MR] : sauvegardes de la MCS (mémoire principale) ;
- G[1-3]E : e-activities (documents) ;
- G3P : pictures pour les Prizm ;
- C2P : pictures pour les Classpads ;
- G1S : archive ;
- G1L, G3L : fichiers de locale.
- G1N : fichiers de function keys. (merci Simon Lothar <3)

Il me reste encore pas mal de subtilités à comprendre/tester, comme pas mal de types de strips pour les e-activities (calculs, UI.main, ...) ou les BCD. Aussi, en plus de ces formats-là, d'autres formats sont sur ma TODO list (voir plus bas).

Pour les sauvegardes de la mémoire principale, les éléments suivants sont gérés :
- Programmes
- Spreadsheets
- Captures
- Pictures
- Listes
- Matrices

Mon test kit actuel avec les fichiers, sources et scripts de test ICI (et les anciens au cas où)

Ce projet possède un sous-projet : la référence FONTCHARACTER,
n'hésitez pas à aller voir si vous voulez découvrir l'encodage qu'utilisent les calculatrices CASIO.




Pages: 1, 2 | Suivante

Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1808
Défis: 22
Message
Citer : Posté le 01/11/2016 11:03 | #
Je n'ai pas bien compris à quoi va servir ta lib. Tu parles de capacité d'analyse (analyser quoi ?) et de lire et renvoyer à l'utilisateur (renvoyer quoi ?)
----------------------------------
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/11/2016 11:13 | #
Pour le ZIP par exemple, il y a une libzip qui existe et qui permet de lire le format et de permettre à l'utilisateur (l'utilisateur d'une lib, c'est le développeur qui va s'en servir, qu'on s'entende bien là-dessus) de s'en servir simplement.

Eh bien là, c'est pareil (sauf que le format a pas de nom, c'est genre "le format de CASIO", seules ses déclinaisons en ont un). J'ai pas encore décidé de l'usage de la lib, mais on peut imaginer quelque chose comme :

g1m_t *handle;
if (g1m_open(handle, "C:\Users\lol\Documents\fichier.g1m"))
  /* on traite l'erreur */
if (g1m_get_type(handle) != g1m_type_mcs)
  /* le fichier n'est pas un fichier .g1m ou .g1r */
g1m_mcs_element **list = g1m_look_for_mcs_elements(handle, G1M_FILTER_CAPTURES);
while (*list) {
  void *data = g1m_get_data(*list);
  /* on décode la capture et on l'enregistre quelque part */
}
g1m_free_mcs_elements_list(list);
g1m_free(handle);


(garde à l'esprit que quasi-aucune de ces fonctions n'existe pour le moment, c'est pas encore l'étape à laquelle j'en suis, j'ai juste imaginé des fonctions qui pourraient exister plus tard)
----------------------------------
Hackcell
Hors ligne
Membre
Niveau: Intermédiaire
Points: 516
Défis: 4
Message
Citer : Posté le 01/11/2016 11:19 | #
Ce qui explique pourquoi on peut changer l'extension de certains fichiers sans aucun problème.
----------------------------------
<3 Keep calm <3
<3 and <3
<3 read shoujo <3
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/11/2016 11:20 | #
Si tu penses au renommage des .g*r en .g*m, yep, mais en l'occurrence, les deux ont la même utilité et la différence entre les deux est stupide et inutile. x)
----------------------------------
-florian66-
En ligne
Rédacteur
Niveau: Aucun
Points: 2247
Défis: 19
Message
Citer : Posté le 01/11/2016 13:52 | #
Entre g*m et g*r, c'est plus sur l'idée de l'endroit de stockage et de lecture.
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/11/2016 13:54 | #
Tu peux détailler plus stp ?
(parce que structurellement, les g*m et les g*r c'est vraiment exactement la même chose pour ce que j'en ai vu quoi, et bon, j'ai un parsing assez complet de ce côté-là )

EDIT: Effectivement, Zezombye l'a soulevé dans la shoutbox, dans un g1r, il semble systématiquement y avoir une section SETUP et une section ALPHA MEM.
----------------------------------
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10154
Défis: 130
Message
Citer : Posté le 01/11/2016 14:29 | #
Ah bien, voilà qui pourrait s'avérer utile à l'avenir. Je sens déjà la combinaison avec p7 : « télécharge-moi la CAPTURE 10 au format BMP ».

Bon courage, il y a pas grand-monde qui ose mettre les mains dans le foutoir des formats de Casio
----------------------------------
Watch me, as I build my empire with my own hands.
Nemhardy
En ligne
Grand maître des Traits d'Esprit
Niveau: Confirmé
Points: 1085
Défis: 54
Message
Citer : Posté le 01/11/2016 21:26 | #
D'ailleurs en passant, les g3a c'est (aussi ?) les add-ins à destination des Prizms.

Éventuellement si tu t'ennuies à moment donné, les types g1l et g3l pourraient être sympas à gérer, enfin, ce serait surtout gérer l'écriture qui le serait en fait, donc à voir dans un futur plus lointain éventuellement (ou jamais, c'est toi qui voit).
----------------------------------
Mes programmes
Cliquer pour enrouler
Équilibrer des coefficients stœchiométriques en moins de 2500 octets sur ta Prizm : Ekisto
Ma version du moteur de calcul symbolique libre Eigenmath
Projets supportés !
Entres autres
ColorLib de Lancelot
Zelda de SmashMaster
FiXos de Kristaba
The Lingering Terror
Mes Projets futurs
(pour un futur plus ou moins proche ceci-dit…

Finir mon D.M. dans l'immédiat.
C'est hyper important
Oui
«Ceux qui exercent la profession d'herboriste-botaniste, lesquels sont de tous temps en possession de vendre des herbes ou plantes, seront soumis à la visite et inspection des gardes des apothicaires»
-- Arrêté du Conseil d'État, 30 oct. 1767

Tournois de pile ou face gratuit sur www.pilejegagnefacejegagne.com ; mon code de parrainage : aprèslundionnemhardy pour avoir 20 pièces moins chères que gratuites.

Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/11/2016 21:28 | #
Je ne connais pas du tout ces formats, tu as plus de détails, tu saurais où je peux en trouver ? (la doc de Simon Lothar est assez incomplète pour tout ce qui est formats, même si elle donne une bonne base... )
----------------------------------
Nemhardy
En ligne
Grand maître des Traits d'Esprit
Niveau: Confirmé
Points: 1085
Défis: 54
Message
Citer : Posté le 01/11/2016 21:37 | #
Je sais juste que ce sont des fichiers qui permettent d'internationaliser les machines (de fournir plus de "locales" en gros), en gros ça permet d'ajouter des langues à la machine assez facilement si je dis pas de bêtises. Bon après je doute qu'on en ait vraiment besoin, mais le fait de pouvoir passer facilement sa calto en Esperanto me semble pourtant fondamental.

Après sur un plan plus technique, je me suis jamais penché dessus en fait, mais ça n'a pas l'air hyper complexe :
« The g3l files consist of a header, containing the language name and other values, followed by a list of multi-byte strings. »
(bon le «other values» est un peu flou c'est vrai. x) )
«This type of files (.G1l) is easy to hack with a hex editor.»

Et éventuellement ça : http://prizm.cemetech.net/index.php/Locale

Mais après c'est tout ce que j'ai sous la main, je ne pense pas que ça ait été plus précisément documenté… ^^'
----------------------------------
Mes programmes
Cliquer pour enrouler
Équilibrer des coefficients stœchiométriques en moins de 2500 octets sur ta Prizm : Ekisto
Ma version du moteur de calcul symbolique libre Eigenmath
Projets supportés !
Entres autres
ColorLib de Lancelot
Zelda de SmashMaster
FiXos de Kristaba
The Lingering Terror
Mes Projets futurs
(pour un futur plus ou moins proche ceci-dit…

Finir mon D.M. dans l'immédiat.
C'est hyper important
Oui
«Ceux qui exercent la profession d'herboriste-botaniste, lesquels sont de tous temps en possession de vendre des herbes ou plantes, seront soumis à la visite et inspection des gardes des apothicaires»
-- Arrêté du Conseil d'État, 30 oct. 1767

Tournois de pile ou face gratuit sur www.pilejegagnefacejegagne.com ; mon code de parrainage : aprèslundionnemhardy pour avoir 20 pièces moins chères que gratuites.

Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10154
Défis: 130
Message
Citer : Posté le 01/11/2016 21:40 | #
Ça doit avoir à voir avec la liste des strings que l'on peut consulter dans le menu de test, accessible au boot avec [OPTN]+[EXP]+[AC/ON], [5], [9], [6], [3]|[4] sur G85. À tous les coups la numérotation correspond... (la Prizm doit fonctionner pareil)
----------------------------------
Watch me, as I build my empire with my own hands.
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/11/2016 21:48 | #
Pour les strings, pour le coup, une page dans le chm correspond.

Pour les "other values", peut-être quelque chose vis-à-vis des estrips ? (pas compris ce que c'était, mais j'ai vu ça associé aux langues dans le header G3A)

Et je regarde tout ça plus en détail quand je peux
----------------------------------
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9649
Défis: 170
Message
Citer : Posté le 01/11/2016 21:57 | #
Sympa

Une GUI serai pas de refus par contre pour le coup x)
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/11/2016 21:58 | #
La GUI, de une, ce sera quand la partie fonctionnelle sera prête (donc dans un bout de temps), et de deux, c'est pas moi qui la ferai.

Ajouté le 19/11/2016 à 23:27 :
Bon, comme je commence à avoir deux ou trois résultats, je viens poster ici.
Premier exemple, un programme qui affiche tous les mots de passe de programmes dans un g1m/g1r :

#include <libg1m.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main(int ac, char **av)
{
    if (ac != 2) return (0);

    /* get context */
    g1m_t *handle; int err;
    if ((err = g1m_open(&handle, av[1]))) {
        printf("Could not open file: %s\n", g1m_strerror(err));
        if (err == g1m_error_nostream)
            printf("Errno was %d: %s\n", errno, strerror(errno));
        return (1);
    }

    /* check type */
    if (handle->type & g1m_type_mcs) {
        for (int i = 0; i < handle->part_count; i++) {
            g1m_mcs_t *mcs = handle->parts[i];
            for (int j = 0; j < mcs->file_count; j++) {
                g1m_mcsfile_t *file = mcs->files[j];
                if (~file->type & g1m_mcstype_program)
                    continue;
                if (*file->password) {
                    printf("[%s] Password is '%s'\n",
                        file->name, file->password);
                } else
                    printf("[%s] No password\n", file->name);
            }
        }
    } else
        printf("Was not an MCS file!\n");

    /* free */
    g1m_free(handle);
    return (0);
}

Résultat sur Eon The Dragon par Drak (merci mec, ton programme est un super exemple o/) :

[�ANIM] No password
[�BEGIN] No password
[�CARAC] No password
[�CREDIT] Password is ' DRAK'
[�EDITOR] No password
[�EPILOG] No password
[�FIGHT] No password
[�FMOTOR] No password
[�MAIN P] No password
[�MAP M1] No password
[�MAP M2] No password
[�MAP M3] No password
[�MAP M4] No password
[�MATE MO] No password
[�MENU] No password
[�MLIST] No password
[�NAME] No password
[�SELEC] No password
[�SKET] No password
[�SYMB] No password
[�XP] No password


Je gère pas mal d'éléments de la MCS du coup, il me reste encore pas mal de variantes du format à explorer, de parsing à réaliser et d'éléments à faire pour rendre ça plus user-friendly. De plus, la lib n'a qu'une capacité de lecture pour le moment. Mais je bosse dessus !

(et oui, pour l'encodage, ça doit être du FONTCHARACTER pour lesquelles les fonctions sont déjà là, mais je comprends pas encore totalement comment c'est appliqué)
----------------------------------
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1808
Défis: 22
Message
Citer : Posté le 20/11/2016 01:00 | #
Sympa.
Mais ton code C il est sur calto ou ordi ?
----------------------------------
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 20/11/2016 01:01 | #
La libg1m est totalement du côté PC, et n'est aucunement vouée à être portée sur calculatrice.

Ajouté le 23/11/2016 à 09:44 :
Je passe juste dire que j'avance, mais qu'il me manque encore pas mal de fichiers de test. Donc si vous avez des fichiers de type G3M, G1L, G3L, G3P, je prends (sans description complète et centralisée du format, malheureusement, c'est compliqué de faire autrement).

(l'avancement est sur ma forge, comme d'hab)
----------------------------------
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10154
Défis: 130
Message
Citer : Posté le 23/11/2016 12:20 | #
De mémoire il y a une collection de G3P (fonds d'écran) quelque part sur Cemetech, ou TI-Planet (oups). Y'en a au moins 15, donc assez pour toi je pense. Y'a aussi un thread assez complet sur l'étude du format, sur PC au sujet je pense de mViewer pour CP400 (Critor).

Pour le G3M, la recherche est ton ami : lien
Oups, on dirait que la suppression du quatrième fichier des programmes n'a pas été correctement propagée. Mais puisque c'est toi, ça va <3
----------------------------------
Watch me, as I build my empire with my own hands.
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/12/2016 15:50 | #
Pour les G3P du coup, j'ai contacté Kerm sur Cemetech et il m'en a donné six relativement différents, donc normalement, ça devrait aller.

Pour la recherche, c'est super chiant à fix (la v42 est vraiment horrible putain.), donc faudra que je trouve le moyen de fix ça pour accéder aux G3M sur le site.

Ensuite, j'ai pu dégoter des C2P et des G1S (avec ce que j'ai découvert récemment, je suis capable de reconnaître les deux (pas encore de les lire)), et j'ai dégoté une petite fiche avec un format assez approximatif des C2P (où n'apparaissent pas les checksums, et comme je suis une quiche en reverse, c'est con). Par contre, j'avoue que pour les G1S, à part avoir lu quelque part que c'étaient des archives (l'équivalent made-in-Casio des zips), je n'ai pu trouver nulle part encore le format de ceux-ci ; quelqu'un aurait vu ça quelque part ? (comme précisé avant, je suis une quiche en reverse)

J'en profite aussi pour demander si quelqu'un n'a pas vu passer un rapport de reverse du format G1L. J'en ai un sous la main, je sais l'identifier, mais aucune idée de comment le lire.

Dernière note, il y a des formats très rares sur lesquels je ne suis pas parvenu à mettre la main, comme les G1N et les G1K/G3K (clés ?). La seule trace en ligne d'un G1N que j'ai pu trouver est un portuguais qui a posté sur Casiocalc.org il y a neuf/dix ans (son professeur de l'époque aurait transmis ça aux élèves de sa classe), aucune information sur l'utilité du format en lui-même (un FLS made-in-Casio ?), je l'ai donc contacté mais la probabilité que je reçoive une réponse est quand même extrêmement faible. Donc si vous avez la moindre info, je suis preneur.

Merci d'avance.
----------------------------------
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10154
Défis: 130
Message
Citer : Posté le 01/12/2016 16:40 | #
Je vois que tu ne fais ce boulot à moitié

Je ne peux pas t'aider pour grand-chose mais je sais que les fichiers g1s, ou en tout cas FA-124, a une fonction de "saturation" qui se manifeste sous la forme d'un "Memory Full", mais sur l'ordinateur, et à l'importation dans l'interface graphique. Il y a donc une possibilité pour que ce format soit une copie conforme de la mémoire de stockage et que FA-124 se trimballe une implémentation de Bfile (je cite la boîte de dialogue : "Optimize?"). À voir.

Ah oui, au fait :
Cakeisalie5 a écrit :
Ensuite, j'ai pu dégoter des C2P et des G1S [...]

Étant donné que les fichier g1s sont les images de mémoire de stockage de FA-124 et donc plutôt faciles à trouver, la formulation est un peu étonnante.
----------------------------------
Watch me, as I build my empire with my own hands.
Cakeisalie5
En ligne
Administrateur
Niveau: Confirmé
Points: 1466
Défis: 8
Message
Citer : Posté le 01/12/2016 17:18 | #
Donc pire que ce que je pensais.

Et en fait, j'ai juste récupéré les G1S de ce programme-là (et des C2P random trouvés sur TI-Planet). (je vois pas trop en quoi la formulation est étrange)
----------------------------------

Pages: 1, 2 | Suivante

Index du Forum | Projets de programmation | libg1m - une interface mieux pensée que son format
Publicité et partenaires
Casio Education
Casio éducation

TI-Planet
Casiopeia
Casiopeia
CasioFan, la communauté ClassPad
CasioFan
CodeWalrus
CodeWalrus

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2015 | Il y a 86 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Rugby Manager | Jeu de basket | Jeu de handball | Jeu de tennis | Nova Raider | Réparation téléphone | Soccer Rush | Tasty Tale

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd