GEMDOS.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Olivier.jan (talk | contribs) (Replacing content with updated version) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|GEMDOS.TXT}} |
||
<pre> |
<pre> |
||
− | ***-------------- LES FONCTIONS GEMDOS PAR |
+ | ***-------------- LES FONCTIONS GEMDOS PAR NUMÉRO ---------------*** |
$00 Pterm0 Fin de processus |
$00 Pterm0 Fin de processus |
||
− | $01 Cconin Lit un |
+ | $01 Cconin Lit un caractère sur l'entrée standard |
− | $02 Cconout |
+ | $02 Cconout Écrit un caractère sur la sortie standard |
− | $03 Cauxin Lit un |
+ | $03 Cauxin Lit un caractère sur l'entrée standard AUX: |
− | $04 Cauxout |
+ | $04 Cauxout Écrit un caractère sur la sortie standard AUX: |
− | $05 Cprnout |
+ | $05 Cprnout Écrit un caractère sur la sortie standard PRN: |
− | $06 Crawio Lecture/ |
+ | $06 Crawio Lecture/écriture brute sur l'entrée/sortie standard |
− | $07 Crawcin Lecture brute sur l' |
+ | $07 Crawcin Lecture brute sur l'entrée standard |
− | $08 Cnecin Lit un |
+ | $08 Cnecin Lit un caractère sur l'entrée standard, sans écho |
− | $09 Cconws |
+ | $09 Cconws Écrit une chaîne sur la sortie standard |
− | $0A Cconrs Lit une |
+ | $0A Cconrs Lit une chaîne formatée sur l'entrée standard |
− | $0B Cconis Teste l' |
+ | $0B Cconis Teste l'état de l'entrée standard |
− | $0E Dsetdrv Fixe le lecteur de disque par |
+ | $0E Dsetdrv Fixe le lecteur de disque par défaut |
− | $10 Cconos Teste l' |
+ | $10 Cconos Teste l'état de la sortie standard |
− | $11 Cprnos Teste l' |
+ | $11 Cprnos Teste l'état du périphérique standard PRN: |
− | $12 Cauxis Teste l' |
+ | $12 Cauxis Teste l'état du standard AUX: en entrée |
− | $13 Cauxos Teste l' |
+ | $13 Cauxos Teste l'état du standard AUX: en sortie |
− | $19 Dgetdrv Demande le disque par |
+ | $19 Dgetdrv Demande le disque par défaut |
$1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) |
$1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) |
||
$20 Super Entre/Sort/Demande du mode superviseur |
$20 Super Entre/Sort/Demande du mode superviseur |
||
Line 27: | Line 28: | ||
$2D Tsettime Fixe l'heure |
$2D Tsettime Fixe l'heure |
||
$2F Fgetdta Demande l'adresse du DTA (Disk Transfer Adress) |
$2F Fgetdta Demande l'adresse du DTA (Disk Transfer Adress) |
||
− | $30 Sversion Demande le |
+ | $30 Sversion Demande le numéro de version du GEMDOS |
− | $31 Ptermres Finit un programme qui reste |
+ | $31 Ptermres Finit un programme qui reste résident |
$36 Dfree Demande d'informations sur un disque |
$36 Dfree Demande d'informations sur un disque |
||
− | $39 Dcreate |
+ | $39 Dcreate Création d'un sous-répertoire |
− | $3A Ddelete Efface un sous- |
+ | $3A Ddelete Efface un sous-répertoire |
$3B Dsetpath Fixe le catalogue courant |
$3B Dsetpath Fixe le catalogue courant |
||
− | $3C Fcreate |
+ | $3C Fcreate Création d'un fichier |
$3D Fopen Ouvre un fichier |
$3D Fopen Ouvre un fichier |
||
$3E Fclose Ferme un fichier |
$3E Fclose Ferme un fichier |
||
$3F Fread Lit un fichier |
$3F Fread Lit un fichier |
||
− | $40 Fwrite |
+ | $40 Fwrite Écrit un fichier |
$41 Fdelete Efface un fichier |
$41 Fdelete Efface un fichier |
||
$42 Fseek Positionnement dans un fichier |
$42 Fseek Positionnement dans un fichier |
||
Line 43: | Line 44: | ||
$45 Fdup Recopie un identificateur de fichier standard |
$45 Fdup Recopie un identificateur de fichier standard |
||
$46 Fforce Force un identificateur de fichier |
$46 Fforce Force un identificateur de fichier |
||
− | $47 Dgetpath Demande le |
+ | $47 Dgetpath Demande le répertoire courant |
− | $48 Malloc Demande d'allocation |
+ | $48 Malloc Demande d'allocation mémoire |
− | $49 Mfree |
+ | $49 Mfree Libère de la mémoire |
− | $4A Mshrink |
+ | $4A Mshrink Rétrécit un bloc de mémoire allouée |
− | $4B Pexec Charge/ |
+ | $4B Pexec Charge/Exécute un programme |
$4C Pterm Termine un programme |
$4C Pterm Termine un programme |
||
− | $4E Fsfirst Recherche la |
+ | $4E Fsfirst Recherche la première occurrence d'un fichier |
$4F Fnext Recherche l'occurrence suivante |
$4F Fnext Recherche l'occurrence suivante |
||
$56 Frename Renomme un fichier |
$56 Frename Renomme un fichier |
||
− | $57 Fdatime Demande ou fixe la date de |
+ | $57 Fdatime Demande ou fixe la date de création d'un fichier |
***-------------- FONCTIONS GEMDOS PAR NOM ----------------------*** |
***-------------- FONCTIONS GEMDOS PAR NOM ----------------------*** |
||
− | $03 Cauxin Lit un |
+ | $03 Cauxin Lit un caractère sur l'entrée standard AUX: |
− | $12 Cauxis Teste l' |
+ | $12 Cauxis Teste l'état du standard AUX: en entrée |
− | $13 Cauxos Teste l' |
+ | $13 Cauxos Teste l'état du standard AUX: en sortie |
− | $04 Cauxout |
+ | $04 Cauxout Écrit un caractère sur la sortie standard AUX: |
− | $01 Cconin Lit un |
+ | $01 Cconin Lit un caractère sur l'entrée standard |
− | $0B Cconis Teste l' |
+ | $0B Cconis Teste l'état de l'entrée standard |
− | $10 Cconos Teste l' |
+ | $10 Cconos Teste l'état de la sortie standard |
− | $02 Cconout |
+ | $02 Cconout Écrit un caractère sur la sortie standard |
− | $0A Cconrs Lit une |
+ | $0A Cconrs Lit une chaîne formatée sur l'entrée standard |
− | $09 Cconws |
+ | $09 Cconws Écrit une chaîne sur la sortie standard |
− | $08 Cnecin Lit un |
+ | $08 Cnecin Lit un caractère sur l'entrée standard, sans écho |
− | $11 Cprnos Teste l' |
+ | $11 Cprnos Teste l'état du périphérique standard PRN: |
− | $05 Cprnout |
+ | $05 Cprnout Écrit un caractère sur la sortie standard PRN: |
− | $07 Crawcin Lecture brute sur l' |
+ | $07 Crawcin Lecture brute sur l'entrée standard |
− | $06 Crawio Lecture/ |
+ | $06 Crawio Lecture/écriture brute sur l'entrée/sortie standard |
− | $39 Dcreate |
+ | $39 Dcreate Création d'un sous-répertoire |
− | $3A Ddelete Efface un sous- |
+ | $3A Ddelete Efface un sous-répertoire |
$36 Dfree Demande d'informations sur un disque |
$36 Dfree Demande d'informations sur un disque |
||
− | $19 Dgetdrv Demande le disque par |
+ | $19 Dgetdrv Demande le disque par défaut |
− | $47 Dgetpath Demande le |
+ | $47 Dgetpath Demande le répertoire courant |
− | $0E Dsetdrv Fixe le lecteur de disque par |
+ | $0E Dsetdrv Fixe le lecteur de disque par défaut |
$3B Dsetpath Fixe le catalogue courant |
$3B Dsetpath Fixe le catalogue courant |
||
$43 Fattrib Retourne/fixe les attributs de fichier |
$43 Fattrib Retourne/fixe les attributs de fichier |
||
$3E Fclose Ferme un fichier |
$3E Fclose Ferme un fichier |
||
− | $3C Fcreate |
+ | $3C Fcreate Création d'un fichier |
− | $57 Fdatime Demande ou fixe la date de |
+ | $57 Fdatime Demande ou fixe la date de création d'un fichier |
$41 Fdelete Efface un fichier |
$41 Fdelete Efface un fichier |
||
$45 Fdup Recopie un identificateur de fichier standard |
$45 Fdup Recopie un identificateur de fichier standard |
||
Line 92: | Line 93: | ||
$42 Fseek Positionnement dans un fichier |
$42 Fseek Positionnement dans un fichier |
||
$1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) |
$1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) |
||
− | $4E Fsfirst Recherche la |
+ | $4E Fsfirst Recherche la première occurrence d'un fichier |
$4F Fnext Recherche l'occurrence suivante |
$4F Fnext Recherche l'occurrence suivante |
||
− | $40 Fwrite |
+ | $40 Fwrite Écrit dans un fichier |
− | $48 Malloc Demande d'allocation |
+ | $48 Malloc Demande d'allocation mémoire |
− | $49 Mfree |
+ | $49 Mfree Libère de la mémoire |
− | $4A Mshrink |
+ | $4A Mshrink Rétrécit un bloc de mémoire allouée |
− | $4B Pexec Charge/ |
+ | $4B Pexec Charge/Exécute un programme |
$4C Pterm Termine un programme |
$4C Pterm Termine un programme |
||
$00 Pterm0 Termine un programme (code de retour 0) |
$00 Pterm0 Termine un programme (code de retour 0) |
||
− | $31 Ptermres Termine un programme qui reste |
+ | $31 Ptermres Termine un programme qui reste résident |
$20 Super Entre/Sort/Demande du mode superviseur |
$20 Super Entre/Sort/Demande du mode superviseur |
||
− | $30 Sversion Demande le |
+ | $30 Sversion Demande le numéro de version du GEMDOS |
$2A Tgetdate Demande la date |
$2A Tgetdate Demande la date |
||
$2C Tgettime Demande l'heure |
$2C Tgettime Demande l'heure |
||
Line 115: | Line 116: | ||
Termine un processus, fermant tous les fichiers qu'il a ouvert et |
Termine un processus, fermant tous les fichiers qu'il a ouvert et |
||
− | + | libérant la mémoire qu'il a allouée. Retourne $0000 comme code de |
|
sortie au programme parent. |
sortie au programme parent. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $01 Cconin Lit un |
+ | $01 Cconin Lit un caractère sur l'entrée standard |
LONG Cconin() |
LONG Cconin() |
||
− | Lit un |
+ | Lit un caractère sur l'entrée standard (identificateur 0). Si |
− | l' |
+ | l'entrée standard est la console, le long_mot retourné dans D0 |
− | contient le code ASCII et le code clavier de la touche |
+ | contient le code ASCII et le code clavier de la touche appuyée |
(code de scrutation) : |
(code de scrutation) : |
||
Line 131: | Line 132: | ||
|-------------|-----------|----------|-----------| |
|-------------|-----------|----------|-----------| |
||
| | code de | | | |
| | code de | | | |
||
− | | $00 ou bits | scrutation| $00 | |
+ | | $00 ou bits | scrutation| $00 | caractère | |
| de shift | ou $00 | | ASCII | |
| de shift | ou $00 | | ASCII | |
||
|_____________|___________|__________|___________| |
|_____________|___________|__________|___________| |
||
− | Les touches de fonction (F1 |
+ | Les touches de fonction (F1 à F10, HELP, UNDO, etc...) retournent |
− | le code ASCII $00, avec le code clavier |
+ | le code ASCII $00, avec le code clavier approprié (cf. le manuel |
sur le clavier intelligent pour la valeur des codes clavier). Le |
sur le clavier intelligent pour la valeur des codes clavier). Le |
||
− | ST BIOS place l' |
+ | ST BIOS place l'état des touches spéciales dans les bits 24 à 31 |
− | (voir le Guide du programmeur du BIOS pour plus de |
+ | (voir le Guide du programmeur du BIOS pour plus de détails). |
ERREURS |
ERREURS |
||
Ne retourne aucune indication de fin de fichier. |
Ne retourne aucune indication de fin de fichier. |
||
− | Ne |
+ | Ne reconnaît pas 'Control_C' |
− | Impossible de savoir si l' |
+ | Impossible de savoir si l'entrée est un périphérique à carac- |
− | + | tères ou un fichier. |
|
− | Il devrait exister un moyen de taper les 256 codes possibles |
+ | Il devrait exister un moyen de taper les 256 codes possibles à |
partir du clavier. |
partir du clavier. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $02 Cconout Ecrit un |
+ | $02 Cconout Ecrit un caractère sur la sortie standard |
void Cconout(c) |
void Cconout(c) |
||
WORD c |
WORD c |
||
− | + | Écrit le caractère 'c' sur la sortie standard (identificateur 0). |
|
− | Les huit bits les plus significatifs de 'c' sont |
+ | Les huit bits les plus significatifs de 'c' sont réservés et |
− | doivent |
+ | doivent être à zéro. Les tabulations ne sont pas interprétées. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $03 Cauxin Lit un |
+ | $03 Cauxin Lit un caractère sur l'entrée standard AUX: |
WORD Cauxin() |
WORD Cauxin() |
||
− | Lit un |
+ | Lit un caractère à partir de l'identificateur 1 (le port série AUX:, |
normalement). |
normalement). |
||
REMARQUE |
REMARQUE |
||
− | Le |
+ | Le contrôle de flux de la sortie RS232 ne marche pas avec |
cette fonction. Les programmes devraient utiliser l'appel de |
cette fonction. Les programmes devraient utiliser l'appel de |
||
− | + | périphérique de caractère BIOS afin d'éviter de perdre des |
|
− | + | caractères reçus. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $04 Cauxout |
+ | $04 Cauxout Écrit un caractère sur la sortie standard AUX: |
void Cauxout(c) |
void Cauxout(c) |
||
WORD c |
WORD c |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $05 Cprnout |
+ | $05 Cprnout Écrit un caractère sur la sortie standard PRN: |
void Cprnout(c) |
void Cprnout(c) |
||
WORD c |
WORD c |
||
− | + | Écrit 'c' sur l'identificateur 2 (le port imprimante PRN:, norma- |
|
− | lement). Les huits bits hauts de 'c' sont |
+ | lement). Les huits bits hauts de 'c' sont réservés et doivent être à |
− | + | zéro. Les tabulations ne sont pas interprétées. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $06 Crawio Lecture/ |
+ | $06 Crawio Lecture/Écriture brute sur l'entrée/sortie standard |
LONG Crawio(w) |
LONG Crawio(w) |
||
WORD w; |
WORD w; |
||
REMARQUES |
REMARQUES |
||
− | Par le fait |
+ | Par le fait même de sa conception cette fonction ne peut |
− | + | écrire '$ff' sur la sortie standard. |
|
− | $00 ne peut |
+ | $00 ne peut être différencié d'une fin de fichier. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $07 Crawcin |
+ | $07 Crawcin Entrée brute sur l'entrée standard |
LONG Crawcin() |
LONG Crawcin() |
||
REMARQUE Pas d'indication de fin de fichier. |
REMARQUE Pas d'indication de fin de fichier. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $08 Cnecin Lit un |
+ | $08 Cnecin Lit un caractère sur l'entrée standard, sans écho |
LONG Cnecin() |
LONG Cnecin() |
||
− | Lit un |
+ | Lit un caractère sur l'entrée standard. Si le périphérique |
− | d' |
+ | d'entrée est 'CON:', aucun écho n'est fait. Les caractères de |
− | + | contrôle sont interprétés. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $09 Cconws Ecrit une |
+ | $09 Cconws Ecrit une chaîne sur la sortie standard |
− | void Cconws( |
+ | void Cconws(chaîne) |
− | char * |
+ | char *chaîne; |
− | + | Écrit une chaîne débutant à 'chaîne' et finissant par 0, sur la |
|
sortie standard. |
sortie standard. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $0A Cconrs Lit une |
+ | $0A Cconrs Lit une chaîne sur l'entrée standard |
void Cconrs(buf) |
void Cconrs(buf) |
||
char *buf; |
char *buf; |
||
− | Lit une |
+ | Lit une chaîne sur l'entrée standard. Les caractères de contrôle |
− | habituels sont |
+ | habituels sont interprétés : |
____________________________________________ |
____________________________________________ |
||
− | | |
+ | | Caractère | Fonction | |
|--------------|-----------------------------| |
|--------------|-----------------------------| |
||
| <return>, ^J | Fin de ligne | |
| <return>, ^J | Fin de ligne | |
||
− | | ^H, <rub> | Efface le dernier |
+ | | ^H, <rub> | Efface le dernier caractère | |
− | | ^U, ^X | Efface la ligne |
+ | | ^U, ^X | Efface la ligne entière | |
| ^R | Recopie la ligne | |
| ^R | Recopie la ligne | |
||
| ^C | Fini le programme | |
| ^C | Fini le programme | |
||
|______________|_____________________________| |
|______________|_____________________________| |
||
− | Le premier |
+ | Le premier caractère de 'buf' contient le nombre maximum d'octets à |
− | lire (taille du tampon moins deux). En sortie, le |
+ | lire (taille du tampon moins deux). En sortie, le deuxième octet |
− | contient le nombre de |
+ | contient le nombre de caractères lus. La chaîne se trouve entre |
'buf+2' et 'buf+2+buf[1]'. |
'buf+2' et 'buf+2+buf[1]'. |
||
− | Il n'est pas garanti que la |
+ | Il n'est pas garanti que la chaîne se finisse par 0. |
REMARQUE Plante sur les fins de fichiers. |
REMARQUE Plante sur les fins de fichiers. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $0B Cconis Teste l' |
+ | $0B Cconis Teste l'état de l'entrée standard |
WORD Cconis() |
WORD Cconis() |
||
− | Retourne $FFFF si un |
+ | Retourne $FFFF si un caractère est disponible sur l'entrée |
standard, $0000 sinon. |
standard, $0000 sinon. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $0E Dsetdrv Fixe le lecteur de disque par |
+ | $0E Dsetdrv Fixe le lecteur de disque par défaut |
LONG Dsetdrv(drv) |
LONG Dsetdrv(drv) |
||
WORD drv; |
WORD drv; |
||
− | Fixe le disque 'drv' par |
+ | Fixe le disque 'drv' par défaut. Les disques sont rangés de 0 à 15 |
− | (A: |
+ | (A: à P:). Retourne dans D0.L la carte des disques actifs: |
(bit 0 = A, bit 1 = B, etc..). |
(bit 0 = A, bit 1 = B, etc..). |
||
− | Un 'disque actif' est un disque |
+ | Un 'disque actif' est un disque à partir duquel un catalogue a été |
fait. |
fait. |
||
− | REMARQUE Le GEMDOS ne supporte que 16 disques (bits 0 |
+ | REMARQUE Le GEMDOS ne supporte que 16 disques (bits 0 à 15). Les |
− | + | systèmes ultérieurs en supporteront 32 . |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $10 Cconos Teste l' |
+ | $10 Cconos Teste l'état de la sortie standard |
WORD Cconos() |
WORD Cconos() |
||
− | Renvoie $FFFF si la console est |
+ | Renvoie $FFFF si la console est prête à recevoir un caractère, |
− | $0000 si la console n'est PAS |
+ | $0000 si la console n'est PAS prête. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $11 Cprnos Teste l' |
+ | $11 Cprnos Teste l'état de la sortie standard PRN: |
WORD Cprnos() |
WORD Cprnos() |
||
− | Retourne $FFFF si 'PRN:' est |
+ | Retourne $FFFF si 'PRN:' est prêt à recevoir un caractère, $0000 |
sinon. |
sinon. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $12 Cauxis Teste l' |
+ | $12 Cauxis Teste l'état de l'entrée standard AUX: |
WORD Cauxis() |
WORD Cauxis() |
||
− | Retourne $FFFF si un |
+ | Retourne $FFFF si un caractère est disponible sur l'entrée 'AUX:' |
(identificateur 1), $0000 sinon. |
(identificateur 1), $0000 sinon. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $13 Cauxos Teste l' |
+ | $13 Cauxos Teste l'état de la sortie standard AUX: |
WORD Cauxos() |
WORD Cauxos() |
||
− | Renvoie $FFFF si 'AUX:' (identificateur 1) est |
+ | Renvoie $FFFF si 'AUX:' (identificateur 1) est prêt à recevoir un |
− | + | caractère, $0000 sinon. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $19 Dgetdrv Recherche le lecteur de disque par |
+ | $19 Dgetdrv Recherche le lecteur de disque par défaut |
WORD Dgetdrv() |
WORD Dgetdrv() |
||
− | Retourne le |
+ | Retourne le numéro du lecteur courant, compris entre 0 et 15. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) |
$1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) |
||
void Fsetdta(adr) |
void Fsetdta(adr) |
||
char adr; |
char adr; |
||
− | Fixe l'adresse du DTA |
+ | Fixe l'adresse du DTA à 'adr'. Le tampon de stockage des données |
sur un fichier (DTA) ne sert que pour les fonctions Fsfirst() et |
sur un fichier (DTA) ne sert que pour les fonctions Fsfirst() et |
||
Fsnext(). |
Fsnext(). |
||
Line 288: | Line 289: | ||
LONG Super(pile) |
LONG Super(pile) |
||
WORD *pile; |
WORD *pile; |
||
− | 'pile' est |
+ | 'pile' est égal à -1L ($FFFFFFFF): |
la fonction retourne $0000 si le processeur est en mode |
la fonction retourne $0000 si le processeur est en mode |
||
Utilisateur, $0001 s'il est en mode Superviseur. |
Utilisateur, $0001 s'il est en mode Superviseur. |
||
− | 'pile' est |
+ | 'pile' est différent de -1L: |
si le processeur est en mode Utilisateur, la fonction revient |
si le processeur est en mode Utilisateur, la fonction revient |
||
avec le processeur en mode Superviseur. Si 'pile' est NUL |
avec le processeur en mode Superviseur. Si 'pile' est NUL |
||
− | ($00000000), la pile superviseur sera la |
+ | ($00000000), la pile superviseur sera la même que la pile |
Utilisateur avant l'appel. Sinon la pile Superviseur sera |
Utilisateur avant l'appel. Sinon la pile Superviseur sera |
||
− | + | placée à 'pile'. |
|
− | Si le processeur |
+ | Si le processeur était en mode Superviseur, il se retrouve en |
− | mode Utilisateur au retour de la fonction. 'pile' devra |
+ | mode Utilisateur au retour de la fonction. 'pile' devra être |
− | la valeur de la pile utilisateur qui a |
+ | la valeur de la pile utilisateur qui a été retournée par le |
premier appel de la fonction. |
premier appel de la fonction. |
||
ATTENTION |
ATTENTION |
||
− | La pile Superviseur originale doit |
+ | La pile Superviseur originale doit être replacée avant la fin |
− | du programme sinon le |
+ | du programme sinon le système plantera à la sortie du |
programme. |
programme. |
||
Line 316: | Line 317: | ||
15 __________________9_8_________5_4_________0 |
15 __________________9_8_________5_4_________0 |
||
− | | |
+ | | Année depuis 1980 | mois | jour | |
| 0.....119 | 1...12 | 1...31 | |
| 0.....119 | 1...12 | 1...31 | |
||
|_____________________|___________|___________| |
|_____________________|___________|___________| |
||
RETOUR |
RETOUR |
||
− | les bits 0 |
+ | les bits 0 à 4 contiennent le jour allant de 1 à 31. |
− | les bits 5 |
+ | les bits 5 à 8 contiennent le mois allant de 1 à 12. |
− | les bits 9 |
+ | les bits 9 à 15 contiennent l'année (à partir de 1980) |
− | allant de 0 |
+ | allant de 0 à 119. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$2B Tsetdate Fixe la date |
$2B Tsetdate Fixe la date |
||
WORD Tsetdate(date) |
WORD Tsetdate(date) |
||
WORD date; |
WORD date; |
||
− | Fixe 'date' comme date courante dans le format |
+ | Fixe 'date' comme date courante dans le format décrit dans |
Tgetdate(). |
Tgetdate(). |
||
Line 337: | Line 338: | ||
REMARQUES |
REMARQUES |
||
Le GEMDOS n'est pas difficile sur la date; par exemple le 31 |
Le GEMDOS n'est pas difficile sur la date; par exemple le 31 |
||
− | + | Février ne lui déplaît pas. |
|
− | Le GEMDOS ne |
+ | Le GEMDOS ne prévient PAS le BIOS que la date a changée. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$2C Tgettime Demande l'heure |
$2C Tgettime Demande l'heure |
||
Line 351: | Line 352: | ||
RETOUR Les bits : |
RETOUR Les bits : |
||
− | 0 |
+ | 0 à 4 contiennent les secondes divisées par 2 (0 à 28) |
− | 5 |
+ | 5 à 10 contiennent les minutes (0 à 59) |
− | 11 |
+ | 11 à 15 contiennent les heures (0 à 23) |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$2D Tsettime Fixe l'heure |
$2D Tsettime Fixe l'heure |
||
WORD Tsettime(heure) |
WORD Tsettime(heure) |
||
WORD heure; |
WORD heure; |
||
− | Fixe 'heure' comme heure courante dans le format |
+ | Fixe 'heure' comme heure courante dans le format décrit dans |
Tgettime(). |
Tgettime(). |
||
Line 364: | Line 365: | ||
ERROR si le format de l'heure n'est pas valide. |
ERROR si le format de l'heure n'est pas valide. |
||
REMARQUE |
REMARQUE |
||
− | Le GEMDOS ne |
+ | Le GEMDOS ne prévient pas le BIOS que l'heure a changé. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$2F Fgetdta Demande l'adresse du DTA (Disk Transfer Address) |
$2F Fgetdta Demande l'adresse du DTA (Disk Transfer Address) |
||
LONG Fgetdta() |
LONG Fgetdta() |
||
− | Retourne l'adresse courante du tampon de stockage des |
+ | Retourne l'adresse courante du tampon de stockage des données sur un |
− | fichier (DTA), |
+ | fichier (DTA), employée par les fonctions Fsfirst() et Fsnext(). |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $30 Sversion Demande le |
+ | $30 Sversion Demande le numéro de version du GEMDOS |
WORD Sversion() |
WORD Sversion() |
||
− | Retourne le |
+ | Retourne le numéro de version du GEMDOS en format inversé. L'octet |
− | le plus significatif contient la partie basse du |
+ | le plus significatif contient la partie basse du numéro, l'octet le |
moins significatif, la partie haute. |
moins significatif, la partie haute. |
||
REMARQUES |
REMARQUES |
||
− | La version du GEMDOS sur disquette du 29/5/85 et la |
+ | La version du GEMDOS sur disquette du 29/5/85 et la première |
− | version en ROM du 20/11/85 ont $1300 comme |
+ | version en ROM du 20/11/85 ont $1300 comme numéro. |
− | Les |
+ | Les numéros de version du GEMDOS et du TOS ne sont PAS les |
− | + | mêmes. (cf. LE MANUEL DE REFERENCE DU BIOS DU ST pour le numéro |
|
de version du TOS). |
de version du TOS). |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $31 Ptermres Finit un programme qui reste |
+ | $31 Ptermres Finit un programme qui reste résident |
void Permres( nbrest,coderet) |
void Permres( nbrest,coderet) |
||
LONG nbrest; |
LONG nbrest; |
||
WORD coderet; |
WORD coderet; |
||
− | Finit le programme courant, en conservant une part de sa |
+ | Finit le programme courant, en conservant une part de sa mémoire. |
'nbrest' le est nombre d'octets appartenant au programme qui |
'nbrest' le est nombre d'octets appartenant au programme qui |
||
− | doivent |
+ | doivent être gardés, comprenant et commençant à la page de base. |
− | 'coderet' est le code de sortie qui est |
+ | 'coderet' est le code de sortie qui est retourné au programme |
parent. |
parent. |
||
− | La |
+ | La mémoire que le programme a allouée (en plus de sa zone TPA) |
− | N'EST PAS |
+ | N'EST PAS libérée. |
− | Il est impossible de rappeler le programme |
+ | Il est impossible de rappeler le programme terminé par Ptermres(). |
REMARQUE |
REMARQUE |
||
− | Les fichiers ouverts sont |
+ | Les fichiers ouverts sont fermés lors de la fin de processus. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$36 Dfree Demande l'espace libre sur un disque |
$36 Dfree Demande l'espace libre sur un disque |
||
Line 410: | Line 411: | ||
Demande des informations sur le disque 'nbdisq' et les place dans |
Demande des informations sur le disque 'nbdisq' et les place dans |
||
− | quatre longs_mots |
+ | quatre longs_mots commençant à 'buf': |
__________________________________________________ |
__________________________________________________ |
||
| buf + 0 | nombre de blocs libres sur le disque | |
| buf + 0 | nombre de blocs libres sur le disque | |
||
Line 421: | Line 422: | ||
|___________|______________________________________| |
|___________|______________________________________| |
||
− | REMARQUE Incroyablement lent sur un disque dur (5 |
+ | REMARQUE Incroyablement lent sur un disque dur (5 à 10 secondes). |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $39 Dcreate |
+ | $39 Dcreate Création d'un sous_répertoire de disque C |
WORD Dcreate(chemin) |
WORD Dcreate(chemin) |
||
char *chemin; |
char *chemin; |
||
− | 'Chemin' pointe sur une |
+ | 'Chemin' pointe sur une chaîne terminée par 0 spécifiant le chemin |
− | du nouveau |
+ | du nouveau répertoire. |
RETOUR |
RETOUR |
||
− | 0 en cas de |
+ | 0 en cas de succès; |
− | ERROR ou le |
+ | ERROR ou le numéro d'erreur approprié en cas d'échec. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $3A Ddelete Efface un |
+ | $3A Ddelete Efface un sous_répertoire |
WORD Ddelete(chemin) |
WORD Ddelete(chemin) |
||
char *chemin; |
char *chemin; |
||
− | Efface un |
+ | Efface un répertoire qui doit être vide (il peut toutefois |
− | comporter les fichiers |
+ | comporter les fichiers spéciaux "." et ".."). 'chemin' pointe sur |
− | une |
+ | une chaîne terminée par zéro, spécifiant le chemin du répertoire à |
effacer. |
effacer. |
||
− | RETOUR 0 en cas de |
+ | RETOUR 0 en cas de succès; |
− | ERROR ou le |
+ | ERROR ou le numéro d'erreur approprié en cas d'échec. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $3B Dsetpath Fixe le |
+ | $3B Dsetpath Fixe le répertoire courant |
WORD Dsetpath(chemin) |
WORD Dsetpath(chemin) |
||
char *chemin; |
char *chemin; |
||
− | Fixe 'chemin', (une |
+ | Fixe 'chemin', (une chaîne terminée par 0), comme répertoire |
courant. Si le chemin commence par une lettre identificatrice de |
courant. Si le chemin commence par une lettre identificatrice de |
||
− | disque suivie de deux-points, le |
+ | disque suivie de deux-points, le répertoire courant est placé sur le |
− | lecteur |
+ | lecteur spécifié. |
− | Le |
+ | Le système conserve un répertoire courant pour chaque lecteur. |
− | RETOUR 0 en cas de |
+ | RETOUR 0 en cas de succès; |
− | ERROR ou le |
+ | ERROR ou le numéro d'erreur approprié en cas d'echec. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $3C Fcreate |
+ | $3C Fcreate Création d'un fichier |
WORD Fcreate(nomfich,attribs) |
WORD Fcreate(nomfich,attribs) |
||
char *nomfich; |
char *nomfich; |
||
WORD attribs; |
WORD attribs; |
||
− | + | Crée un fichier 'nomfich' et retourne son identificateur, non |
|
− | standard, d' |
+ | standard, d'écriture seule. Le mot d'attributs est stocké dans le |
− | + | répertoire; les bits d'attributs sont : |
|
_________________________________________________________ |
_________________________________________________________ |
||
| masque | description | |
| masque | description | |
||
|---------|-----------------------------------------------| |
|---------|-----------------------------------------------| |
||
− | | $01 | fichier |
+ | | $01 | fichier créé en lecture seule | |
− | | $02 | fichier transparent au |
+ | | $02 | fichier transparent au répertoire | |
− | | $04 | fichier |
+ | | $04 | fichier système | |
| $08 | fichier contenant un nom de volume sur 11 bits | |
| $08 | fichier contenant un nom de volume sur 11 bits | |
||
|________|______________________________________-_________| |
|________|______________________________________-_________| |
||
Line 475: | Line 476: | ||
RETOUR |
RETOUR |
||
Un nombre positif, l'identificateur ou : |
Un nombre positif, l'identificateur ou : |
||
− | ERROR ou le |
+ | ERROR ou le numéro d'erreur approprié. |
REMARQUES |
REMARQUES |
||
− | Si le bit de lecture seule est |
+ | Si le bit de lecture seule est positionné, un identificateur |
− | d' |
+ | d'écriture seule est retourné, et, de plus, cet identificateur |
− | ne permet pas d' |
+ | ne permet pas d'écrire. |
− | + | Théoriquement, un seul numéro de volume est permis sur un |
|
− | + | répertoire racine. Le GEMDOS n'impose rien de tel, ce qui |
|
peut causer quelque confusion. |
peut causer quelque confusion. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
Line 491: | Line 492: | ||
WORD mode; |
WORD mode; |
||
Ouvre le fichier 'nmfich' en mode 'mode' et retourne son identifi- |
Ouvre le fichier 'nmfich' en mode 'mode' et retourne son identifi- |
||
− | cateur non standard. Le mode d'ouverture peut |
+ | cateur non standard. Le mode d'ouverture peut être: |
____________________________ |
____________________________ |
||
| mode | description | |
| mode | description | |
||
|------|---------------------| |
|------|---------------------| |
||
| 0 | lecture seule | |
| 0 | lecture seule | |
||
− | | 1 | |
+ | | 1 | écriture seule | |
− | | 2 | lecture et |
+ | | 2 | lecture et écriture | |
|______|_____________________| |
|______|_____________________| |
||
RETOUR |
RETOUR |
||
Un nombre positif, l'identificateur |
Un nombre positif, l'identificateur |
||
− | Un |
+ | Un numéro d'erreur négatif. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$3E Fclose Fermeture d'un fichier |
$3E Fclose Fermeture d'un fichier |
||
Line 509: | Line 510: | ||
Ferme le fichier dont l'identificateur est 'idfich'. |
Ferme le fichier dont l'identificateur est 'idfich'. |
||
− | RETOUR 0 en cas de |
+ | RETOUR 0 en cas de succès; |
− | ERROR ou un |
+ | ERROR ou un numéro d'erreur approprié en cas d'échec. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$3F Fread Lecture sur un fichier |
$3F Fread Lecture sur un fichier |
||
Line 519: | Line 520: | ||
Lit 'nbre' octets dans le fichier d'identificateur 'idfich', et |
Lit 'nbre' octets dans le fichier d'identificateur 'idfich', et |
||
− | les place en |
+ | les place en mémoire à partir de l'adresse 'buffer'. |
RETOUR |
RETOUR |
||
− | Le nombre d'octets |
+ | Le nombre d'octets réellement lus, ou: |
0 si code de fin de fichier, |
0 si code de fin de fichier, |
||
− | Un |
+ | Un numéro d'erreur négatif. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $40 Fwrite |
+ | $40 Fwrite Écriture sur un fichier |
LONG Fwrite(idfich,nbre,buffer) |
LONG Fwrite(idfich,nbre,buffer) |
||
WORD idfich; |
WORD idfich; |
||
Line 532: | Line 533: | ||
char *buffer; |
char *buffer; |
||
− | + | Écrit 'nbre' octets de la mémoire à partir de l'adresse 'buffer', |
|
dans le fichier ayant comme identificateur 'idfich'. |
dans le fichier ayant comme identificateur 'idfich'. |
||
− | RETOUR Le nombre d'octets |
+ | RETOUR Le nombre d'octets réellement écrits en cas de succès. |
− | Un |
+ | Un numéro d'erreur négatif autrement. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$41 Fdelete Effacement d'un fichier |
$41 Fdelete Effacement d'un fichier |
||
Line 543: | Line 544: | ||
Efface le fichier ayant comme nom 'nomfich'. |
Efface le fichier ayant comme nom 'nomfich'. |
||
− | RETOUR 0 en cas de |
+ | RETOUR 0 en cas de succès |
− | Un |
+ | Un numéro d'erreur négatif autrement. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$42 Fseek Positionne le pointeur de fichier |
$42 Fseek Positionne le pointeur de fichier |
||
Line 551: | Line 552: | ||
WORD idfich; |
WORD idfich; |
||
WORD mode; |
WORD mode; |
||
− | Positionne le pointeur dans le fichier |
+ | Positionne le pointeur dans le fichier défini par l'identificateur |
− | 'idfich'. 'offset' est un nombre |
+ | 'idfich'. 'offset' est un nombre signé; une valeur positive |
− | + | déplace le pointeur vers la fin du fichier, une valeur négative, |
|
− | vers le |
+ | vers le début. Le 'mode' de positionnement peut être : |
_____________________________________________ |
_____________________________________________ |
||
− | | mode | |
+ | | mode | Déplacement d'offset octets... | |
|-------|------------------------------------| |
|-------|------------------------------------| |
||
− | | 0 | |
+ | | 0 | à partir du début du fichier | |
− | | 1 | |
+ | | 1 | à partir de la position courante | |
− | | 2 | |
+ | | 2 | à partir de la fin du fichier | |
|_______|____________________________________| |
|_______|____________________________________| |
||
RETOUR La position courante dans le fichier. |
RETOUR La position courante dans le fichier. |
||
− | Un |
+ | Un numéro d'erreur négatif si erreur. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$43 Fattrib Fixe ou demande les attributs d'un fichier |
$43 Fattrib Fixe ou demande les attributs d'un fichier |
||
Line 571: | Line 572: | ||
WORD drap; |
WORD drap; |
||
WORD attribs; |
WORD attribs; |
||
− | 'nmfich' pointe sur un chemin |
+ | 'nmfich' pointe sur un chemin terminé par 0. Si 'drap' a la valeur |
− | 1, les attributs de fichier 'attribs' sont |
+ | 1, les attributs de fichier 'attribs' sont fixés (pas de valeur de |
− | retour). Si 'drap' est 0, ils sont |
+ | retour). Si 'drap' est 0, ils sont retournés. |
Les bits d'attributs sont : |
Les bits d'attributs sont : |
||
Line 579: | Line 580: | ||
| masque | description | |
| masque | description | |
||
|--------|------------------------------------------------| |
|--------|------------------------------------------------| |
||
− | | $01 | fichier |
+ | | $01 | fichier à lecture seule | |
− | | $02 | fichier transparent au |
+ | | $02 | fichier transparent au répertoire | |
− | | $04 | fichier ' |
+ | | $04 | fichier 'système' | |
| $08 | fichier contenant un nom de volume (11 octets) | |
| $08 | fichier contenant un nom de volume (11 octets) | |
||
− | | $10 | fichier sous- |
+ | | $10 | fichier sous-répertoire | |
− | | $20 | fichier |
+ | | $20 | fichier écrit puis refermé | |
|________|________________________________________________| |
|________|________________________________________________| |
||
REMARQUE Le bit d'archivage, $20, ne semble pas marcher comme |
REMARQUE Le bit d'archivage, $20, ne semble pas marcher comme |
||
− | + | prévu. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$45 Fdup Duplique un identificateur de fichier |
$45 Fdup Duplique un identificateur de fichier |
||
WORD Fdup(idfich) |
WORD Fdup(idfich) |
||
WORD idfich; |
WORD idfich; |
||
− | L'identificateur 'idfich' doit |
+ | L'identificateur 'idfich' doit être un identificateur standard (0 à |
− | 5). Fdup() retourne un identificateur non standard ( |
+ | 5). Fdup() retourne un identificateur non standard (supérieur ou |
− | + | égal à 6) qui pointe le même fichier. |
|
RETOUR Un identificateur ou : |
RETOUR Un identificateur ou : |
||
Line 606: | Line 607: | ||
WORD nonstdh; |
WORD nonstdh; |
||
− | Force l'identificateur standard 'stdh' |
+ | Force l'identificateur standard 'stdh' à pointer le même fichier |
− | ou |
+ | ou périphérique que l'identificateur non-standard 'nonstdh'. |
RETOUR 0 si OK |
RETOUR 0 si OK |
||
EIHNDL identificateur invalide. |
EIHNDL identificateur invalide. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $47 Dgetpath Demande le |
+ | $47 Dgetpath Demande le répertoire courant |
void Dgetpath(buf,driveno) |
void Dgetpath(buf,driveno) |
||
char *buf; |
char *buf; |
||
WORD driveno; |
WORD driveno; |
||
− | Le |
+ | Le répertoire courant pour le lecteur 'driveno' est recopié dans |
− | 'buf'. Le |
+ | 'buf'. Le numéro de lecteur commence à 1 pour le lecteur A:, 2 |
− | pour le B:, etc..., 0 |
+ | pour le B:, etc..., 0 spécifiant le disque par défaut. |
REMARQUE |
REMARQUE |
||
− | La taille maximum d'un chemin n'est pas |
+ | La taille maximum d'un chemin n'est pas limitée par le sys- |
− | + | tème. C'est à l'application de fournir assez de place pour le |
|
− | tampon. 128 octets semblent suffisants pour 8 ou 9 sous- |
+ | tampon. 128 octets semblent suffisants pour 8 ou 9 sous-réper- |
toires. |
toires. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $48 Malloc Demande d'allocation |
+ | $48 Malloc Demande d'allocation mémoire |
LONG Malloc(taille) |
LONG Malloc(taille) |
||
LONG taille; |
LONG taille; |
||
Si 'taille' est -1L ($FFFFFFFF) la fonction retourne la taille du |
Si 'taille' est -1L ($FFFFFFFF) la fonction retourne la taille du |
||
− | plus grand bloc libre du |
+ | plus grand bloc libre du système. Autrement si 'taille' est |
− | + | différent de -1L, la fonction essaie d'allouer 'taille' octets pour |
|
le programme en cours. La fonction retourne un pointeur sur le |
le programme en cours. La fonction retourne un pointeur sur le |
||
− | + | début du bloc alloué si tout s'est bien passé, ou NULL s'il n'exis- |
|
− | tait pas de bloc assez grand pour satisfaire la |
+ | tait pas de bloc assez grand pour satisfaire la requête. |
REMARQUE |
REMARQUE |
||
− | Un programme ne peut avoir, |
+ | Un programme ne peut avoir, à un instant donné plus de 20 blocs |
− | + | alloués par 'Malloc()'. Dépasser cette limite peut désemparer le |
|
GEMDOS. (Il est cependant possible de faire le nombre de |
GEMDOS. (Il est cependant possible de faire le nombre de |
||
− | 'Malloc()' que l'on veut |
+ | 'Malloc()' que l'on veut à condition de les faire suivre par |
− | l'appel de la fonction Mfree(), 20 |
+ | l'appel de la fonction Mfree(), 20 étant le nombre maximum de |
− | fragments qu'un programme peut |
+ | fragments qu'un programme peut générer). |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $49 Mfree |
+ | $49 Mfree Libération de mémoire |
WORD Mfree(adbloc) |
WORD Mfree(adbloc) |
||
LONG adbloc; |
LONG adbloc; |
||
− | + | Libère le bloc mémoire commençant à 'adbloc'. Le bloc doit être un |
|
− | de ceux |
+ | de ceux alloués par Malloc(). |
RETOUR |
RETOUR |
||
− | 0 si la |
+ | 0 si la libération s'est bien Effectuée. |
− | ERROR ou le |
+ | ERROR ou le numéro d'erreur approprié sinon. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $4A Mshrink |
+ | $4A Mshrink Rétrécit la taille d'un bloc alloué |
WORD Mshrink(0,bloc,nouvtail) |
WORD Mshrink(0,bloc,nouvtail) |
||
WORD) 0; |
WORD) 0; |
||
LONG bloc; |
LONG bloc; |
||
LONG nouvtail; |
LONG nouvtail; |
||
− | + | Rétrécit la taille d'un bloc mémoire alloué. 'bloc' pointe sur la |
|
− | page de base d'un programme ou sur un bloc de |
+ | page de base d'un programme ou sur un bloc de mémoire alloué par |
Malloc(), 'nouvtail' est la nouvelle taille du bloc. |
Malloc(), 'nouvtail' est la nouvelle taille du bloc. |
||
− | Le premier argument du bloc doit |
+ | Le premier argument du bloc doit être un mot nul. |
RETOUR |
RETOUR |
||
− | 0 si l'ajustement de taille |
+ | 0 si l'ajustement de taille à été réussi. |
− | EIMBA si l'adresse du bloc |
+ | EIMBA si l'adresse du bloc mémoire était invalide. |
− | EGSBF si la nouvelle taille |
+ | EGSBF si la nouvelle taille demandée était Erronée. |
REMARQUE |
REMARQUE |
||
− | un bloc ne peut |
+ | un bloc ne peut être que rétréci; la nouvelle taille du bloc |
− | doit |
+ | doit forcément être inférieure à la précédente. |
N.D.T.:Le compilateur 'C' Alcyon rajoute, lors de la compilation, |
N.D.T.:Le compilateur 'C' Alcyon rajoute, lors de la compilation, |
||
− | le premier |
+ | le premier paramètre d'appel '0'. Il ne faut donc pas le mettre |
dans l'appel de la fonction si l'on se sert de ce compilateur. |
dans l'appel de la fonction si l'on se sert de ce compilateur. |
||
Appel de la fonction avec le 'C' Alcyon : Mshrink(bloc,nouvtail); |
Appel de la fonction avec le 'C' Alcyon : Mshrink(bloc,nouvtail); |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $4B Pexec Charge/ |
+ | $4B Pexec Charge/Exécute un programme |
WORD Pexec(mode,ptr1,ptr2,ptr3) |
WORD Pexec(mode,ptr1,ptr2,ptr3) |
||
WORD mode; |
WORD mode; |
||
Line 686: | Line 687: | ||
char *ptr3; |
char *ptr3; |
||
− | Cette fonction permet |
+ | Cette fonction permet différentes utilisations selon le drapeau |
'mode': |
'mode': |
||
Line 692: | Line 693: | ||
| mode | ptr1 | ptr2 | ptr3 | |
| mode | ptr1 | ptr2 | ptr3 | |
||
|--------------|--------------|-------------|---------------| |
|--------------|--------------|-------------|---------------| |
||
− | | 0: charge et | le fichier |
+ | | 0: charge et | le fichier à | le jeu de | la chaîne d' | |
− | | |
+ | | exécute | exécuter | commandes | environnement | |
|--------------|--------------|-------------|---------------| |
|--------------|--------------|-------------|---------------| |
||
− | | 3: charge | le fichier |
+ | | 3: charge | le fichier à | le jeu de | la chaîne d' | |
| sans lancer| charger | commandes | environnement | |
| sans lancer| charger | commandes | environnement | |
||
|--------------|--------------|-------------|---------------| |
|--------------|--------------|-------------|---------------| |
||
− | | 4: |
+ | | 4: exécute | l'adr. de la | (inutilisé) | (inutilisé) | |
| uniquement| page de base | | | |
| uniquement| page de base | | | |
||
|--------------|--------------|-------------|---------------| |
|--------------|--------------|-------------|---------------| |
||
− | | 5: |
+ | | 5: crée une | (inutilisé) | le jeu de | la chaîne d' | |
| page de base| | commandes | environnement | |
| page de base| | commandes | environnement | |
||
|______________|______________|_____________|_______________| |
|______________|______________|_____________|_______________| |
||
− | Le nom du fichier |
+ | Le nom du fichier à charger ou à exécuter, 'ptr1', et la chaîne du |
− | jeu de commandes, 'ptr2', sont des chemins, |
+ | jeu de commandes, 'ptr2', sont des chemins, terminés par 0. La |
− | + | chaîne d'environnement 'ptr3', est soit NULL (0L), soit un |
|
− | pointeur sur une structure de |
+ | pointeur sur une structure de chaîne de la forme: |
− | " |
+ | "chaîne1\0" |
− | " |
+ | "chaîne2\0" |
etc... |
etc... |
||
− | " |
+ | "chaîne3\0" |
"\0" |
"\0" |
||
− | La |
+ | La chaîne d'environnement peut être n'importe quel numéro de |
− | + | chaîne finie par un 0, suivie par une chaîne nulle (un simple 0). |
|
− | Le programme |
+ | Le programme hérite d'une copie de la chaîne d'environnement |
parente si 'ptr3' est 'NULL'. |
parente si 'ptr3' est 'NULL'. |
||
− | Le mode 0 (charge et |
+ | Le mode 0 (charge et exécute) chargera le fichier spécifié, |
− | composera sa page de base, et l' |
+ | composera sa page de base, et l'exécutera. La valeur retournée par |
Pexec() sera le code de sortie du processus enfant (voir Pterm0() |
Pexec() sera le code de sortie du processus enfant (voir Pterm0() |
||
et Pterm()). |
et Pterm()). |
||
− | Le mode 3 (charge sans |
+ | Le mode 3 (charge sans exécuter) chargera le fichier spécifié, |
composera la page de base, et retournera un pointeur sur cette |
composera la page de base, et retournera un pointeur sur cette |
||
− | page de base. Le programme n'est pas |
+ | page de base. Le programme n'est pas exécuté. |
− | Le mode 4 ( |
+ | Le mode 4 (exécute seulement) reçoit un pointeur sur une page de |
− | base. Le programme commence son |
+ | base. Le programme commence son exécution au début de la zone de |
− | texte, comme |
+ | texte, comme spécifié dans la page de base. |
− | Le mode 5 ( |
+ | Le mode 5 (création d'une page de base) allouera le plus grand |
− | bloc libre de |
+ | bloc libre de mémoire et créera la plus grande partie de sa page |
− | de base. Quelques |
+ | de base. Quelques entrées comme la taille des zones de |
− | texte/ |
+ | texte/données initialisées/données non initialisées et leur |
− | adresse de base NE SONT PAS |
+ | adresse de base NE SONT PAS installées. Le programme appelant en a |
la charge. |
la charge. |
||
− | Un programme enfant |
+ | Un programme enfant hérite des descripteurs de fichiers standards |
de son parent. Il emploie en fait un appel de Fdup() et de |
de son parent. Il emploie en fait un appel de Fdup() et de |
||
− | Fforce() sur les identificateurs 0 |
+ | Fforce() sur les identificateurs 0 à 5. |
− | Puisque les ressources |
+ | Puisque les ressources système sont alloués lors de la création de |
− | la page de base, le processus |
+ | la page de base, le processus engendré DOIT se terminer en les |
− | + | libérant. Ceci est particulièrement important lors de l'emploi |
|
d'overlays. (voir 'le livre de cuisine de Pexec' pour plus de |
d'overlays. (voir 'le livre de cuisine de Pexec' pour plus de |
||
− | + | détails sur Pexec()). |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$4C Pterm Termine un programme |
$4C Pterm Termine un programme |
||
Line 754: | Line 755: | ||
WORD retcode; |
WORD retcode; |
||
Termine le programme courant, ferme tous les fichiers ouverts et |
Termine le programme courant, ferme tous les fichiers ouverts et |
||
− | + | libère la mémoire allouée. Retourne 'retcode' au processus parent. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $4E Fsfirst Recherche la |
+ | $4E Fsfirst Recherche la première occurence d'un fichier |
WORD Fsfirst(fspec,attribs) |
WORD Fsfirst(fspec,attribs) |
||
char *fspec; |
char *fspec; |
||
WORD attribs; |
WORD attribs; |
||
− | Recherche la |
+ | Recherche la première occurence du fichier 'fspec'. Le spécifi- |
− | cateur de fichier peut contenir des |
+ | cateur de fichier peut contenir des caractères spéciaux ('?' ou |
− | '*') dans le nom de fichier mais pas dans le chemin de |
+ | '*') dans le nom de fichier mais pas dans le chemin de spéci- |
− | fication. 'attribs' |
+ | fication. 'attribs' contrôle le type de fichier qu sera retourné |
− | par Fsfirst(). Son format a |
+ | par Fsfirst(). Son format a été décrit dans la documentation sur |
'Fattrib()'. |
'Fattrib()'. |
||
− | Si 'attribs' est |
+ | Si 'attribs' est à zéro, les fichiers normaux seront seuls |
− | + | recherchés (aucun nom de volume, fichier caché, sous-répertoire ou |
|
− | fichier |
+ | fichier système ne sera retourné). Si 'attribs' est positionné sur |
− | les fichiers |
+ | les fichiers cachés ou sur les fichiers systèmes, alors ceux_ci |
seront pris en compte pour la recherche. Si 'attribs' est posi- |
seront pris en compte pour la recherche. Si 'attribs' est posi- |
||
− | + | tionné pour trouver un nom de volume, alors seuls les noms de volu- |
|
− | me seront |
+ | me seront recherchés. |
− | Lorsqu'un fichier est |
+ | Lorsqu'un fichier est trouvé, une structure de 44 octets est |
− | + | écrite à l'emplacement pointé par le DTA. |
|
_________________________________________________ |
_________________________________________________ |
||
| offset | taille | contenus | |
| offset | taille | contenus | |
||
|--------|----------|-----------------------------| |
|--------|----------|-----------------------------| |
||
− | | 0 |
+ | | 0 à 20 | | (réservés) | |
| 21 | octet | bits d'attributs | |
| 21 | octet | bits d'attributs | |
||
− | | 22 | mot | heure de |
+ | | 22 | mot | heure de création | |
− | | 24 | mot | date de |
+ | | 24 | mot | date de création | |
| 26 | long | taille du fichier | |
| 26 | long | taille du fichier | |
||
| 30 | 14 octets| nom et extension du fichier | |
| 30 | 14 octets| nom et extension du fichier | |
||
Line 790: | Line 791: | ||
Le nom de fichier et son extension se terminent par 0, et ne |
Le nom de fichier et son extension se terminent par 0, et ne |
||
contiennent pas d'espaces. |
contiennent pas d'espaces. |
||
− | RETOUR 0 si le fichier a |
+ | RETOUR 0 si le fichier a été trouvé |
− | EFILNF si le fichier n'a pas |
+ | EFILNF si le fichier n'a pas été trouvé, ou le |
− | + | numéro d'erreur approprié. |
|
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$4F Fsnext Recherche des occurences suivantes |
$4F Fsnext Recherche des occurences suivantes |
||
WORD Fsnext() |
WORD Fsnext() |
||
− | Recherche les occurences suivantes d'un fichier. La |
+ | Recherche les occurences suivantes d'un fichier. La première |
− | occurence devra |
+ | occurence devra être recherchée par Fsfirst(). Les octets de 0 à |
− | 20 doivent rester |
+ | 20 doivent rester inchangés depuis l'appel de Fsfirst() ou depuis |
le dernier appel de Fsnext(). |
le dernier appel de Fsnext(). |
||
− | RETOUR 0 si le fichier a |
+ | RETOUR 0 si le fichier a été trouvé |
− | ENMFIL s'il n'y a plus de fichiers |
+ | ENMFIL s'il n'y a plus de fichiers trouvés, ou le numéro |
− | d'erreur |
+ | d'erreur approprié. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
$56 Frename Renomme un fichier |
$56 Frename Renomme un fichier |
||
Line 811: | Line 812: | ||
char *nouvnom; |
char *nouvnom; |
||
Renomme un fichier 'ancnom' en 'nouvnom'. Le nouveau nom ne doit |
Renomme un fichier 'ancnom' en 'nouvnom'. Le nouveau nom ne doit |
||
− | pas |
+ | pas déjà exister mais peut être dans un autre répertoire. |
− | Le premier |
+ | Le premier paramètre doit être 0 (mot). |
RETOUR 0 si OK |
RETOUR 0 si OK |
||
− | EACCDN si le nouveau nom existe |
+ | EACCDN si le nouveau nom existe déjà |
− | EPTHNF si l'ancien nom n'a pas |
+ | EPTHNF si l'ancien nom n'a pas été trouvé |
ENSAME si l'identificateur de disque (A,B,..) n'est |
ENSAME si l'identificateur de disque (A,B,..) n'est |
||
− | pas le |
+ | pas le même pour les deux noms. |
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
− | $57 Fdatime Fixe ou demande le moment de |
+ | $57 Fdatime Fixe ou demande le moment de création d'un fichier |
void Fdatime(idfich,pttemp,drap) |
void Fdatime(idfich,pttemp,drap) |
||
WORD idfich; |
WORD idfich; |
||
Line 830: | Line 831: | ||
(l'heure se trouve dans le premier mot, la date dans le second). |
(l'heure se trouve dans le premier mot, la date dans le second). |
||
− | Si 'drap' est |
+ | Si 'drap' est à 1, la date et l'heure sont placées dans le fichier |
− | + | à partir de 'pttemp'. |
|
− | Si 'drap' est |
+ | Si 'drap' est à 0, la date et l'heure sont lues et placées dans |
'pttemp'. |
'pttemp'. |
||
*------------------------------------------------------------------* |
*------------------------------------------------------------------* |
||
+ | |||
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
Latest revision as of 15:05, 16 December 2023
***-------------- LES FONCTIONS GEMDOS PAR NUMÉRO ---------------*** $00 Pterm0 Fin de processus $01 Cconin Lit un caractère sur l'entrée standard $02 Cconout Écrit un caractère sur la sortie standard $03 Cauxin Lit un caractère sur l'entrée standard AUX: $04 Cauxout Écrit un caractère sur la sortie standard AUX: $05 Cprnout Écrit un caractère sur la sortie standard PRN: $06 Crawio Lecture/écriture brute sur l'entrée/sortie standard $07 Crawcin Lecture brute sur l'entrée standard $08 Cnecin Lit un caractère sur l'entrée standard, sans écho $09 Cconws Écrit une chaîne sur la sortie standard $0A Cconrs Lit une chaîne formatée sur l'entrée standard $0B Cconis Teste l'état de l'entrée standard $0E Dsetdrv Fixe le lecteur de disque par défaut $10 Cconos Teste l'état de la sortie standard $11 Cprnos Teste l'état du périphérique standard PRN: $12 Cauxis Teste l'état du standard AUX: en entrée $13 Cauxos Teste l'état du standard AUX: en sortie $19 Dgetdrv Demande le disque par défaut $1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) $20 Super Entre/Sort/Demande du mode superviseur $2A Tgetdate Demande la date $2B Tsetdate Fixe la date $2C Tgettime Demande l'heure $2D Tsettime Fixe l'heure $2F Fgetdta Demande l'adresse du DTA (Disk Transfer Adress) $30 Sversion Demande le numéro de version du GEMDOS $31 Ptermres Finit un programme qui reste résident $36 Dfree Demande d'informations sur un disque $39 Dcreate Création d'un sous-répertoire $3A Ddelete Efface un sous-répertoire $3B Dsetpath Fixe le catalogue courant $3C Fcreate Création d'un fichier $3D Fopen Ouvre un fichier $3E Fclose Ferme un fichier $3F Fread Lit un fichier $40 Fwrite Écrit un fichier $41 Fdelete Efface un fichier $42 Fseek Positionnement dans un fichier $43 Fattrib Retourne/fixe les attributs de fichier $45 Fdup Recopie un identificateur de fichier standard $46 Fforce Force un identificateur de fichier $47 Dgetpath Demande le répertoire courant $48 Malloc Demande d'allocation mémoire $49 Mfree Libère de la mémoire $4A Mshrink Rétrécit un bloc de mémoire allouée $4B Pexec Charge/Exécute un programme $4C Pterm Termine un programme $4E Fsfirst Recherche la première occurrence d'un fichier $4F Fnext Recherche l'occurrence suivante $56 Frename Renomme un fichier $57 Fdatime Demande ou fixe la date de création d'un fichier ***-------------- FONCTIONS GEMDOS PAR NOM ----------------------*** $03 Cauxin Lit un caractère sur l'entrée standard AUX: $12 Cauxis Teste l'état du standard AUX: en entrée $13 Cauxos Teste l'état du standard AUX: en sortie $04 Cauxout Écrit un caractère sur la sortie standard AUX: $01 Cconin Lit un caractère sur l'entrée standard $0B Cconis Teste l'état de l'entrée standard $10 Cconos Teste l'état de la sortie standard $02 Cconout Écrit un caractère sur la sortie standard $0A Cconrs Lit une chaîne formatée sur l'entrée standard $09 Cconws Écrit une chaîne sur la sortie standard $08 Cnecin Lit un caractère sur l'entrée standard, sans écho $11 Cprnos Teste l'état du périphérique standard PRN: $05 Cprnout Écrit un caractère sur la sortie standard PRN: $07 Crawcin Lecture brute sur l'entrée standard $06 Crawio Lecture/écriture brute sur l'entrée/sortie standard $39 Dcreate Création d'un sous-répertoire $3A Ddelete Efface un sous-répertoire $36 Dfree Demande d'informations sur un disque $19 Dgetdrv Demande le disque par défaut $47 Dgetpath Demande le répertoire courant $0E Dsetdrv Fixe le lecteur de disque par défaut $3B Dsetpath Fixe le catalogue courant $43 Fattrib Retourne/fixe les attributs de fichier $3E Fclose Ferme un fichier $3C Fcreate Création d'un fichier $57 Fdatime Demande ou fixe la date de création d'un fichier $41 Fdelete Efface un fichier $45 Fdup Recopie un identificateur de fichier standard $46 Fforce Force un identificateur de fichier $2F Fgetdta Demande l'adresse du DTA (Disk Transfer Adress) $3D Fopen Ouvre un fichier $3F Fread Lit un fichier $56 Frename Renomme un fichier $42 Fseek Positionnement dans un fichier $1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) $4E Fsfirst Recherche la première occurrence d'un fichier $4F Fnext Recherche l'occurrence suivante $40 Fwrite Écrit dans un fichier $48 Malloc Demande d'allocation mémoire $49 Mfree Libère de la mémoire $4A Mshrink Rétrécit un bloc de mémoire allouée $4B Pexec Charge/Exécute un programme $4C Pterm Termine un programme $00 Pterm0 Termine un programme (code de retour 0) $31 Ptermres Termine un programme qui reste résident $20 Super Entre/Sort/Demande du mode superviseur $30 Sversion Demande le numéro de version du GEMDOS $2A Tgetdate Demande la date $2C Tgettime Demande l'heure $2B Tsetdate Fixe la date $2D Tsettime Fixe l'heure *------------------------------------------------------------------* $00 Pterm0 Finit un programme void Pterm0() Termine un processus, fermant tous les fichiers qu'il a ouvert et libérant la mémoire qu'il a allouée. Retourne $0000 comme code de sortie au programme parent. *------------------------------------------------------------------* $01 Cconin Lit un caractère sur l'entrée standard LONG Cconin() Lit un caractère sur l'entrée standard (identificateur 0). Si l'entrée standard est la console, le long_mot retourné dans D0 contient le code ASCII et le code clavier de la touche appuyée (code de scrutation) : ________________________________________________ | 31..24 | 23.. 16 | 15..8 | 7..0 | |-------------|-----------|----------|-----------| | | code de | | | | $00 ou bits | scrutation| $00 | caractère | | de shift | ou $00 | | ASCII | |_____________|___________|__________|___________| Les touches de fonction (F1 à F10, HELP, UNDO, etc...) retournent le code ASCII $00, avec le code clavier approprié (cf. le manuel sur le clavier intelligent pour la valeur des codes clavier). Le ST BIOS place l'état des touches spéciales dans les bits 24 à 31 (voir le Guide du programmeur du BIOS pour plus de détails). ERREURS Ne retourne aucune indication de fin de fichier. Ne reconnaît pas 'Control_C' Impossible de savoir si l'entrée est un périphérique à carac- tères ou un fichier. Il devrait exister un moyen de taper les 256 codes possibles à partir du clavier. *------------------------------------------------------------------* $02 Cconout Ecrit un caractère sur la sortie standard void Cconout(c) WORD c Écrit le caractère 'c' sur la sortie standard (identificateur 0). Les huit bits les plus significatifs de 'c' sont réservés et doivent être à zéro. Les tabulations ne sont pas interprétées. *------------------------------------------------------------------* $03 Cauxin Lit un caractère sur l'entrée standard AUX: WORD Cauxin() Lit un caractère à partir de l'identificateur 1 (le port série AUX:, normalement). REMARQUE Le contrôle de flux de la sortie RS232 ne marche pas avec cette fonction. Les programmes devraient utiliser l'appel de périphérique de caractère BIOS afin d'éviter de perdre des caractères reçus. *------------------------------------------------------------------* $04 Cauxout Écrit un caractère sur la sortie standard AUX: void Cauxout(c) WORD c *------------------------------------------------------------------* $05 Cprnout Écrit un caractère sur la sortie standard PRN: void Cprnout(c) WORD c Écrit 'c' sur l'identificateur 2 (le port imprimante PRN:, norma- lement). Les huits bits hauts de 'c' sont réservés et doivent être à zéro. Les tabulations ne sont pas interprétées. *------------------------------------------------------------------* $06 Crawio Lecture/Écriture brute sur l'entrée/sortie standard LONG Crawio(w) WORD w; REMARQUES Par le fait même de sa conception cette fonction ne peut écrire '$ff' sur la sortie standard. $00 ne peut être différencié d'une fin de fichier. *------------------------------------------------------------------* $07 Crawcin Entrée brute sur l'entrée standard LONG Crawcin() REMARQUE Pas d'indication de fin de fichier. *------------------------------------------------------------------* $08 Cnecin Lit un caractère sur l'entrée standard, sans écho LONG Cnecin() Lit un caractère sur l'entrée standard. Si le périphérique d'entrée est 'CON:', aucun écho n'est fait. Les caractères de contrôle sont interprétés. *------------------------------------------------------------------* $09 Cconws Ecrit une chaîne sur la sortie standard void Cconws(chaîne) char *chaîne; Écrit une chaîne débutant à 'chaîne' et finissant par 0, sur la sortie standard. *------------------------------------------------------------------* $0A Cconrs Lit une chaîne sur l'entrée standard void Cconrs(buf) char *buf; Lit une chaîne sur l'entrée standard. Les caractères de contrôle habituels sont interprétés : ____________________________________________ | Caractère | Fonction | |--------------|-----------------------------| | <return>, ^J | Fin de ligne | | ^H, <rub> | Efface le dernier caractère | | ^U, ^X | Efface la ligne entière | | ^R | Recopie la ligne | | ^C | Fini le programme | |______________|_____________________________| Le premier caractère de 'buf' contient le nombre maximum d'octets à lire (taille du tampon moins deux). En sortie, le deuxième octet contient le nombre de caractères lus. La chaîne se trouve entre 'buf+2' et 'buf+2+buf[1]'. Il n'est pas garanti que la chaîne se finisse par 0. REMARQUE Plante sur les fins de fichiers. *------------------------------------------------------------------* $0B Cconis Teste l'état de l'entrée standard WORD Cconis() Retourne $FFFF si un caractère est disponible sur l'entrée standard, $0000 sinon. *------------------------------------------------------------------* $0E Dsetdrv Fixe le lecteur de disque par défaut LONG Dsetdrv(drv) WORD drv; Fixe le disque 'drv' par défaut. Les disques sont rangés de 0 à 15 (A: à P:). Retourne dans D0.L la carte des disques actifs: (bit 0 = A, bit 1 = B, etc..). Un 'disque actif' est un disque à partir duquel un catalogue a été fait. REMARQUE Le GEMDOS ne supporte que 16 disques (bits 0 à 15). Les systèmes ultérieurs en supporteront 32 . *------------------------------------------------------------------* $10 Cconos Teste l'état de la sortie standard WORD Cconos() Renvoie $FFFF si la console est prête à recevoir un caractère, $0000 si la console n'est PAS prête. *------------------------------------------------------------------* $11 Cprnos Teste l'état de la sortie standard PRN: WORD Cprnos() Retourne $FFFF si 'PRN:' est prêt à recevoir un caractère, $0000 sinon. *------------------------------------------------------------------* $12 Cauxis Teste l'état de l'entrée standard AUX: WORD Cauxis() Retourne $FFFF si un caractère est disponible sur l'entrée 'AUX:' (identificateur 1), $0000 sinon. *------------------------------------------------------------------* $13 Cauxos Teste l'état de la sortie standard AUX: WORD Cauxos() Renvoie $FFFF si 'AUX:' (identificateur 1) est prêt à recevoir un caractère, $0000 sinon. *------------------------------------------------------------------* $19 Dgetdrv Recherche le lecteur de disque par défaut WORD Dgetdrv() Retourne le numéro du lecteur courant, compris entre 0 et 15. *------------------------------------------------------------------* $1A Fsetdta Fixe l'adresse du DTA (Disk Transfer Adress) void Fsetdta(adr) char adr; Fixe l'adresse du DTA à 'adr'. Le tampon de stockage des données sur un fichier (DTA) ne sert que pour les fonctions Fsfirst() et Fsnext(). *------------------------------------------------------------------* $20 Super Change/teste le mode (Utilisateur ou Superviseur) LONG Super(pile) WORD *pile; 'pile' est égal à -1L ($FFFFFFFF): la fonction retourne $0000 si le processeur est en mode Utilisateur, $0001 s'il est en mode Superviseur. 'pile' est différent de -1L: si le processeur est en mode Utilisateur, la fonction revient avec le processeur en mode Superviseur. Si 'pile' est NUL ($00000000), la pile superviseur sera la même que la pile Utilisateur avant l'appel. Sinon la pile Superviseur sera placée à 'pile'. Si le processeur était en mode Superviseur, il se retrouve en mode Utilisateur au retour de la fonction. 'pile' devra être la valeur de la pile utilisateur qui a été retournée par le premier appel de la fonction. ATTENTION La pile Superviseur originale doit être replacée avant la fin du programme sinon le système plantera à la sortie du programme. *------------------------------------------------------------------* $2A Tgetdate Demande la date WORD Tgetdate() Retourne la date en format DOS : 15 __________________9_8_________5_4_________0 | Année depuis 1980 | mois | jour | | 0.....119 | 1...12 | 1...31 | |_____________________|___________|___________| RETOUR les bits 0 à 4 contiennent le jour allant de 1 à 31. les bits 5 à 8 contiennent le mois allant de 1 à 12. les bits 9 à 15 contiennent l'année (à partir de 1980) allant de 0 à 119. *------------------------------------------------------------------* $2B Tsetdate Fixe la date WORD Tsetdate(date) WORD date; Fixe 'date' comme date courante dans le format décrit dans Tgetdate(). RETOUR 0 si la date est valide. ERROR si le format de la date est incorrect. REMARQUES Le GEMDOS n'est pas difficile sur la date; par exemple le 31 Février ne lui déplaît pas. Le GEMDOS ne prévient PAS le BIOS que la date a changée. *------------------------------------------------------------------* $2C Tgettime Demande l'heure WORD Tgettime() Retourne l'heure courante dans le format DOS: 15__________11_10________5_4__________0 | heure | minute | seconde | | 0...23 | 0...59 | 0...28 | |______________|___________|____________| RETOUR Les bits : 0 à 4 contiennent les secondes divisées par 2 (0 à 28) 5 à 10 contiennent les minutes (0 à 59) 11 à 15 contiennent les heures (0 à 23) *------------------------------------------------------------------* $2D Tsettime Fixe l'heure WORD Tsettime(heure) WORD heure; Fixe 'heure' comme heure courante dans le format décrit dans Tgettime(). RETOUR 0 si le format de l'heure fournie est valide; ERROR si le format de l'heure n'est pas valide. REMARQUE Le GEMDOS ne prévient pas le BIOS que l'heure a changé. *------------------------------------------------------------------* $2F Fgetdta Demande l'adresse du DTA (Disk Transfer Address) LONG Fgetdta() Retourne l'adresse courante du tampon de stockage des données sur un fichier (DTA), employée par les fonctions Fsfirst() et Fsnext(). *------------------------------------------------------------------* $30 Sversion Demande le numéro de version du GEMDOS WORD Sversion() Retourne le numéro de version du GEMDOS en format inversé. L'octet le plus significatif contient la partie basse du numéro, l'octet le moins significatif, la partie haute. REMARQUES La version du GEMDOS sur disquette du 29/5/85 et la première version en ROM du 20/11/85 ont $1300 comme numéro. Les numéros de version du GEMDOS et du TOS ne sont PAS les mêmes. (cf. LE MANUEL DE REFERENCE DU BIOS DU ST pour le numéro de version du TOS). *------------------------------------------------------------------* $31 Ptermres Finit un programme qui reste résident void Permres( nbrest,coderet) LONG nbrest; WORD coderet; Finit le programme courant, en conservant une part de sa mémoire. 'nbrest' le est nombre d'octets appartenant au programme qui doivent être gardés, comprenant et commençant à la page de base. 'coderet' est le code de sortie qui est retourné au programme parent. La mémoire que le programme a allouée (en plus de sa zone TPA) N'EST PAS libérée. Il est impossible de rappeler le programme terminé par Ptermres(). REMARQUE Les fichiers ouverts sont fermés lors de la fin de processus. *------------------------------------------------------------------* $36 Dfree Demande l'espace libre sur un disque void Dfree(buf,nbdisq) LONG *buf; WORD nbdisq; Demande des informations sur le disque 'nbdisq' et les place dans quatre longs_mots commençant à 'buf': __________________________________________________ | buf + 0 | nombre de blocs libres sur le disque | |-----------|--------------------------------------| | buf + 4 | nombre total de blocs sur le disque | |-----------|--------------------------------------| | buf + 8 | taille d'un secteur en octets | |-----------|--------------------------------------| | buf + 12 | nombre de secteurs par bloc | |___________|______________________________________| REMARQUE Incroyablement lent sur un disque dur (5 à 10 secondes). *------------------------------------------------------------------* $39 Dcreate Création d'un sous_répertoire de disque C WORD Dcreate(chemin) char *chemin; 'Chemin' pointe sur une chaîne terminée par 0 spécifiant le chemin du nouveau répertoire. RETOUR 0 en cas de succès; ERROR ou le numéro d'erreur approprié en cas d'échec. *------------------------------------------------------------------* $3A Ddelete Efface un sous_répertoire WORD Ddelete(chemin) char *chemin; Efface un répertoire qui doit être vide (il peut toutefois comporter les fichiers spéciaux "." et ".."). 'chemin' pointe sur une chaîne terminée par zéro, spécifiant le chemin du répertoire à effacer. RETOUR 0 en cas de succès; ERROR ou le numéro d'erreur approprié en cas d'échec. *------------------------------------------------------------------* $3B Dsetpath Fixe le répertoire courant WORD Dsetpath(chemin) char *chemin; Fixe 'chemin', (une chaîne terminée par 0), comme répertoire courant. Si le chemin commence par une lettre identificatrice de disque suivie de deux-points, le répertoire courant est placé sur le lecteur spécifié. Le système conserve un répertoire courant pour chaque lecteur. RETOUR 0 en cas de succès; ERROR ou le numéro d'erreur approprié en cas d'echec. *------------------------------------------------------------------* $3C Fcreate Création d'un fichier WORD Fcreate(nomfich,attribs) char *nomfich; WORD attribs; Crée un fichier 'nomfich' et retourne son identificateur, non standard, d'écriture seule. Le mot d'attributs est stocké dans le répertoire; les bits d'attributs sont : _________________________________________________________ | masque | description | |---------|-----------------------------------------------| | $01 | fichier créé en lecture seule | | $02 | fichier transparent au répertoire | | $04 | fichier système | | $08 | fichier contenant un nom de volume sur 11 bits | |________|______________________________________-_________| RETOUR Un nombre positif, l'identificateur ou : ERROR ou le numéro d'erreur approprié. REMARQUES Si le bit de lecture seule est positionné, un identificateur d'écriture seule est retourné, et, de plus, cet identificateur ne permet pas d'écrire. Théoriquement, un seul numéro de volume est permis sur un répertoire racine. Le GEMDOS n'impose rien de tel, ce qui peut causer quelque confusion. *------------------------------------------------------------------* $3D Fopen Ouverture d'un fichier WORD Fopen(nmfich,mode) char *nmfich; WORD mode; Ouvre le fichier 'nmfich' en mode 'mode' et retourne son identifi- cateur non standard. Le mode d'ouverture peut être: ____________________________ | mode | description | |------|---------------------| | 0 | lecture seule | | 1 | écriture seule | | 2 | lecture et écriture | |______|_____________________| RETOUR Un nombre positif, l'identificateur Un numéro d'erreur négatif. *------------------------------------------------------------------* $3E Fclose Fermeture d'un fichier WORD Fclose(idfich) WORD idfich; Ferme le fichier dont l'identificateur est 'idfich'. RETOUR 0 en cas de succès; ERROR ou un numéro d'erreur approprié en cas d'échec. *------------------------------------------------------------------* $3F Fread Lecture sur un fichier LONG Fread(idfich,nbre,buffer) WORD idfich; LONG nbre; char *buffer; Lit 'nbre' octets dans le fichier d'identificateur 'idfich', et les place en mémoire à partir de l'adresse 'buffer'. RETOUR Le nombre d'octets réellement lus, ou: 0 si code de fin de fichier, Un numéro d'erreur négatif. *------------------------------------------------------------------* $40 Fwrite Écriture sur un fichier LONG Fwrite(idfich,nbre,buffer) WORD idfich; LONG nbre; char *buffer; Écrit 'nbre' octets de la mémoire à partir de l'adresse 'buffer', dans le fichier ayant comme identificateur 'idfich'. RETOUR Le nombre d'octets réellement écrits en cas de succès. Un numéro d'erreur négatif autrement. *------------------------------------------------------------------* $41 Fdelete Effacement d'un fichier WORD Fdelete(nomfich) char *nomfich; Efface le fichier ayant comme nom 'nomfich'. RETOUR 0 en cas de succès Un numéro d'erreur négatif autrement. *------------------------------------------------------------------* $42 Fseek Positionne le pointeur de fichier LONG Fseek(offset,idfich,mode) LONG offset; WORD idfich; WORD mode; Positionne le pointeur dans le fichier défini par l'identificateur 'idfich'. 'offset' est un nombre signé; une valeur positive déplace le pointeur vers la fin du fichier, une valeur négative, vers le début. Le 'mode' de positionnement peut être : _____________________________________________ | mode | Déplacement d'offset octets... | |-------|------------------------------------| | 0 | à partir du début du fichier | | 1 | à partir de la position courante | | 2 | à partir de la fin du fichier | |_______|____________________________________| RETOUR La position courante dans le fichier. Un numéro d'erreur négatif si erreur. *------------------------------------------------------------------* $43 Fattrib Fixe ou demande les attributs d'un fichier WORD Fattrib(nmfich,drap,attribs) char *nmfich; WORD drap; WORD attribs; 'nmfich' pointe sur un chemin terminé par 0. Si 'drap' a la valeur 1, les attributs de fichier 'attribs' sont fixés (pas de valeur de retour). Si 'drap' est 0, ils sont retournés. Les bits d'attributs sont : _________________________________________________________ | masque | description | |--------|------------------------------------------------| | $01 | fichier à lecture seule | | $02 | fichier transparent au répertoire | | $04 | fichier 'système' | | $08 | fichier contenant un nom de volume (11 octets) | | $10 | fichier sous-répertoire | | $20 | fichier écrit puis refermé | |________|________________________________________________| REMARQUE Le bit d'archivage, $20, ne semble pas marcher comme prévu. *------------------------------------------------------------------* $45 Fdup Duplique un identificateur de fichier WORD Fdup(idfich) WORD idfich; L'identificateur 'idfich' doit être un identificateur standard (0 à 5). Fdup() retourne un identificateur non standard (supérieur ou égal à 6) qui pointe le même fichier. RETOUR Un identificateur ou : EIHNDL 'idfich' n'est pas un identificateur standard ENHNDL Plus d'identificateur non standard *------------------------------------------------------------------* $46 Fforce Force un identificateur de fichier Fforce(stdh,nonstdh) WORD stdh; WORD nonstdh; Force l'identificateur standard 'stdh' à pointer le même fichier ou périphérique que l'identificateur non-standard 'nonstdh'. RETOUR 0 si OK EIHNDL identificateur invalide. *------------------------------------------------------------------* $47 Dgetpath Demande le répertoire courant void Dgetpath(buf,driveno) char *buf; WORD driveno; Le répertoire courant pour le lecteur 'driveno' est recopié dans 'buf'. Le numéro de lecteur commence à 1 pour le lecteur A:, 2 pour le B:, etc..., 0 spécifiant le disque par défaut. REMARQUE La taille maximum d'un chemin n'est pas limitée par le sys- tème. C'est à l'application de fournir assez de place pour le tampon. 128 octets semblent suffisants pour 8 ou 9 sous-réper- toires. *------------------------------------------------------------------* $48 Malloc Demande d'allocation mémoire LONG Malloc(taille) LONG taille; Si 'taille' est -1L ($FFFFFFFF) la fonction retourne la taille du plus grand bloc libre du système. Autrement si 'taille' est différent de -1L, la fonction essaie d'allouer 'taille' octets pour le programme en cours. La fonction retourne un pointeur sur le début du bloc alloué si tout s'est bien passé, ou NULL s'il n'exis- tait pas de bloc assez grand pour satisfaire la requête. REMARQUE Un programme ne peut avoir, à un instant donné plus de 20 blocs alloués par 'Malloc()'. Dépasser cette limite peut désemparer le GEMDOS. (Il est cependant possible de faire le nombre de 'Malloc()' que l'on veut à condition de les faire suivre par l'appel de la fonction Mfree(), 20 étant le nombre maximum de fragments qu'un programme peut générer). *------------------------------------------------------------------* $49 Mfree Libération de mémoire WORD Mfree(adbloc) LONG adbloc; Libère le bloc mémoire commençant à 'adbloc'. Le bloc doit être un de ceux alloués par Malloc(). RETOUR 0 si la libération s'est bien Effectuée. ERROR ou le numéro d'erreur approprié sinon. *------------------------------------------------------------------* $4A Mshrink Rétrécit la taille d'un bloc alloué WORD Mshrink(0,bloc,nouvtail) WORD) 0; LONG bloc; LONG nouvtail; Rétrécit la taille d'un bloc mémoire alloué. 'bloc' pointe sur la page de base d'un programme ou sur un bloc de mémoire alloué par Malloc(), 'nouvtail' est la nouvelle taille du bloc. Le premier argument du bloc doit être un mot nul. RETOUR 0 si l'ajustement de taille à été réussi. EIMBA si l'adresse du bloc mémoire était invalide. EGSBF si la nouvelle taille demandée était Erronée. REMARQUE un bloc ne peut être que rétréci; la nouvelle taille du bloc doit forcément être inférieure à la précédente. N.D.T.:Le compilateur 'C' Alcyon rajoute, lors de la compilation, le premier paramètre d'appel '0'. Il ne faut donc pas le mettre dans l'appel de la fonction si l'on se sert de ce compilateur. Appel de la fonction avec le 'C' Alcyon : Mshrink(bloc,nouvtail); *------------------------------------------------------------------* $4B Pexec Charge/Exécute un programme WORD Pexec(mode,ptr1,ptr2,ptr3) WORD mode; char *ptr1; char *ptr2; char *ptr3; Cette fonction permet différentes utilisations selon le drapeau 'mode': ___________________________________________________________ | mode | ptr1 | ptr2 | ptr3 | |--------------|--------------|-------------|---------------| | 0: charge et | le fichier à | le jeu de | la chaîne d' | | exécute | exécuter | commandes | environnement | |--------------|--------------|-------------|---------------| | 3: charge | le fichier à | le jeu de | la chaîne d' | | sans lancer| charger | commandes | environnement | |--------------|--------------|-------------|---------------| | 4: exécute | l'adr. de la | (inutilisé) | (inutilisé) | | uniquement| page de base | | | |--------------|--------------|-------------|---------------| | 5: crée une | (inutilisé) | le jeu de | la chaîne d' | | page de base| | commandes | environnement | |______________|______________|_____________|_______________| Le nom du fichier à charger ou à exécuter, 'ptr1', et la chaîne du jeu de commandes, 'ptr2', sont des chemins, terminés par 0. La chaîne d'environnement 'ptr3', est soit NULL (0L), soit un pointeur sur une structure de chaîne de la forme: "chaîne1\0" "chaîne2\0" etc... "chaîne3\0" "\0" La chaîne d'environnement peut être n'importe quel numéro de chaîne finie par un 0, suivie par une chaîne nulle (un simple 0). Le programme hérite d'une copie de la chaîne d'environnement parente si 'ptr3' est 'NULL'. Le mode 0 (charge et exécute) chargera le fichier spécifié, composera sa page de base, et l'exécutera. La valeur retournée par Pexec() sera le code de sortie du processus enfant (voir Pterm0() et Pterm()). Le mode 3 (charge sans exécuter) chargera le fichier spécifié, composera la page de base, et retournera un pointeur sur cette page de base. Le programme n'est pas exécuté. Le mode 4 (exécute seulement) reçoit un pointeur sur une page de base. Le programme commence son exécution au début de la zone de texte, comme spécifié dans la page de base. Le mode 5 (création d'une page de base) allouera le plus grand bloc libre de mémoire et créera la plus grande partie de sa page de base. Quelques entrées comme la taille des zones de texte/données initialisées/données non initialisées et leur adresse de base NE SONT PAS installées. Le programme appelant en a la charge. Un programme enfant hérite des descripteurs de fichiers standards de son parent. Il emploie en fait un appel de Fdup() et de Fforce() sur les identificateurs 0 à 5. Puisque les ressources système sont alloués lors de la création de la page de base, le processus engendré DOIT se terminer en les libérant. Ceci est particulièrement important lors de l'emploi d'overlays. (voir 'le livre de cuisine de Pexec' pour plus de détails sur Pexec()). *------------------------------------------------------------------* $4C Pterm Termine un programme void Pterm(retcode) WORD retcode; Termine le programme courant, ferme tous les fichiers ouverts et libère la mémoire allouée. Retourne 'retcode' au processus parent. *------------------------------------------------------------------* $4E Fsfirst Recherche la première occurence d'un fichier WORD Fsfirst(fspec,attribs) char *fspec; WORD attribs; Recherche la première occurence du fichier 'fspec'. Le spécifi- cateur de fichier peut contenir des caractères spéciaux ('?' ou '*') dans le nom de fichier mais pas dans le chemin de spéci- fication. 'attribs' contrôle le type de fichier qu sera retourné par Fsfirst(). Son format a été décrit dans la documentation sur 'Fattrib()'. Si 'attribs' est à zéro, les fichiers normaux seront seuls recherchés (aucun nom de volume, fichier caché, sous-répertoire ou fichier système ne sera retourné). Si 'attribs' est positionné sur les fichiers cachés ou sur les fichiers systèmes, alors ceux_ci seront pris en compte pour la recherche. Si 'attribs' est posi- tionné pour trouver un nom de volume, alors seuls les noms de volu- me seront recherchés. Lorsqu'un fichier est trouvé, une structure de 44 octets est écrite à l'emplacement pointé par le DTA. _________________________________________________ | offset | taille | contenus | |--------|----------|-----------------------------| | 0 à 20 | | (réservés) | | 21 | octet | bits d'attributs | | 22 | mot | heure de création | | 24 | mot | date de création | | 26 | long | taille du fichier | | 30 | 14 octets| nom et extension du fichier | |________|__________|_____________________________| Le nom de fichier et son extension se terminent par 0, et ne contiennent pas d'espaces. RETOUR 0 si le fichier a été trouvé EFILNF si le fichier n'a pas été trouvé, ou le numéro d'erreur approprié. *------------------------------------------------------------------* $4F Fsnext Recherche des occurences suivantes WORD Fsnext() Recherche les occurences suivantes d'un fichier. La première occurence devra être recherchée par Fsfirst(). Les octets de 0 à 20 doivent rester inchangés depuis l'appel de Fsfirst() ou depuis le dernier appel de Fsnext(). RETOUR 0 si le fichier a été trouvé ENMFIL s'il n'y a plus de fichiers trouvés, ou le numéro d'erreur approprié. *------------------------------------------------------------------* $56 Frename Renomme un fichier WORD Frename(0,ancnom,nouvnom) WORD) 0; char *ancnom; char *nouvnom; Renomme un fichier 'ancnom' en 'nouvnom'. Le nouveau nom ne doit pas déjà exister mais peut être dans un autre répertoire. Le premier paramètre doit être 0 (mot). RETOUR 0 si OK EACCDN si le nouveau nom existe déjà EPTHNF si l'ancien nom n'a pas été trouvé ENSAME si l'identificateur de disque (A,B,..) n'est pas le même pour les deux noms. *------------------------------------------------------------------* $57 Fdatime Fixe ou demande le moment de création d'un fichier void Fdatime(idfich,pttemp,drap) WORD idfich; LONG pttemp; WORD drap; Le fichier est reconnu par son identificateur 'idfich'. 'pttemp' pointe sur deux mots contenant l'heure et la date en format DOS (l'heure se trouve dans le premier mot, la date dans le second). Si 'drap' est à 1, la date et l'heure sont placées dans le fichier à partir de 'pttemp'. Si 'drap' est à 0, la date et l'heure sont lues et placées dans 'pttemp'. *------------------------------------------------------------------*
Back to ASM_Tutorial