Il peut y avoir des problemes avec ces structures, car le type d un element varie enormement d une fonction a l autre. Selon la structure, il peut s agir d un simple octet jusqu a une chaine complete de caracteres. Cela signifie qu avant de modifier un element, il faut d abord verifier son format.
STRUC est capable d identifier le type de l element directement a partir des equates, et de gerer toute la procedure automatiquement, qu il s agisse d un octet, d un mot ou d un long mot. Si l element est un pointeur vers une chaine, une erreur sera generee evidemment, mais nous avons fourni une variable STRUC$ pour cela !
Le parametre adresse contient l adresse de la structure en memoire. Cette adresse sera generalement retournee par les fonctions LIB BASE ou DEV BASE. Le nom du decalage est le nom de l element de donnees tel qu indique dans les manuels. Ce nom sera converti en une valeur de decalage par AMOS via le systeme d auto-equate. Cela signifie qu une commande SET EQUATE BANK doit etre incluse au debut du programme pour initialiser ce systeme. Exemple :
X> Struc(Dev Base(1),"I0_LENGTH")=TRACK_SIZE
La meme methode permet aussi de lire une valeur dans une structure :
X> Print Struc(Dev Base(1),"I0_LENGTH")
STRUC$
fonction : lire ou ecrire une chaine de caracteres dans une structure
valeur$=Struc$(adresse,"Nom_Du_Decalage")
Struc$(adresse,"Nom_Du_Decalage")="valeur"
Cette fonction est utilisee pour lire ou ecrire une chaine de caracteres dans la structure memoire designee. Si l element vise est un nombre, une erreur sera generee lors du test du programme.
Lorsqu une chaine est copiee dans une zone tampon, STRUC$ ajoute un zero terminal puis effectue un LOKE. A l inverse, STRUC$ recupere une chaine a l adresse indiquee, comme retournee par LIB BASE ou DEV BASE.
Dans les deux cas, le nom du decalage represente le nom de l element a manipuler.
Ajout d equates au fichier d equates
Si tu veux utiliser tes propres bibliotheques non standard, le fichier d equates peut etre etendu pour inclure tes nouvelles routines.
Pour cela, tu dois produire un listing assembleur contenant les definitions des equates au format Devpak standard. Ce listing devra ensuite etre traite avec le programme "Equates_Generator.AMOS", disponible dans le repertoire racine de la disquette AMOSPro_System.