Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Projets » GW2 (28 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Folco Ecrit le: Mardi 10 janvier 2006 à 11:25 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


Je suis en train d'écrire une bibliothèque dynamique basée sur graphlib de la Doors Team. Cette bibliothèque est faite pour produire rapidement des boites de dialogue avec un certain nombre de fonctionnalités, en évitant de devoir calculer soi-même les dimensions nécessaires, la position de chaque élément, et de recréer la gestion du clavier et des données à fournir ou à récupérer.

La lib est parfaitement réentrante, ce qui fait qu'elle pourrait être utilisée en multi-thread, mais surtout, on peut calculer plusieurs fenêtres et les afficher simultanément sans aucun problème.

Liste des éléments affichables
-texte
-menu horizontal (exemple: "Choix: <element x>"
-menu vertical (un seul élément sélectionnable, défile comme un popup)
-boutons (ok, annuler, etc...)
-check (case à cocher)
-séparation horizontales (lignes vides, tout simplement, uniquement là pour la graphisme)
-request (avec un nombre de caractère max, et une chaine par défaut si l'on veut)
-liste à puce (ressemble au menu vertical en fait, mais tous les éléments sont affichés)

Pour chaque élément, on peut définir un offset horizontal par rapport au bord de l'écran, ce qui permet un positionnement au pixel près. Idem pour le positionnement vertical, grâce au séparateurs.
Chaque élément comporte un certain nombre de flag qui permet d'en customiser l'affichage et l'utilisation. Tous les éléments interactifs de la boite de dialogue comprennent une adresse de callback.

Stade d'avancement actuel:
Le précalcul de tous les types de données est terminé.
L'affichage des textes selon le flag est terminé, reste les autres éléments à programmer.
La gestion proprement dite d'une fenêtre (clavier + données) n'est pas encore commencée.

Exemple simple:
_main:
      jsr      graphlib::gray4            ;active les niveaux de gris
      move.w  #1,graphlib::choosescreen  ;redirige toutes les fonctions de grpahlib vers ces plans
      lea.l    window(pc),a2              ;charge l'adresse de la fenêtre
      jsr      gw2::MakeWindow            ;calcule les données nécessaires
      jsr      gw2:ispWindow            ;affiche la fenêtre
      jsr      tios::ngetchx              ;attend une touche
      jsr      graphlib::gray2            ;désactive les niveaux de gris
      rts                                ;quitte

window:
      GW2_WINDOW_HEADER  5,20,str        ;en-tête de la fenêtre: x, y, titre

      GW2_TEXT  0,%100                  ;texte: offset horizontal, flag
      dc.l      str2

      GW2_TEXT  0,%110
      dc.l      str3

      GW2_EMPTY_LINE  5                  ;nombre de lignes horizontales à passer

      GW2_TEXT  0,%1001
      dc.l      str4

      GW2_TEXT  0,%100001
      dc.l      str5

      GW2_TEXT  4,%100000
      dc.l      str6

      GW2_EMPTY_LINE 2

      GW2_TEXT  0,%1100
      dc.l      str7

      GW2_END_WINDOW                    ;fin de fenêtre

str:      dc.b      "Graphlib Window Wrapper",0
str2:      dc.b      "Texte aligné à gauche",0
str3:      dc.b      "Texte aligné à droite",0
str4:      dc.b      "Texte centré normal",0
str5:      dc.b      "Ou encore, texte centré en blanc sur noir!",0
str6:      dc.b      "ou aligné, mais avec un offset",0
str7:      dc.b      "et là c'est illisible ",0


Voici la fenêtre fournie par ce code:

http://databob.free.fr/Volume/files/00000033/gw2_2.png

Ceci met en évidence la simplicité des données à fournir, et la simplicité du code pour calculer et afficher la fenêtre. La simplicité et le fait de faciliter la vie du programmeur étant le but premier de la lib, je pense que de ce côté là, le contrat est rempli.

Documentation
Les différentes macros, flags et formats sont documéntés dans le header ou un fichier texte séparé.

Voilà, je me doute que très peu de monde, voire strictement personne ne soit intéressé vu le nombre de programmeurs asm. Je suppose également que pas grand monde ne voit une utilité à cette lib, sinon elle existerait déjà. Ceci dit, si ça donne des idées à certains, tant mieux. En tout cas, si vous avez des suggestions ou des propositions, je suis ouvert à tout, alors merci d'avance. :)
Le code en l'état sera disponible sous peu, pour ceux qui voudraient se pencher plus en détail sur le travail.
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°1   Marquer comme non lu.
Thor Ecrit le: Mardi 10 janvier 2006 à 11:53 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Sympa mais cette lib marchera t'elle à l'avenir en nostub? Est ce que tu prévois de faire une structure de donnée permettant la création d'un nouveau style de boite?
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°2   Marquer comme non lu.
Folco Ecrit le: Mardi 10 janvier 2006 à 12:08 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


Un nouveau style de boite, c'est possible assez simplement en effet. Après, ça ne fera que prendre de la place en plus dans la lib, mais ça reste faisable même jusqu'à la fin, donc je ne m'en inquiète pas pour le moment. Par contre, tu peux proposer quelquechose si tu veux, le graphisme, surtout en 4 grays, ce n'est pas mon fort. Donc n'hésite pas!

Pour faire ça en nostub, pas de problèmes, cependant je ne vois pas trop l'intérêt, c'est fait pour être utiliser avec graphlib, qui est une lib kernel, donc ça limite l'utilité de passer ça en kernel (à part une pure perte de place pour le coup!). Surtout qu'il n'y a que peu de fonctions de prévues: MakeWindow (calcul des données qu'il faut) DispWindow, ActivateWindow (gère une fenêtre affichée) et UpdateWindow (met à jour une fenêtre en cours de gestion suite à un callback par exemple). Il y aura peut-être deux ou trois fonctions d'accès pour ne pas avoir à hacker le format des tables, mais ce sera de toute façon très limité.
Tout ça pour dire que même en nostub, toutes les fonctions se retrouvant incluses, ça ne prendra pas moins de place qu'en dynamique.

edit-> Tiens, idée subite, je peux très bien demander une adresse de fonction pour tracer une fenêtre, mais elle devra juste respecter certaines spécifications de dimensions, pour corrspondre à peu près à celles de graphlib. Dans mon cas, on pourrais considérer que (graphlib::box) a été passé en argument. Excellente idée Thor, j'implémente ça dès que j'ai 5 minutes. :)


-Edité le Mardi 10 janvier 2006 à 12:10 par Martial Demolins-
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°3   Marquer comme non lu.
Jfg Ecrit le: Mardi 10 janvier 2006 à 12:47 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


Laisses tomber.
ou change "Totalement inactif en programmation depuis le 01/10/05."
Kill Mario
    
./Post n°4   Marquer comme non lu.
Folco Ecrit le: Mardi 10 janvier 2006 à 12:49 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


Pourquoi laisse tomber?
(second degré pawa, stou^^)
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°5   Marquer comme non lu.
Thor Ecrit le: Mardi 10 janvier 2006 à 12:57 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Martial > Mon type de boite en 4 couleurs j'en ai quelques uns mais je les gardent pour moi pour un prochain projet! (Si j'ai le temps de faire ce projet)

