home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / PAX20.ZIP / WARN.C < prev    next >
C/C++ Source or Header  |  1990-11-12  |  5KB  |  217 lines

  1. /* $Source: /u/mark/src/pax/RCS/warn.c,v $
  2.  *
  3.  * $Revision: 2.0.0.3 $
  4.  *
  5.  * warn.c - miscellaneous user warning routines
  6.  *
  7.  * DESCRIPTION
  8.  *
  9.  *    These routines provide the user with various forms of warning
  10.  *    and informational messages.
  11.  *
  12.  * AUTHOR
  13.  *
  14.  *     Mark H. Colburn, Open Systems Architects, Inc. (mark@minnetech.mn.org)
  15.  *
  16.  * COPYRIGHT
  17.  *
  18.  *    Copyright (c) 1989 Mark H. Colburn.  All rights reserved.
  19.  *
  20.  *    Redistribution and use in source and binary forms are permitted
  21.  *    provided that the above copyright notice and this paragraph are
  22.  *    duplicated in all such forms and that any documentation,
  23.  *    advertising materials, and other materials related to such
  24.  *    distribution and use acknowledge that the software was developed
  25.  *    by Mark H. Colburn.
  26.  *
  27.  *    THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  28.  *    IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  29.  *    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  30.  *
  31.  * $Log:    warn.c,v $
  32.  * Revision 2.0.0.3  89/10/13  02:36:02  mark
  33.  * Beta Test Freeze
  34.  *
  35.  */
  36.  
  37. #ifndef lint
  38. static char        *ident = "$Id: warn.c,v 2.0.0.3 89/10/13 02:36:02 mark Exp Locker: mark $";
  39. static char        *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  40. #endif /* ! lint */
  41.  
  42.  
  43. /* Headers */
  44.  
  45. #include "pax.h"
  46.  
  47.  
  48. /* Function Prototypes */
  49.  
  50. #ifdef __STDC__
  51.  
  52. static void        prsize(FILE *, OFFSET);
  53.  
  54. #else /* !__STDC__ */
  55.  
  56. static void         prsize();
  57.  
  58. #endif /* __STDC__ */
  59.  
  60.  
  61. /* warnarch - print an archive-related warning message and offset
  62.  *
  63.  * DESCRIPTION
  64.  *
  65.  *    Present the user with an error message and an archive offset at
  66.  *    which the error occured.   This can be useful for diagnosing or
  67.  *    fixing damaged archives.
  68.  *
  69.  * PARAMETERS
  70.  *
  71.  *    char     *msg    - A message string to be printed for the user.
  72.  *    OFFSET     adjust    - An adjustment which is added to the current
  73.  *              archive position to tell the user exactly where
  74.  *              the error occurred.
  75.  */
  76.  
  77. #ifdef __STDC__
  78.  
  79. void
  80. warnarch(char *msg, OFFSET adjust)
  81.  
  82. #else
  83.  
  84. void
  85. warnarch(msg, adjust)
  86.     char               *msg;
  87.     OFFSET              adjust;
  88.  
  89. #endif
  90. {
  91.     DBUG_ENTER("warnarch");
  92.     fprintf(stderr, "%s: [offset ", myname);
  93.     prsize(stderr, total - adjust);
  94.     fprintf(stderr, "]: %s\n", msg);
  95.     DBUG_VOID_RETURN;
  96. }
  97.  
  98.  
  99. /* prsize - print a file offset on a file stream
  100.  *
  101.  * DESCRIPTION
  102.  *
  103.  *    Prints a file offset to a specific file stream.  The file offset is
  104.  *    of the form "%dm+%dk+%d", where the number preceeding the "m" and
  105.  *    the "k" stand for the number of Megabytes and the number of
  106.  *    Kilobytes, respectivley, which have been processed so far.
  107.  *
  108.  * PARAMETERS
  109.  *
  110.  *    FILE  *stream    - Stream which is to be used for output
  111.  *    OFFSET size    - Current archive position to be printed on the output
  112.  *              stream in the form: "%dm+%dk+%d".
  113.  *
  114.  */
  115.  
  116. #ifdef __STDC__
  117.  
  118. static void
  119. prsize(FILE * stream, OFFSET size)
  120.  
  121. #else
  122.  
  123. static void
  124. prsize(stream, size)
  125.     FILE               *stream;    /* stream which is used for output */
  126.     OFFSET              size;    /* current archive position to be printed */
  127.  
  128. #endif
  129.  
  130. {
  131.     OFFSET              n;
  132.  
  133.     DBUG_ENTER("prsize");
  134.     if (n = (size / (1024L * 1024L))) {
  135.     fprintf(stream, "%ldm+", n);
  136.     size -= n * 1024L * 1024L;
  137.     }
  138.     if (n = (size / 1024L)) {
  139.     fprintf(stream, "%ldk+", n);
  140.     size -= n * 1024L;
  141.     }
  142.     fprintf(stream, "%ld", size);
  143.     DBUG_VOID_RETURN;
  144. }
  145.  
  146.  
  147. /* fatal - print fatal message and exit
  148.  *
  149.  * DESCRIPTION
  150.  *
  151.  *    Fatal prints the program's name along with an error message, then
  152.  *    exits the program with a non-zero return code.
  153.  *
  154.  * PARAMETERS
  155.  *
  156.  *    char     *why    - description of reason for termination
  157.  *
  158.  * RETURNS
  159.  *
  160.  *    Returns an exit code of 1 to the parent process.
  161.  */
  162.  
  163. #ifdef __STDC__
  164.  
  165. void
  166. fatal(char *why)
  167.  
  168. #else
  169.  
  170. void
  171. fatal(why)
  172.     char               *why;    /* description of reason for termination */
  173.  
  174. #endif
  175. {
  176.     DBUG_ENTER("fatal");
  177.     fprintf(stderr, "%s: %s\n", myname, why);
  178.     exit(1);
  179. }
  180.  
  181.  
  182. /* warn - print a warning message
  183.  *
  184.  * DESCRIPTION
  185.  *
  186.  *    Print an error message listing the program name, the actual error
  187.  *    which occurred and an informational message as to why the error
  188.  *    occurred on the standard error device.  The standard error is
  189.  *    flushed after the error is printed to assure that the user gets
  190.  *    the message in a timely fasion.
  191.  *
  192.  * PARAMETERS
  193.  *
  194.  *    char *what    - Pointer to string describing what failed.
  195.  *    char *why    - Pointer to string describing why did it failed.
  196.  */
  197.  
  198. #ifdef __STDC__
  199.  
  200. void
  201. warn(char *what, char *why)
  202.  
  203. #else
  204.  
  205. void
  206. warn(what, why)
  207.     char               *what;    /* message as to what the error was */
  208.     char               *why;    /* explanation why the error occurred */
  209.  
  210. #endif
  211. {
  212.     DBUG_ENTER("warn");
  213.     fprintf(stderr, "%s: %s : %s\n", myname, what, why);
  214.     fflush(stderr);
  215.     DBUG_VOID_RETURN;
  216. }
  217.