Programmer l’amiga 68k bouts de code IDE langages, astuces
-
Pas du nouveau, juste une tentative de condenser ce qui a déjà été écrit ici et ailleurs :
sujet mĂ©mo ouvert pour les Ă©ternels dĂ©butants / amateurs mĂȘme peu douĂ©s souhaitant approfondir leurs connaissances ou plus simplement pour nourrir leur cerveau.Le sujet de 135 lignes ne passe pas, peut-ĂȘtre un filtre anti-spam qui considĂšre que + de 5 url c’est du flood đ
Vite, un panneau solaire et un PiStorm.
On commence avec un bout de code simple en C rĂ©cupĂ©rĂ© on ne sait plus ou et modifiĂ© pour produire un effet bizarre Ă l’Ă©cran. Le code n’est pas commentĂ©, Ă compiler soit mĂȘme pour les curieux, soit avec ADE soit avec un GCC plus rĂ©cent ou StormC ou etc…
/* bougefenetre.c - programme qui déplace la fenetre active vers la position 5,5 */ #include <intuition/intuitionbase.h> #include <proto/exec.h> #include <proto/intuition.h> #include <proto/dos.h> int main(void) { int i; for (i=0; i<=70; i++) /* Delay(5*50); */ MoveWindow(IntuitionBase->ActiveWindow, 5, 5); return 0; }Le programme se lance à partir du workbench.
Notez que le return 0; n’est pas obligatoire pour que le programme compile. Le programmen’a pas d’entĂȘte, ce qui n’est pas bien du tout đ /* bougefenetre.c */Vite, un panneau solaire et un PiStorm.
Ătant autodidacte en programmation, il me manque beaucoup d’informations.
Je suis surpris que la variable IntuitionBase soit utilisĂ©e sans ĂȘtre initialisĂ©e. Faut-il ajouter une ligne
IntuitionBase = openlibrary( "intuition.library" ; 0 );
au dĂ©but du main, et ajouter une ligne pour fermer cette bibliothĂšque avant le return ? Ou bien cette variable est-elle initialisĂ©e dans l’un des include ?IntuitionBase est dĂ©clarĂ© et initialisĂ© dans du code qui est automatiquement ajoutĂ© au tiens au moment de l’Ă©dition de liens. Ce code se trouve dans les « constructeurs ».
Et un « destructeur » se charge d’appeler CloseLibrary() aprĂšs le return final de ton main().Mais Ă partir du moment oĂč tu dĂ©clares IntuitionBase dans ton code alors tu dois ouvrir et fermer (avant le return final) intuition.library toi mĂȘme. C’est par exemple utile si tu veux ouvrir une version minimum d’une bibliothĂšque.
Ătant autodidacte en programmation, il me manque beaucoup dâinformations
On est nombreux dans ce cas ! ce sujet est fait pour ça ! đ On a aussi des bons profs genre Henes ou Sam ou d’autres qui peuvent partager (un peu) leur connaissances
Vite, un panneau solaire et un PiStorm.
Salut,
Alors il y a bien longtemps j’avais commencĂ© une partie programmation en C sur mon site đ
http://sitedesteph.free.fr/amiga/le-c/index.php
Alors c’est fini mais donne 2 ou 3 trucs đhttps://youtube.com/@stephbb75
Salut,
Je suis surpris que la variable IntuitionBase soit utilisĂ©e sans ĂȘtre initialisĂ©e. Faut-il ajouter une ligne
Oui c’est mieux, de toute façon c’est une bonne habitude a prendre.
Les truc fait totomatiquement faut fuir đLa partie intuition:
http://sitedesteph.free.fr/amiga/le-c/index.php?page=lib&part=plib&part2=intuitionhttps://youtube.com/@stephbb75
Alors il y a bien longtemps jâavais commencĂ© une partie programmation en C sur mon site
http://sitedesteph.free.fr/amiga/le-c/index.phpMerci pour le lien.
—
Jargon qui permet de comprendre le C et donc comment le code fonctionne sur amiga et d’autres systĂšmes.
https://fr.wikipedia.org/wiki/C_(langage) –– [SNIP] Trop tĂŽt pour parler des pointeurs. Je mets le paragraphe « pointeur » dans une nouvelle version du pdf en cours d’Ă©dition du 1er post qui fait maintenant plus de 100 kb.
– Constructeur, Destructeur : Par rapport au post prĂ©cĂ©dent.
Y a t-il des constructeurs et des destructeurs en lang. C ?
En langage C, contrairement Ă certains langages de programmation orientĂ©e objet tels que C++, il n’y a pas de constructeurs ni de destructeurs intĂ©grĂ©s en tant que caractĂ©ristiques de la langue.Un constructeur est gĂ©nĂ©ralement une mĂ©thode spĂ©ciale appelĂ©e lorsqu’un nouvel objet est créé pour effectuer des initialisations spĂ©cifiques Ă cet objet. Un destructeur est appelĂ© lorsque l’objet est dĂ©truit pour effectuer des nettoyages ou des opĂ©rations de libĂ©ration de ressources.
En C, il est de la responsabilitĂ© du programmeur de gĂ©rer explicitement l’initialisation et la libĂ©ration des ressources associĂ©es Ă des structures de donnĂ©es ou Ă des objets personnalisĂ©s. Cela se fait gĂ©nĂ©ralement en utilisant des fonctions spĂ©ciales pour l’initialisation et la libĂ©ration, plutĂŽt que par des constructeurs et des destructeurs automatiques.
—Pour bougefenetre.c
Comme l’a expliquĂ© Henes, par rapport Ă IntuitionBase
Du code permettant d’ouvrir et fermer des libs spĂ©cifiques est appelĂ© automatiquement Ă partir des includes par le code bougefenetre.c lors de la crĂ©ation de l’exĂ©cutable.– On produit un exĂ©cutable avec la commande gcc -noixemul bougefenetre.c qui crĂ©e un fichier amiga appelĂ© a.out
Il y a bien sur d’autres façons de faire (compiler).Vite, un panneau solaire et un PiStorm.
DeuxiÚme bout de code toujours en lang. C lié aux posts précédents.
Comme le code est plus long il nĂ©cessite un peu plus d’explications :/* openbase.c - ouverture et fermeture de intuition.library, ne fait strictement rien d'autre */ #include <dos/dos.h> #include <proto/dos.h> #include <proto/exec.h> /* Sans cette ligne, le code fait un warning avec gcc 2.95.3 */ #include <stdio.h> int main(void) { struct Library *IntuitionBase = NULL; /* Ouvrir la bibliothĂšque "intuition.library" */ IntuitionBase = OpenLibrary("intuition.library", 0); if (IntuitionBase == NULL) { fprintf(stderr, "Erreur lors de l'ouverture de intuition.library\n"); return 1; } /* code principal a ajouter ici */ /* Fermer la bibliothĂšque "intuition.library" lorsque vous avez terminĂ© */ if (IntuitionBase != NULL) { CloseLibrary(IntuitionBase); } return 0; }Ceux qui ont envie peuvent modifier ce code, l’amĂ©liorer et commenter leurs modifs. Ce code compile, s’exĂ©cute et n’affiche strictement rien Ă l’Ă©cran. Se compile avec : gcc -noixemul openbase.c
Vite, un panneau solaire et un PiStorm.
Pas besoin de retourner quoi que ce soit.
Void main(void)Pour comprendre le C
Le Langage C Kernighan et RitchieIl n’ y a pas mieux l.ideal c est la premiere version noire pas la norme ANSI mais ça c est pour les vrais đ
Il n’ y a aucun mal Ă ĂȘtre autodidacte le C le permet l’Amiga encore plus.
Je suis autodidacte et j’ai Ă©tĂ© responsable logiciel Temps rĂ©el en traction ferroviaire.Le C reste pour moi le meilleur langage qui existe cela gĂ©nĂšre du code propre efficace, efficient.
C est d ailleurs le langage le plus « vert » car binaire peu gourmand. Il faut rĂ©flĂ©chir en C đAmuse toi bien avec ce superbe langage.
Le C++ a Ă©tĂ© inventĂ© pour donner du boulot aux informaticiens si on avait continuĂ© Ă coder en C on aurait plus rien a faire đ
Et je parle pas de Java et consort.AprĂšs une IHM en C ça occupe …
Salut,
Pas besoin de retourner quoi que ce soit.
Bas si il retourne si erreur ou pas đ
Sur toutes les machines ce n’est pas le C qui est le plus compliquĂ©, mais les lib de la machine, et sur Amiga il nous on pas gĂąter đ
https://youtube.com/@stephbb75
Explication de texte détaillée du code plus haut : openbase.c.
1 – Le commentaire au dĂ©but du code explique que ce fichier source (openbase.c) traite de l’ouverture et de la fermeture de la bibliothĂšque Intuition. A noter que le code principal doit encore ĂȘtre ajoutĂ©.
2 – Les directives #include sont utilisĂ©es pour inclure les fichiers d’en-tĂȘte nĂ©cessaires pour ce programme. Ils comprennent <dos/dos.h>, <proto/dos.h>, <proto/exec.h>, et <stdio.h>.
3 – La fonction main() est la fonction principale du programme. Elle ne prend pas d’arguments. Enfin si, il y a void đ
4 – Une variable struct Library *IntuitionBase est dĂ©clarĂ©e. Cette variable sera utilisĂ©e pour stocker un pointeur vers la bibliothĂšque Intuition une fois qu’elle sera ouverte.
5 – Le code utilise la fonction OpenLibrary() pour ouvrir la bibliothĂšque « intuition.library ». Cette fonction prend le nom de la bibliothĂšque en tant que premier argument et un drapeau en tant que deuxiĂšme argument. Ici, le drapeau est dĂ©fini Ă 0, ce qui signifie une ouverture standard. Si l’ouverture rĂ©ussit, un pointeur vers la bibliothĂšque est retournĂ© et stockĂ© dans IntuitionBase. Si l’ouverture Ă©choue, le code affiche un message d’erreur sur la sortie d’erreur standard (stderr) et retourne 1 pour indiquer une erreur.
6 – Du code avec l’utilisation de la bibliothĂšque Intuition doit ĂȘtre ajoutĂ© Ă la place des commentaires. pour faire de cet exemple un programme utile. Pour le moment c’est vide.
7 – AprĂšs l’exĂ©cution du code principal ou mĂȘme sans ajout, la bibliothĂšque Intuition est fermĂ©e en utilisant CloseLibrary(). Cela libĂšre les ressources associĂ©es Ă la bibliothĂšque. Il faut vĂ©rifier si IntuitionBase n’est pas NULL avant d’appeler CloseLibrary(), car si l’ouverture a Ă©chouĂ©, IntuitionBase serait NULL, et appeler CloseLibrary(NULL) entraĂźnerait des erreurs.
8 – Dernier point : la fonction main() retourne 0 pour indiquer que le programme s’est terminĂ© normalement.
Vite, un panneau solaire et un PiStorm.
Nouveau source C Ă compiler pour
notre machine infernale prĂ©fĂ©rĂ©el’amiga.
C’est une modification d’un code produit en 1998 sur un site disparu et ne pouvant compiler Ă cause de la fonction d’origine getchar().
Ce programme n’est pas spĂ©cifique Ă l’amiga, c’est du C « pur » sans utilisation des includes amiga.
On peut ajouter que contrairement aux 2 exemples plus haut, ce code a une certaine utilitĂ© et pourrait ĂȘtre une source d’inspiration pour un programme plus consĂ©quent. Ce code n’utilise pas d’interface autre que le shell. (Pas d’intuition, de reaction, de mui, etc.)/* structs2.c v1.1 (06/29/98---10-06-2023) */ #include <stdio.h> #include <stdlib.h> struct MyRecord { char first_name[25]; char middle_initial; char last_name[25]; unsigned char age; }; int main(int argc, char *argv[]) { struct MyRecord employee[3]; unsigned char x; char temp_age[4]; for(x = 0; x < 3; x++ ) { printf("Employee #%d\n", x); printf("Enter the first name of the employee : "); gets(employee[x].first_name); printf("Enter the middle initial of the employee : "); employee[x].middle_initial = getchar(); printf("Enter the last name of the employee : "); gets(employee[x].last_name); printf("Enter the age of the employee : "); gets(temp_age); employee[x].age = atoi(temp_age); } for(x = 0; x < 3; x++ ) { printf("Employee #%d\n", x); printf("name : %s, %s %c\n", employee[x].last_name, employee[x].first_name, employee[x].middle_initial); printf("age : %d\n", employee[x].age); } return 0; }gcc -noixemul structs2.c ou gcc -noixemul -o structs2 structs2.c
Libre Ă chacun de modifier, de commenter, d’ajouter une interface. Evidemment il faut du temps et le temps en ce moment comme l’Ă©lectricitĂ© a un prix.Vite, un panneau solaire et un PiStorm.
lang. C de base compatible gcc Amiga. Ultra simple en apparence mais intĂ©ressant pour comprendre les boucles et moins ennuyeux qu’un Hello world. On peut d’ailleurs rester bloquĂ© longtemps sur les boucles infinies imbriquĂ©es (Ă©ternellement) avant d’attaquer les pointeurs (:peur).
/* vite.c - VITE ! Plus VITE !!! */ #include <stdio.h> int main() { while (1) { printf("Vite un panneau solaire, vite ! :)\n"); } return 0; }gcc -noixemul -o vite vite.c
On peut faire la mĂȘme chose en amigaDOS.
Vite, un panneau solaire et un PiStorm.
Le C et ses pointeurs… L’amiga et ses fonctions… Rappelons que ce topic s’adresse Ă des dĂ©butants toujours en vie qui ne captent rien Ă l’assembleur ou autre langage « compliqué » du genre.
INTERRO ECRITE, sortez vos claviers. le source est issu d’un exemple tirĂ© du Amiga ROM Kernel Reference Manual Libraries 3rd Edition »
https://archive.org/details/amiga-rom-kernel-reference-manual-libraries-3rd-edition/mode/2up/* easy.c : a complete example of how to open an Amiga function library inc. In this case the function library is Intuition. * function library is open, any Intuition function can be called. Once the Intuition This example uses the DisplayBeep() function of Intuition to flash the screen. With SAS/C (Lattice), compile with lc -L easy.c */ /* Declare the return type of the functions we will use. */ /* En premier, ajout des includes qui ne sont pas dans l'exemple */ #include <dos/dos.h> #include <proto/dos.h> #include <proto/exec.h> #include <stdio.h> #include <libraries/dos.h> /* il manque un #include <proto/intuition.h>, des includes en trop */ / * struct Library *OpenLibrary(); These Exec library functions can be called anytime (Exec is always open). void CloseLibrary(); Before using this Intuition function, the Intuition library must be opened void DisplayBeep(); cette fonction est en fait une fonction d'affichage, cette instruction ne sert Ă rien, ce qui est un indice pour corriger ce code plantagĂšne hu hu ... Toute la partie prĂ©cĂ©dente est en fait un commentaire, sauf les includes, voir le post suivant de Gilloo */ struct IntuitionBase *IntuitionBase; /* Get storage for the library base. The base name MUST be IntuitionBase */ int main() { IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",33L); if (IntuitionBase) { /* Check to see if it actually opened. The Intuition library is now open so. any of its functions may be used. */ DisplayBeep(OL); /* la fonction simple de la mort, En fait ce n'est pas (OL) mais (0L), (zĂ©ro L) */ CloseLibrary(IntuitionBase); /* Always close a library if not in use. */ } else{ /* The library did not open so return an error code. The exit() function is not part of the 0S, it is part of the compiler link library. */ exit(20); } }Ce source ouvre et ferme intuition et affiche un « beep » Ă l’Ă©cran, mais il manque un morceau de code pour que ça compile, l’exemple donnĂ© dans le bouquin est faux, volontairement ou pas (ptetre parce qu’il s’adresse Ă des gens expĂ©rimentĂ©s) comme si les choses n’Ă©taient pas assez difficiles comme ça, hĂ© hĂ©.
Si personne n’est intĂ©ressĂ© par un topic sur le code sur amiga, tant pis đ
Si un « connaissant » veut corriger ce code avec quelques explications, qu’il n’hĂ©site point.Vite, un panneau solaire et un PiStorm.
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › DĂ©veloppement › Programmer l’amiga 68k bouts de code IDE langages, astuces