Edit > Si cette lib ne sera pas en nostub j'ai encore moins d'idée de design à te donner #gni#
-Edité le Mardi 10 janvier 2006 à 12:58 par Thor-
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°6   Marquer comme non lu.
Folco Ecrit le: Mardi 10 janvier 2006 à 12:59 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


ah ok. De toute façon, vu la méthode que je vais employer, je n'ai pas besoin de connaitre la manière d'afficher la boite. Il faudra juste donner l'adresse d'une procédure compabtible avec graphlib::box, et c'est tout. :)

edit-> jmblc de ça :p
et encore une fois, le modèle m'importe peu ^^ et tu pourras toujours porter la lib, c'est simple à faire (redéfinir les exportations, virer les quelques RAM calls et recompiler en archive TIGCC).
-Edité le Mardi 10 janvier 2006 à 13:01 par Martial Demolins-
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 10 janvier 2006 à 13:08 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Bon, je résume ce que j'ai dit dans l'autre topic:
1. graphlib est obsolète, elle ne fait que réinventer des fonctions qui sont déjà dans la ROM et y rajouter une routine de niveaux de gris dépassée (pas de double-buffering par échange de pointeurs).
2. Pour les dialogues, il y a des fonctions toutes prêtes dans AMS, donc cette lib réinvente aussi la roue.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
Folco Ecrit le: Mardi 10 janvier 2006 à 13:14 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


bon, je répète ce que j'ai dit dans lautre topic:
  • graphlib me suffit pour ça, j'ai pas besoin de double buffering pour afficher une boite de dialogue
  • les boites de AMS me plaisent pas, je crée les miennes à mon goût, avec des fonctionnalités différentes, en plus jolie et plus modulables.


edit-> Kevin, si on pouvait s'arrêter là pour ce débat, ce serait bien. Ce n'est pas le but de ce topic. Crées-en un sur les polémiques touchant au look&feel des TI si tu veux en parler, mais par pitié, ne pourris pas ce topic.
A bon entendeur, salut! :)



-Edité le Mardi 10 janvier 2006 à 13:16 par Martial Demolins-
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 11 janvier 2006 à 15:36 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Et sinon, je te signale que non, des prototypes de fonctions ne suffisent pas pour rendre ta lib exploitable en C, il faut totalement refaire ta structure de données.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
Folco Ecrit le: Mercredi 11 janvier 2006 à 15:45 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


