/*****************************************
 *                                        *
 *  ACALC V1.3 PIRATE VERSION !         *
 *                                    *
 *         by CYBORG                *
 *      Made on  6/4/91           *
 *       Compiled with          *
 *      Lattice C v5.02       *
 *      Compile it with     * 
 *       LC -Lm  acalc    *  
 *                      *
 **********************

 *************************************************************
 * VARIABLES NAMES :                                         *
 *                                                           *
 * a            = Flag to mark a number + an operation       *
 * bak[]        = A save of the last digits pressed          *
 * c            = Input Character in ASCII                   *
 * car          = Input from program character               *
 * d            = Flag to mark if decimal                    *
 * donnees(2)   = The program                                *
 * dummy        = Only important for the compiler...         *
 * ff - fi      = Fractional and integer part                *
 * flags[]      = The programmable flags                     *
 * handle       = Handle of RAW:                             *
 * hfile        = Handle of a file                           *
 * imp          = Flag to mark on a program a direct input   *
 * inputp       = Input program name character               *
 * lab          = Label name                                 *
 * lastprn      = Prn backup for the Go function             *
 * ligne        = Only important for to write a thing        *
 * m            = Counter of various for cicles              *
 * mem[]        = Memory (variables)                         *
 * n            = Digit on number position                   *
 * nbtrans      = Octects write                              *
 * newprn       = NewPrn for the Go function                 *
 * nombreX      = Only important on file opening             *
 * nomfich      = Name of the program                        *
 * oca          = Input program reading in modify function   *
 * prg          = Flag to mark if a program is running       *
 * prn          = Digit on program position                  *
 * prx          = Flag to mark if start program :            *
 *                0 if not   1 if yes   2 if with argument   *
 * reach        = Flag to mark if label found in Go function *
 * retu         = Flag to mark RETURN pressed                *
 * q            = Input Number                               *
 * s            = Flag to mark the negativ sign              *
 * stack[]      = THE STACK !!!                              *
 * var          = Variable name                              *
 * vtest        = Test type                                  *
 *************************************************************/


#include <stdio.h>
#include <math.h>

#define c *caract
#define inputp *progi
#define var *ivar
#define car *icar
#define oca *ocar
#define lab *ilab
#define vtest *ivtest

short q,a=0,d=0,retu=0;
double stack[10],n=-1;

