void ClearWord(struct WordList *WL) { char *Word; if (WL) { while ( (Word = StkPop( &WL->Stack )) ) { free(Word); } WL->Stack.Used = 0; WL->MaxLen = 0; ClearHash(&WL->Hash); if (WL->NonEmpty) InsertWord("", WL); } }
char *FGetsStk(char *Dest, unsigned long len, struct Stack *stack) { static short HasSeenLong = 0; struct FileNode *fn; char *Retval = NULL; size_t Retlen = 0; if ((fn = StkTop(stack))) { do { Retval = fgets(Dest, (int)len, fn->fh); if (Retval) { Retlen = strlen(Retval); if (Retval[Retlen-1] == '\n' || Retlen < len-1) fn->Line++; /* We only want the long lines warning once per file */ else if (!HasSeenLong) { PrintPrgErr(pmLongLines, len-2); HasSeenLong = 1; } break; } fn = StkPop(stack); fclose(fn->fh); /* Don't free the fn->Name field because it can be referenced in an error message */ free(fn); HasSeenLong = 0; } while (!Retval && (fn = StkTop(stack))); } return (Retval); }
STRPTR FGetsStk(STRPTR Dest, ULONG len, struct Stack *stack) { struct FileNode *fn; STRPTR Retval = NULL; if((fn = StkTop(stack))) { do { if((Retval = fgets(Dest, (int) len, fn->fh))) { fn->Line++; break; } fn = StkPop(stack); fclose(fn->fh); free(fn); } while(!Retval && (fn = StkTop(stack))); } return(Retval); }
struct ErrInfo *PopErr(struct Stack *Stack) { return((struct ErrInfo *) StkPop(Stack)); }