/***** * * Michael Riff * RPN software version 1.0 Oktob 2013. * * Neudefinition der ursprueglichen Funktionen. * Header Datei fuer Funktionnen/Operatoren die jezt mit RPN oder * Postfix Notation abeiten und mit einen Operanden Stack arbeiten * (HP Taschenrecher). * * Version 1.7: 06 June 2016 * Implemented handling of additional routines that can be called out of the text code. As example * we used the following: print() and print("constant string") that print out * the value of a variable or a string. *****/ #ifdef Mac #include #endif #ifndef MAC_UI #include #include #else #include "UX_StdDefs.h" #endif /* Constantes définissant la taille des différents tableaux*/ #define MAX_PARAM 10 /* Mit jeder Tabelle wird die Anzahl der gespeicherten Elemente gesichert. So befindet sich das letzte Element am Index Anzahl - 1. */ #ifndef CALCULS /* Type pour le stockage de la liste d'instructions qui vont éxécuter les calculs. On a : pointeur de fonction valeur constante type flottant pour les calculs index pour accès dans liste de variable ou saut à une instruction Type pour stocker le "code éxécutable". Chaqie élément peut être un pointeur de fonction, un idex ou une valeur type point flottant. */ typedef union { double (*cmd)(void); unsigned int idx; #ifndef ARG_DOUBLE float dataf; #endif } Commande; // Buffer intermédiaire pour chargement des algorithmes avant copie dans poition définitive #define Resa Fonction = (Commande*) calloc(maxFonctions,sizeof(Commande)); #ifdef MIT_VAR /* Definitions pour l'introduction de variables dans les expressions arithmetiques et leur stockage */ typedef struct vars { double valeur; char nom[20]; } variables; #endif /* Définition des fonctions =====================*/ double nPlus(void); double nMoins(void); double nMult(void); double nDiv(void); double chs(void); /* Librairien Funktionnen : =========================*/ double nExpo(void); double nSqrt(void); double nSin(void); double nCos(void); double nTan(void); double nAsin(void); double nAcos(void); double nAtan(void); double nLog(void); double nExp(void); double nCosh(void); double nSinh(void); double nTanh(void); /* Fuer die Argumenten Stack Manipulierung : ==========================================*/ double put(void); double dup(void); double drop(void); double swap(void); /* Operateur Booleens pour les if : =================================*/ double nAnd(void); double nOr(void); double nXor(void); double nNot(void); double nLth(void); double nGth(void); double nLeth(void); double nGeth(void); double nNeq(void); double nEq(void); #ifdef MIT_IF /* Branchements if : ==================*/ double branchif(void); double branchelse(void); #endif /*Eingabeparameter spezifische Funktionnen : ================================*/ double readParam(void); #ifdef MIT_VAR /* Pour la manipulation des variables : =====================================*/ double stovar(void); double getvar(void); #endif #ifdef MIT_WHILE /* Pour les boucles while : =====================*/ double nwhile(void); //double endwhile(void); provoque intruction trap dans debugger Mac, sinon crash double endloop(void); double dowhile(void); #endif #ifdef MIT_FOR /* Les boucles for peuvent être implémentées par une boucle while avec un compteur comme variable. Cependant pour optimiser l'incrémentation ou la décrémentation de ce compteur nous introduisons deux fonctions qui modifient directement la valeur dans la table des variables sans faire une lecture modification et écriture. ==========================================================*/ double incVar(void); double decVar(void); #endif /* Fonctions diverses ==================*/ #ifdef ADD_FUNCT double printMsg(); double printVar(); #endif /* Fonctions générales ==================*/ int InitCalc(void); double Execute(void); void ExecError(void); #ifdef DEBUG void Debug(void); #endif #define CALCULS #endif