GEMDOS.TXT/fr

From Atari Wiki
Revision as of 14:02, 23 November 2023 by Exxos (talk | contribs)
Jump to navigation Jump to search
   ***-------------- 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