/* * return the filename associated with "s". This function always * returns a non-null string (no error checking is done on the receiving end) */ char * Getf(register char *s) { register char *cp; static char defbuf[PATHSIZE]; if (((cp = value(s)) != 0) && *cp) { return (safeexpand(cp)); } else if (strcmp(s, "MBOX") == 0) { snprintf(defbuf, sizeof (defbuf), "%s/%s", Getf("HOME"), "mbox"); return (defbuf); } else if (strcmp(s, "DEAD") == 0) { snprintf(defbuf, sizeof (defbuf), "%s/%s", Getf("HOME"), "dead.letter"); return (defbuf); } else if (strcmp(s, "MAILRC") == 0) { snprintf(defbuf, sizeof (defbuf), "%s/%s", Getf("HOME"), ".mailrc"); return (defbuf); } else if (strcmp(s, "HOME") == 0) { /* no recursion allowed! */ return ("."); } return ("DEAD"); /* "cannot happen" */ }
void PPC::Visualize(PPC *ppc0, FrameBuffer *fb, float visF, int vLN){ Vector3D P0, P1, c0(0.0f, 0.0f, 0.0f), c1(0.0f, 0.0f, 0.0f); float s = visF/Getf(); P0 = C + c * s; P1 = P0 + a * (float)w*s; fb->DrawSegment3D(P0, P1, c0, c1, ppc0); P0 = P1; P1 = P0 + b * (float)h*s; fb->DrawSegment3D(P0, P1, c0, c1, ppc0); P0 = P1; P1 = P0 - a * (float)w*s; fb->DrawSegment3D(P0, P1, c0, c1, ppc0); P0 = P1; P1 = C + c * s; fb->DrawSegment3D(P0, P1, c0, c1, ppc0); P0 = C; P1 = C + c * s; fb->DrawSegment3D(P0, P1, c0 + Vector3D(1.0f, 0.0f, 0.0f), c1, ppc0); }
Vector3D PPC::GetPoint(float uf, float vf, float z) { float f = Getf(); float scf = z/f; Vector3D pointIP = C + a*uf + b*vf + c; Vector3D ret = C + (pointIP-C)*scf; return ret; }
void PPC::SetIntrinsicsHW(){ glViewport(0,0,w,h); float wf = a.length() * (float)w; float hf = b.length() * (float)h; float scf = zNear/Getf(); float left = -wf/2.0f*scf; float right = +wf/2.0f*scf; float top = hf/2.0f*scf; float bottom = -hf/2.0f*scf; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(left, right, bottom, top, zNear, zFar); glMatrixMode(GL_MODELVIEW); }
int main(void) { int size = Sizef(); int *arr = new int[size]; int i; for (i = 0; i < size; i++) arr[i] = Getf(i); qsort(arr, size, sizeof(int), comp); for (i = 0; i < size; i++) Putf(arr[i], i); done(); return 0; }
void PPC::zoom(float s, char S){ if(s == 0.0f){ return; } if(S == 'o'){ s = 1.0f/s; } float f = Getf(); float newf = f*s; Vector3D newc = newf * GetVD() + (float) w / 2.0f * (-1.0f * a) + (float)h / 2.0f * (-1.0f * b); c = newc; //setNearAndFarPoints(); SetPMat(); }
void quit( int noremove /* don't remove system mailbox, trunc it instead */ ) { int mcount, p, modify, autohold, anystat, holdbit, nohold, fd; FILE *ibuf, *obuf, *fbuf, *readstat; register struct message *mp; register int c; char *id; int appending; char *mbox = Getf("MBOX"); /* * If we are read only, we can't do anything, * so just return quickly. */ mcount = 0; if (readonly) return; /* * See if there any messages to save in mbox. If no, we * can save copying mbox to /tmp and back. * * Check also to see if any files need to be preserved. * Delete all untouched messages to keep them out of mbox. * If all the messages are to be preserved, just exit with * a message. * * If the luser has sent mail to himself, refuse to do * anything with the mailbox, unless mail locking works. */ #ifndef CANLOCK if (selfsent) { printf(gettext("You have new mail.\n")); return; } #endif /* * Adjust the message flags in each message. */ anystat = 0; autohold = value("hold") != NOSTR; appending = value("append") != NOSTR; holdbit = autohold ? MPRESERVE : MBOX; nohold = MBOXED|MBOX|MSAVED|MDELETED|MPRESERVE; if (value("keepsave") != NOSTR) nohold &= ~MSAVED; for (mp = &message[0]; mp < &message[msgCount]; mp++) { if (mp->m_flag & MNEW) { receipt(mp); mp->m_flag &= ~MNEW; mp->m_flag |= MSTATUS; } if (mp->m_flag & MSTATUS) anystat++; if ((mp->m_flag & MTOUCH) == 0) mp->m_flag |= MPRESERVE; if ((mp->m_flag & nohold) == 0) mp->m_flag |= holdbit; } modify = 0; if (Tflag != NOSTR) { if ((readstat = fopen(Tflag, "w")) == NULL) Tflag = NOSTR; } for (c = 0, p = 0, mp = &message[0]; mp < &message[msgCount]; mp++) { if (mp->m_flag & MBOX) c++; if (mp->m_flag & MPRESERVE) p++; if (mp->m_flag & MODIFY) modify++; if (Tflag != NOSTR && (mp->m_flag & (MREAD|MDELETED)) != 0) { id = hfield("message-id", mp, addone); if (id != NOSTR) fprintf(readstat, "%s\n", id); else { id = hfield("article-id", mp, addone); if (id != NOSTR) fprintf(readstat, "%s\n", id); } } } if (Tflag != NOSTR) fclose(readstat); if (p == msgCount && !modify && !anystat) { if (p == 1) printf(gettext("Held 1 message in %s\n"), mailname); else printf(gettext("Held %d messages in %s\n"), p, mailname); return; } if (c == 0) { writeback(noremove); return; } /* * Create another temporary file and copy user's mbox file * therein. If there is no mbox, copy nothing. * If s/he has specified "append" don't copy the mailbox, * just copy saveable entries at the end. */ mcount = c; if (!appending) { if ((fd = open(tempQuit, O_RDWR|O_CREAT|O_EXCL, 0600)) < 0 || (obuf = fdopen(fd, "w")) == NULL) { perror(tempQuit); return; } if ((ibuf = fopen(tempQuit, "r")) == NULL) { perror(tempQuit); removefile(tempQuit); fclose(obuf); return; } removefile(tempQuit); if ((fbuf = fopen(mbox, "r")) != NULL) { while ((c = getc(fbuf)) != EOF) putc(c, obuf); fclose(fbuf); } fflush(obuf); if (fferror(obuf)) { perror(tempQuit); fclose(ibuf); fclose(obuf); return; } fclose(obuf); if ((fd = open(mbox, O_RDWR|O_CREAT|O_TRUNC, MBOXPERM)) < 0 || (obuf = fdopen(fd, "r+")) == NULL) { perror(mbox); fclose(ibuf); return; } if (issysmbox) touchlock(); } else { /* we are appending */ if ((fd = open(mbox, O_RDWR|O_CREAT, MBOXPERM)) < 0 || (obuf = fdopen(fd, "a")) == NULL) { perror(mbox); return; } } for (mp = &message[0]; mp < &message[msgCount]; mp++) if (mp->m_flag & MBOX) { if (msend(mp, obuf, (int)value("alwaysignore") ? M_IGNORE|M_SAVING : M_SAVING, fputs) < 0) { perror(mbox); if (!appending) fclose(ibuf); fclose(obuf); return; } mp->m_flag &= ~MBOX; mp->m_flag |= MBOXED; if (issysmbox) touchlock(); } /* * Copy the user's old mbox contents back * to the end of the stuff we just saved. * If we are appending, this is unnecessary. */ if (!appending) { rewind(ibuf); c = getc(ibuf); while (c != EOF) { putc(c, obuf); if (ferror(obuf)) break; c = getc(ibuf); } fclose(ibuf); fflush(obuf); } trunc(obuf); if (fferror(obuf)) { perror(mbox); fclose(obuf); return; } fclose(obuf); if (mcount == 1) printf(gettext("Saved 1 message in %s\n"), mbox); else printf(gettext("Saved %d messages in %s\n"), mcount, mbox); /* * Now we are ready to copy back preserved files to * the system mailbox, if any were requested. */ writeback(noremove); }
/* * Mail a message on standard input to the people indicated * in the passed header. (Internal interface). */ void mail1(struct header *hp, int use_to, char *orig_to) { pid_t p, pid; int i, s, gotcha; char **namelist, *deliver; struct name *to, *np; FILE *mtf, *fp; int remote = rflag != NOSTR || rmail; char **t; char *deadletter; char recfile[PATHSIZE]; /* * Collect user's mail from standard input. * Get the result as mtf. */ pid = (pid_t)-1; if ((mtf = collect(hp)) == NULL) return; hp->h_seq = 1; if (hp->h_subject == NOSTR) hp->h_subject = sflag; if (fsize(mtf) == 0 && hp->h_subject == NOSTR) { printf(gettext("No message !?!\n")); goto out; } if (intty) { printf(gettext("EOT\n")); flush(); } /* * If we need to use the To: line to determine the record * file, save a copy of it before it's sorted below. */ if (use_to && orig_to == NOSTR && hp->h_to != NOSTR) orig_to = strcpy((char *)salloc(strlen(hp->h_to)+1), hp->h_to); else if (orig_to == NOSTR) orig_to = ""; /* * Now, take the user names from the combined * to and cc lists and do all the alias * processing. */ senderr = 0; to = cat(extract(hp->h_bcc, GBCC), cat(extract(hp->h_to, GTO), extract(hp->h_cc, GCC))); to = translate(outpre(elide(usermap(to)))); if (!senderr) mapf(to, myname); mechk(to); for (gotcha = 0, np = to; np != NIL; np = np->n_flink) if ((np->n_type & GDEL) == 0) gotcha++; hp->h_to = detract(to, GTO); hp->h_cc = detract(to, GCC); hp->h_bcc = detract(to, GBCC); if ((mtf = infix(hp, mtf)) == NULL) { fprintf(stderr, gettext(". . . message lost, sorry.\n")); return; } rewind(mtf); if (askme && isatty(0)) { char ans[64]; puthead(hp, stdout, GTO|GCC|GBCC, 0); printf(gettext("Send? ")); printf("[yes] "); if (fgets(ans, sizeof(ans), stdin) && ans[0] && (tolower(ans[0]) != 'y' && ans[0] != '\n')) goto dead; } if (senderr) goto dead; /* * Look through the recipient list for names with /'s * in them which we write to as files directly. */ i = outof(to, mtf); rewind(mtf); if (!gotcha && !i) { printf(gettext("No recipients specified\n")); goto dead; } if (senderr) goto dead; getrecf(orig_to, recfile, use_to, sizeof (recfile)); if (recfile != NOSTR && *recfile) savemail(safeexpand(recfile), hp, mtf); if (!gotcha) goto out; namelist = unpack(to); if (debug) { fprintf(stderr, "Recipients of message:\n"); for (t = namelist; *t != NOSTR; t++) fprintf(stderr, " \"%s\"", *t); fprintf(stderr, "\n"); return; } /* * Wait, to absorb a potential zombie, then * fork, set up the temporary mail file as standard * input for "mail" and exec with the user list we generated * far above. Return the process id to caller in case he * wants to await the completion of mail. */ #ifdef VMUNIX while (wait3((int *)0, WNOHANG, (struct rusage *)0) > 0) ; #else #ifdef preSVr4 wait((int *)0); #else while (waitpid((pid_t)-1, (int *)0, WNOHANG) > 0) ; #endif #endif rewind(mtf); pid = fork(); if (pid == (pid_t)-1) { perror("fork"); dead: deadletter = Getf("DEAD"); if (fp = fopen(deadletter, value("appenddeadletter") == NOSTR ? "w" : "a")) { chmod(deadletter, DEADPERM); puthead(hp, fp, GMASK|GCLEN, fsize(mtf) - textpos); fseek(mtf, textpos, 0); lcwrite(deadletter, mtf, fp, value("appenddeadletter") != NOSTR); fclose(fp); } else perror(deadletter); goto out; } if (pid == 0) { sigchild(); #ifdef SIGTSTP if (remote == 0) { sigset(SIGTSTP, SIG_IGN); sigset(SIGTTIN, SIG_IGN); sigset(SIGTTOU, SIG_IGN); } #endif sigset(SIGHUP, SIG_IGN); sigset(SIGINT, SIG_IGN); sigset(SIGQUIT, SIG_IGN); s = fileno(mtf); (void) fdwalk(closefd_walk, &s); close(0); dup(s); close(s); #ifdef CC submit(getpid()); #endif /* CC */ if ((deliver = value("sendmail")) == NOSTR) #ifdef SENDMAIL deliver = SENDMAIL; #else deliver = MAIL; #endif execvp(safeexpand(deliver), namelist); perror(deliver); exit(1); } if (value("sendwait")!=NOSTR) remote++; out: if (remote) { while ((p = wait(&s)) != pid && p != (pid_t)-1) ; if (s != 0) senderr++; pid = 0; } fclose(mtf); return; }