home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / DDJ0190.ZIP / DOUGLAS.LST next >
File List  |  1989-12-26  |  3KB  |  153 lines

  1. _ERROR MESSAGE MANAGEMENT_
  2. by Rohan Douglas
  3.  
  4. [LISTING ONE]
  5.  
  6.  
  7.   /* Include file for macros replacement of error function. */
  8.  
  9.   #define error(m)  _error(__FILE__, __LINE__)
  10.  
  11.   extern  void      _error(char *, int);
  12.  
  13.  
  14. [LISTING TWO]
  15.  
  16. /* Definition of error function.  */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include "error.h"
  22.  
  23. static int get_err_msg(char *, char *, char *);
  24.  
  25. void
  26. _error(char *fname, int lno)
  27. {
  28.     char *period;  /* Pointer for file extension */
  29.     char lstr[6];  /* Temp string for file line */
  30.     char key[15];  /* Message key (file:line) */
  31.     char msg[75];  /* Error message from file */
  32.  
  33.     /* Strip out file extension from file name */
  34.     if ((period = strchr(fname, '.')) != NULL)
  35.         *period = '\0';
  36.  
  37.     /* Create file:linenumber key */
  38.     sprintf(key, "%s:%s", fname, itoa(lno, lstr,
  39.        10));
  40.  
  41.     /* Look up error message from file */
  42.     if (!get_err_msg(fname, key, msg))
  43.         /* Not found in file, just print out
  44.          * file:lineno.
  45.          */
  46.         printf("Error [%s]", key);
  47.     else 
  48.         printf("%s [%s]", msg, key);
  49.     return;
  50. } /* error() */
  51.  
  52. static int
  53. get_err_msg(char *fname, char *key, char *msg)
  54. {
  55.     FILE *fp;      /* Error message file pointer */
  56.     char msg_key[14];/* Key for current line */
  57.  
  58.     /* Open error file */
  59.     if (!(fp = fopen("error.dat", "r")))
  60.         return FALSE;
  61.  
  62.     /* Scan file for message */
  63.     while (!feof(fp)) {
  64.         fscanf(fp, " %s ", msg_key);
  65.         fgets(msg, 75, fp);
  66.         if (!strcmpi(key, msg_key))
  67.             break;
  68.     }
  69.     fclose(fp);
  70.  
  71.     /* Return false if message not found */
  72.     if (feof(fp))
  73.         return FALSE;
  74.  
  75.     /* Remove CR from message string */
  76.     msg[strlen(msg)-1] = '\0';
  77.     return TRUE;
  78. } /* get_err_msg() */
  79.  
  80.  
  81. [LISTING THREE]
  82.  
  83.  
  84. BEGIN {
  85.     FS = "\"";
  86.     printf("") > "error.txt";
  87.     printf("") > "error.dat";
  88. }
  89. / *error *\(/ {
  90.     printf("%s :\n", $2) >> "error.txt";
  91.     ind = substr(FILENAME, 0, index(FILENAME, ".")
  92.       - 1);
  93.     printf("%s:%d\t%s\n", ind, NR, $2) >>
  94.       "error.dat";
  95.     getline();
  96.     i = index($0, "/* ");
  97.     if (i) i++;
  98.     while (i) {
  99.         printf("\t%s\n", substr($0, i + 2)) >>
  100.           "error.txt";
  101.         getline();
  102.         if (index($0, "*/")) break;
  103.         i = index($0, "* ");
  104.     }
  105. }
  106.  
  107.  
  108. Figure 1: Sample source file with embedded error message and
  109. description. 
  110.  
  111.  
  112. #include <stdio.h> 
  113. #include "error.h" 
  114.  
  115. main(int argc, char *argv[]) 
  116.     if (argc == 1) 
  117.         error("Missing parameters"); 
  118.         /*  No parameters have been passed 
  119.          * to this test program. This error message 
  120.          *  will be displayed as an example if no 
  121.          *  parameters are passed to this test 
  122.          *  program. 
  123.          */
  124.     exit(0);
  125. }
  126.  
  127.  
  128.  
  129. Figure 2: The user manual list resulting from Figure 1.
  130.  
  131. Missing parameters : 
  132.      No parameters have been passed to 
  133.      this test program. This error message 
  134.      will be displayed as an example if no 
  135.      parameters are passed to this test 
  136.      program. 
  137.  
  138.  
  139.  
  140. Figure 3: The message database resulting from Figure 1.
  141.  
  142.  
  143. test:8  Missing parameters
  144.  
  145.  
  146. Figure 4: The results of the sample program.
  147.  
  148.  
  149. Missing parameters [test:8]
  150.  
  151.  
  152.