Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » libg1m - une interface mieux pensée que son format
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 Message

libg1m - une interface mieux pensée que son format

Posté le 01/11/2016 10:05

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.



1, 2 Suivante
Ninestars Hors ligne Membre Points: 2462 Défis: 24 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 Ancien administrateur Points: 1953 Défis: 11 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)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Hackcell Hors ligne Maître du Puzzle Points: 1530 Défis: 11 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.
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 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.
In Arch, I trust ! And you ?
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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.
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

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).
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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... )
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets

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é… ^^'

Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 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)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Dark storm En ligne Labélisateur Points: 11640 Défis: 176 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 Ancien administrateur Points: 1953 Défis: 11 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é)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 20/11/2016 01:00 | #


Sympa.
Mais ton code C il est sur calto ou ordi ?
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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.
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cakeisalie5 En ligne Ancien administrateur Points: 1953 Défis: 11 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)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 70 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd