#ifndef lint static char *rcs = "$Header: cleanup.c,v 1.1 88/01/15 13:03:17 simpson Rel $"; #endif /* $Log: cleanup.c,v $ * Revision 1.1 88/01/15 13:03:17 simpson * initial release * * Revision 0.1 87/12/11 18:30:43 simpson * beta test * */ /* Cleanup and error routines */ #include #include #include #include "constants.h" #include "fontnode.h" Boolean Accounting = FALSE; FILE *Accting; int NumPages = 0; char *User; char *Host; /* This routine is called on exit. It does some housekeeping before * exiting. */ void cleanup(head, exitstatus) struct FontNode *head; int exitstatus; { struct FontNode *p; void sanestate(); int portfont = 1204; PROFILE_VALUE *v, *getbindingvalue(); for (p = head; p; p = p->next) /* Delete user fonts */ if (p->qmsnumber > 30000 && (p->flags & LOADED)) printf("%s%d%c%s", DOWNLOAD, p->qmsnumber, p->flags & PORT ? 'P' : 'L', ENDCMD); if ((v = getbindingvalue("portraitfont")) && v->class == PROFILE_INTEGER) portfont = v->value.i; sanestate(portfont); fputs(QUICOFF, stdout); if (Accounting) { #ifdef TRW FILE *f; char badge[51], costcenter[51], chargenumber[51], sessionid[51]; char s[51], *strcpy(); if (!(f = fopen(ACCTFILE, "r"))) goto getout; while (fgets(s, 51, f)) if (strlen(s) > 0) { if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; switch (s[0]) { case 'b': (void)strcpy(badge, &s[1]); break; case 'e': (void)strcpy(costcenter, &s[1]); break; case 'u': (void)strcpy(chargenumber, &s[1]); break; case 's': (void)strcpy(sessionid, &s[1]); break; } } fprintf(Accting, "%s %s %s %s %d %s@%s\n", badge, costcenter, chargenumber, sessionid, NumPages, User, Host); (void)fclose(f); #else fprintf(Accting, "%d %s@%s\n", NumPages, User, Host); #endif (void)fclose(Accting); } getout: exit(exitstatus); }