|
|
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.8 93/04/12 14:13:01 bin
30: * Udo: third color update
31: *
32: * Revision 1.2 92/04/13 14:36:18 bin
33: * update by vlad
34: *
35: * Revision 2.1 82/10/25 14:45:37 pavel
36: * Added Copyright Notice
37: *
38: * Revision 2.0 82/10/24 15:16:37 pavel
39: * Beta-one Test Release
40: *
41: * Revision 1.3 82/08/23 22:29:36 pavel
42: * The REAL Alpha-one Release Version
43: *
44: * Revision 1.2 82/08/19 19:09:49 pavel
45: * Alpha Test Release One
46: *
47: * Revision 1.1 82/08/12 18:36:55 pavel
48: * Initial revision
49: *
50: *
51: */
52:
53: #ifdef RCSHDR
54: static char RCSid[] =
55: "$Header: /src386/usr/lib/ncurses/RCS/comp_main.c,v 1.8 93/04/12 14:13:01 bin Exp Locker: bin $";
56: #endif
57:
58: #include <sys/types.h>
59: #include <sys/stat.h>
60: #include "compiler.h"
61:
62: char *source_file = "/etc/terminfo";
63: char *destination = SRCDIR;
64: char *usage_string = "\ttic [-v[n]] source-file\n";
65: char check_only = 0;
66:
67:
68: main (argc, argv)
69: int argc;
70: char *argv[];
71: {
72: int i;
73: int argflag = FALSE;
74:
75: debug_level = 0;
76:
77: for (i=1; i < argc; i++)
78: {
79: if (argv[i][0] == '-')
80: {
81: switch (argv[i][1])
82: {
83: case 'c':
84: check_only = 1;
85: break;
86:
87: case 'v':
88: debug_level = argv[i][2] ? atoi(&argv[i][2]) : 1;
89: break;
90:
91: default:
92: fprintf(stderr, "%s: Unknown option. Usage is:\n\t%s\n",
93: argv[0], usage_string);
94: exit(1);
95: }
96: }
97: else if (argflag)
98: {
99: fprintf(stderr, "%s: Too many file names. Usage is:\n\t%s\n",
100: argv[0], usage_string);
101: exit(1);
102: }
103: else
104: {
105: argflag = TRUE;
106: source_file = argv[i];
107: }
108: }
109:
110: init(argv[0]);
111: make_hash_table();
112: compile();
113:
114: exit(0);
115: }
116:
117:
118: /*
119: * init(progname)
120: *
121: * Miscelaneous initialisations
122: *
123: * Open source file as standard input
124: * Check for access rights to destination directories
125: * Create any directories which don't exist.
126: *
127: */
128:
129: init(progname)
130: char *progname;
131: {
132: struct stat statbuf;
133: char *dirnames = "abcdefghijklmnopqrstuvwxyz"
134: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
135: char *getenv();
136: char dir[2];
137:
138: start_time = time(0);
139:
140: curr_line = 0;
141:
142: if (freopen(source_file, "r", stdin) == NULL)
143: {
144: fprintf(stderr, "%s: Can't open %s\n", progname, source_file);
145: exit(1);
146: }
147:
148: if (getenv("TERMINFO") != NULL)
149: destination = getenv("TERMINFO");
150:
151: if (access(destination, 7) < 0)
152: {
153: fprintf(stderr, "%s: %s non-existant or permission denied\n",
154: progname, destination);
155: exit(1);
156: }
157:
158: if (chdir(destination) < 0)
159: {
160: fprintf(stderr, "%s: %s is not a directory\n",
161: progname, destination);
162: exit(1);
163: }
164:
165: dir[1] = '\0';
166: for (dir[0] = *dirnames; *dirnames != '\0'; dir[0] = *(++dirnames))
167: {
168: if (stat(dir, &statbuf) < 0)
169: {
170: mkdir(dir);
171: chmod(dir, 0755);
172: }
173: else if (access(dir, 7) < 0)
174: {
175: fprintf(stderr, "%s: %s/%s: Permission denied\n",
176: progname, destination, dir);
177: exit(1);
178: }
179: else if ((statbuf.st_mode & S_IFMT) != S_IFDIR)
180: {
181: fprintf(stderr, "%s: %s/%s: Not a directory\n",
182: progname, destination, dir);
183: exit(1);
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.