1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: char copyright[] =
   9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
  10:  All rights reserved.\n";
  11: #endif not lint
  12: 
  13: #ifndef lint
  14: static char sccsid[] = "@(#)pix.c	5.1 (Berkeley) 6/5/85";
  15: #endif not lint
  16: 
  17: /*
  18:  * pix - pi then px
  19:  *
  20:  * Bill Joy UCB August 26, 1977
  21:  */
  22: 
  23: #include "whoami.h"
  24: #include "objfmt.h"
  25: #include "config.h"
  26: #define ERRS    1
  27: 
  28: char    *name;
  29: 
  30: int onintr();
  31: 
  32: #define ETXTBSY 26
  33: 
  34: main(argc, argv)
  35:     int argc;
  36:     char *argv[];
  37: {
  38:     register char **av;
  39:     register int ac;
  40:     int i, io, pid, status;
  41:     extern errno;
  42: 
  43:     do
  44:         io = open("/dev/null", 0);
  45:     while (io >= 0 && io < 3);
  46:     for (io = 3; io < 15; io++)
  47:         close(io);
  48:     if ((signal(2, 1) & 01) == 0)
  49:         signal(2, onintr);
  50:     for (ac = 1; ac < argc; ac++)
  51:         if (dotted(argv[ac], 'p')) {
  52:             ac++;
  53:             break;
  54:         }
  55:     name = "-o/tmp/pixaXXXXX" + 2;
  56:     mktemp(name);
  57:     for (;;) {
  58:         io = creat(name, 0400);
  59:         if (io > 0)
  60:             break;
  61:         if (name[8] == 'z') {
  62:             perror(name);
  63:             exit(1);
  64:         }
  65:         name[8]++;
  66:     }
  67:     pid = fork();
  68:     if (pid == -1) {
  69:         write(2, "No more processes\n", 18);
  70:         onintr();
  71:     }
  72:     if (pid == 0) {
  73:         if (io != 3) {
  74:             write(2, "Impossible error in pix\n", 24);
  75:             onintr();
  76:         }
  77:         argv[ac] = 0;
  78:         argv[0] = name - 2;
  79:         do
  80:             execv(pi_comp, argv);
  81:         while (errno == ETXTBSY);
  82:         write(2, "Can't find pi\n", 14);
  83:         onintr();
  84:     }
  85:     close(io);
  86:     do
  87:         i = wait(&status);
  88:     while (i != pid && i != -1);
  89:     if (i == -1 || (status & 0377))
  90:         onintr();
  91:     if (status != 0) {
  92:         if ((status >> 8) == ERRS)
  93:             write(2, "Execution suppressed due to compilation errors\n", 47);
  94:         onintr();
  95:     }
  96:     ac--;
  97:     argv[ac] = name;
  98:     ac--;
  99:     argv[ac] = "pix";
 100:     argv[argc] = 0;
 101:     do
 102:         execv(px_debug, &argv[ac]);
 103:     while (errno == ETXTBSY);
 104:     write(2, "Can't find px\n", 14);
 105:     onintr();
 106: }
 107: 
 108: dotted(cp, ch)
 109:     char *cp, ch;
 110: {
 111:     register int i;
 112: 
 113:     i = strlen(cp);
 114:     return (i > 1 && cp[i - 2] == '.' && cp[i - 1] == ch);
 115: }
 116: 
 117: onintr()
 118: {
 119: 
 120:     signal(2, 1);
 121:     unlink(name);
 122:     exit(1);
 123: }

Defined functions

dotted defined in line 108; used 1 times
  • in line 51
main defined in line 34; never used
onintr defined in line 117; used 8 times

Defined variables

copyright defined in line 8; never used
name defined in line 28; used 9 times
sccsid defined in line 14; never used

Defined macros

ERRS defined in line 26; used 1 times
  • in line 92
ETXTBSY defined in line 32; used 2 times
Last modified: 1985-06-06
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 611
Valid CSS Valid XHTML 1.0 Strict