void main(argc, argv)
int argc;
char *argv[];
{
short dummy=0,nombre,handle,hfile,nombre2,nombre3;
short prg=0,prn=0,prx=0,lastprn,reach,newprn,bak[15],m;
char caract[81],ligne[256],progi[1],ivar[1],icar[1],ocar[1];
char ilab[1],ivtest[1];
short nbtrans,imp=0,flags[50];
double mem[50],ff,fi;
short donnees[500];
short donnees2[500];
char nomfich[81];
handle =  open("RAW:100/100/350/39/    * ACALC 1.3 PIRATE VERSION *      ",2,dummy);
if (handle != -1) {
if (argc == 2)
   prg = 3;
sprintf(ligne,"\n\n>>>");
write(handle,ligne,strlen(ligne));
do {
   if (prg!=3)
   {
      if (prg==1)
      {
         if (imp != 1)
         {
            prn++;
            c = donnees2[prn];
            if (c==';')
            {
               prg = 0;
               prn = 0;
               c='Q';
            }
         } 
         else
         {
            nombre = read(handle,caract,1);
         }
      }
      else
         nombre = read(handle,caract,1);
   }
   else
      c = 'X';
   n+=1;
   if (c >= '0' && c <= '9')
   {   
      q=c-48;
      for(m=10;m>0;m--)
      bak[m]=bak[m-1];
      bak[0]=q;
      if(prg!=1 || imp!=0)
      {
      sprintf(ligne,"%d",q); 
      write(handle,ligne,strlen(ligne));
      }
      if (a==1)
         up();
      if (stack[0]<0)
      {
         if (d==1)
            stack[0]=stack[0]-1/pow(10.0000,n)*q;
         else
            stack[0]=stack[0]*10-q;
      }
      else
      {
         if (d==1)
            stack[0]=stack[0]+1/pow(10.0000,n)*q;
         else
            stack[0]=stack[0]*10+q;
      }
   }
   switch(c)
   {
   case '.': d=1;   n=0;   
      sprintf(ligne,"."); 
      write(handle,ligne,strlen(ligne));   
      break;
   case 13 : /* RETURN */
      if (imp!=1)
       {
         if(prg!=1)
         {
   	      sprintf(ligne,"\n  <ENTER>\n %.5f\n>>>",stack[0]); 
              write(handle,ligne,strlen(ligne));   
         up();
         retu=1;
         }
         else
         {
         up();
         retu=1;
         }
      }
      else
      {
         mem[var-96]=stack[0];   
         imp = 0;
         a=1;
         if(prg!=1)
         {
         sprintf(ligne,"\n>>>"); 
         write(handle,ligne,strlen(ligne));
         }
      }
      break;
   case ' ': if (imp!=1)
       {
         if(prg!=1)
         {
   sprintf(ligne,"\n  <ENTER>\n %.5f\n>>>",stack[0]); 
              write(handle,ligne,strlen(ligne));   
         up();
         retu=1;
         }
         else
         {
         up();
         retu=1;
         }
      }
      else
      {
         mem[var-96]=stack[0];   
         imp = 0;
         a=1;
         if(prg!=1)
         {
         sprintf(ligne,"\n>>>"); 
         write(handle,ligne,strlen(ligne));
         }
      }
      break;
   case 8 : /* BACK */ 
      n--;
      if(d==1)
      {
         if (stack[0]==0)
         {
         sprintf(ligne,"\n\n%.5f\n>>>",stack[0]); 
            write(handle,ligne,strlen(ligne));
            break;
         }
         else if(stack[0]>0)
      stack[0]=stack[0]-1/pow(10.0000,n)*bak[0];
         else
      stack[0]=stack[0]+1/pow(10.0000,n)*bak[0];
      }
      else
      {
         if (stack[0]==0)
            break;
         else if(stack[0]>0)
            stack[0]=(stack[0]-bak[0])/10;
         else
            stack[0]=(stack[0]+bak[0])/10;
      }
      sprintf(ligne,"\b \b",stack[0]); 
      write(handle,ligne,strlen(ligne));
      n--;
      for(m=0;m<10;m++)
      bak[m]=bak[m+1];
      break;
   case '_': stack[0]=-stack[0];
      n--;
      if(prg!=1 || imp !=0)
      {
      if(d==1)
      {
         sprintf(ligne,"\n\n\nTHEN >",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         sprintf(ligne,"\n\n\n>>>%.0f",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      }   
      break;
   case 'I': up(); 
      if (prg != 1)
      {
         sprintf(ligne,"\nvar ? ",stack[0]); 
         write(handle,ligne,strlen(ligne));
         nombre3 = read(handle,ivar,1);
         sprintf(ligne,"\n\n\n%s   ? ",ivar); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         prn++;
         var = donnees2[prn];
         sprintf(ligne,"\n%.1s  ? ",ivar); 
         write(handle,ligne,strlen(ligne));
      }
      imp=1;   break;
   case '&': if(prg==1)
         nombre = read(handle,caract,1);
      break;
   case 'W': if(prg==1)
      {
      sprintf(ligne,"\n"); 
      write(handle,ligne,strlen(ligne));
      do {
         prn++;
         car=donnees2[prn];
         if(car!=')')
         {
            sprintf(ligne,"%.1s",icar); 
            write(handle,ligne,strlen(ligne));
         }
      } while(car != ')');
      car='\0';
      }
      break;
   case 'K':
      if(prg==1){
      prn++;
      vtest = donnees2[prn];
      if(vtest=='0')
      {
         prn++;
         vtest = donnees2[prn];
         if(vtest=='=')
         {
            if(stack[0]!=0)
            {
            prn++;
            prn++;
            }   
         }
         if(vtest=='<')
         {
            if(stack[0]>=0)
            {
            prn++;
            prn++;
            }   
         }
         if(vtest=='>')
         {
            if(stack[0]<=0)
            {
            prn++;
            prn++;
            }   
         }
         if(vtest=='!')
         {
            if(stack[0]==0)
            {
            prn++;
            prn++;
            }   
         }
      }
      if(vtest=='y')
      {
         prn++;
         vtest = donnees2[prn];
         if(vtest=='=')
         {
            if(stack[0]!=stack[1])
            {
            prn++;
            prn++;
            }   
         }
         if(vtest=='<')
         {
            if(stack[0]>=stack[1])
            {
               prn++;
               prn++;
            }   
         }
         if(vtest=='>')
         {
            if(stack[0]<=stack[1])
            {
               prn++;
               prn++;
            }   
         }
         if(vtest=='!')
         {
            if(stack[0]==stack[1])
            {
               prn++;
               prn++;
            }      
         }
      }
      }
      break;
   case 'Q':
      prg=0;
      prn=0;
      sprintf(ligne,"\n>>>"); 
      write(handle,ligne,strlen(ligne));
      break;
   case 'G':
      if (prg==1)
      {
         prn++;
         lastprn=prn;
         lab = donnees2[prn];
         prn=0;
         do {
            car=donnees2[prn];
            if(car=='L')
            {
               prn++;
               car=donnees2[prn];
               if (car==lab)
               {
                  reach=1;
                  newprn=prn;
               }
            }
            prn++;
         } while (donnees2[prn]!=';');
         if(reach==1)
            prn=newprn;
         else
            prn=lastprn;
      }
      break;
   case 'R':
      if(retu!=1)
         up();
      if (prg != 1)
      {
         sprintf(ligne,"\nvar ? \n",stack[0]); 
         write(handle,ligne,strlen(ligne));
         nombre3 = read(handle,ivar,1);
         sprintf(ligne,"%s\n %s = ",ivar,ivar); 
         write(handle,ligne,strlen(ligne));
         stack[0]=mem[var-96];
         sprintf(ligne,"%.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         prn++;
         var = donnees2[prn];
         stack[0]=mem[var-96];
      }
      a=1;
      break;
   case 'M': if (prg != 1)
      {
         sprintf(ligne,"\nvar ? \n",stack[0]); 
         write(handle,ligne,strlen(ligne));
         nombre3 = read(handle,ivar,1);
         sprintf(ligne,"%s\n %s = ",ivar,ivar); 
         write(handle,ligne,strlen(ligne));
         mem[var-96]=stack[0];
         sprintf(ligne,"%.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         prn++;
         var = donnees2[prn];
         mem[var-96]=stack[0];
      }
      a=1;
      break;
   case 'v': if (prg!=1)
      {
      sprintf(ligne,"\n X=%.6f\n Y=%.6f\n>>>",stack[0],stack[1]);
      write(handle,ligne,strlen(ligne));
      }
      else
      {
      sprintf(ligne,"\n X=%.4f  Y=%.4f",stack[0],stack[1]);
      write(handle,ligne,strlen(ligne));      
      }
      break;
      case 'V': if (prg!=1)
      {
         sprintf(ligne,"\n\n X=%.6f\n>>>",stack[0],stack[1]);
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         sprintf(ligne,"\n  X=%.6f ",stack[0],stack[1]);
         write(handle,ligne,strlen(ligne));      
      }
      break;
   case 'A': if(prg==1) {
         prn++;
         var = donnees2[prn];
         flags[var-96]=1;
      }
      break;
   case 'D': if(prg==1) {
         prn++;
         var = donnees2[prn];
         flags[var-96]=0;
      }
      break;
   case 'F': if(prg==1) {
         up();
         prn++;
         var = donnees2[prn];
         if(flags[var-96]!=1)
            prn+=2;
         }
      break;
   case 'f': if (prg!=1)
      { 
   sprintf(ligne,"\nFractional part of %.3f",stack[0]); 
   write(handle,ligne,strlen(ligne));
      }
      ff=modf(stack[0],&fi);
      stack[0]=ff;   
      if (prg!=1)
      {
      sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
      write(handle,ligne,strlen(ligne));
      }
      demi();   break;
   case 'i': if(prg!=1)
      {
   sprintf(ligne,"\nInteger part of %.3f",stack[0]); 
   write(handle,ligne,strlen(ligne));
      }
      ff=modf(stack[0],&fi);
      stack[0]=fi;   
      if(prg!=1)
      {
      sprintf(ligne,"\n = %.1f\n>>>",stack[0]); 
      write(handle,ligne,strlen(ligne));
      }
      demi();   break;
   case 'd': down();
      break;
   case 'X': up();
      if(prg==0)
      {
         sprintf(ligne,"\n\n\nPROGRAM NAME ?"); 
         write(handle,ligne,strlen(ligne));
         prn=0;
         do {
            nombre2 = read(handle,progi,1);
            if (inputp!=13)
            {
               if(inputp!=8)
               {
            sprintf(ligne,"%.1s",progi); 
            write(handle,ligne,strlen(ligne));
               nomfich[prn] = inputp;
               prn++;
               }
               else
               {
                  if(prn!=0)
                  {
         prn--;
         nomfich[prn] = '\0';
         sprintf(ligne,"\b \b"); 
         write(handle,ligne,strlen(ligne));
                  }
               }
            }
         } while(inputp != 13);
	 nomfich[prn] = '\0';
         hfile = open(nomfich, 0, dummy);
         if(hfile != -1)
         {
            nbtrans = read(hfile, donnees2, sizeof(donnees));
            close (hfile);
	    prx=1;
         }
         else
         {
            sprintf(ligne,"\nError : can't open %s !\n\n>>>",nomfich);
            write(handle,ligne,strlen(ligne));
	    down();
            prg=0;
            break;
         }
         sprintf(ligne,"\n\n\nPROGRAM %s", nomfich);
         write(handle,ligne,strlen(ligne));
      }
      else if(prg==1)
      {
         newprn=0;
         do {
            prn++;
            car=donnees2[prn];
            if (car!=')')
            {
               nomfich[newprn] = car;
               newprn++;
            }
            else
               nomfich[newprn]='\0';
         } while(car != ')');
         hfile = open(nomfich, 0, dummy);
         if(hfile != -1)
         {
         nbtrans = read(hfile, donnees2, sizeof(donnees));
         close (hfile);
	 prx=1;
         }
         else
         {
         sprintf(ligne,"\nError : can't open %s !",nomfich);
         write(handle,ligne,strlen(ligne));
	 down();
         }
      }
      else
      {
         hfile = open(argv[1], 0, dummy);
         if(hfile != -1)
         {
         nbtrans = read(hfile, donnees2, sizeof(donnees));
         close (hfile);
	 sprintf(ligne,"\n\n\nPROGRAM %s", argv[1]);
         write(handle,ligne,strlen(ligne));
	 prx=2;
	 }
         else
         {
         sprintf(ligne,"\nError : can't open %s !\n\n>>>",argv[1]);
         write(handle,ligne,strlen(ligne));
	 down();
	 prg=0;
	 break;
         }
      }
      prg=1;
      prn=0;
      break;
   case 'Y': if(prx==1) 
      {
        sprintf(ligne,"\n\n\nPROGRAM %s", nomfich); 
        write(handle,ligne,strlen(ligne));
      }
      else if(prx==2)
      {
	sprintf(ligne,"\n\n\nPROGRAM %s", argv[1]); 
        write(handle,ligne,strlen(ligne));
      }
      else
	break;
      prg=1;
      prn=0;
      break;
   case 'O': prn = 0;
      sprintf(ligne,"\n\n\nPROGRAM NAME ?"); 
      write(handle,ligne,strlen(ligne));
      do {
         nombre2 = read(handle,progi,1);
         if (inputp!=13)
         {
            if(inputp!=8)
            {
         sprintf(ligne,"%.1s",progi); 
         write(handle,ligne,strlen(ligne));
         nomfich[prn] = inputp;
         prn++;
            }
            else
            {
               if(prn!=0)
               {
         prn--;
         nomfich[prn] = '\0';
         sprintf(ligne,"\b \b"); 
         write(handle,ligne,strlen(ligne));
               }
            }
         }
         else
            nomfich[prn]='\0';
      } while(inputp != 13);
      hfile = open(nomfich, 0, dummy);
      if(hfile != -1)
      {
      nbtrans = read(hfile, donnees2, sizeof(donnees));
      close(hfile);
      }
      else
      {
         sprintf(ligne,"\nError : can't open %s !\n\n>>>", nomfich);   
         write(handle,ligne,strlen(ligne));
         down();
         close(hfile);
         prg=0;
         break;
      }
      sprintf(ligne,"\nMOD>>>");
      write(handle,ligne,strlen(ligne));
      for(prn=0;donnees2[prn]!=';';prn++)
      {
         oca=donnees2[prn];
         sprintf(ligne,"%s", ocar);
         write(handle,ligne,strlen(ligne));
      }
      prn--;
      do {
         nombre2 = read(handle,progi,1);
         if(inputp!=8)
         {
            sprintf(ligne,"%.1s",progi); 
            write(handle,ligne,strlen(ligne));
            donnees2[prn+1] = inputp;
            prn++;
         }
         else
         {
            if(prn!=0)
            {
      prn--;
      donnees2[prn+1] = '\0';
      sprintf(ligne,"\b \b"); 
      write(handle,ligne,strlen(ligne));
            }
         }
      } while(inputp != 13);
      donnees2[prn]=';';
      sprintf(ligne,"\nWould U like to save it ?"); 
      write(handle,ligne,strlen(ligne));
      do {
         nombre2 = read(handle,progi,1);
      } while(inputp != 'y' && inputp != 'n');
      if (inputp=='y')
      {
         hfile = creat(nomfich, dummy);
         if(hfile == -1)
         {
         sprintf(ligne,"\nError on %s modification !\n\n>>>", nomfich);   
         write(handle,ligne,strlen(ligne));   
         close(hfile);
         break;
         }
         nbtrans = write(hfile, donnees2, prn*2+2);
         close(hfile);
      }
      sprintf(ligne,"\n\n\n>>>"); 
      write(handle,ligne,strlen(ligne));
      break;      
   case 'P': prn = 0;
      sprintf(ligne,"\n\n\nPROGRAM NAME ?"); 
      write(handle,ligne,strlen(ligne));
      do {
         nombre2 = read(handle,progi,1);
         if (inputp!=13)
         {
            if(inputp!=8)
            {
         sprintf(ligne,"%.1s",progi); 
         write(handle,ligne,strlen(ligne));
         nomfich[prn] = inputp;
         prn++;
         }
         else
            {
               if(prn!=0)
               {
         prn--;
         nomfich[prn] = '\0';
         sprintf(ligne,"\b \b"); 
         write(handle,ligne,strlen(ligne));
               }
            }
         }
         else
            nomfich[prn]='\0';
      } while(inputp != 13);
      sprintf(ligne,"\nPRG>>>"); 
      write(handle,ligne,strlen(ligne));
      prn = 0;
      do {
         nombre2 = read(handle,progi,1);
         if(inputp!=8)
         {
            sprintf(ligne,"%.1s",progi); 
            write(handle,ligne,strlen(ligne));
            donnees[prn+1] = inputp;
            prn++;
         }
         else
         {
            if(prn!=0)
            {
      prn--;
      donnees[prn+1] = '\0';
      sprintf(ligne,"\b \b"); 
      write(handle,ligne,strlen(ligne));
            }
         }
      } while(inputp != 13);
      donnees[prn]=';';
      hfile = creat(nomfich, dummy);
      if(hfile == -1)
      {
         sprintf(ligne,"\nError on %s creation !\n\n>>>", nomfich);   
         write(handle,ligne,strlen(ligne));
	 close(hfile);
         break;
      }
      nbtrans = write(hfile, donnees, prn*2+2);
      close(hfile);
      sprintf(ligne,"\n\n\n>>>"); 
      write(handle,ligne,strlen(ligne));
      break;
   case '+': if (prg!=1)
      {
         sprintf(ligne,"\n %.3f + %.3f",stack[1],stack[0]); 
         write(handle,ligne,strlen(ligne));
         stack[0]=stack[1]+stack[0];   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=stack[1]+stack[0];
      }
      semi();   break;
         
   case '-': if (prg!=1)
      {
         sprintf(ligne,"\n %.3f - %.3f",stack[1],stack[0]); 
         write(handle,ligne,strlen(ligne));
         stack[0]=stack[1]-stack[0];   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=stack[1]-stack[0];
      }
      semi();   break;
   case '*': if (prg!=1)
      {
         sprintf(ligne,"\n %.3f * %.3f",stack[1],stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=stack[1]*stack[0];   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=stack[1]*stack[0];
      }
      semi();   break;
   case '/': if(prg!=1)
      {
         if(stack[0]!=0)
         {
         sprintf(ligne,"\n %.3f / %.3f",stack[1],stack[0]); 
         write(handle,ligne,strlen(ligne));
         stack[0]=stack[1]/stack[0];   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
         semi();
         }
         else
         {
      sprintf(ligne,"\nI Can't divide by 0 !\n\n>>>");
      write(handle,ligne,strlen(ligne));
      down();
      down();
         }
      }
      else
      {
         if(stack[0]!=0)
         {
            stack[0]=stack[1]/stack[0];
            semi();
         }
         else
         {
   sprintf(ligne,"\nI Can't divide by 0 !\nProgram interrupted...\n>>>");
         write(handle,ligne,strlen(ligne));
         down();
	 down();
	 prg=0;
         prn=0;
         }
      }
      break;
   case 'p': if (prg!=1)
      {
         sprintf(ligne,"\n %.3f power %.3f",stack[1],stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=pow(stack[1],stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=pow(stack[1],stack[0]);
      }
      semi();   break;
   case 'r': if (prg!=1)
      {
      sprintf(ligne,"\n %.3fth radical of %.3f",stack[0],stack[1]); 
      write(handle,ligne,strlen(ligne)); 
      stack[0]=pow(stack[1],(1/stack[0]));   
      sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
      write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=pow(stack[1],(1/stack[0]));   
      }
      semi(); break;
   case 'q': if (prg!=1)
      {
         sprintf(ligne,"\n Square root of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=sqrt(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=sqrt(stack[0]);
      }
      demi();   break;
   case 's': if (prg!=1)
      {
         sprintf(ligne,"\n Sine of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=sin(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=sin(stack[0]);
      }
      demi();   break;
   case 'S': if (prg!=1)
      {
         sprintf(ligne,"\n Arc-sine of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne));    
         stack[0]=asin(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
         else
         {
         stack[0]=asin(stack[0]);
         }
         demi();   break;
      case 'h': if (prg!=1)
      {
         sprintf(ligne,"\n Hyp-sine of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=sinh(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=sinh(stack[0]);   
      }
      demi();   break;
   case 'c': if (prg!=1)
      {
         sprintf(ligne,"\n Cosine of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=cos(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=cos(stack[0]);   
      }
      demi();   break;
   case 'C': if (prg!=1)
      {
         sprintf(ligne,"\n Arc-cosine of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=acos(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=acos(stack[0]);   
      }
      demi();   break;
   case 'j': if (prg!=1)
      {
         sprintf(ligne,"\n Hyp-cosine of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=cosh(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=cosh(stack[0]);
      }
      demi(); break;
   case 't': if (prg!=1)
      {
         sprintf(ligne,"\n Tangent of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=tan(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=tan(stack[0]);
      }
      demi();   break;
      case 'T': if (prg!=1)
      {
         sprintf(ligne,"\n Arc-tangent of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=atan(stack[0]);    
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=atan(stack[0]); 
      }
      demi();   break;
   case 'k': if (prg!=1)
      {
         sprintf(ligne,"\n Hyp-tangent of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=tanh(stack[0]);   
         sprintf(ligne,"\n%.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=tanh(stack[0]);   
      }
      demi();   break;
      case 'Z': if (prg!=1)
      {
         sprintf(ligne,"\n Cotangent of %.3f",stack[0]); 
         write(handle,ligne,strlen(ligne)); 
         stack[0]=cot(stack[0]);   
         sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
         write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=cot(stack[0]);   
      }
      demi();   break;
   case 'z': if (prg!=1)
      {
      sprintf(ligne,"\n %.3f Arc-tangent of %.3f",stack[1],stack[0]); 
      write(handle,ligne,strlen(ligne)); 
      stack[0]=atan2(stack[1],stack[0]);
      sprintf(ligne,"\n = %.5f\n>>>",stack[0]); 
      write(handle,ligne,strlen(ligne));
      }
      else
      {
         stack[0]=atan2(stack[1],stack[0]);
      }
      semi();   break;
   }
} while(c != '\033');
close(handle);
}
}

up()
{
   int m;
   a=0;
   for(m=10;m>0;m--)
   stack[m]=stack[m-1];
   stack[0]=0;
   n=0;
   d=0;
   retu=0;
   return 0;
}

down()
{
   int m;
   for(m=0;m<10;m++)
   stack[m]=stack[m+1];
   d=0;
   n=0;
   retu=0;
   return 0;
}   
   
semi()
{
   int m;
   for(m=1;m<10;m++)
   stack[m]=stack[m+1];
   a=1;
   d=0;
   n=0;
   retu=0;
   return 0;
}

demi()
{
   a=1;
   d=0;
   n=0;
   retu=0;
   return 0;
}


 




