|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.