home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / math / pac / work.c < prev   
Encoding:
C/C++ Source or Header  |  1994-06-05  |  4.3 KB  |  212 lines

  1. /* work.c */
  2. /**********************************************************************
  3. *    File Name     : work.c
  4. *    Function      : general pac subroutines
  5. *    Author        : Istvan Mohos, 1987
  6. ***********************************************************************/
  7.  
  8. #include "defs.h"
  9.  
  10. clear_accwin()
  11. {
  12.     static char *fid = "clear_accwin";
  13.  
  14.     _TR
  15.     mvaddstr(ACCUM,ULEFT,Sp44);
  16.     TR_
  17. }
  18.  
  19. /* pointer should sit on a null byte, as given by things like
  20.    "buf + sizeof(buf)", fill backwards with spaces
  21.    including the next null byte found. */
  22. rev_clear(ptr)
  23. char *ptr;
  24. {
  25.     register char *rp;
  26.     static char *fid = "rev_clear";
  27.  
  28.     _TR
  29.     for (rp = ptr;;)
  30.         if (*--rp == '\0') {
  31.             *rp = ' ';
  32.              break;
  33.         }
  34.         else
  35.              *rp = ' ';
  36.     TR_
  37. }
  38.  
  39. clear_wline(ver, lbound, rbound, video, lines)
  40. int ver, lbound, rbound, video, lines;
  41. {
  42.     register ri, rj;
  43.     static char *fid = "clear_wline";
  44.  
  45.     _TR
  46.     if (!lines)
  47.         lines = 1;
  48.     if (video)
  49.         standout();
  50.     for (rj = ver+lines; --rj >= ver;) {
  51.         move(rj, lbound);
  52.         for (ri = rbound - lbound + 1; --ri >= 0; addch(' '));
  53.     }
  54.     if (video)
  55.         standend();
  56.     move(CY,CX);
  57.     TR_
  58. }
  59.  
  60. /* spacefills string to max: digit characters, appends '\0'; in Tokbuf.
  61.    returns -1 if string is longer than digit */
  62.  
  63. spacefill(string, digits)
  64. char *string;
  65. int digits;
  66. {
  67.     register char *reg_c;
  68.     register char r_count;
  69.     static char *fid = "spacefill";
  70.  
  71.     _TR
  72.     if ((r_count = strlen(string)) > digits) {
  73.         TR_
  74.         return(-1);
  75.     }
  76.     strcpy(Tokbuf, string);
  77.     reg_c = &Tokbuf[r_count];
  78.     while(r_count < digits ) {
  79.         *reg_c++ = ' ';
  80.         ++r_count;
  81.     }
  82.     Tokbuf[digits] = '\0';
  83.     TR_
  84.     return(0);
  85. }
  86.  
  87. addto_controlbuf(c_ptr)
  88. char *c_ptr;
  89. {
  90.     static char *fid = "addto_controlbuf";
  91.  
  92.     _TR
  93.     strcat(Controlbuf, "\\\n"); /* prevent oversize input string */
  94.     strcat(Controlbuf, c_ptr);
  95.     TR_
  96. }
  97.  
  98. addto_ubuf(c_ptr)
  99. char *c_ptr;
  100. {
  101.     static char *fid = "addto_ubuf";
  102.  
  103.     _TR
  104.     strcat(Ubuf, "\\\n"); /* prevent oversize input string */
  105.     strcat(Ubuf, c_ptr);
  106.     TR_
  107. }
  108.  
  109. upcase(char_p)
  110. char *char_p;
  111. {
  112.     register char *rcp = char_p;
  113.     static char *fid = "upcase";
  114.  
  115.     _TR
  116.     do
  117.         if (isalpha(*rcp))
  118.             *rcp &= 95;
  119.     while (*rcp++ != '\0');
  120.     TR_
  121. }
  122.  
  123. pacinit()
  124. {
  125.     Format    = FORM_DFLT;
  126.     (Format == COMMA_) ? (Separator = ',') : (Separator = ' ');
  127.     Hf        = HF_DFLT;
  128.     Ibase     = IB_DFLT;
  129.     Oldib     = IB_DFLT;
  130.     Obase     = OB_DFLT;
  131.     Oldob     = OB_DFLT;
  132.     Lastob    = OB_DFLT;
  133.     Show      = SHOW_DFLT;
  134.     Justify   = JUS_DFLT;
  135.     Precision = PREC_DFLT;
  136.     Stack     = STACK_DFLT;
  137.     Staybase  = DISA;
  138.     Autoconv  = DISA;
  139. }
  140.  
  141. int
  142. round(nump, endp)
  143. char *nump, *endp;
  144. {
  145.     register char *fr, *to, *dp;
  146.     int done = 0;
  147.     int dpfound = 0;
  148.  
  149.     for (fr = nump, dp = endp; --dp >= fr;)
  150.         if (*dp == '.') {
  151.             dpfound = 1;
  152.             break;
  153.         }
  154.  
  155.     if (!dpfound)
  156.         return(-1);
  157.  
  158.     fr = endp - 1;
  159.     if (*fr < 53) { /* last digit less than 5 */
  160.         *fr = '\0';
  161.         return(0);
  162.     }
  163.  
  164.     /* write new values in freed-up byte at right */
  165.     for (to = endp - 1, done = 0; --fr > dp;) {
  166.         if (*fr == '9')
  167.             *to-- = '0';
  168.         else {
  169.             *to-- = *fr + 1;
  170.             done = 1;
  171.             break;
  172.         }
  173.     }
  174.  
  175.     if (done) { /* left-shift new values back 1 byte */
  176.         for (dp = endp -1; to <= dp;)
  177.             *fr++  = *++to;
  178.         *dp = '\0';
  179.         return(0);
  180.     }
  181.  
  182.     *to-- = *fr; /* new decimal point */
  183.  
  184.     for (dp = nump, done = 0; --fr >= dp;) {
  185.         if (*fr == '9')
  186.             *to-- = '0';
  187.         else {
  188.             if (*fr > 47 && *fr < 57) {
  189.                 *to-- = *fr + 1;
  190.                 done = 1;
  191.                 break;
  192.             }
  193.             else {        /* fr got to the left of the first digit */
  194.                 *to = '1';
  195.                 return(1);
  196.             }
  197.         }
  198.     }
  199.  
  200.     if (done) { /* left-shift new values back 1 byte */
  201.         for (++to, dp = endp -1; to <= dp;)
  202.             *fr++  = *to++;
  203.         *dp = '\0';
  204.         return(0);
  205.     }
  206.  
  207.     *dp = '1';
  208.     return(1);
  209.  
  210. }
  211.  
  212.