Une
Hyper-Calculette multi-média
(pour
APL*PLUS III
Versions 1.1. & 1.2)
par
Daniel
Massi
S O M M A I R E
1. INTRODUCTION 18
2. CENTRES
D'INTÉRÊT 18
3.
L'HYPER-CALCULETTE MULTI-MEDIA 19
3.1. FORME GÉNÉRALE DE L'HC 19
3.2. PRÉSENTATION DE SES DIFFÉRENTES FONCTIONNALITÉS 20
3.2.1. BARRE DE MENUS 21
3.2.2. OPTIONS 21
3.2.3. BOUTONS 21
3.2.4. LES TOUCHES DE FONCTION 22
3.3. LANCEMENT DE L'APPLICATION 22
3.4. REMARQUES 23
3.5. PARAMÈTRAGE SÉLECTIF 23
3.6. COMMENTAIRES 23
4. LES FONCTIONS 24
4.1. FONCTION DE DESCRIPTION 24
4.1.1. FONCTION
FMCALC
24
4.1.2. FONCTION
FMOPTN
28
4.2. FONCTIONS CALLBACK 28
4.2.1. FONCTION DE LANCEMENT : FNCALC 29
4.2.2. FONCTION CALLBACK : FNCALC1 29
4.2.3. FONCTION CALLBACK : FNCALC2 36
4.2.4. FONCTION CALLBACK : FNCALC4 36
4.2.5. FONCTION CALLBACK : FNCALC7 39
4.2.6. FONCTION CALLBACK : FNCALC8
41
4.3. FONCTIONS ANNEXES 43
4.3.1. FONCTION
FCALC
43
4.3.2. FONCTION FCALC2 43
4.3.3. FONCTION
FDEFT
44
4.3.4. FONCTION
FEXPLI
45
4.3.5. FONCTION FINIT 46
4.3.6. FONCTION FD2FD1 47
5. CONCLUSION 48
Il est vrai que chacun
d'entre nous connaît la Calculette. Banal ?. Qui n'en
possède au moins une ? WINDOWS nous offre ce matériel sous deux
affichages : simple ou scientifique. APL III, dans la zone
TOOLS\DEMOCALC, présente les quatre opérations avec l'inverseur de signe.
Alors, pourquoi une énième ? Lecteur, prends courage ! Le plaisir de construire
une calculette plus étoffée, plus vivante de l'apport de chacun, qui soit
"nôtre", gorgée de fonctionnalités nouvelles, intégrant les nouvelles
technologies, est infini. La rencontre de l'utile et de la beauté ! De plus,
l'apport du multi-média va nous permettre d'introduire de multiples variantes :
réponse aux calculs par votre voix synthétique, introduction vocale
des chiffres et positionnement des options ,… son &
lumière compris. Les centres d'intérêt
qui découlent de la construction d'un tel Objet sous APL III peuvent
être ainsi appréhendés :
application plus conséquente
en temps de développement et en complexité, calculatrice "à notre main",
avec toutes les conséquences envisageables, utilisation de Draw pour constituer
les onglets nécessaires au paramètrage de l'Application, pratique du Copier /
Coller, avec les progiciels adéquats – gestion plus fine des possibilités de la
souris, ouverture sur tous les progiciels du marché sous Windows pour importer
/ exporter des données : bases de données, tableurs, traitements de
texte, gestion de projets, …
– calculs à partir des
cellules de la "Grille" d'EXCEL 5, en aller-retour, pour tout type de
calcul,
– insertion, au futur
proche, des produits multi-média,
– gestion des boutons
Maximer / Icônifier,
– mise en pratique de
relations complexes entre fonctionnalités,
– intégration dans des
espaces existants,
– fonction de simulation
des boutons et de tous types de calculs,
– tests automatiques de
toutes les fonctionnalités et de toutes les possibilités admises ou non, … etc.
1. INTRODUCTION
2. CENTRES
D'INTÉRÊT
3.1. Forme générale
de l'HC
A l'écran, l'HC se
présente sous cette forme, et peut être appelée et utilisée à tout instant,
soit sous APL, soit à partir d'un progiciel de type WORD 6, EXCEL 5, PROJECT 4.… Elle exploite, dans la configuration imprimée cidessous,
le système binaire : boutons 0 & 1, opérateurs binaires opérationnels, mais
aucune autre option réservée au système décimal. La dénomination Multi-Média
prend tout son sens avec une carte son adéquate, de façon à introduire la voix
synthétique qui dialoguera avec l'utilisateur peutêtre dans un prochain article
!
Les boutons 2 à 9 sont
disponibles lors de calculs dans les systèmes décimal & hexadécimal, et A à
F dans le système hexadécimal seul. Elle permet l'affichage de 23 chiffres dans
ce format, et de 34 en forme maximée.
3.
L'HYPER-CALCULETTE MULTI-MEDIA
3.2. PRÉSENTATION
de ses différentes fonctionnalités
La conception du
produit est une étape obligatoire pour préciser les besoins et les desiderata
de l'utilisateur. Le résultat est présenté ci-dessous. L'Hyper-Calculette (HC)
est constituée de trois parties principales actives :
– la barre de menus,
et les commandes afférentes,
– les boutons
– les options, et
d'une partie qui reçoit l'affichage. La répartition des fonctionnalités retenues
est ainsi représentée sur l'HC, avec affichage du système décimal.
_ L'organisation des
touches a été optimisée, autant que faire se peut.
Pavé Numérique
Symboles Opératoires
Effacement ZA
Zone ZA d'Affichage
Fonctions
Trigonométriques
Import / Export de
Données
Fonctions
Financières
Valeur Actuelle
Taux Annuel
Nombre d'Annuités
Montant Annuité
Nombre pour calcul en
Hexédécimal
Date de Fin JJMMAA
Date de Départ JJMMAA
Base du Système de
Calcul
Base du Système de
Calcul trigonométrique
Type d'Annuité
Exit
Hyper- Calculette
Effacement toutes
variables
Entier (sans décimale)
Exposant 1E6 = 1
million
Exponentiel &
Logarithmes
Recul & Effacement
un caractère
Opérateurs Binaires
Minimer, Maximer
Barre de M e n u
Valeur Acquise
Type de taux
Puissance
Racine carrée &
Inverse
3.2.1. Barre de Menus
La barre de menus,
placée sur la deuxième ligne, possède quatre menus distincts typés.
– Le menu Fichier
concerne les Entrées/Sorties. Il permet de positionner certains paramètres pour
une meilleure configuration utilisateur.
– Le menu Calculs
permet d'effectuer quelques opérations plus complexes, mais souvent moins
utilisées.
– Le menu Nombres
propose des calculs au travers de certaines opérations d'utilisation plus
restreinte, et de transformer des caractères–chiffres en nombres.
Ces menus sont laissés
à l'appréciation de chacun, et peuvent inclure toutes les commandes nécessaires
à la résolution de ses besoins.
– Le menu ? qui présente un glossaire spécialisé et une aide en ligne.
3.2.2. Options
Les options ont été
placées sur la droite de l'HC.
1. Bases de calcul
algébriques
2. Bases de calcul
trigonométriques
3. Bases de calcul de
taux
4. Bases de calcul
d'annuités
La souris permet de
sélectionner l'option choisie – une par bloc, selon le principe d'exclusivité – , et devant être prise en compte dans les calculs
ultérieurs. Aucune préséance : l'ordre d'introduction des données et du choix
des options est quelconque, et les options, comme les données, peuvent être
changées à n'importe quel moment…avant les calculs.
3.2.3. Boutons
Deux types de boutons
coexistent au niveau de la figure affichée :
– à gauche de la Forme
essentiellement, le clic d'un bouton provoque l'affichage de son libellé.
– à droite, le clic
d'un bouton lance un calcul et affiche le résultat de l'opération.
Les cinquante-deux
boutons proposés occupent le reste de l'HC. Ils sont traditionnels. Mais chacun
peut ajouter ses propres boutons ou modifier ses propres cartouches
("captions") ( voir § 3.5.).
Placé en bas à droite,
le 53ème permet de sortir de l'application.
Le menu & la
commande ?/Explications explicite l'utilité et la pratique de certains boutons.
Le bouton Coll/APL
signifie toute donnée exclusivement de type numérique (dépendant de la base de calcul choisie), en
provenance de n'importe quel progiciel du marché supportant OLE.
Les boutons A à F sont
visibles, mais inopérants : ils sont activés lors de la sélection de l'option
Hex : l'option Dec est prise par défaut..
De même, les
opérateurs binaires ET, OU, XOU, NON ne sont disponibles que pour le système
binaire.
3.2.4. Les Touches de
Fonction
Les touches de
fonction Alt, Ctrl ou Maj ("Shift") possèdent une utilisation
particulière.
L'appui d'une touche
de fonction suivie d'une des touches VA, i, n, a ou VF
– "captions" par défaut – permet, si
:
– la touche est Alt,
d'afficher son contenu dans la Zone d'Affichage,
– la touche est Ctrl,
de lancer les calculs afférents et d'afficher le résultat, la touche est Maj, d'effacer le
contenu de la variable correspondante.
Ces touches pourraient
servir dans d'autres occasions, par exemple, àdéterminer :
Alt et une touche numérique la reproduit deux fois : 1
==> 111, Ctrl et une touche permet d'exécuter une fonction
particulière, Maj et une touche permet d'afficher ou d'imprimer,
3.3. Lancement de l'Application
Pour obtenir l'HC sur
son écran, il faut lancer l'application correspondante.
Ceci survient soit à
la montée de WINDOWS, en mettant l'icône APL III adéquate et ses Propriétés de
Programmes dans la fenêtre "Démarrage" ; soit à la demande, en cliquant
sur l'icône dévolue à cet effet ; soit, si le Gestionnaire de Fichiers est
accessible, en cliquant deux fois sur la nom de la zone de travail concernée.
La zone contient
l'instruction suivante, conservée dans la variable lx :
.lx . FnCalc
La fenêtre de l'HC est
ainsi disponible pour usage pendant toute la session de travail, et, si les
fenêtres sont adéquatement disposées, à partir de n'importe quel progiciel du
marché.
3.4. Remarques
Pour ne pas alourdir
la présentation, certaines fonctionnalités n'ont pas été incluses dans ce
document : stockage – affichage de données, calculs sur les Obligations, les
Actions, les Marchés à Terme, MATIF, Options, …, ainsi que certaines lignes de
fonctions trop répétitives ou intuitivement évidentes.
3.5. Paramètrage
sélectif
Certains symboles
peuvent ne pas plaire. Il est alors possible de modifier le libellé – caption –
de certaines touches en affichant la Forme ci-dessus au moyen de Fichiers /
Paramètrage.
La touche OK permet de
prendre en compte les modifications apportées.
A contrario, la touche
Annuler laisse les touches en l'état.
La touche Val. Défaut
permet de revenir aux informations de base, si l'une d'entre elles avait été
modifiée et la mise à jour acceptée précédemment.
Les fonctions
correspondantes seront présentées dans un numéro ultérieur.
3.6. Commentaires
Il est très rapide de
constituer la fenêtre de l'HC, et de créer les fonctions correspondantes. Le
passage par un dessin sur une feuille de papier est cependant indispensable
pour ne pas perdre un temps précieux à déplacer les objets dans la fenêtre, et
le modèle créé permet d'équilibrer
l'ensemble et de regrouper les boutons par affinité.
Certains mots d'usage
courant, mais spécialisés, trouvent un début de définition dans ?/Glossaire.
Pour des raisons de
rapidité et de sécurité, voire d'oubli, il est conseillé de créer ces fonctions
et leurs structures internes
(
Select, Case, If,…), au fur et à
mesure de la création des événements onClick, onMouse,…
Ce chapitre présente
les fonctions utilisées et les commentaires afférents.
Toutes ne sont pas
listées, mais au moins présentées.
La figurine à traiter
est simple, exige quelques boutons et des menus; mais l'affichage, la gestion
et les utilisations possibles nécessitent plusieurs centaines de lignes
condensées sous APL*PLUS III.
Il est possible de
considérer quatre groupes principaux de fonctions :
1. Les fonctions de
Description : Fm
2. Les fonctions
CallBack : Fn
3. Les fonctions
Annexes : F
4. Les fonctions
Utilitaires
Chaque groupe de fonctions
se reconnaît à la structure de ses deux premières lettres.
(
Dans la présentation, L signifie
Ligne ou Lignes, mais, par souci de clarté, elle(s) forme(nt)
un bloc et sont alors traitée(s)… au singulier)
Modifier la Forme est
du domaine du possible. Il suffit d'utiliser l'éditeur Adéquat.
1. Dans la fonction
FmCalc, en dernière ligne, ajouter :
fmCalc_def . 'fmCalc' .wi 'def'
2. Taper :
]Wed fmCalc
4.1. Fonction de
Description
4.1.1. Fonction
FmCalc
Elle décrit au plus
juste la forme exposée au paragraphe 3.2., et composée dans
la fonction de lancement.
– L 2 : efface la
forme, si une existe,
– L 3 : ligne
préparatoire à la simulation automatique,
4. Les FONCTIONS
L 5 – 10: décrit la
Forme, L 12 – 15: aborde le Label qui est la Zone de saisie/Affichage des
chiffres, L 17 – 237: décrit les différents boutons, L 239 – 322: concerne les
options, L 324 – 391: assure la constitution de la barre des Menus &
Commandes.
La description d'une
telle forme, longue sans être complexe, exige une préparation sur papier des
différents éléments la constituant, de leurs distances horizontales et
verticales, de leurs agencements, de leur logique d'utilisation, …
L'éditeur
]Wed peut permettre la réalisation
d'une telle forme, de connivence avec le célèbre Couper/Coller, et un peu
d'à-propos.
La fonction occupe 391
(trois cent quatre-vingt onze) lignes qui n'ont pu être listées pour cause de
manque de place, mais subsistent celles qui sont caractéristiques d'un groupe,
les autres peuvent alors en être déduites aisément.
. FmCalc;X;Y
[1] © 08-05-1996 à 19h29
[2] .wi 'fmCalc:Delete'
[3] Y.,(2 9½'onClick onMouseUp')[tt;]
[5] .wself . 'fmCalc' .wi 'New' 'Form' 'Close'
[6] .wi
'Set' ('value' 0) ('where' 0 0 23 43)
[7] .wi
'caption' 'Hyper - Calculette'
[8] .wi
'font' (fpol ftail fstyl fset)
[9] .wi
'Set' ('icon' icon) ('onClose' 'FnCalc4')
[10] .wi 'Set' ('onOpen' 'FnCalc4') ('onResize'
'FnCalc4')
[11]
[12] .wself . 'fmCalc.lab' .wi
'New' 'Label' 'Close'
[13] .wi 'Set' ('caption' '') ('style' 2) ('border'
1)
[14] .wi 'where' 0.25 0.5 2 32
[15] .wi 'font' (lpol ltail lstyl lset)
[16]
[17] .wself . 'fmCalc.bn7' .wi
'New' 'Button' 'Close'
[18] .wi 'Set' ('caption' '7') ('where' 2.5 0.5 2
4)
[19] .wi ('onClick' 'FnCalc1')
[21] .wself . 'fmCalc.bn8' .wi
'New' 'Button' 'Close'
[22] .wi 'Set' ('caption' '8') ('where' 2.5 5 2 4)
[23] .wi ('onClick' 'FnCalc1')
[25] .wself . 'fmCalc.bn9' .wi
'New' 'Button' 'Close'
[26] .wi 'Set' ('caption' '9') ('where' 2.5 9.5 2
4)
[27] .wi 'onClick' 'FnCalc1'
[29] .wself . 'fmCalc.bnDiv' .wi
'New' 'Button' 'Close'
[30] .wi 'Set' ('caption' (.av[225])) ('where' 2.5
14 2 4)
[31] .wi 'font' 'Symbol' 2.2 0 'symbol'
[32] .wi 'onClick' 'FnCalc1'
[68] .wself . 'fmCalc.bn0' .wi
'New' 'Button' 'Close'
[69] .wi 'Set' ('caption' '0') ('where' 9.25 0.5 2
4)
[70] .wi 'onClick' 'FnCalc1'
[72] .wself . 'fmCalc.bnDec' .wi
'New' 'Button' 'Close'
[73] .wi 'Set' ('caption' '.') ('where' 9.25 5 2 4)
[74] .wi 'onClick' 'FnCalc1'
[75] .wi 'font' 'APLPLUS' 1.5 1 'symbol'
[87] .wself . 'fmCalc.bnA' .wi
'New' 'Button' 'Close'
[88] .wi 'Set' ('caption' 'A') ('where' 11.5 0.5 2
4)
[89] .wi 'Set' ('onClick' 'FnCalc1') ('enabled' 0)
[91] .wself . 'fmCalc.bnB' .wi
'New' 'Button' 'Close'
[92] .wi 'Set' ('caption' 'B') ('where' 11.5 5 2 4)
[93] .wi 'Set' ('onClick' 'FnCalc1') ('enabled' 0)
[111] .wself . 'fmCalc.bnSin' .wi 'New' 'Button' 'Close'
[112] .wi 'Set' ('caption'
'Sin') ('where' 13.75 0.5 2 4)
[113] .wi 'onClick' 'FnCalc1'
[115] .wself . 'fmCalc.bnCos' .wi 'New' 'Button' 'Close'
[116] .wi 'Set' ('caption'
'Cos') ('where' 13.75 5 2 4)
[117] .wi 'onClick' 'FnCalc1'
[135] .wself . 'fmCalc.bnCoup' .wi 'New' 'Button' 'Close'
[136] .wi 'caption' 'Coupe'
[137] .wi 'where' 18.25 0.5 2
5.5
[138] .wi 'onClick' 'FnCalc1'
[139] .wself . 'fmCalc.bnColl' .wi 'New' 'Button' 'Close'
[140] .wi 'caption' 'Coll/APL'
[141] .wi 'where' 18.25 6.5 2
7.5
[142] .wi 'onClick' 'FnCalc1'
[151] .wself . 'fmCalc.bnCL' .wi 'New' 'Button' 'Close'
[152] .wi 'Set' ('caption' 'CL')
('where' 2.5 18.5 2 4)
[153] .wi 'onClick' 'FnCalc1'
[155] .wself . 'fmCalc.bnR' .wi 'New' 'Button' 'Close'
[156] .wi 'Set' ('caption' bsp)
('where' 2.5 23 2 4)
[157] .wi 'font' 'Symbol' 1.2 1
'symbol'
[158] .wi 'onClick' 'FnCalc1'
[160] .wself . 'fmCalc.bnI' .wi 'New' 'Button' 'Close'
[161] .wi 'Set' ('caption'
'Ent') ('where' 4.75 23 2 4)
[162] .wi 'onClick' 'FnCalc1'
[164] .wself . 'fmCalc.bnCE' .wi 'New' 'Button' 'Close'
[165] .wi 'Set' ('caption' 'CE')
('where' 4.75 18.5 2 4)
[166] .wi 'onClick' 'FnCalc1'
[168] .wself . 'fmCalc.bnSgn' .wi 'New' 'Button' 'Close'
[169] .wi 'Set' ('caption'
(.av[250])) ('where' 7 18.5 2 4)
[170] .wi 'font' 'Symbol' 1 1
'symbol'
[171] .wi 'onClick' 'FnCalc1'
[173] .wself . 'fmCalc.bnOff' .wi 'New' 'Button' 'Close'
[174] .wi 'Set' ('caption'
'Off') ('where' 18 38 2 4)
[175] .wi 'onClick' 'FnCalc1'
[177] .wself . 'fmCalc.bnK' .wi 'New' 'Button' 'Close'
[178] .wi 'Set' ('caption' bva)
('where' 16 0.5 2 4)
[179] .wi Y 'FnCalc2'
[180]
[181] .wself . 'fmCalc.bni' .wi 'New' 'Button' 'Close'
[182] .wi 'Set' ('caption' bi)
('where' 16 5 2 4)
[183] .wi Y 'FnCalc2'
[202] .wself . 'fmCalc.bnD1' .wi 'New' 'Button' 'Close'
[203] .wi 'Set' ('caption'
'Dat1') ('where' 2.5 27.5 2 5)
[204] .wi 'onClick' 'FnCalc7'
[229] .wself . 'fmCalc.bnSQR' .wi 'New' 'Button' 'Close'
[230] .wi 'caption'
(.av[154],'U'))
[231] .wi 'where' 13.75 27.5 2 4
[232] .wi 'font' 'Symbol' 1 1
'symbol'
[233] .wi 'onClick' 'FnCalc7'
[235] .wself . 'fmCalc.bnInv' .wi 'New' 'Button' 'Close'
[236] .wi 'Set' ('caption'
'1/X') ('where' 16 27.5 2 4)
[237] .wi 'onClick' 'FnCalc7'
[238]
[239] .wself . 'fmCalc.f1' .wi 'New' 'Frame' 'Close'
[240] .wi 'Set' ('caption' '')
('where' 0.125 34.5 3.4 7)
[241] .wi 'style' 2
[243] .wself . 'fmCalc.f1.opDec' .wi 'New' 'Option' 'Close'
[244] .wi 'Set' ('caption'
'Dec') ('style' 0) ('value' 1)
[245] .wi 'Set' ('where' 0.2 .5
1.2 6)
[247] .wi 'onClick' 'FnCalc1'
[249] .wself . 'fmCalc.f1.opHex' .wi 'New' 'Option' 'Close'
[250] .wi 'Set' ('caption'
'Hex') ('style' 0)
[251] .wi 'Set' ('where' 1.2 .5
1.1875 6)
[252] .wi 'onClick' 'FnCalc1'
[254] .wself . 'fmCalc.f1.opBin' .wi 'New' 'Option' 'Close'
[255] .wi 'Set' ('caption'
'Bin') ('style' 0)
[256] .wi 'where' 2.2 .5 1.2 6
[257] .wi 'onClick' 'FnCalc1'
[258]
[324] .wself . 'fmCalc.mFile' .wi 'New' 'Menu' 'Close'
[325] .wi 'caption'
'&Fichier'
[326] .wself.'fmCalc.mFile.mImp' .wi 'New' 'Menu' 'Close'
[327] .wi 'caption'
'&Impression Tableau'
[328] .wi 'onClick' 'FPrint'
[329] .wself.'fmCalc.mFile.mSep1' .wi 'New' 'Menu' 'Close'
[330] .wi 'separator' 1
[331] .wself.'fmCalc.mFile.mPmt' .wi 'New' 'Menu' 'Close'
[332] .wi 'caption'
'Paramétrage'
[333] .wi 'onClick' 'FmOptn'
[334] .wself.'fmCalc.mFile.mSep2' .wi 'New' 'Menu' 'Close'
[335] .wi 'separator' 1
[336] .wself.'fmCalc.mFile.mSep3' .wi 'New' 'Menu' 'Close'
[337] .wi 'separator' 1
[338] .wself.'fmCalc.mFile.mQut' .wi 'New' 'Menu' 'Close'
[339] .wi 'caption' '&Quit'
[340] .wi 'onClick' 'FnCalc8'
[341]
[342] .wself . 'fmCalc.mCal' .wi 'New' 'Menu' 'Close'
[343] .wi 'caption'
'&Calculs'
[344] .wself.'fmCalc.mCal.mInt' .wi 'New' 'Menu' 'Close'
[345] .wi 'caption' 'Intérêts
payés'
[346] .wi 'onClick' 'FnCalc8'
[347] .wself.'fmCalc.mCal.mSep1' .wi 'New' 'Menu' 'Close'
[348] .wi 'separator' 1
[349] .wself.'fmCalc.mCal.m ' .wi 'New' 'Menu' 'Close'
[350] .wi 'Set' ('caption' ' ') ('onClick'
'FnCalc8')
[351] .wself . 'fmCalc.ed1' .wi 'New' 'Edit' 'Close'
[352] .wi 'Set' ('border' 1)
('where' 0 0 0 0)
[354] .wself . 'fmCalc.mNbr' .wi 'New' 'Menu' 'Close'
[355] .wi 'caption'
'&Nombres'
[356] .wself.'fmCalc.mNbr.mNum' .wi 'New' 'Menu' 'Close'
[357] .wi 'caption'
'&Numériser'
[358] .wi 'onClick' 'FnCalc8'
[359] .wself.'fmCalc.mNbr.mSep1' .wi 'New' 'Menu' 'Close'
[360] .wi 'separator' 1
[361] .wself.'fmCalc.mNbr.mPie' .wi 'New' 'Menu' 'Close'
[362] .wi 'Set' ('caption'
'&Pi')('onClick' 'FnCalc8')
[363] .wself.'fmCalc.mNbr.mSep2' .wi 'New' 'Menu' 'Close'
[364] .wi 'separator' 1
[365] .wself.'fmCalc.mNbr.m100' .wi 'New' 'Menu' 'Close'
[366] .wi 'Set' ('caption' '%')
('onClick' 'FnCalc8')
[367] .wself.'fmCalc.mNbr.mDif' .wi 'New' 'Menu' 'Close'
[368] .wi 'Set' ('caption'
'Diff. %') ('onClick' 'FnCalc8')
[369] .wself.'fmCalc.mNbr.mTot' .wi 'New' 'Menu' 'Close'
[370] .wi 'Set' ('caption' '%
Total') ('onClick' 'FnCalc8')
[371] .wself.'fmCalc.mNbr.mSep3' .wi 'New' 'Menu' 'Close'
[372] .wi 'separator' 1
[373] .wself.'fmCalc.mNbr.mMil' .wi 'New' 'Menu' 'Close'
[374] .wi 'Set' ('caption'
'°/°°') ('onClick' 'FnCalc8')
[375] .wself.'fmCalc.mNbr.mDMl' .wi 'New' 'Menu' 'Close'
[376] .wi 'Set' ('caption'
'°/°°°') ('onClick' 'FnCalc8')
[377] .wself.'fmCalc.mNbr.mSep4' .wi 'New' 'Menu' 'Close'
[378] .wi 'separator' 1
[379] .wself.'fmCalc.mNbr.m2PR' .wi 'New' 'Menu' 'Close'
[380] .wi 'Set' ('caption' '2 Pi
R') ('onClick' 'FnCalc8')
[381]
[382] .wself . 'fmCalc.mHlp' .wi 'New' 'Menu' 'Close'
[383] .wi 'caption' '?'
[384] .wself.'fmCalc.mHlp.mExp' .wi 'New' 'Menu' 'Close'
[385] .wi 'caption'
'&Explications'
[386] .wi 'onClick' 'FExpli'
[387] .wself.'fmCalc.mHlp.mSep1' .wi 'New' 'Menu' 'Close'
[388] .wi 'separator' 1
[389] .wself.'fmCalc.mHlp.mGlo' .wi 'New' 'Menu' 'Close'
[390] .wi 'caption'
'&Glossaire'
[391] .wi 'onClick' 'FGloss'
.
4.1.2. Fonction
FmOptn
Cette fonction permet
d'afficher la Forme du paragraphe 3.5.Elle sera listée et présentée dans un
prochain numéro.
4.2. Fonctions
CallBack
Ces fonctions sont
appelées par APL PLUS III/WINDOWS Graphical Utilisateur Interface en réponse à
une action de l'utilisateur ou d'une fonction. Celles qui sont listées présentent
un intérêt particulier.
4.2.1. Fonction de
lancement : FnCalc
Le paragraphe 3.3. explicite la manière de se servir de cette fonction.
L 8: positionne les
valeurs par défaut de l'Application, L 12: exécute la fonction de création de
la forme, si ce n'est réalisé, L 15: initialise quelques paramètres, L 16:
permet l'affichage de la forme, et le début du travail.
. R.FnCalc;.pp
[1] © 08-05-1996 à 19h29
[2] .io.1 ª .pw.70 ª .pp.17
[7] tt.2
[8] FDeft
[9]
[10] :IF 0 = ½'#' .wi 'children'
[11] :ORIF ~'Form' .wi
'fmCalc:class'
[12] FmCalc
[13] :ENDIF
[14]
[15] FInit
[16] R . .wi 'fmCalc:Open'
.
4.2.2. Fonction
CallBack : FnCalc1
Elle est appelée lors
de l'enfoncement d'un bouton de l'HC – onClick – , et
traite chaque appel et leurs fonctionnalités afférentes. Explicitons quelques
actions et leurs conséquences directes.
L 2: permet de saisir
le contenu des variables globales d'APL III/WINDOWS qui sont nécessaires aux
traitements, E fournit le nom de l'événement courant lors d'un Callback. S, le
nom de l'objet WINDOWS déclencheur, L 3 – 10: teste la numéricité ou la vacuité
de la variable donnée, L 12: met en place le premier test puissant SELECT /CASE
sur le type d'événement survenu, L 14: second test SELECT /CASE sur l'origine
de l'événement, son déclencheur : ici, un clic de la souris sur un bouton.
– Si Boutons du
Pavé numérique :
L 15 – 23: boutons
communs aux trois bases de calcul, L 25 – 38: boutons partagés par les systèmes
décimal & hexadécimal,
L 40 – 46: boutons
propres au système hexadécimal. L 48 – 50: sortie de l'Application, L 58 – 60:
efface la zone d'affichage et réinitialise l'ensemble des variables globales, L
74 – 80: traite les quatre opérations, – Si Bases du système de calcul
L 89 – 120: passage en
mode décimal, avec traitement de l'affichage des 16 boutons numériques, L 123 –
155: passage en mode hexadécimal, idem L 157 – 189: passage en mode
binaire, idem L 216 – 269: traitements trigonométriques, L 293 – 313:
traitement du Couper/Coller,
. FnCalc1;D;E;G;I;L;S;T;X;Z
[1] © 08-05-1996 à 19h29
[2] E..wevent ª S..wself ª G.S .wi 'name'
[3] :IF ~ (.dr kd) ¹ 82 323 645
[4] kd.''
[5] :ENDIF
[6] :IF 0 < ½kd~' '
[7] I.^/kd ¹ '¯-0123456789ABCDEF.'
[8] :ELSE
[9] I.0
[10] :ENDIF
[11]
[12] :SELECT E
[13] :CASE
'Click'
[14] :SELECT
G
[15] :CASELIST 'bn0' 'bn1'
[16] kd .
(.kd) , ¯1.G
[17] .wi
'lab.caption' kd
[18] :IF xpo
[19] :ANDIF
2 =½T.1/. k d
[20] kd .
.T[1]×10*T[2]
[21] .wi
'lab.caption' kd
[22] xpo . 0
[23] :ENDIF
[24]
[25] :CASELIST 'bn2' 'bn3' 'bn4' 'bn5' 'bn6' 'bn7' 'bn8'
'bn9'
[26] :IF kz
¹ 1 2
[27] kd .
(.kd),¯1.G
[28] .wi
'lab.caption' kd
[29]
[30] :IF xpo
[31] :ANDIF
2 = +/½T.1/. k d
[32] kd .
.T[1]×10*T[2]
[33] .wi
'lab.caption' kd
[34] xpo . 0
[35] :ENDIF
[36] :ELSE
[37] .0
[38] :ENDIF
[39]
[40] :CASELIST 'bnA' 'bnB' 'bnC' 'bnD' 'bnE' 'bnF'
[41] :IF kz
= 2
[42] kd .
(.kd),¯1.G
[43] .wi
'lab.caption' kd
[44] :ELSE
[45] .0
[46] :ENDIF
[47]
[48] :CASE
'bnOff'
[49] '#' .wi
'Reset'
[50]
[51] :CASE
'bnSgn'
[52] kd .
(.wi 'lab.caption')~' '
[53] kx .
.FI kd.- .. FI kd
[54] kd[(kd
.SS '¯')/¼½kd].'-'
[55] .wi
'lab.caption' kd
[56]
[57] :CASE 'bnCE'
[58] kx . ¼0
ª ky . ¼0 ª kd . ''
[59] .wi
'lab.caption' (' ')
[60]
[61] :CASE
'bnCL'
[62] kd . ''
[63] .wi
'lab.caption' (' ')
[64]
[65] :CASE
'bnDec'
[66] :IF I
[67] :ANDIF
0 < ½kd.kd~' '
[68] kd .
((~'.'¹kd)×½kd)½kd
[69] kd .
kd,'.'
[70] .wi
'lab.caption' kd
[71] :ENDIF
[72]
[73] :CASELIST 'bnAdd' 'bnSub' 'bnMul' 'bnDiv' 'bnPui'
[74] :IF
0¬½ky
[75] :ANDIF
0¬½kd.kd~' '
[76] FCalc2
1
[77] :ENDIF
[78] ko .
((¯1.G) = 'dblvi' )/'+-×÷*'
[79] :IF 0
< ½kd.kd~' '
[80] :IF kz
¹ 1 3
[81] ky .
1/. k d
[82] :ELSE
[83] ky . kd
[84] :ENDIF
[85] kd . ''
[86] :ENDIF
[87]
[88] :CASE
'bnEq'
[89] :IF
0¬½kd.kd~' '
[90] :ANDIF
0¬½ky
[91] FCalc2
1
[92] :ELSE
[93] ko.''
[94] :ENDIF
[95]
[96] :CASE
'opDec'
[97] kd .
(.wi 'lab.caption')~' '
[98] :IF 0
< ½kd
[99] :IF kz
= 2
[100] :ANDIF ^/kd ¹ '¯-0123456789ABCDEF.'[101]
[102] kd.,. Hex2Dec kd
[103] :ENDIF
[104] :IF kz = 3
[105] :ANDIF ^/kd ¹ '01.'
[106] kd.. k. . d
[107] kd., . Bin2Dec kd
[108] :ENDIF
[109] .wi 'lab.caption' kd
[110] :ENDIF
[111] kz.1
[112] .wi 'bn2.enabled' 1ª .wi 'bn3.enabled' 1
[113] .wi 'bn4.enabled' 1ª .wi 'bn5.enabled' 1
[114] .wi 'bn6.enabled' 1ª .wi 'bn7.enabled' 1
[115] .wi 'bn8.enabled' 1ª .wi 'bn9.enabled' 1
[116] .wi 'bnA.enabled' 0ª .wi 'bnB.enabled' 0
[117] .wi 'bnC.enabled' 0ª .wi 'bnD.enabled' 0
[118] .wi 'bnE.enabled' 0ª .wi 'bnF.enabled' 0
[119] .wi 'bnDec.enabled' 1ª.wi 'bnOU.enabled' 0
[120] .wi 'bnXOU.enabled' 0ª.wi 'bnET.enabled' 0
[121] .wi 'bnNOT.enabled' 0ª.wi 'bnXpo.enabled' 1
[122] .wi 'bnSin.enabled' 1ª.wi 'bnCos.enabled' 1
[123] .wi 'bnTg.enabled' 1ª.wi 'bnExp.enabled' 1
[124] .wi 'bnLn.enabled' 1ª .wi 'bnLog.enabled' 1
[125] .wi 'bnK.enabled' 1 ª .wi 'bni.enabled' 1
[126] .wi 'bnn.enabled' 1ª .wi 'bna.enabled' 1
[127] .wi 'bnF.enabled' 1ª.wi 'f2.opDeg.enabled' 1
[128] .wi 'f2.opRad.enabled' 1ª.wi
'f2.opGrd.enabled' 1
[129] .wi 'f3.opEqu.enabled' 1ª.wi
'f3.opPpt.enabled' 1
[130] .wi 'f4.opAnn.enabled' 1ª.wi
'f4.opMen.enabled' 1
[131] .wi 'f4.opSem.enabled' 1ª.wi
'f4.opQua.enabled' 1
[132] .wi 'f4.opTri.enabled' 1ª.wi
'f4.opBim.enabled' 1
[133]
[134] :CASE 'opHex'
[135] kd . (.wi 'lab.caption')~' '
[136] :IF 0 < ½kd
[137] :IF kz = 3
[138] :ANDIF ^/kd ¹ '01.'
[139] kd ... k. d
[140] kd., . Bin2Dec . k d
[141] kd.,. Dec2Hex kd
[142] :ENDIF
[143] :IF kz = 1
[144] :ANDIF ^/kd ¹ '¯-E0123456789.'
[145] kd ... k. d
[146] kd.,. Dec2Hex kd
[147] :ENDIF
[148] .wi 'lab.caption' kd
[149] :ENDIF
[150] kz.2
[151] .wi 'bn2.enabled' 1ª.wi 'bn3.enabled' 1
[152] .wi 'bn4.enabled' 1ª.wi 'bn5.enabled' 1
[153] .wi 'bn6.enabled' 1ª.wi 'bn7.enabled' 1
[154] .wi 'bn8.enabled' 1ª.wi 'bn9.enabled' 1
[155] .wi 'bnA.enabled' 1ª.wi 'bnB.enabled' 1
[156] .wi 'bnC.enabled' 1ª.wi 'bnD.enabled' 1
[157] .wi 'bnE.enabled' 1ª.wi 'bnF.enabled' 1
[158] .wi 'bnDec.enabled' 0ª.wi 'bnOU.enabled' 0
[159] .wi 'bnXOU.enabled' 0ª.wi 'bnET.enabled' 0
[160] .wi 'bnNOT.enabled' 0ª.wi 'bnXpo.enabled' 0
[161] .wi 'bnSin.enabled' 0ª.wi 'bnCos.enabled' 0
[162] .wi 'bnTg.enabled' 0ª .wi 'bnExp.enabled' 0
[163] .wi 'bnLn.enabled' 0ª.wi 'bnLog.enabled' 0
[164] .wi 'bnK.enabled' 0ª.wi 'bni.enabled' 0
[165] .wi 'bnn.enabled' 0ª .wi 'bna.enabled' 0
[166] .wi 'bnF.enabled' 0ª .wi 'f2.opDeg.enabled' 0
[167] .wi 'f2.opRad.enabled' 0ª.wi
'f2.opGrd.enabled' 0
[168] .wi 'f3.opEqu.enabled' 0ª.wi
'f3.opPpt.enabled' 0
[169] .wi 'f4.opAnn.enabled' 0ª.wi
'f4.opMen.enabled' 0
[170] .wi 'f4.opSem.enabled' 0ª.wi
'f4.opQua.enabled' 0
[171] .wi 'f4.opTri.enabled' 0ª .wi
'f4.opBim.enabled' 0
[172]
[173] :CASE 'opBin'
[174] kd . (.wi 'lab.caption')~' '
[175] :IF 0 < ½kd
[176] :IF kz = 2
[177] :ANDIF ^/kd ¹ '¯-0123456789ABCDEF.'
[178]
[179] kd.,. Hex2Dec kd
[180] kd., . Dec2Bin kd
[181] :ENDIF
[182] :IF kz
= 1
[183] :ANDIF ^/kd ¹ '¯-E0123456789.'
[184] kd ... k. d
[185] kd., . Dec2Bin kd
[186] :ENDIF
[187] .wi 'lab.caption' kd
[188] :ENDIF
[189] kz.3
[190] .wi 'bn2.enabled' 0ª.wi 'bn3.enabled' 0
[191] .wi 'bn4.enabled' 0ª.wi 'bn5.enabled' 0
[192] .wi 'bn6.enabled' 0ª.wi 'bn7.enabled' 0
[193] .wi 'bn8.enabled' 0ª.wi 'bn9.enabled' 0
[194] .wi 'bnA.enabled' 0ª.wi 'bnB.enabled' 0
[195] .wi 'bnC.enabled' 0ª.wi 'bnD.enabled' 0
[196] .wi 'bnE.enabled' 0ª.wi 'bnF.enabled' 0
[197] .wi 'bnDec.enabled' 0ª.wi 'bnOU.enabled' 1
[198] .wi 'bnXOU.enabled' 1ª.wi 'bnET.enabled' 1
[199] .wi 'bnNOT.enabled' 1ª.wi 'bnXpo.enabled' 0
[200] .wi 'bnSin.enabled' 0ª.wi 'bnCos.enabled' 0
[201] .wi 'bnTg.enabled' 0ª.wi 'bnExp.enabled' 0
[202] .wi 'bnLn.enabled' 0ª.wi 'bnLog.enabled' 0
[203] .wi 'bnK.enabled' 0ª .wi 'bni.enabled' 0
[204] .wi 'bnn.enabled' 0ª .wi 'bna.enabled' 0
[205] .wi 'bnF.enabled' 0ª.wi 'f2.opDeg.enabled' 0
[206] .wi 'f2.opRad.enabled' 0ª.wi
'f2.opGrd.enabled' 0
[207] .wi 'f3.opEqu.enabled' 0ª .wi
'f3.opPpt.enabled' 0
[208] .wi 'f4.opAnn.enabled' 0ª .wi
'f4.opMen.enabled' 0
[209] .wi 'f4.opSem.enabled' 0ª .wi
'f4.opQua.enabled' 0
[210] .wi 'f4.opTri.enabled' 0ª .wi
'f4.opBim.enabled' 0
[211]
[212] :CASELIST 'opDeg' 'opRad' 'opGrd'
[213] ku . (G[3] = 'D' 'R' 'G')/ 1 2 3
[214]
[215] :CASELIST 'opEqu' 'opPpt'
[216] ka[1] . (G[3] = 'E' 'P' )/ 0 6
[217]
[218] :CASELIST 'opAnn' 'opSem' 'opQua' 'opTri'
'opBim'
'opMen'
[219] ka[2] . (G[3] = 'A' 'M' 'B' 'T' 'Q' 'S' )/¼6
[220]
[221] :CASE 'bnR'
[222] :IF 82 323 ..¹ .dr kd
[223] :ANDIF 1 < ½kd
[224] kd . ¯1.kd
[225] :ELSE
[226] kd . ''
[227] :ENDIF
[228] .wi 'lab.caption' kd
[229]
[230] :CASE 'bnI'
[231] :IF I
[232] :ANDIF 0 < ½kd.kd~' '
[233] kd ... k. d
[234] .wi 'lab.caption' kd
[235] :ENDIF
[236]
[237] :CASE 'bnSin' © résultats en radians
[238] :IF I
[239] :ANDIF 0 < ½kd.kd~' '
[240] :SELECT . . k u
[241] :CASE 1
[242] kd . .1 ± (.kd) × (± 1)÷ 180
[243] .wi 'lab.caption' kd
[244] :CASE 2
[245] kd . .1 ± . k d
[246] .wi 'lab.caption' kd
[247] :CASE 3
[248] kd . .1 ± (.kd) × (± 1)÷ 200
[249] .wi 'lab.caption' kd
[250] :ENDSELECT
[251] :ENDIF
[252]
[253] :CASE 'bnCos'
[254] :IF I
[255] :ANDIF 0 < ½kd.kd~' '
[256] :SELECT . . k u
[257] :CASE 1
[258] kd . .2 ± (.kd) × (± 1)÷ 180
[259] .wi 'lab.caption' kd
[260]
[261] :CASE 2
[262] kd . .2 ± . k d
[263] .wi 'lab.caption' kd
[264]
[265] :CASE 3
[266] kd . .2 ± (.kd) × (± 1)÷ 200
[267] .wi 'lab.caption' kd
[268] :ENDSELECT
[269] :ENDIF
[270]
[271] :CASE 'bnTg'
[272] :IF I
[273] :ANDIF 0 < ½kd.kd~' '
[274] :SELECT . . k u
[275] :CASE 1
[276] kd . .3 ± (.kd) × (± 1)÷ 180
[277] .wi 'lab.caption' kd
[278]
[279] :CASE 2
[280] kd . .3 ± . k d
[281] .wi 'lab.caption' kd
[282]
[283] :CASE 3
[284] kd . .3 ± (.kd) × (± 1)÷ 200
[285] .wi 'lab.caption' kd
[286] :ENDSELECT
[287] :ENDIF
[288]
[289] :CASE 'bnExp'
[290] :IF I
[291] :ANDIF 0 < ½kd.kd~' '
[292] kd. . *
. k d
[293] .wi 'lab.caption' kd
[294] :ENDIF
[295]
[296] :CASE 'bnLn'
[297] :IF I
[298] :ANDIF 0 < ½kd.kd~' '
[299] :ANDIF 0 < . k d
[300] kd . .
µ . k d
[301] .wi 'lab.caption' kd
[302] :ENDIF
[303]
[304] :CASE 'bnLog'
[305] :IF I
[306] :ANDIF 0 < ½kd.kd~' '
[307] :ANDIF 0 < . k d
[308] kd . .10µ . k d
[309] .wi 'lab.caption' kd
[310] :ENDIF
[311]
[312] :CASE 'bnCoup'
[313] :IF 0 < ½kd.kd~' '
[314] .wi 'ed1.text' kd
[315] .wi 'ed1.selection' 0 22
[316] .wi 'ed1.Copy'
[317] :ENDIF
[318]
[319] :CASE 'bnColl'
[320] .wi 'ed1.text' ''
[321] .wi 'ed1.Paste'
[322] .wi 'ed1.selection' 0 255
[323] kd.Z . .wi 'ed1.text'
[324] :IF 0
<Z+.¹';'
[325] kz.1
[326] :ELSEIF (kz =1) ^ ^/kd ¹ '-¯.E0123456789'
[327] :ORIF (kz = 2) ^ ^/kd ¹ '¯-.0123456789ABCDEF'
[328] :ORIF (kz = 3) ^ ^/kd ¹ '-¯.01'
[329] .wi 'lab.caption' kd
[330] :ELSE
[331] .wi 'lab.caption' ''
[332] :ENDIF
[333]
[334] :CASE 'bnXpo'
[335] kd .(.wi 'lab.caption'),' '
[336] .wi 'lab.caption' kd
[337] xpo . 1
[338] :ENDSELECT
[339] :ENDSELECT
.
Listée quasiment in
extenso, cette fonction est importante pour comprendre le
déroulement d'une
action utilisateur et le type de réponse apportée : que faire et
comment le faire ?
4.2.3. Fonction CallBack : FnCalc2
Elle est appelée
lors du relâchement de la pression sur le bouton gauche de la
souris
onMouseUp préalablement placée sur l'un des cinq boutons de
Fonctions
Financières. Elle reprend les fonctionnalités principales, en les
améliorant, d'un
article sur le Prêt, paru dans le numéro 14.
4.2.4. Fonction CallBack : FnCalc4
Elle est appelée
lors d'événements particuliers : à l'ouverture ou mise à
disponibilité
de la forme fmCalc, lors de sa clôture ou lors d'un
redimensionnement
(intérêt pratique de son traitement spécifique et atypique) :
boutons Maximer ou
Icônifier.
L 2: saisie
des événements déclencheurs,
L 5
45: traitement lors de l'ouverture de la Forme
L 51
130: traitement lors d'un redimensionnement de la Forme
. FnCalc4;D;E;G;L;S;T;X
[1] © 08-05-1996 à 19h29
[2] E..wevent ª S..wself ª G.S .wi 'name'
[3]
[4] :SELECT E
[5] :CASE
'Open'
[6] (kd ko kp) .'' '' '' ª kx . ¼0 ª ky . ¼0
[7] .wi 'lab.caption' kd
[8] ks . 4 ½ .wi 'fmCalc:size'
[9] ks.ks®(.wi 'lab.where')®.wi 'bn1.where'
[10] ks.ks®(.wi
'bn2.where')®.wi 'bn3.where'
[11] ks.ks®(.wi 'bn4.where')®.wi 'bn5.where'
[12] ks.ks®(.wi 'bn6.where')®.wi 'bn7.where'
[13] ks.ks®(.wi 'bn8.where')®.wi 'bn9.where'
[14] ks.ks®(.wi 'bn0.where')®.wi 'bnDec.where'
[15] ks.ks®(.wi 'bnEq.where')®.wi 'bnDiv.where'
[16] ks.ks®(.wi 'bnMul.where')®.wi 'bnSub.where'
[17] ks.ks®(.wi 'bnAdd.where')®.wi 'bnCL.where'
[18] ks.ks®(.wi 'bnCE.where')®.wi 'bnSgn.where'
[19] ks.ks®(.wi 'bnOff.where')®.wi 'bnA.where'
[20] ks.ks®(.wi 'bnB.where')®.wi 'bnC.where'
[21] ks.ks®(.wi 'bnD.where')®.wi 'bnE.where'
[22] ks.ks®(.wi 'bnF.where')®.wi 'bnSin.where'
[23] ks.ks®(.wi 'bnCos.where')®.wi 'bnTg.where'
[24] ks.ks®(.wi 'bnExp.where')®.wi 'bnLn.where'
[25] ks.ks®(.wi 'bnLog.where')®.wi 'bnCoup.where'
[26] ks.ks®(.wi 'bnColl.where')®.wi 'bnR.where'
[27] ks.ks®(.wi 'bnI.where')®.wi 'f1.where'
[28] ks.ks®(.wi 'f1.opDec.where')®.wi
'f1.opHex.where'
[29] ks.ks®(.wi 'f1.opBin.where')®.wi 'f2.where'
[30] ks.ks®(.wi 'f2.opDeg.where')®.wi
'f2.opRad.where'
[31] ks.ks®(.wi 'f2.opGrd.where')®.wi 'bnK.where'
[32] ks.ks®(.wi
'bni.where')®.wi 'bnn.where'
[33] ks.ks®(.wi 'bna.where')®.wi 'f3.where'
[34] ks.ks®(.wi 'f3.opEqu.where')®.wi
'f3.opPpt.where'
[35] ks.ks®(.wi 'bnXpo.where')®.wi 'bnOU.where'
[36] ks.ks®(.wi 'bnXOU.where')®.wi 'bnET.where'
[37] ks.ks®(.wi 'bnNOT.where')®.wi 'bnPui.where'
[38] ks.ks®(.wi 'bnSQR.where')®.wi 'bnInv.where'
[39] ks.ks®(.wi 'bnD1.where')®.wi 'bnD2.where'
[40] ks.ks®(.wi 'f4.where')®.wi 'f4.opAnn.where'
[41] ks.ks®(.wi 'f4.opMen.where')®.wi
'f4.opSem.where'
[42] ks.ks®(.wi 'f4.opQua.where')®.wi
'f4.opTri.where'
[43] ks.ks®(.wi 'f4.opBim.where')®.wi 'bnM.where'
[44] ks.ks®(.wi 'bnColW.where')®.wi 'bnColX.where'
[45] ks.((.25×1.½ks),4) ½ ks ª kn.ks[1;]
[46]
[47] :CASE 'Close'
[48] .wi
':value' (''½1.kx)
[49] 0 0
½.EX 'ka kd kn ko kp kq ks ku kx ky kz'
[50]
[51] :CASE 'Resize'
[52] kn .
2½.warg ª .(kn ks[1;1 2])½0
[53] .(ks[1;1 2]..>0)/0 ª D . kn ÷ ks[1;1 2]
[54] ks . ks
× (½ks)½D ª .wi ':size' (kn[1 2])
[55] .wi
'lab.where' (ks[2;])
[56] .wi
'bn1.where' (ks[3;])
[57] .wi
'bn2.where' (ks[4;])
[58] .wi
'bn3.where' (ks[5;])
[59] .wi
'bn4.where' (ks[6;])
[60] .wi
'bn5.where' (ks[7;])
[61] .wi
'bn6.where' (ks[8;])
[62] .wi
'bn7.where' (ks[9;])
[63] .wi
'bn8.where' (ks[10;])
[64] .wi
'bn9.where' (ks[11;])
[65] .wi
'bn0.where' (ks[12;])
[66] .wi
'bnDec.where' (ks[13;])
[67] .wi
'bnEq.where' (ks[14;])
[68] .wi
'bnDiv.where' (ks[15;])
[69] .wi
'bnMul.where' (ks[16;])
[70] .wi
'bnSub.where' (ks[17;])
[71] .wi
'bnAdd.where' (ks[18;])
[72] .wi
'bnCL.where' (ks[19;])
[73] .wi
'bnCE.where' (ks[20;])
[74] .wi
'bnSgn.where' (ks[21;])
[75] .wi
'bnOff.where' (ks[22;])
[76] .wi
'bnA.where' (ks[23;])
[77] .wi
'bnB.where' (ks[24;])
[78] .wi
'bnC.where' (ks[25;])
[79] .wi
'bnD.where' (ks[26;])
[80] .wi
'bnE.where' (ks[27;])
[81] .wi
'bnF.where' (ks[28;])
[82] .wi
'bnSin.where' (ks[29;])
[83] .wi
'bnCos.where' (ks[30;])
[84] .wi
'bnTg.where' (ks[31;])
[85] .wi 'bnExp.where'
(ks[32;])
[86] .wi
'bnLn.where' (ks[33;])
[87] .wi
'bnLog.where' (ks[34;])
[88] .wi
'bnCoup.where' (ks[35;])
[89] .wi
'bnColl.where' (ks[36;])
[90] .wi
'bnR.where' (ks[37;])
[91] .wi
'bnI.where' (ks[38;])
[92] .wi
'f1.where' (ks[39;])
[93] .wi
'f1.opDec.where' (ks[40;])
[94] .wi
'f1.opHex.where' (ks[41;])
[95] .wi
'f1.opBin.where' (ks[42;])
[96] .wi
'f2.where' (ks[43;])
[97] .wi
'f2.opDeg.where' (ks[44;])
[98] .wi
'f2.opRad.where' (ks[45;])
[99] .wi
'f2.opGrd.where' (ks[46;])
[100] .wi 'bnK.where' (ks[47;])
[101] .wi 'bni.where' (ks[48;])
[102] .wi 'bnn.where' (ks[49;])
[103] .wi 'bna.where' (ks[50;])
[104] .wi 'f3.where' (ks[51;])
[105] .wi 'f3.opEqu.where' (ks[52;])
[106] .wi 'f3.opPpt.where' (ks[53;])
[107] .wi 'bnXpo.where' (ks[54;])
[108] .wi 'bnOU.where' (ks[55;])
[109] .wi 'bnXOU.where' (ks[56;])
[110] .wi 'bnET.where' (ks[57;])
[111] .wi 'bnNOT.where' (ks[58;])
[112] .wi 'bnPui.where' (ks[59;])
[113] .wi 'bnSQR.where' (ks[60;])
[114] .wi 'bnInv.where' (ks[61;])
[115] .wi 'bnD1.where' (ks[62;])
[116] .wi 'bnD2.where' (ks[63;])
[117] .wi 'f4.where' (ks[64;])
[118] .wi 'f4.opAnn.where' (ks[65;])
[119] .wi 'f4.opMen.where' (ks[66;])
[120] .wi 'f4.opSem.where' (ks[67;])
[121] .wi 'f4.opQua.where' (ks[68;])
[122] .wi 'f4.opTri.where' (ks[69;])
[123] .wi 'f4.opBim.where' (ks[70;])
[124] .wi 'bnM.where' (ks[71;])
[125] .wi 'bnColW.where' (ks[72;])
[126] .wi 'bnColX.where' (ks[73;])
[127] L. .wi 'lab.font' ª L[2].L[2]×D[1]
[128] .wi 'lab.font' L
[129] L. .wi ':font' ª L[2].L[2]×D[1]
[130] .wi ':font' L
[131] :ENDSELECT
.
4.2.5. Fonction CallBack : FnCalc7
Elle est appelée
lors de la sélection de certains boutons par l'utilisation du
bouton gauche de la
souris, et traite des dates, des montées en puissance, de
l'inversion et des
opérations logiques binaires.
. FnCalc7;D;E;G;L;S;T;X;Y
[1] © 08-05-1996 à 19h29
[2] E..wevent ª S..wself ª G.S .wi 'name'
[3]
[4] :SELECT E
[5] :CASE 'Click'
[6] :SELECT G
[7] :CASE 'bnD1'
[8] :IF 8 ¬ 1.½kd
[9] :ORIF ~^/kd ¹ '0123456789'
[10] .wi
'lab.caption' 'non date JJMMAAAA'
[11] :ELSE
[12] .wi
'lab.caption' ''
[13] kx .
.((8½1 1 0), 1 1)\kd
[14] kd. ''
[15] :ENDIF
[16]
[17] :CASE
'bnD2'
[18] :IF 8 ¬
1.½kd
[20] .wi
'lab.caption' 'non date JJMMAAAA'
[22] :ELSE
[23] ky .
.((8½1 1 0), 1 1)\kd
[24] :IF 3 =
½kx
[25] :ANDIF
3 = ½ky
[26] kd .
.Fd2Fd1 ky kx
[27] .wi
'lab.caption' kd
[28] :ELSE
[29] .wi
'lab.caption' 'date 1 absente'
[30] :ENDIF
[31] :ENDIF
[32]
[33] :CASELIST 'bnOU' 'bnXOU' 'bnET'
[34] :IF
0¬½ky
[35] FCalc2
2
[36] :ENDIF
[37] ko .
(G[3] = 'OXE' )/'.¬^'
[38] ky .
.FI kd
[39] kd . ''
[40]
[41] :CASE
'bnNOT'
[42] kd.kd~kd~'0' '1'
[43] kd.(.
~.(64½1 0)\¯32.(32½'0'),kd)~' '
[44] kd.(.\~kd='0')/kd
[45] .wi
'lab.caption' kd
[46]
[47] :CASE
'bnSQR'
[48] :IF 0
< ½kd.kd~' '
[49] :IF kz
¹ 2 3
[50] :ANDIF
./kd = '.'
[51] kd .
(~.\kd = '.')/kd
[52] :ENDIF
[53] :IF kz
= 2
[54] :ANDIF
^/kd ¹ '¯-0123456789ABCDEF'
[55] kd., .
Hex2Dec kd
[56] :ENDIF
[57] :IF kz
= 3
[58] :ANDIF
^/kd ¹ '01'
[59] kd.. k.
. d
[60] kd., .
Bin2Dec kd
[61] :ENDIF
[63] :ENDIF
[64]
[65] :IF 0
< ½kd
[66] :ANDIF
0 . . k d
[67] kd . .
(.kd) * .5
[68] :IF kz
¹ 2 3
[69] :ANDIF
./kd = '.'
[70] kd .
(~.\kd = '.')/kd
[71] :ENDIF
[72] :IF kz
= 2
[73] kd., .
Dec2Hex kd
[74] :ENDIF
[75] :IF kz
= 3
[76] kd.. k.
. d
[77] kd., .
Dec2Bin kd
[78] :ENDIF
[79] .wi
'lab.caption' kd
[80] :ENDIF
[81]
[82] :CASE
'bnInv'
[83] :IF 0
< ½kd.kd~' '
[84] :IF kz
¹ 2 3
[85] :ANDIF
./kd = '.'
[86] kd .
(~.\kd = '.')/kd
[87] :ENDIF
[88] :IF kz
= 2
[89] :ANDIF ^/kd
¹ '¯-0123456789ABCDEF'
[90] kd., .
Hex2Dec kd
[91] :ENDIF
[92] :IF kz
= 3
[93] :ANDIF
^/kd ¹ '01'
[94] kd.. k.
. d
[95] kd., .
Bin2Dec kd
[96] :ENDIF
[99] :IF 0
< ½kd
[100] :ANDIF 0 . . k d
[101] kd . .
÷ . k d
[102] :IF kz ¹ 2 3
[103] :ANDIF ./kd = '.'
[104] kd . (~.\kd = '.')/kd
[105] :ENDIF
[106] :IF kz = 2
[107] kd.,. Dec2Hex kd
[108] :ENDIF
[109] :IF kz = 3
[110] kd.. k. . d
[111] kd.,. Dec2Bin kd
[112] :ENDIF
[113] .wi 'lab.caption' kd
[114] :ENDIF
[116] :ENDIF
[118] :ENDSELECT
[119] :ENDSELECT
[120]
.
4.2.6. Fonction CallBack : FnCalc8
Elle est sollicitée par le
menu et sur
sélection des commandes : le
click de la
souris sur le
libellé correspondant appelle cette fonction.
. FnCalc8;G;S;T
[1] © 08-05-1996 à 19h29
[2] G..wself ª S.G .wi 'name'
[3]
[4] :SELECT S
[5] :CASE 'mNum'
[6] .wi 'lab.caption' (k.kd.d)
[7]
[8] :CASE 'mInt'
[9] :IF kq[1] . 1000
[10] :ANDIF
kq[3] > 1
[11] :ANDIF
kq[4] > 1
[12] T .
(×/kq[3 4]) - kq[1]
[13] :IF 15
< ½. | . T
[14] kd .
'Paramètre outrancier'
[15] :ELSE
[16] kd . .
T
[17] :ENDIF
[18] .wi
'lab.caption' kd
[19] :ENDIF
[20]
[21] :CASE
'mQut'
[22] '#' .wi
'Reset'
[23] GoOut
[24] :CASE
'mPie'
[25] :IF
^/kd ¹ '-¯.E0123456789'
[26] :ANDIF
0 < ½kd.kd~' '
[27] kd.
. ±. k d
[28] :ELSE
[29] kd.
. ± 1
[30] :ENDIF
[31] .wi
'lab.caption' kd
[32]
[33] :CASE
'm100'
[34] kd. .wi
'lab.caption'
[35] :IF
^/kd ¹ '-¯.E0123456789'
[36] :ANDIF
0 < ½kd
[37] kd...01
×. k d
[38] .wi
'lab.caption' kd
[39] :ELSE
[40] .wi
'lab.caption' 'data1 non conforme'
[41] :ENDIF
[42]
[43] :CASE
'mDif'
[44] kd. .wi
'lab.caption'
[45] :IF
^/kd ¹ '-¯.E0123456789'
[46] :ANDIF
0 < ½kd
[47] :ANDIF
0 < ½ky
[48] kd.16
2.100ׯ1+(.kd)÷ky
[49] .wi
'lab.caption' kd
[50] :ELSE
[51] .wi
'lab.caption' 'data2 non conforme'
[52] :ENDIF
[53]
[54] :CASE
'mTot'
[55] kd. .wi
'lab.caption'
[56] :IF
^/kd ¹ '-¯.E0123456789'
[57] :ANDIF
0 < ½kd
[58] :ANDIF
0 < ½ky
[59] kd.16
2.100×(.kd)÷ky
[60] .wi
'lab.caption' kd
[61] :ELSE
[62] .wi
'lab.caption' 'data3 non conforme'
[63] :ENDIF
[64]
[65] :CASE
'mMil'
[66] kd. .wi
'lab.caption'
[67] :IF
^/kd ¹ '-¯.E0123456789'
[68] :ANDIF
0 < ½kd
[69] kd...001 ×. k d
[70] .wi
'lab.caption' kd
[71] :ELSE
[72] .wi
'lab.caption' 'data4 non conforme'
[73] :ENDIF
[74]
[75] :CASE
'mDMl'
[76] kd. .wi
'lab.caption'
[77] :IF
^/kd ¹ '-¯.E0123456789'
[78] :ANDIF
0 < ½kd
[79] kd..0.
001 ×. k d
[80] .wi
'lab.caption' kd
[81] :ELSE
[82] .wi
'lab.caption' 'data5 non conforme'
[83] :ENDIF
[84]
[85] :CASE
'm2PR'
[86] kd. .wi
'lab.caption'
[87] :IF
^/kd ¹ '-¯.E0123456789'
[88] :ANDIF
0 < ½kd
[89] kd. 2.
× (± 1) ×. k d
[90] .wi
'lab.caption' kd
[91] :ELSE
[92] .wi
'lab.caption' 'data6 non conforme'
[93] :ENDIF
[95] :ENDSELECT
.
4.3. Fonctions
Annexes
4.3.1. Fonction FCalc
Elle sert à
regrouper certains calculs complexes et l'édition d'un plan
d'amortissement.
4.3.2. Fonction FCalc2
Elle est destinée à
traiter certaines opérations arithmétiques et binaires.
. FCalc2 P;X;Y;Z
[1] © 08-05-1996 à 19h29
[2] .(0 = ½,ko )½0
[3] :SELECT P
[4] :CASE 1
[5] :IF ko ¹ '+-×÷*'
[6] :IF kz
¹ 1 3
[7] kx . 1/. k d
[8] :ELSE
[9] kx.kd
[10] :ENDIF
[11] :IF 0 < ½kx
[12] :ANDIF 0 < ½1/ky
[13] :IF kz
= 2
[14] Y.Hex2Dec ky ª Z .Hex2Dec kx
[15] :IF ko = '*'
[16] :ANDIF Z > .(µ pnl)÷µ Y
[17] .wi
'lab.caption' 'Data trop grandes'ª.0
[18] :ENDIF
[19] X. 'Y',ko,'Z' ª kx ., Dec2Hex X
[20] :ELSEIF
kz = 3
[21] Y.Bin2Dec ky ª Z.Bin2Dec kx
[22] :IF ko = '*'
[23] :ANDIF Z > .(µ pnl)÷µ Y
[24] .wi
'lab.caption' 'Data trop
grandes'ª.0
[25] :ENDIF
[26] X. 'Y',ko,'Z' ª kx . ,Dec2Bin X
[27] :ELSEIF
kz = 1
[28] .'kx . ky ',ko,' kx'
[29] :ENDIF
[30] :ELSE
[31] .wi
'lab.caption' 'Data non num ou
absente'
[32] :ENDIF
[33] kd . . k x
[34] kd[(kd .SS '¯')/¼½kd].'-'
[35] .wi 'lab.caption' kd
[36] ky . kx ª ko . ''
[37]
[38] :ELSEIF
ko ¹ '.¬^~'
[39] kx . .FI kd
[40] :IF 0 < ½kx
[41] :ANDIF 0 < ½ky
[42] X .
. / ( ½ .kx),½. ky
[43] kx.(X½10).kx ª ky.(X½10).ky
[44] .'kx .
ky ',ko,' kx' ª kx .10. kx
[45] :ENDIF
[46] kd . . k x
[47] kd[(kd .SS '¯')/¼½kd].'-'
[48] kd.(.\~kd='0')/kd
[49] .wi 'lab.caption' kd
[50] ky . kxª ko . ''
[51] :ENDIF
[52] :ENDSELECT
.
4.3.3. Fonction FDeft
Elle regroupe
l'ensemble des données variables qui peuvent être modifiées au
moyen de la forme
présentée en 3.5. : paramètrage sélectif.
. FDeft
[1] © 08-05-1996 à 19h29
[2]
[3] fpol . 'ARIAL '
[4] ftail . 1.2
[5] fstyl . 1
[6] lpol . 'ARIAL '
[7] ltail . 1.5
[8] lstyl . 1
[9] bexp . 'e'
[10] bln.'Ln'
[11] bld.'Log'
[12] bsp . '<='
[13] bva . 'VA'
[14] bi . 'i'
[15] bn . 'n'
[16] ba . 'a'
[17] bvf . 'VF'
.
4.3.4. Fonction FExpli
Elle affiche un
écran d'explications, que chacun peut améliorer selon ses
besoins, et
fonction de son apport.
. FExpli;A;B;E;G;S
[1] © 08-05-1996 à 19h29
[2] 'fmExpl' .wi 'Delete'
[3] .elx..alx.'.A30'
[4] E..wevent ª S..wself ª G.S .wi 'name'
[5]
[6] :SELECT
E
[7] :CASE 'Click'
[8] :SELECT
G
[9] :CASE 'mAna'
[10]
[11] B.'Explications sur l''Hyper-Calculette
Multi-Média',2½.tcnl
[18]
[19]
[20] .wself . 'fmExpl' .wi 'New' 'Form'
'Close'
[21] .wi
'Set' ('value' 0)('caption'
'Explications')
[22] .wi
'where' 10 10 25 70
[23] .wi
'font' 'APLPLUS' 1 1 'symbol'
[26] .wself . 'fmExpl.ed' .wi 'New' 'Edit'
'Close'
[27] .wi 'Set' ('where' 1 1 20 67)('style' 84)
[28] .wi
'Set' ('text' B)('font' 'APLPLUS' 1
1 'symbol')
[29] .wself . 'fmExpl.bnX' .wi 'New' 'Button'
'Close'
[30] .wi
'Set' ('caption' 'Exit')('where' 21
0.5 2 14)
[31] .wi
'onClick' 'FExpli'
[33] A . 'fmExpl' .wi 'Open'
[39] :ENDSELECT
[42] :ENDSELECT
[43] .0
[44] A30:
[45] .elx..alx.'.dm'
.
4.3.5. Fonction FInit
Cette fonction
apporte quelques constantes utilisées par ailleurs.
. FInit;X
[1] © 08-05-1996 à 19h29
[2] © ka 0equ 6ppt ;
1ann 2mois 3sem 4qua 5tri 6Bim
[3] © kd affichage
[4] ©
[5] © kn nouvelle taille
[6] © ko opérateur
[7] © kp pré-opérateur
[8] © kq VA i n a, im , VF
[9] © ks taille
[10] © ku 1=degré, 2=radian, 3=grade
[11] ©
[12] © kx 1ére valeur
[13] © ky 2éme valeur
[14] ©
[15] © kz 1=décimal, 2=hexa, 3=binaire
[16] ©
[17] ka . 0 1
[18] (kd ko kp) . '' '' ''
[19] kn. 4½0
[20] kx . ¼0
[21] ky . ¼0
[22] xpo . 0
[23] (ku kz) . 1
[24] vid.¯1.0E¯300
[25] pnl . 1.79769313486231540E308
[26] nnl .
¯1.79769313486231540E308
[27] efw . 4
[28] emv . 308
[29] kq . 6/vid
[30] k2g .
'K2G<ZZZ.ZZZ.ZZZ.ZZZ,Z9>'
[31] k4g .
'K2G<ZZZ.ZZZ.ZZZ.ZZZ,Z9>'
[32] lsup . '999.999.999'
[33] linf . '¯999.999.999'
[34] :SELECT kz
[35] :CASE 1
[36] .wi
'f1.opDec.value' 1
[37] :CASE 2
[38] .wi
'f1.opHex.value' 1
[39] :CASE 3
[40] .wi
'f1.opBin.value' 1
[41] :ENDSELECT
[42]
[43] :SELECT ku
[44] :CASE 1
[45] .wi
'f2.opDeg.value' 1
[46] :CASE 2
[47] .wi
'f2.opRad.value' 1
[48] :CASE 3
[49] .wi
'f2.opGrd.value' 1
[50] :ENDSELECT
[51]
[52] X.ka[1]
[53] :SELECT X
[54] :CASE 0
[55] .wi
'f3.opEqu.value' 1
[56] :CASE 6
[57] .wi
'f3.opPpt.value' 1
[58] :ENDSELECT
[59]
[60] X.ka[2]
[61] :SELECT X
[62] :CASE 1
[63] .wi
'f4.opAnn.value' 1
[64] :CASE 2
[65] .wi
'f4.opMen.value' 1
[66] :CASE 3
[67] .wi
'f4.opSem.value' 1
[68] :CASE 4
[69] .wi
'f4.opQua.value' 1
[70] :CASE 5
[71] .wi
'f4.opTri.value' 1
[72] :CASE 6
[73] .wi
'f4.opBim.value' 1
[74] :ENDSELECT
[75]
.
4.3.6. Fonction Fd2Fd1
Cette fonction
permet de déterminer le nombre de jours entre deux dates.
.
R.Fd2Fd1 P;A;B;C;D;Z;.io
[1] © 08-05-1996 à 19h29
[2] .io.1
[3] (B A) . P
[4] :IF 3= ½B
[5] Z .
((B[2].2)×..25×1899+B[3]) +
(B[2]>2)×.(.25×1900+B[3]) - .2.3+.4×B[2]
[6] C .
B[1] + Z + (365× 1900+B[3]) + 31×B[2]-1
[7] Z .
.((A[2].2)×.25×1899+A[3]) +
(A[2]>2)×.(.25×1900+A[3]) - .2.3+.4×A[2]
[8] D .
A[1] + Z + (365× 1900+A[3]) + 31×A[2]-1
[9] R . C -
D
[10] :ELSE
[11] R.0
[12] :ENDIF
.
Le produit a été
entièrement réécrit en APL III, en tenant compte des
simplifications apportées, des nouveautés sur l'IHM et sur certaines
instructions, de la montée en puissance des micro-ordinateurs qui
permettent
des folies bien utiles.
Et merci, lecteur,
pour votre patience.