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.