1 # include <sysexits.h> 2 # include "useful.h" 3 # include <ctype.h> 4 5 static char SccsId[] = "@(#)util.c 3.1 03/04/81"; 6 7 /* 8 ** STRIPQUOTES -- Strip quotes & quote bits from a string. 9 ** 10 ** Runs through a string and strips off unquoted quote 11 ** characters and quote bits. This is done in place. 12 ** 13 ** Parameters: 14 ** s -- the string to strip. 15 ** 16 ** Returns: 17 ** none. 18 ** 19 ** Side Effects: 20 ** none. 21 ** 22 ** Called By: 23 ** deliver 24 */ 25 26 stripquotes(s) 27 char *s; 28 { 29 register char *p; 30 register char *q; 31 register char c; 32 33 for (p = q = s; (c = *p++) != '\0'; ) 34 { 35 if (c != '"') 36 *q++ = c & 0177; 37 } 38 *q = '\0'; 39 } 40 /* 41 ** CAPITALIZE -- return a copy of a string, properly capitalized. 42 ** 43 ** Parameters: 44 ** s -- the string to capitalize. 45 ** 46 ** Returns: 47 ** a pointer to a properly capitalized string. 48 ** 49 ** Side Effects: 50 ** none. 51 */ 52 53 char * 54 capitalize(s) 55 register char *s; 56 { 57 static char buf[50]; 58 register char *p; 59 60 p = buf; 61 62 for (;;) 63 { 64 while (!isalpha(*s) && *s != '\0') 65 *p++ = *s++; 66 if (*s == '\0') 67 break; 68 *p++ = toupper(*s++); 69 while (isalpha(*s)) 70 *p++ = *s++; 71 } 72 73 *p = '\0'; 74 return (buf); 75 } 76 /* 77 ** XALLOC -- Allocate memory and bitch wildly on failure. 78 ** 79 ** THIS IS A CLUDGE. This should be made to give a proper 80 ** error -- but after all, what can we do? 81 ** 82 ** Parameters: 83 ** sz -- size of area to allocate. 84 ** 85 ** Returns: 86 ** pointer to data region. 87 ** 88 ** Side Effects: 89 ** Memory is allocated. 90 */ 91 92 char * 93 xalloc(sz) 94 register unsigned int sz; 95 { 96 register char *p; 97 extern char *malloc(); 98 99 p = malloc(sz); 100 if (p == NULL) 101 { 102 syserr("Out of memory!!"); 103 exit(EX_UNAVAILABLE); 104 } 105 return (p); 106 } 107 /* 108 ** NEWSTR -- make copy of string. 109 ** 110 ** Space is allocated for it using xalloc. 111 ** 112 ** Parameters: 113 ** string to copy. 114 ** 115 ** Returns: 116 ** pointer to new string. 117 ** 118 ** Side Effects: 119 ** none. 120 */ 121 122 char * 123 newstr(s) 124 register char *s; 125 { 126 register char *p; 127 128 p = xalloc(strlen(s) + 1); 129 strcpy(p, s); 130 return (p); 131 } 132 /* 133 ** ANY -- Return TRUE if the character exists in the string. 134 ** 135 ** Parameters: 136 ** c -- the character. 137 ** s -- the string 138 ** (sounds like an avant garde script) 139 ** 140 ** Returns: 141 ** TRUE -- if c could be found in s. 142 ** FALSE -- otherwise. 143 ** 144 ** Side Effects: 145 ** none. 146 ** 147 ** Called By: 148 ** prescan 149 */ 150 151 any(c, s) 152 register char c; 153 register char *s; 154 { 155 register char c2; 156 157 while ((c2 = *s++) != '\0') 158 if (c2 == c) 159 return (TRUE); 160 return (FALSE); 161 } 162