Annotation of 43BSDTahoe/new/spms/src/bin/chproject/chproject.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.