Initial revision
This commit is contained in:
parent
fb16148641
commit
45f608bac0
129
util/cmisc/prid.c
Normal file
129
util/cmisc/prid.c
Normal file
|
@ -0,0 +1,129 @@
|
|||
/* Print IDentifiers occurring in C programs outside comment, strings
|
||||
and character constants.
|
||||
Flags:
|
||||
-l<num> : print identifiers of <num> or more characters
|
||||
(default <num> = 8)
|
||||
|
||||
Author: Erik Baalbergen
|
||||
Date: Oct 23, 1985
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
extern char *ProgName;
|
||||
|
||||
#ifndef DEF_LENGTH
|
||||
#define DEF_LENGTH 8
|
||||
#endif
|
||||
|
||||
int maxlen = DEF_LENGTH;
|
||||
|
||||
BeginOfProgram() {}
|
||||
|
||||
DoOption(str)
|
||||
char *str;
|
||||
{
|
||||
switch (str[1]) {
|
||||
|
||||
case 'l':
|
||||
if ((maxlen = atoi(&str[2])) <= 0) {
|
||||
fprintf(stderr, "%s: option \"-l%s\" ignored\n",
|
||||
ProgName, &str[2]);
|
||||
maxlen = DEF_LENGTH;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "%s: bad option \"%s\"\n", ProgName, str);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CheckId(id, len)
|
||||
char *id;
|
||||
{
|
||||
if (len >= maxlen) {
|
||||
InsertId(id);
|
||||
}
|
||||
}
|
||||
|
||||
#define HASHSIZE 257
|
||||
|
||||
struct idf {
|
||||
char *id_name;
|
||||
struct idf *id_next;
|
||||
};
|
||||
|
||||
struct idf *hash_tab[HASHSIZE];
|
||||
|
||||
char *Malloc(), *Salloc();
|
||||
|
||||
InsertId(id)
|
||||
char *id;
|
||||
{
|
||||
int hash_val = EnHash(id);
|
||||
register struct idf *idp = hash_tab[hash_val];
|
||||
register struct idf *p = 0;
|
||||
|
||||
while (idp && strcmp(idp->id_name, id)) {
|
||||
p = idp;
|
||||
idp = idp->id_next;
|
||||
}
|
||||
|
||||
if (idp == 0) {
|
||||
idp = (struct idf *) Malloc(sizeof(struct idf));
|
||||
idp->id_next = 0;
|
||||
if (!p) hash_tab[hash_val] = idp;
|
||||
else p->id_next = idp;
|
||||
idp->id_name = Salloc(id);
|
||||
}
|
||||
}
|
||||
|
||||
char *
|
||||
Malloc(n)
|
||||
unsigned n;
|
||||
{
|
||||
char *mem, *malloc();
|
||||
|
||||
if ((mem = malloc(n)) == 0) {
|
||||
fprintf(stderr, "%s: out of memory\n", ProgName);
|
||||
exit(1);
|
||||
}
|
||||
return mem;
|
||||
}
|
||||
|
||||
char *
|
||||
Salloc(str)
|
||||
char *str;
|
||||
{
|
||||
char *strcpy();
|
||||
|
||||
if (str == 0)
|
||||
str = "";
|
||||
|
||||
return strcpy(Malloc(strlen(str) + 1), str);
|
||||
}
|
||||
|
||||
EnHash(id)
|
||||
char *id;
|
||||
{
|
||||
register unsigned hash_val = 0;
|
||||
register n = maxlen;
|
||||
|
||||
while (n-- && *id)
|
||||
hash_val = 31 * hash_val + *id++;
|
||||
|
||||
return hash_val % (unsigned) HASHSIZE;
|
||||
}
|
||||
|
||||
EndOfProgram()
|
||||
{
|
||||
register struct idf *idp;
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < HASHSIZE; i++) {
|
||||
for (idp = hash_tab[i]; idp; idp = idp->id_next) {
|
||||
printf("%s\n", idp->id_name);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue