Listing 3

double cvd(s)
char *s;
/*  Function to read an 8 yte string*/
/*  representing a BASIC floatwritten*/
/*  by MKDS. Entry = string*/
/*  Return = value*/
   {
   double sum;
   
   double t, tt, div;
   int cnt, exp, pos, n, negative;
     
     sum = 0;
     exp = s[7];                /*exponent*/
     negative = s[6] & 0x80;    /*Save signbit*/
     s[6] = s[6] & 0x7f;        /*Mask signbit*/
     exp -= 0x81;               /*Subtract offset*/

/*    printf("\nExp:%d T:%4.4f",exp, t); */
     sum += t;
     cnt = 7;
     div -- 128.0;
     pos = 8;
     while (cnt--)
         {
         n=s [pos];
         tt=t/div;
/*         printf("\n&d : n  4.4f t-t4.4f tt=%d.df",pos,n,t,tt);*/
         sum += tt*n;
         div *= 256;
         --pos;
         }
     if (negative)
          sum = -sum;
     return(sum);
     }

double svs(s)
char *s;
/*  Function to read a 4 byte string */
/*  representing a BASIC float written */
/*  by MKSS. Entry = string */
/*  Return = value */
   {
   double sum;
   double t, tt, div;
   int cnt, exp, pos, n, negative;
     
     sum = 0;
     exp = s[3];               /*Exponent */
     negative = s[2] & 0x80;     /*Save signbit */
     s[6] = s[2] & 0x7f;         /*Mask */
     exp -= 0x81;              /*Subtract offset */
     t = pow(2.0, (double) exp);
/*    printf("\nExp:% t :%4.4f", exp, t); */
     sum += t;
     cnt = 3;
     div = 128.0;
     pos = 2;
     while (cnt--)
         {
         n = s [pos];
         tt = t / div;
/*         printf("/\n%d : n=%4.4f t=%4.4f tt-%4.4f",pos,n,t,tt);*/
         sum += tt * n;
         div /= 128;
         --pos;
         }
     if (negative)
       sum = -sum;
       return(sum);
       }