GEMDOS.TXT
Jump to navigation
Jump to search
***-------------- LES FONCTIONS GEMDOS PAR NUMRO ---------------***
$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