home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / libq / IIp_err.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  2.5 KB  |  132 lines

  1. # include    <pipes.h>
  2. # include    <ingres.h>
  3. # include    <aux.h>
  4. # include    <version.h>
  5. # include    "IIglobals.h"
  6. # include    <sccs.h>
  7.  
  8. SCCSID(@(#)IIp_err.c    8.1    12/31/84)
  9.  
  10.  
  11. /*
  12. **  IIp_err 
  13. **
  14. **    This routine processes an IIerror call for printout.This involves doing
  15. **    a lookup in the .../files/error? files, where ? is the thous-
  16. **    ands digit of the error number.  The associated error message
  17. **    then goes through parameter substitution and is printed.
  18. **
  19. **    In the current version, the error message is just printed.
  20. */
  21.  
  22. IIp_err(err_num, argc, argv)
  23. int        err_num;
  24. int        argc;
  25. char        **argv;
  26. {
  27.     register char    *p;
  28.     char        buf[512];
  29.     int        i;
  30.     struct iob    iob;
  31.     register char    c;
  32.     extern char    *IIerrfilen();
  33.     extern char    *IIconcatv();
  34.  
  35.     /* IIfopen the appropriate error file */
  36.     p = buf;
  37.     IIerrfilen(err_num / 1000, p);
  38.  
  39. #    ifdef xETR2
  40.     if (IIdebug > 1)
  41.         printf("IIp_err : with IIerrfilen ret \"%s\"\n", p);
  42. #    endif
  43.  
  44.     if (IIfopen(p, &iob) < 0)
  45.         return (0);
  46.  
  47.     /* read in the code and check for correct */
  48.     for (;;)
  49.     {
  50.         p = buf;
  51.         while ((c = IIgetc(&iob)) != '\t')
  52.         {
  53.             if (c <= 0)
  54.             {
  55.                 if (IIclose(&iob) < 0)
  56.                     IIsyserr("IIp_err: bad close 1");
  57.                 return (0);
  58.             }
  59.             *p++ = c;
  60.         }
  61.         *p = 0;
  62.         if (IIatoi(buf, &i))
  63.             IIsyserr("IIp_err: bad error file %d\n%s",
  64.                 err_num, buf);
  65.         if (i != err_num)
  66.         {
  67.             while ((c = IIgetc(&iob)) != ERRDELIM)
  68.                 if (c <= 0)
  69.                     IIsyserr("IIp_err: format err %d", err_num);
  70.             IIgetc(&iob);    /* throw out the newline */
  71.             continue;
  72.         }
  73.  
  74.         /* got the correct line, print it doing parameter substitution */
  75.         printf("%d: ", err_num);
  76.         for (;;)
  77.         {
  78.             c = IIgetc(&iob);
  79.             if (c <= 0 || c == ERRDELIM)
  80.             {
  81.                 printf("\n");
  82.                  if (IIclose(&iob) < 0)
  83.                     IIsyserr("IIp_err: bad close 2");
  84.                 return (1);
  85.             }
  86.             if (c == '%')
  87.             {
  88.                 c = IIgetc(&iob);
  89.                 for (p = argv[c - '0']; c = *p; p++)
  90.                 {
  91.                     if (c < 040 || c >= 0177)
  92.                         printf("\\%o", c);
  93.                     else
  94.                         putchar(c);
  95.                 }
  96.                 continue;
  97.             }
  98.             putchar(c);
  99.         }
  100.     }
  101. }
  102.  
  103. /*
  104. ** IIerrfilen -- Returns the pathname where the error file can be found
  105. **    into "buf".
  106. **
  107. **    It is assumed that the error number cannot be more than 999.
  108. **    Returned is concat of : IIPathname, "/files/error", VERSION (w/o mod),
  109. **    "_num".
  110. */
  111.  
  112. char *
  113. IIerrfilen(num, buf)
  114. int    num;
  115. char    *buf;
  116. {
  117.     register char    *cp;
  118.     char        ver[12];
  119.     extern char    *IIconcatv();
  120.  
  121.     IIconcatv(ver, VERSION, 0);
  122.  
  123.     /* now insert the "_X" */
  124.     cp = &ver[IIlength(ver)];
  125.     *cp++ = '_';
  126.     *cp = '\0';
  127.     IIconcatv(ver, ver, IIitos(num), 0);
  128.  
  129.  
  130.     return (IIconcatv(buf, IIPathname, "/files/error", ver, 0));
  131. }
  132.