|
|
1.1 root 1: /*********************************************************************
2: * COPYRIGHT NOTICE *
3: **********************************************************************
4: * This software is copyright (C) 1982 by Pavel Curtis *
5: * *
6: * Permission is granted to reproduce and distribute *
7: * this file by any means so long as no fee is charged *
8: * above a nominal handling fee and so long as this *
9: * notice is always included in the copies. *
10: * *
11: * Other rights are reserved except as explicitly granted *
12: * by written permission of the author. *
13: * Pavel Curtis *
14: * Computer Science Dept. *
15: * 405 Upson Hall *
16: * Cornell University *
17: * Ithaca, NY 14853 *
18: * *
19: * Ph- (607) 256-4934 *
20: * *
21: * Pavel.Cornell@Udel-Relay (ARPAnet) *
22: * decvax!cornell!pavel (UUCPnet) *
23: *********************************************************************/
24:
25: /*
26: * comp_main.c --- Main program for terminfo compiler
27: *
28: * $Log: comp_main.c,v $
29: * Revision 1.1 92/03/13 10:45:42 bin
30: * Initial revision
31: *
32: * Revision 2.1 82/10/25 14:45:37 pavel
33: * Added Copyright Notice
34: *
35: * Revision 2.0 82/10/24 15:16:37 pavel
36: * Beta-one Test Release
37: *
38: * Revision 1.3 82/08/23 22:29:36 pavel
39: * The REAL Alpha-one Release Version
40: *
41: * Revision 1.2 82/08/19 19:09:49 pavel
42: * Alpha Test Release One
43: *
44: * Revision 1.1 82/08/12 18:36:55 pavel
45: * Initial revision
46: *
47: *
48: */
49:
50: #ifndef COHERENT
51: static char RCSid[] =
52: "$Header: /src386/usr/bin/tic/RCS/comp_main.c,v 1.1 92/03/13 10:45:42 bin Exp $";
53: #endif
54:
55: #include <sys/types.h>
56: #include <sys/stat.h>
57: #include "compiler.h"
58:
59: char *source_file = "/etc/terminfo";
60: char *destination = SRCDIR;
61: char *usage_string = "\ttic [-v[n]] source-file\n";
62: char check_only = 0;
63:
64:
65: main (argc, argv)
66: int argc;
67: char *argv[];
68: {
69: int i;
70: int argflag = FALSE;
71:
72: debug_level = 0;
73:
74: for (i=1; i < argc; i++)
75: {
76: if (argv[i][0] == '-')
77: {
78: switch (argv[i][1])
79: {
80: case 'c':
81: check_only = 1;
82: break;
83:
84: case 'v':
85: debug_level = argv[i][2] ? atoi(&argv[i][2]) : 1;
86: break;
87:
88: default:
89: fprintf(stderr, "%s: Unknown option. Usage is:\n\t%s\n",
90: argv[0], usage_string);
91: exit(1);
92: }
93: }
94: else if (argflag)
95: {
96: fprintf(stderr, "%s: Too many file names. Usage is:\n\t%s\n",
97: argv[0], usage_string);
98: exit(1);
99: }
100: else
101: {
102: argflag = TRUE;
103: source_file = argv[i];
104: }
105: }
106:
107: init(argv[0]);
108: make_hash_table();
109: compile();
110:
111: exit(0);
112: }
113:
114:
115:
116:
117: /*
118: * init(progname)
119: *
120: * Miscelaneous initialisations
121: *
122: * Open source file as standard input
123: * Check for access rights to destination directories
124: * Create any directories which don't exist.
125: *
126: */
127:
128: init(progname)
129: char *progname;
130: {
131: struct stat statbuf;
132: char *dirnames = "abcdefghijklmnopqrstuvwxyz"
133: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
134: char *getenv();
135: char dir[2];
136:
137: start_time = time(0);
138:
139: curr_line = 0;
140:
141: if (freopen(source_file, "r", stdin) == NULL)
142: {
143: fprintf(stderr, "%s: Can't open %s\n", progname, source_file);
144: exit(1);
145: }
146:
147: if (getenv("TERMINFO") != NULL)
148: destination = getenv("TERMINFO");
149:
150: if (access(destination, 7) < 0)
151: {
152: fprintf(stderr, "%s: %s non-existant or permission denied\n",
153: progname, destination);
154: exit(1);
155: }
156:
157: if (chdir(destination) < 0)
158: {
159: fprintf(stderr, "%s: %s is not a directory\n",
160: progname, destination);
161: exit(1);
162: }
163:
164: dir[1] = '\0';
165: for (dir[0] = *dirnames; *dirnames != '\0'; dir[0] = *(++dirnames))
166: {
167: if (stat(dir, &statbuf) < 0)
168: {
169: mkdir(dir);
170: chmod(dir, 0755);
171: }
172: else if (access(dir, 7) < 0)
173: {
174: fprintf(stderr, "%s: %s/%s: Permission denied\n",
175: progname, destination, dir);
176: exit(1);
177: }
178: else if ((statbuf.st_mode & S_IFMT) != S_IFDIR)
179: {
180: fprintf(stderr, "%s: %s/%s: Not a directory\n",
181: progname, destination, dir);
182: exit(1);
183: }
184: }
185: }
186:
187:
188:
189: /*
190: * mkdir(dirname)
191: *
192: * forks and execs the mkdir program to create the given directory
193: *
194: */
195:
196: mkdir(dirname)
197: char *dirname;
198: {
199: int fork_rtn;
200: int status;
201:
202: fork_rtn = fork();
203:
204: switch (fork_rtn)
205: {
206: case 0: /* Child */
207: execl("/bin/mkdir", "mkdir", dirname, 0);
208: exit(1);
209:
210: case -1: /* Error */
211: fprintf(stderr, "tic: SYSTEM ERROR!! Fork failed!!!\n");
212: abort();
213:
214: default:
215: wait(&status);
216: if (status != 0)
217: syserr_abort("mkdir returned bad status");
218: break;
219: }
220: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.