Annotation of cci/usr/src/bin/cdb/cmdline.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)cmdline.c   2.6";
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include "cdb.h"
        !             5: 
        !             6: extern char *gets();
        !             7: 
        !             8: FILE   *vfpRecord, *vfpPlayback;       /* not every file has <stdio.h> */
        !             9: export int     vcStepPlayback;
        !            10: export FLAGT   vfRecord;
        !            11: 
        !            12: #define chEOF 04       /* a ^D */
        !            13: #define cbSbCmd 200    /* max command length */
        !            14: #define cbSbQuery 20   /* max query (Yes/No) length */
        !            15: 
        !            16: /* this file contains the routines that read the commnad line from the TTY and
        !            17:  * maintain the record & playback files.
        !            18:  * TkNext(), in tk.c, the tokenizer, is what most routines call to actually get
        !            19:  * something from the current command line.
        !            20:  */
        !            21: 
        !            22: 
        !            23: /* N E X T   C M D */
        !            24: 
        !            25: local void NextCmd(sbCmd, cbCmd, sbPrompt)
        !            26: char   *sbCmd, *sbPrompt;
        !            27: int    cbCmd;
        !            28: {
        !            29:        FLAGT   fDoit;
        !            30:        char    *sbT, *sbT2;
        !            31:        char    sbQuery[cbSbQuery];
        !            32: 
        !            33:        if (sbPrompt != sbNil AND *sbPrompt != chNull)
        !            34:                printf(sbPrompt);
        !            35:        while (vfpPlayback != NULL) {
        !            36:                sbT = fgets(sbCmd, cbCmd, vfpPlayback);
        !            37:                if ((sbT2 = strrchr(sbCmd, '\n')) != NULL)
        !            38:                        *sbT2 = chNull; /* step on new-line */
        !            39:                if ((vcStepPlayback == 0)
        !            40:                    OR (--vcStepPlayback > 0)) {
        !            41:                        if (sbT != sbNil)
        !            42:                                printf("%s\n", sbCmd);
        !            43:                } 
        !            44:                else {  /* we are doing playback stepping */
        !            45:                        if (sbT != sbNil) {
        !            46:                                printf("%s  (<cr>, <#>, C, Q, S or ?): ", sbT);
        !            47:                                fDoit = false;
        !            48:                                while (!fDoit) {
        !            49:                                        gets(sbQuery);
        !            50:                                        fDoit = true;
        !            51:                                        switch (*sbQuery) {
        !            52:                                        case 'Q':   
        !            53:                                                fclose(vfpPlayback);
        !            54:                                                sbT = sbNil;
        !            55:                                                if ((sbPrompt != sbNil)
        !            56:                                                    AND (*sbPrompt != chNull))
        !            57:                                                        printf(sbPrompt);
        !            58:                                                /* and fall through */
        !            59:                                        case 'S':   
        !            60:                                                vcStepPlayback = 1;
        !            61:                                                goto contMainLoop;
        !            62:                                                break;
        !            63:                                        case 'C':   
        !            64:                                                vcStepPlayback = 0;
        !            65:                                                break;
        !            66:                                        case chNull:
        !            67:                                                vcStepPlayback = 1;
        !            68:                                                break;
        !            69:                                        case '?':
        !            70:                                                printf("<cr> executes THIS command line,\n");
        !            71:                                                printf("<#> does that number of command lines,\n");
        !            72:                                                printf("S skips this command,\n");
        !            73:                                                printf("Q quits playback mode,\n");
        !            74:                                                printf("C continues until the end of ALL playback files.\n");
        !            75:                                                fDoit = false;
        !            76:                                                break;
        !            77:                                        case '0': 
        !            78:                                        case '1': 
        !            79:                                        case '2': 
        !            80:                                        case '3':
        !            81:                                        case '4': 
        !            82:                                        case '5': 
        !            83:                                        case '6': 
        !            84:                                        case '7':
        !            85:                                        case '8': 
        !            86:                                        case '9':
        !            87:                                                vcStepPlayback = atoi(sbQuery);
        !            88:                                                break;
        !            89:                                        default:        
        !            90:                                                fDoit = false;
        !            91:                                        } /* switch */
        !            92:                                } /* while */
        !            93:                        } /* if */
        !            94:                } /* if */
        !            95:                if (sbT != sbNil) {
        !            96:                        return;
        !            97:                } 
        !            98:                else {
        !            99:                        fclose(vfpPlayback);
        !           100:                        vfpPlayback = NULL;
        !           101:                        /* and fall into `from the TTY code ' */
        !           102:                } /* if */
        !           103:                break;
        !           104: contMainLoop: 
        !           105:                ;
        !           106:        } /* while */
        !           107: 
        !           108:        /* there is no playback file, read from terminal */
        !           109:        sbT = gets(sbCmd);
        !           110:        if (sbT == sbNil) {
        !           111:                sbCmd[0] = chNull;
        !           112:        } 
        !           113:        else if (*sbT == chNull) {
        !           114:                sbT[0] = '~';
        !           115:                sbT[1] = chNull;
        !           116:        } /* if */
        !           117: } /* NextCmd */
        !           118: 
        !           119: 
        !           120: /* R E C O R D  C M D */
        !           121: 
        !           122: local void RecordCmd(sbCmd)
        !           123: char   *sbCmd;
        !           124: {
        !           125:        if (   vfRecord
        !           126:            AND (vfpRecord != NULL)
        !           127:            AND (*sbCmd != '!')
        !           128:            AND (*sbCmd != '>')
        !           129:            AND (*sbCmd != '<') ) {
        !           130:                fprintf(vfpRecord, "%s\n", sbCmd);      /* make a recording */
        !           131:        } /* if */
        !           132: } /* RecordCmd */
        !           133: 
        !           134: 
        !           135: /* Y E S   N O */
        !           136: 
        !           137: export int YesNo(sbPrompt)
        !           138: char   *sbPrompt;
        !           139: {
        !           140:        char    sbAnswer[cbSbQuery];
        !           141: 
        !           142:        NextCmd(sbAnswer, cbSbQuery, sbPrompt);
        !           143:        RecordCmd(sbAnswer);
        !           144:        return(sbAnswer[0] == 'y' OR sbAnswer[0] == 'Y');
        !           145: } /* YesNo */
        !           146: 
        !           147: 
        !           148: /* S E T   P L A Y B A C K */
        !           149: 
        !           150: local void SetPlayback(sbPlayback, fSinglestep)
        !           151: char   *sbPlayback;
        !           152: FLAGT  fSinglestep;
        !           153: {
        !           154:        FILE    *fpTemp;
        !           155: 
        !           156:        if (vfpPlayback != NULL)
        !           157:                fclose(vfpPlayback);
        !           158:        if ((sbPlayback == sbNil) OR (*sbPlayback == chNull))
        !           159:                UError("No playback name specified");
        !           160:        if ((fpTemp = fopen(sbPlayback, "r")) == NULL)
        !           161:                UError("Can't open %s as playback file", sbPlayback);
        !           162:        printf("Playing back from %s\n", sbPlayback);
        !           163:        vfpPlayback = fpTemp;
        !           164:        vcStepPlayback = (fSinglestep) ? 1 : 0;
        !           165: } /* SetPlayback */
        !           166: 
        !           167: 
        !           168: /* S E T   R E C O R D */
        !           169: 
        !           170: local void SetRecord(sbRecord)
        !           171: char   *sbRecord;
        !           172: {
        !           173:        FILE    *fpTemp;
        !           174: 
        !           175:        if (vfpRecord != NULL) {
        !           176:                printf("Closing record file\n");
        !           177:                fclose(vfpRecord);
        !           178:                vfRecord = false;
        !           179:                vfpRecord = NULL;
        !           180:        } /* if */
        !           181:        if ((sbRecord == sbNil) OR (*sbRecord == chNull))
        !           182:                return;
        !           183:        if ((fpTemp = fopen(sbRecord, "w+")) == NULL)
        !           184:                UError("Can't open %s as record file", sbRecord);
        !           185:        vfRecord = true;
        !           186:        vfpRecord = fpTemp;
        !           187:        printf("Recording is ON, going to %s\n", sbRecord);
        !           188: } /* SetRecord */
        !           189: 
        !           190: 
        !           191: /* S T A T E   R E C O R D */
        !           192: 
        !           193: local void StateRecord(fOn)
        !           194: FLAGT  fOn;
        !           195: {
        !           196:        vfRecord = fOn;
        !           197:        printf("Recording is %s\n", (vfRecord) ? "ON" : "OFF");
        !           198:        if ((vfRecord)
        !           199:            AND (vfpRecord == NULL))
        !           200:                UError("WARNING: no record file is open");
        !           201: } /* StateRecord */
        !           202: 
        !           203: 
        !           204: /* S H O W   S T A T E */
        !           205: 
        !           206: local void ShowState()
        !           207: {
        !           208:        printf("Debugging %s, %d files %d procedures\n",
        !           209:        vsbSymfile, vifdMac-3, vipdMac-1);
        !           210:        if (vfnCore != fnNil)
        !           211:                printf("Core file is %s\n", vsbCorefile);
        !           212:        else
        !           213:                printf("No core file\n");
        !           214:        if (vpid != pidNil)
        !           215:                printf("There is an active child process, #%d\n", vpid);
        !           216:        else
        !           217:                printf("No active child process\n");
        !           218:        if (viadMac == 0)
        !           219:                printf("No assertions.\n");
        !           220:        else if (vas == asSuspended)
        !           221:                printf("Assertions are suspended.\n");
        !           222:        else
        !           223:                printf("%d assertions are active.\n", viadMac);
        !           224:        StateRecord(vfRecord);
        !           225:        printf("Searches are %scase sensitive\n",
        !           226:        (vcaseMod!=0) ? "NOT " : "");
        !           227: } /* ShowState */

unix.superglobalmegacorp.com

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