Fonctions de conversion de type
Le compilateur OmegaSoft Pascal propose une méthode orthogonale de conversion entre les neuf types de données de base : booléen, type d'énumération, caractère, integer, longinteger, hex, longhex, real et string. La méthode consiste à utiliser le type souhaité comme nom de fonction, ou l'identificateur standard enum pour le type énumération.
En général, il n'y a qu'un seul paramètre. Lors de la conversion de réel à autre chose que réel ou chaîne de caractères, un deuxième paramètre peut être utilisé. Le deuxième paramètre peut être round, trunc ou floor et s'il n'est pas utilisé, l'arrondissement sera utilisé. D'autres cas où un second paramètre est autorisé seront signalés le cas échéant. Si vous passez d'un type au même type, aucun code n'est généré. De nombreuses autres instances ne généreront aucun code, il y a aura uniquement des changements dans le type d'expression, ces cas se produisent si le type de paramètre n'est pas mentionné dans la description des fonctions de conversion de type général (boolean, énumération, char, integer, hex, longhex, longinteger, real et string).
conv-parm = (boolean-expression | enumerated-type-expression | character-expression | integer-expression | hex-expression | longhex-expression | longinteger-expression | string-expression) real-round = real-expression {,(round | trunc | floor) } |
BOOLEAN
Convertit son paramètre en une valeur booléenne. Pour les paramètres de type énuméré, caractère, integer, hex, longhex et longinteger, l'octet le moins significatif est simplement traiter comme un ET avec un autre et équivaut à la fonction impaire. Pour un paramètre réel, il est d'abord converti en un entier et il applique un ET. Lors de l'utilisation d'un paramètre de chaîne de caractères, il ne doit pas comporter d'espaces de début et la première lettre doit être un Y, T, N ou F (ou des équivalents minuscules), sinon une erreur de conversion sera générée. Si la première lettre est un Y ou un T alors true sera retourné, si la première lettre est un N ou F alors un booléen false sera retourné.
boolean-function = boolean((conv-parm | real-round)) |
CHAR
Convertit son paramètre en caractère. Pour les paramètres longhex et longinteger, la valeur de 4 octets est supprimée de la pile, seul l'octet le moins significatif étant conservé. Pour un paramètre réel, la valeur est convertie en un entier et seul l'octet le moins significatif est conservé. Pour un paramètre de chaîne de caractères, un deuxième paramètre est autorisé. Le deuxième paramètre doit être une constante d'octet ou d'entier et spécifie l'octet de la chaîne de caractères à renvoyer sous forme de caractère. Si aucun second paramètre n'est utilisé, le premier octet de données de la chaîne de caractères sera renvoyé. L'utilisation d'un deuxième paramètre de zéro renverra la longueur dynamique.
char-function = char((conv-parm {, (character-constant | integer-constant) } ) |
CHR
Renvoie un caractère (octet) équivalent à son paramètre. Cela se fait en supprimant les 8 bits les plus significatifs de son paramètre. Si l'option S du compilateur est activée, des vérifications seront générées pour vérifier que les 8 bits les plus significatifs étaient zéro. Si les vérifications de l'intervalle sont activées et qu'elles ne sont pas zéro, une erreur de troncature se produira lors de l'exécution.
chr-function = chr( (integer-expression | hex-expression) ) |
ENUM
Convertit son paramètre en une valeur de type énuméré. Pour les paramètres longhex et longinteger, la valeur de 4 octets est supprimée de la pile, seul l'octet le moins significatif étant reteint. Pour un paramètre réel, la valeur est convertie en un entier et seul l'octet le moins significatif est conservé. Un paramètre de chaîne de caractères est converti en un entier (voir la fonction INTEGER avec un paramètre de chaîne de caractères) et l'octet le moins significatif est conservé.
FLOOR
Renvoie l'équivalent entier de son paramètre. Le résultat entier sera le plus grand entier inférieur à la valeur réelle. Si le paramètre ne peut pas être représenté sous la forme d'un entier, une erreur de troncature sera générée lors de l'exécution. Quelques exemples :
floor(4.6) = 4
floor(-4,6) = -5
La syntaxe est la suivante :
floor-function = floor( real-expression ) |
HEX
Renvoie l'équivalent hexadécimal de son paramètre. Si le paramètre est booléen, énuméré ou caractère, un octet de poids fort zéro sera ajouté. Si le paramètre est longhex ou longinteger, alors la valeur de 4 octets est extraite de la pile et les 2 octets les moins significatifs sont conservés. Si le paramètre est réel, alors la valeur sera convertie en un entier et ce résultat sera traité comme un nombre hexadécimal (hex(-10000.0) renverra $D8F0). Avec un paramètre de chaîne de caractères, il ne doit pas comporter d'espaces de début ou de fin, sinon une erreur de conversion sera générée. Les chiffres de 0 à 9 et les lettres de A à F (ou a à f) sont acceptables pour une entrée hexadécimale. Si la valeur dépasse $FFFF, une erreur de conversion se produit.
hex-function = hex( (conv-parm|real-round) ) |
INTEGER
Renvoie l'équivalent entier de son paramètre. Si le paramètre est booléen, une énuméré ou un caractère, alors un octet le plus significatif sera ajouté étant l'extension de signe de l'octet d'origine. Si le paramètre est longhex ou longinteger, la valeur de 4 octets est extraite de la pile et les 2 octets les moins significatifs sont conservés. Si le paramètre est réel, la valeur sera convertie en un entier. Avec un paramètre de chaîne de caractères, il ne doit pas comporter d'espaces de début ou de fin, sinon une erreur de conversion sera générée. Les chiffres de 0 à 9 et un plus ou un moins en tête sont acceptables pour une entrée décimale. Si la valeur dépasse plus ou moins maxint, une erreur de conversion se produit.
integer-function = integer( (conv-parm|real-round) ) |
LONGHEX
Renvoie l'équivalent longhex de son paramètre. Si le paramètre est booléen, une énumération ou un caractère, alors 3 octets zéro seront ajoutés comme étant le plus significatif et poussés sur la pile. Si le paramètre est entier ou hexadécimal, il y a 2 octets de zéro sur la pile. Si le paramètre est réel, la valeur sera convertie en un entier long similaire à round, trunc ou floor. La valeur sera alors traitée comme une valeur longhex (longhex(-3437138.0) sera $FFCB8DAE). Avec un paramètre de chaîne de caractères, il ne doit pas comporter d'espaces de début ou de fin, sinon une erreur de conversion sera générée. Les chiffres de 0 à 9 et les lettres de A à F (ou a à f) sont acceptables pour la saisie hexadécimale. Si la valeur dépasse $FFFFFFFF, une erreur de conversion se produit.
longhex-function = longhex( (conv-parm|real-round) ) |
LONGINTEGER
Renvoie l'équivalent longinteger de son paramètre. Si le paramètre est booléen, une énumération ou un caractère, alors 3 octets seront ajoutés comme le plus significatif reflétant l'extension de signe de l'octet d'origine, et poussés sur la pile. Si le paramètre est entier ou hexadécimal, 2 octets seront ajoutés comme le plus significatif reflétant l'extension de signe de l'octet le plus significatif d'origine, et poussés sur la pile. Si le paramètre est réel, la valeur sera convertie en un entier long similaire à round, trunc ou floor. Avec un paramètre de chaîne de caractères, il ne doit pas comporter d'espaces de début ou de fin, sinon une erreur de conversion sera générée. Les chiffres de 0 à 9 et un plus ou un moins en tête sont acceptables pour une entrée décimale. Si la valeur dépasse plus ou moins maxlint, une erreur de conversion se produit.
longinteger-function = longinteger( (conv-parm|real-round) ) |
ODD
Renvoie un résultat booléen représentant le bit le moins significatif de son paramètre. Cela vous indique si le paramètre est impair (premier bit un) ou pair (premier bit zéro).
odd-function = odd( (character-expression | integer-expression | hex-expression | longinteger-expression | longhex-expression) ) |
ORD
Renvoie l'équivalent entier de son paramètre. Si le paramètre est un octet (un booléen, une énumération, un caractère), il ajoutera simplement un octet de poids fort zéro. Si le paramètre est entier ou hexadécimal, aucun code n'est généré.
ord-function = ord( (boolean-expression | character-expression | enumerated-expression | hex-expression | integer-expression) ) |
REAL
Retour l'équivalent réel de son paramètre. Si le paramètre est booléen, une énumération ou un caractère, le signe sera étendu à un entier, puis converti en réel. Si le paramètre est integer, hex, longhex ou longinteger, il sera converti en réel (conversion signée). Avec un paramètre de chaîne de caractères, il ne doit pas avoir d'espace de début ou de fin, sinon une erreur de conversion sera générée. Les chiffres de 0 à 9, un plus ou un moins en tête et un E ou e pour l'exposant sont acceptables pour une entrée en virgule flottante. Si la valeur dépasse 5E-19 ou 5E18, une erreur de conversion se produit.
real-function = real( (conv-parm | real-expression) ) |
ROUND
Renvoie l'équivalent entier de son paramètre. Le résultat entier sera l'entier le plus proche de la valeur réelle. Si le paramètre ne peut pas être représenté sous la forme d'un entier, une erreur de troncature sera générée lors de l'exécution. Quelques exemples :
round(4.6) = 5
round(-4,6) = -5
La syntaxe est la suivante :
round-function = round( real-expression ) |
STRING
Renvoie la chaîne de caractères ASCII équivalente à son paramètre. La chaîne de caractères renvoyée est au même format que lorsque les valeurs sont écrites dans un fichier texte sans champ de largeur de champ (pas de blanc de début ou de fin). Si le paramètre est une énumération, son équivalent entier est converti en chaîne de caractères. Si le paramètre est un caractère, il est converti en une chaîne de caractères de longueur un. Si le paramètre est de type real, il ajoute un paramètre octet ou entier supplémentaire à utiliser comme précision (même fonction que dans la procédure write).
string-function = string( (conv-parm | real-expression [,(character-expression | integer-expression]) ) |
TRUNC
Renvoie l'équivalent entier de son paramètre. Le résultat entier sera la valeur réelle avec sa partie fractionnaire mise à zéro. Si le paramètre ne peut pas être représenté sous la forme d'un entier, une erreur de troncature sera générée lors de l'exécution. Quelques exemples :
trunc(4.6) = 4
trunc(-4,6) = -4
La syntaxe est la suivante :
trunc-function = trunc( real-expression ) |