Pourquoi? Pas que je sois pas d'accord, mais j'aimerais savoir pourquoi. :D
Et à la rigueur, adapter. :)
-Edité le Mercredi 11 janvier 2006 à 15:45 par Martial Demolins-
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°11   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 11 janvier 2006 à 19:12 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Pour le C, il faut une structure de la forme de la structure DIALOG de AMS: Tu as un tableau DIALOG_ITEM items[] (qui est obligatoirement le dernier élément de la structure puisqu'il est de taille variable), et chaque DIALOG_ITEM doit avoir exactement la même longueur, pour pouvoir définir un type union pour DIALOG_ITEM. Tes DIALOG_ITEM sont de longueur variable, donc ce n'est pas représentable en C. Ta structure ressemble à la structure MENU de AMS qui a le même problème. La structure DIALOG est mieux conçue.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°12   Marquer comme non lu.
Folco Ecrit le: Jeudi 12 janvier 2006 à 08:46 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


ah ok, tu dis ça pour que je puisse être compatible avec les dialogues de AMS je suppose? Ce n'est pas mon but. Ceci dit, je peux en effet créer des structures dont la taille est fixe. :)
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°13   Marquer comme non lu.
Sasume Ecrit le: Jeudi 12 janvier 2006 à 10:19 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Martial> Même si tu ne changes pas tes structures, ce sera parfaitement utilisable en C... On ne profitera peut-être pas du typage offert par le C, mais on pourra l'utiliser.
Si vraiment ça ne pose aucun pb autant concevoir des structures utilisables en C, mais si ça alourdit ta lib, je te le déconseille...
    
./Post n°14   Marquer comme non lu.
Folco Ecrit le: Jeudi 12 janvier 2006 à 10:56 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


ah ok, merci alors. =)
d'ailleurs je me demandais pourquoi, parcequ'une fois que tu passes le pointeur kivabien à la lib, elle se débrouille toute seule quelque soit la longueur des données qu'elle rencontre. :)
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°15   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 12 janvier 2006 à 12:01 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Martial Demolins :
ah ok, tu dis ça pour que je puisse être compatible avec les dialogues de AMS je suppose?

Non, pour que ce soit exploitable en C! Relis mieux mon message!

Sasume :
Martial> Même si tu ne changes pas tes structures, ce sera parfaitement utilisable en C... On ne profitera peut-être pas du typage offert par le C, mais on pourra l'utiliser.

Je ne vois pas comment. Tu ne peux pas utiliser un tableau de longs parce que certains trucs sont sur 4 octets et d'autres sur 2, et tu ne peux pas utiliser une structure à la DIALOG (une fois de plus, je parle de DIALOG parce que c'est un exemple du type de structure de données auquel je pense, il ne s'agit pas du tout d'être compatible avec le DIALOG de AMS, la lib ne l'est de toute façon pas) parce que les items sont de longueur variable.
-Edité le Jeudi 12 janvier 2006 à 12:03 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°16   Marquer comme non lu.
Folco Ecrit le: Jeudi 12 janvier 2006 à 12:05 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


mais qu'est ce qui empêche un programmeur en C d'écrire des int et des longs les uns à la suite des autres dans un buffer, puis de passer l'adresse du buffer en argument à la lib?


-Edité le Jeudi 12 janvier 2006 à 12:17 par Martial Demolins-
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°17   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 12 janvier 2006 à 12:07 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


#sick#
Je n'appelle pas ça "exploitable", ça t'oblige à recopier tes données en temps d'exécution, alors que l'intérêt d'une API avec une structure de données est de pouvoir stocker cette structure directement dans le programme. (Sinon, autant utiliser une API à la DialogAddItem.)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°18   Marquer comme non lu.
Sasume Ecrit le: Jeudi 12 janvier 2006 à 12:30 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Kevin Kofler :
Sasume :
Martial> Même si tu ne changes pas tes structures, ce sera parfaitement utilisable en C... On ne profitera peut-être pas du typage offert par le C, mais on pourra l'utiliser.

Je ne vois pas comment.

Avec des void *.
Oui, je sais ce n'est pas joli, mais bon, ça fonctionnerait...
    
./Post n°19   Marquer comme non lu.
Folco Ecrit le: Jeudi 12 janvier 2006 à 15:11 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


Kevin-> je suis prêt à refaire quelquechose de plus propre poour que ce soit exploitable en C. Mais comment représenter proprement des listes de longueur variables (dropdown ou liste à puce...) ? En demandant le nombre d'éléments à stocker? Parceque sinon, je vais retomber dans le même hack en asm, avec une structure toujours aussi peu exploitable en C...
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
  :: Index » Forum Ti68K » Projets » GW2 (28 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 50.71ms avec 18 requetes