1*54086Smccanne /*-
2*54086Smccanne * Copyright (c) 1992 Regents of the University of California.
3*54086Smccanne * All rights reserved.
4*54086Smccanne *
5*54086Smccanne * This software was developed by the Computer Systems Engineering group
6*54086Smccanne * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
7*54086Smccanne * contributed to Berkeley.
8*54086Smccanne *
9*54086Smccanne * %sccs.include.redist.c%
10*54086Smccanne */
11*54086Smccanne
12*54086Smccanne #include <stdio.h>
13*54086Smccanne #ifdef __STDC__
14*54086Smccanne #include <stdlib.h>
15*54086Smccanne #endif
16*54086Smccanne #include <sys/types.h>
17*54086Smccanne #include <sys/time.h>
18*54086Smccanne #include <ctype.h>
19*54086Smccanne #include <varargs.h>
20*54086Smccanne #include <sys/file.h>
21*54086Smccanne #include <sys/stat.h>
22*54086Smccanne
23*54086Smccanne static char *program_name;
24*54086Smccanne
25*54086Smccanne static char *
stripdir(s)26*54086Smccanne stripdir(s)
27*54086Smccanne register char *s;
28*54086Smccanne {
29*54086Smccanne register char *cp;
30*54086Smccanne char *rindex();
31*54086Smccanne
32*54086Smccanne cp = rindex(s, '/');
33*54086Smccanne return (cp != 0) ? cp + 1 : s;
34*54086Smccanne }
35*54086Smccanne
setprog(cp)36*54086Smccanne setprog(cp)
37*54086Smccanne char *cp;
38*54086Smccanne {
39*54086Smccanne program_name = stripdir(cp);
40*54086Smccanne }
41*54086Smccanne
42*54086Smccanne void
usage()43*54086Smccanne usage()
44*54086Smccanne {
45*54086Smccanne fprintf(stderr, "usage: %s [ -c core ] executable pid\n",
46*54086Smccanne program_name);
47*54086Smccanne exit(1);
48*54086Smccanne }
49*54086Smccanne
50*54086Smccanne /* VARARGS */
51*54086Smccanne void
error(va_alist)52*54086Smccanne error(va_alist)
53*54086Smccanne va_dcl
54*54086Smccanne {
55*54086Smccanne register char *cp;
56*54086Smccanne va_list ap;
57*54086Smccanne
58*54086Smccanne (void)fprintf(stderr, "%s: ", stripdir(program_name));
59*54086Smccanne
60*54086Smccanne va_start(ap);
61*54086Smccanne cp = va_arg(ap, char *);
62*54086Smccanne (void)vfprintf(stderr, cp, ap);
63*54086Smccanne va_end(ap);
64*54086Smccanne if (*cp) {
65*54086Smccanne cp += strlen(cp);
66*54086Smccanne if (cp[-1] != '\n')
67*54086Smccanne (void)fputc('\n', stderr);
68*54086Smccanne }
69*54086Smccanne exit(1);
70*54086Smccanne /* NOTREACHED */
71*54086Smccanne }
72*54086Smccanne
73*54086Smccanne /* VARARGS */
74*54086Smccanne void
warning(va_alist)75*54086Smccanne warning(va_alist)
76*54086Smccanne va_dcl
77*54086Smccanne {
78*54086Smccanne register char *cp;
79*54086Smccanne va_list ap;
80*54086Smccanne
81*54086Smccanne (void)fprintf(stderr, "%s: warning: ", stripdir(program_name));
82*54086Smccanne
83*54086Smccanne va_start(ap);
84*54086Smccanne cp = va_arg(ap, char *);
85*54086Smccanne (void)vfprintf(stderr, cp, ap);
86*54086Smccanne va_end(ap);
87*54086Smccanne if (*cp) {
88*54086Smccanne cp += strlen(cp);
89*54086Smccanne if (cp[-1] != '\n')
90*54086Smccanne (void)fputc('\n', stderr);
91*54086Smccanne }
92*54086Smccanne }
93