Minimal changes to get it to compile (a few taken from David Given ack-6.0pre5)
[Ack-5.5.git] / util / ack / util.c
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  *
5  */
6
7 /**********************************************************************/
8 /*                                                                    */
9 /*               Several utility routines used throughout ack         */
10 /*               error handling, string handling and such.            */
11 /*                                                                    */
12 /**********************************************************************/
13
14 #include "ack.h"
15 #include <ctype.h>
16 #include <stdio.h>
17
18 #ifndef NORCSID
19 static char rcs_id[] = "$Id: util.c,v 2.5 1994/06/24 10:13:21 ceriel Exp $" ;
20 #endif
21
22 extern  char    *progname ;
23 extern  int     w_flag ;
24 extern  int     n_error;
25
26 extern  char    *calloc();
27 extern  char    *realloc();
28
29 #ifdef DEBUG
30 # define STDOUT stdout
31 #else
32 # define STDOUT stderr
33 #endif
34
35 char *basename(string) char *string ; {
36         static char retval[256] ;
37         char *last_dot, *last_start ;
38         register char *store;
39         register char *fetch ;
40         register int ctoken ;
41
42         last_dot= (char *)0 ;
43         last_start= string ;
44         for ( fetch=string ; ; fetch++ ) {
45                 switch ( ctoken= *fetch&0377 ) {
46                 case SUFCHAR : last_dot=fetch ; break ;
47                 case '/'     : last_start=fetch+1 ; break ;
48                 case  0      : goto out ;
49                 }
50                 if ( !isascii(ctoken) || !isprint(ctoken) ) {
51                         werror("non-ascii characters in argument %s",string) ;
52                 }
53         }
54 out:
55         if ( ! *last_start ) fuerror("empty filename \"%s\"",string) ;
56         for ( fetch= last_start, store=retval ;
57                 *fetch && fetch!=last_dot && store< &retval[sizeof retval-1] ;
58                       fetch++, store++ ) {
59                                 *store= *fetch ;
60         }
61         *store= 0 ;
62         return retval ;
63 }
64
65 clr_noscan(str) char *str ; {
66         register char *ptr ;
67         for ( ptr=str ; *ptr ; ptr++ ) {
68                 *ptr&= ~NO_SCAN ;
69         }
70 }
71
72 char *skipblank(str) char *str ; {
73         register char *ptr ;
74
75         for ( ptr=str ; *ptr==SPACE || *ptr==TAB ; ptr++ ) ;
76         return ptr ;
77 }
78
79 char *firstblank(str) char *str ; {
80         register char *ptr ;
81
82         for ( ptr=str ; *ptr && *ptr!=SPACE && *ptr!=TAB ; ptr++ ) ;
83         return ptr ;
84 }
85
86 #ifdef __STDC__
87 #include <stdarg.h>
88
89 /* VARARGS1 */
90 void fatal(const char *fmt, ...) {
91         va_list ap;
92
93         /* Fatal internal error */
94         fprintf(STDOUT,"%s: fatal internal error, ",progname) ;
95         va_start(ap, fmt);
96         vfprintf(STDOUT,fmt,ap);
97         va_end(ap);
98         fprintf(STDOUT,"\n") ;
99         quit(-2) ;
100 }
101
102
103 /* VARARGS1 */
104 void vprint(const char *fmt, ...) {
105         va_list ap;
106
107         /* Diagnostic print, no auto NL */
108         va_start(ap, fmt);
109         vfprintf(STDOUT,fmt,ap);
110         va_end(ap);
111 }
112
113 #ifdef DEBUG
114 prns(s) register char *s ; {
115         for ( ; *s ; s++ ) {
116                 putc((*s&0377)&~NO_SCAN,STDOUT) ;
117         }
118         putc('\n',STDOUT) ;
119 }
120 #endif
121
122 /* VARARGS1 */
123 void fuerror(const char *fmt, ...) {
124         va_list ap;
125
126         /* Fatal user error */
127         fprintf(STDOUT,"%s: ",progname) ;
128         va_start(ap, fmt);
129         vfprintf(STDOUT,fmt,ap);
130         va_end(ap);
131         fprintf(STDOUT,"\n") ;
132         quit(-1) ;
133 }
134
135 /* VARARGS1 */
136 void werror(const char *fmt, ...) {
137         va_list ap;
138
139         /* Warning user error, w_flag */
140         if ( w_flag ) return ;
141         fprintf(STDOUT,"%s: warning, ",progname) ;
142         va_start(ap, fmt);
143         vfprintf(STDOUT,fmt,ap);
144         va_end(ap);
145         fprintf(STDOUT,"\n") ;
146 }
147
148 /* VARARGS1 */
149 void error(const char *fmt, ...) {
150         va_list ap;
151
152         /* User error, it is the callers responsibility to quit */
153         fprintf(STDOUT,"%s: ",progname) ;
154         va_start(ap, fmt);
155         vfprintf(STDOUT,fmt,ap);
156         va_end(ap);
157         fprintf(STDOUT,"\n") ;
158         n_error++ ;
159 }
160 #
161 #else
162 /* VARARGS1 */
163 fatal(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
164         /* Fatal internal error */
165         fprintf(STDOUT,"%s: fatal internal error, ",progname) ;
166         fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
167         fprintf(STDOUT,"\n") ;
168         quit(-2) ;
169 }
170
171
172 /* VARARGS1 */
173 vprint(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
174         /* Diagnostic print, no auto NL */
175         fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
176 }
177
178 #ifdef DEBUG
179 prns(s) register char *s ; {
180         for ( ; *s ; s++ ) {
181                 putc((*s&0377)&~NO_SCAN,STDOUT) ;
182         }
183         putc('\n',STDOUT) ;
184 }
185 #endif
186
187 /* VARARGS1 */
188 fuerror(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
189         /* Fatal user error */
190         fprintf(STDOUT,"%s: ",progname) ;
191         fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
192         fprintf(STDOUT,"\n") ;
193         quit(-1) ;
194 }
195
196 /* VARARGS1 */
197 werror(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
198         /* Warning user error, w_flag */
199         if ( w_flag ) return ;
200         fprintf(STDOUT,"%s: warning, ",progname) ;
201         fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
202         fprintf(STDOUT,"\n") ;
203 }
204
205 /* VARARGS1 */
206 error(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
207         /* User error, it is the callers responsibility to quit */
208         fprintf(STDOUT,"%s: ",progname) ;
209         fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
210         fprintf(STDOUT,"\n") ;
211         n_error++ ;
212 }
213 #endif
214
215 do_flush() {
216         fflush(stdout) ;
217         fflush(stderr) ;
218 }
219
220 void
221 noodstop() {
222         quit(-3) ;
223 }
224
225 quit(code) {
226         rmtemps();
227         exit(code);
228 }
229 /******
230         char *keeps(string)
231                 Keep the string in stable storage.
232         throws(string)
233                 Remove the string stored by keep from stable storage.
234 ***********/
235
236 char *keeps(str) char *str ; {
237         register char *result ;
238         result= getcore( (unsigned)(strlen(str)+1) ) ;
239         if ( !result ) fatal("Out of core") ;
240         return strcpy(result,str) ;
241 }
242
243 throws(str) char *str ; {
244         freecore(str) ;
245 }
246
247 char *getcore(size) unsigned size ; {
248         register char *retptr ;
249
250         retptr= calloc(1,size) ;
251         if ( !retptr ) fatal("Out of memory") ;
252         return retptr ;
253 }
254
255 char *changecore(ptr,size) char *ptr ; unsigned size ; {
256         register char *retptr ;
257
258         retptr= realloc(ptr,size) ;
259         if ( !retptr ) fatal("Out of memory") ;
260         return retptr ;
261 }