Annotation of 43BSDTahoe/new/spms/src/bin/pd/pd.c, revision 1.1.1.1

1.1       root        1: static char *rcsid = "$Header$";
                      2: /*
                      3:  * pd - change working project directory
                      4:  *
                      5:  * Author: Peter J. Nicklin
                      6:  */
                      7: #include <stdio.h>
                      8: #include "macro.h"
                      9: #include "null.h"
                     10: #include "path.h"
                     11: #include "pdb.h"
                     12: #include "pld.h"
                     13: #include "spms.h"
                     14: #include "yesno.h"
                     15: 
                     16: char *PGN = "pd";                      /* program name */
                     17: 
                     18: main(argc, argv)
                     19:        int argc;
                     20:        char **argv;
                     21: {
                     22:        extern int PPDEBUG;             /* project pathname debug flag */
                     23:        char *alias;                    /* project directory alias */
                     24:        char *cmd;                      /* change directory command pointer */
                     25:        char *cwp;                      /* current project regular pathname */
                     26:        char dirdesc[DIRDESCSIZE];      /* project directory description */
                     27:        char *getcwp();                 /* get current project pathname */
                     28:        char *pbgetstring();            /* get specified string field */
                     29:        char *ppathname;                /* project pathname */
                     30:        int dflag = NO;                 /* print description flag */
                     31:        int errpdb();                   /* print database error message */
                     32:        int pfndent();                  /* find and load database entry */
                     33:        int status = 0;                 /* exit status */
                     34:        int xppath();                   /* expand project pathname */
                     35:        PATH pathbuf;                   /* pathname struct buffer */
                     36:        PDB *openpdb();                 /* open database */
                     37:        PDB *pldp;                      /* project link directory stream */
                     38:        void nodir();                   /* "can't find dir" fatal error call */
                     39: 
                     40:        cmd = "cd";
                     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 'p':
                     55:                                        cmd = "pushd";
                     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: pd [-d] pdirname");
                     67: 
                     68:        /* print the target directory */
                     69:        ppathname = (argc < 1) ? CURPROJECT : *argv;
                     70:        if (xppath(ppathname, &pathbuf) == -1)
                     71:                nodir(ppathname);
                     72:        else switch (pathbuf.p_mode & P_IFMT)
                     73:                {
                     74:                case P_IFNEW:
                     75:                        nodir(ppathname);
                     76:                        break;
                     77:                case P_IFREG:
                     78:                        break;
                     79:                case P_IFPDIR:
                     80:                case P_IFHOME:
                     81:                case P_IFPROOT:
                     82:                        /* change project if different (for cd only) */
                     83:                        if (*cmd == 'c' && (cwp = getcwp()) != NULL)
                     84:                                if (!EQUAL(cwp, pathbuf.p_project))
                     85:                                        printf("setenv PROJECT %s;",
                     86:                                               pathbuf.p_project);
                     87:                        break;
                     88:                }
                     89:        printf("%s %s", cmd, pathbuf.p_path);
                     90: 
                     91:        /* print project directory description */
                     92:        if (dflag == YES && (pathbuf.p_mode&P_IFMT) != P_IFREG)
                     93:                {
                     94:                if ((pathbuf.p_mode&P_IFMT) == P_IFPDIR)
                     95:                        alias = pathbuf.p_alias;
                     96:                else
                     97:                        alias = CURPROJECT;
                     98:                if ((pldp = openpdb(PLDNAME, pathbuf.p_project, "r")) == NULL)
                     99:                        exit(errpdb((PDB *) NULL));
                    100:                if (pfndent(alias, pldp) == NO)
                    101:                        fatal("can't find %s alias in %s", alias, pldp->path);
                    102:                if (*pbgetstring(PDIRDESC, dirdesc) != '\0')
                    103:                        fprintf(stderr, "%s\n", dirdesc);
                    104:                }
                    105:        exit(0);
                    106: }
                    107: 
                    108: 
                    109: 
                    110: /*
                    111:  * nodir() complains that it can't find the directory and calls exit(1).
                    112:  */
                    113: void
                    114: nodir(ppathname)
                    115:        char *ppathname;                /* project pathname */
                    116: {
                    117:        *PGN = '\0';
                    118:        patherr(ppathname);
                    119:        exit(1);
                    120: }

unix.superglobalmegacorp.com

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