#include #include #include "jsh.h" void bcopy_ptrs(s, d, count) register char **s, **d; register int count; { if (s == NULL || d == NULL) { puts("warning, NULL in bcopy_ptrs"); return; } s += count; d += count; while (--count >= 0) *(--d )= *(--s); } char * clone_string(s) register char *s; { register char *r; register int count; if (s == NULL) return(NULL); count = strlen(s); if ((r = malloc(count+1)) == NULL) return(NULL); strcpy(r, s); return(r); } void free_string(s) register char *s; { if (s == NULL) return; free(s); } void free_name_list(list) register Name_list *list; { register Name_list *next; while (list) { free_string(list->name); next = list->next; free(list); list = next; } } is_head(head, of) register char *head; register char *of; { register char c, o; if (head == NULL || of == NULL) return(0); while ( c = *head++ ) { if ( (o = *of++) == 0) return(0); if ( c != o) return(0); } return(1); } char * lasthead(head, table, size) register char *head; register char **table; register int size; { while (--size >= 0) { if ( is_head(head, *table++) ) return( *(--table) ); } return(NULL); } char * skip_space(pt) register char *pt; { register char c; if (!pt) return(NULL); for (;;) { c = *pt++; if ( !isspace(c) ) return(--pt); } } char * skip_to_space(pt) register char *pt; { register char c; if (!pt) return(NULL); for (;;) { c = *pt++; if ( isspace(c) || c == 0 ) return(--pt); } } char * next_word(s) register char *s; { register char c; if (s == NULL) return(NULL); s = skip_space(s); s = skip_to_space(s); s = skip_space(s); if (s[0] == 0) return(NULL); return(s); } char * first_word(head, list) register char *head; char *list; { register int count; register char c; register char *pt; if (list == NULL) return(NULL); pt = list; count = MAX_WORD-1; pt = skip_space(pt); while(--count >= 0) { c = *pt++; if (c == 0 || isspace(c) ) { *head++ = 0; return(pt); } else *head++ = c; } puts("word too long in:"); puts(list); return(NULL); }