1: static char *rcsid = "$Header$";
2: /*
3: * chproject - change current project
4: *
5: * Author: Peter J. Nicklin
6: */
7: #include <stdio.h>
8: #include "bin.h"
9: #include "macro.h"
10: #include "path.h"
11: #include "pdb.h"
12: #include "pld.h"
13: #include "spms.h"
14: #include "system.h"
15: #include "yesno.h"
16:
17: char *PGN; /* program name */
18: int CSHELL = 0; /* C shell command interpreter flag */
19:
20: main(argc, argv)
21: int argc;
22: char **argv;
23: {
24: extern int PPDEBUG; /* project pathname debug flag */
25: char *getcwp(); /* get current working project */
26: char *getshell(); /* get command shell pathname */
27: char *pathtail(); /* remove pathname head */
28: int chproject(); /* change project */
29: int dflag = NO; /* project description flag */
30: int fflag = YES; /* execute PROJECTRC file */
31: int status = 0; /* exit status */
32: void mustchdir(); /* must change directory */
33: void printPROJECT(); /* print PROJECT value */
34: void printcd(); /* print "cd" command */
35: void printdesc(); /* print project description */
36: void printrc(); /* print PROJECTRC execution request */
37:
38: PGN = pathtail(*argv);
39: if (EQUAL(pathtail(getshell()), pathtail(CSH))) CSHELL++;
40:
41: {
42: register char *s; /* option pointer */
43: while (--argc > 0 && **++argv == '-')
44: {
45: for (s = argv[0]+1; *s != '\0'; s++)
46: switch (*s)
47: {
48: case 'D':
49: PPDEBUG = YES;
50: break;
51: case 'd':
52: dflag = YES;
53: break;
54: case 'f':
55: fflag = NO;
56: break;
57: default:
58: warn("bad option -%c", *s);
59: status = 1;
60: goto endfor;
61: }
62: endfor: continue;
63: }
64: }
65: if (status == 1 || argc != 1)
66: fatal("usage: chproject [-df] projectname");
67: if (chproject(*argv) == NO)
68: exit(1);
69: mustchdir(getcwp());
70: printcd(getcwp());
71: printPROJECT();
72: if (fflag == YES && FILEXIST(PROJECTRC))
73: printrc();
74: if (dflag == YES) printdesc();
75: exit(0);
76: }
77:
78:
79:
80: /*
81: * mustchdir() must change current working directory or die.
82: */
83: void
84: mustchdir(pathname)
85: char *pathname; /* destination directory */
86: {
87: if (!CHDIR(pathname))
88: fatal("permission denied");
89: }
90:
91:
92:
93: /*
94: * printPROJECT prints PROJECT environment variable value.
95: */
96: void
97: printPROJECT()
98: {
99: char *getcwp(); /* get current working project */
100:
101: if (CSHELL)
102: printf("; setenv PROJECT ");
103: else
104: printf("; export PROJECT; PROJECT=");
105:
106: printf("%s", getcwp());
107: }
108:
109:
110:
111: /*
112: * printcd() prints the "cd" change directory command.
113: */
114: void
115: printcd(pathname)
116: char *pathname; /* pathname of destination directory */
117: {
118: printf("cd %s", pathname);
119: }
120:
121:
122:
123: /*
124: * printrc() prints the PROJECTRC project initialization file execution
125: * request.
126: */
127: void
128: printrc()
129: {
130: if (CSHELL)
131: printf("; source %s", PROJECTRC);
132: else
133: printf("; . %s", PROJECTRC);
134: }
135:
136:
137:
138: /*
139: * printdesc() prints project description.
140: */
141: void
142: printdesc()
143: {
144: char dirdesc[DIRDESCSIZE]; /* project directory description */
145: char *pbgetstring(); /* get specified string field */
146: int errpdb(); /* print database error message */
147: int pfndent(); /* find and load database entry */
148: PDB *openpdb(); /* open database */
149: PDB *pldp; /* project link directory stream */
150:
151: if ((pldp = openpdb(PLDNAME, CURDIR, "r")) == NULL)
152: exit(errpdb((PDB *) NULL));
153: if (pfndent(CURPROJECT, pldp) == NO)
154: fatal("can't find %s alias in %s", CURPROJECT, pldp->path);
155: if (*pbgetstring(PDIRDESC, dirdesc) != '\0')
156: fprintf(stderr, "%s\n", dirdesc);
157: }
Defined functions
main
defined in line
20;
never used
Defined variables
PGN
defined in line
17; used 1 times
rcsid
defined in line
1;
never used