home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 564a.lha / wasp_v1.21 / Src.LZH / Src / io.c < prev    next >
C/C++ Source or Header  |  1991-10-19  |  3KB  |  191 lines

  1. /* wasp - copyright Steven Reiz 1990, 1991
  2.  * see wasp.c for further info
  3.  * io.c, 30/5/91 - 2/6/91, 8/7/91
  4.  */
  5.  
  6. #include "wasp.h"
  7. #ifndef NOSH
  8. #include "io.sh"
  9. #endif
  10.  
  11. extern int errno;
  12.  
  13. #ifdef __STDC__
  14. cread(void *buf, int len)
  15. #else
  16. cread(buf, len)
  17. void *buf;
  18. int len;
  19. #endif
  20. {
  21.     int rr;
  22.  
  23.     if ((rr=read(infd, buf, len))!=len) {
  24.         if (rr<0)
  25.             error1(E0_FATAL, E1_IO, E2_READ, E3_ERRNO, infilename);
  26.         else
  27.             error1(E0_FATAL, E1_IO, E2_READ, E3_UNEXPEND, infilename);
  28.     }
  29. }
  30.  
  31.  
  32. #ifdef __STDC__
  33. cwrite(void *buf, int len)
  34. #else
  35. cwrite(buf, len)
  36. void *buf;
  37. int len;
  38. #endif
  39. {
  40.     if (write(outfd, buf, len)!=len)
  41.         error1(E0_FATAL, E1_IO, E2_WRITE, E3_ERRNO, outfilename);
  42. }
  43.  
  44.  
  45. #ifdef __STDC__
  46. wrl(u_long l)
  47. #else
  48. wrl(l)
  49. u_long l;
  50. #endif
  51. {
  52.     cwrite(&l, 4);
  53. }
  54.  
  55.  
  56. printe(char *s, ...)
  57. {
  58.     va_list argp;
  59.  
  60.     va_start(argp, s);
  61.     vfprintf(stderr, s, argp);
  62.     va_end(argp);
  63. }
  64.  
  65.  
  66. #ifdef __STDC__
  67. pute(char c)
  68. #else
  69. pute(c)
  70. char c;
  71. #endif
  72. {
  73.     putc(c, stderr);
  74. }
  75.  
  76.  
  77. static int co, cur, step, dir, len, last1;
  78.  
  79. init_counter(int start, int end, int instep, char *s, ...)
  80. {
  81.     va_list argp;
  82.  
  83.     va_start(argp, s);
  84.     if (start<=end)
  85.         dir=1;
  86.     else
  87.         dir= -1;
  88.     step=instep;
  89.     if (step<0)
  90.         step= -step;
  91.     cur=start;
  92.     co=1;
  93.     last1=end;
  94.     len=printe("\r       [%d..%d] ", start, end)-1;
  95.     if (s)
  96.         len+=vfprintf(stderr, s, argp);
  97.     pute('\r');
  98.     fflush(stderr);
  99.     va_end(argp);
  100. }
  101.  
  102.  
  103. #ifdef __STDC__
  104. counter(void)
  105. #else
  106. counter()
  107. #endif
  108. {
  109.     if (--co && (co!=1 || ((dir<0 && cur-step>last1) || (dir>=0 && cur+step<last1))))
  110.         return;
  111.     printe("\r%6d", cur);
  112.     co=step;
  113.     if (dir<0)
  114.         cur-=step;
  115.     else
  116.         cur+=step;
  117.     fflush(stderr);
  118. }
  119.  
  120.  
  121. erase_counter(char *s, ...)
  122. {
  123.     va_list argp;
  124.     int l1;
  125.  
  126.     va_start(argp, s);
  127.     pute('\r');
  128.     if (s)
  129.         l1=vfprintf(stderr, s, argp);
  130.     else
  131.         l1=0;
  132.     while (l1++ <len)
  133.         pute(' ');
  134.     pute(s ? '\n' : '\r');
  135.     fflush(stderr);
  136.     va_end(argp);
  137. }
  138.  
  139.  
  140. #ifdef __STDC__
  141. prin1(char *p)
  142. #else
  143. prin1(p)
  144. char *p;
  145. #endif
  146. {
  147.     if (p)
  148.         printe("%s ", p);
  149. }
  150.  
  151.  
  152. errorx(long code, ...)
  153. {
  154.     va_list argp;
  155.     char c0, c1, c2, c3;
  156.     char *p;
  157.  
  158.     va_start(argp, code);
  159.     c0=code>>24;
  160.     c1=code>>16;
  161.     c2=code>>8;
  162.     c3=code;
  163.     if (c0==E0_INTERNAL) {
  164.         printe("internal error in wasp %s, file %s, line %ld; please report to sreiz@cs.vu.nl\n",
  165.          version, va_arg(argp, char *), code&0x00ffffff);
  166.         exit(1);
  167.     }
  168.     assert(c0>E0_INTERNAL && c0<E0_NUM && c1>0 && c1<E1_NUM && c2>0
  169.      && c2<E2_NUM && c3>0 && c3<E3_NUM);
  170.     prin1(e0_s[c0].s1);
  171.     prin1(e1_s[c1]);
  172.     prin1(e2_s[c2]);
  173.     p=e0_s[c0].s2;
  174.     if (p)
  175.         printe("%s", p);
  176.     if (c3==E3_ERRNO) {
  177.         printe(" in ");
  178.         perror(va_arg(argp, char *));
  179.     } else {
  180.         p=e3_s[c3];
  181.         if (p) {
  182.             printe(": ");
  183.             vfprintf(stderr, p, argp);
  184.         }
  185.         pute('\n');
  186.     }
  187.     if (c0==E0_FATAL)
  188.         exit(1);
  189.     va_end(argp);
  190. }
  191.