Annotation of 43BSDTahoe/new/cpm/src/cmdhdl.c, revision 1.1.1.1

1.1       root        1: /*     cmdhdl.c        1.12    85/03/24        */
                      2: 
                      3: #include <ctype.h>
                      4: #include <stdio.h>
                      5: #include "cpmio.h"
                      6: 
                      7: /*
                      8:  * Write prompt to stdout.
                      9:  * Read command from stdin.
                     10:  * return the number of characters read.
                     11:  */
                     12: 
                     13: cmdinp(cmd)
                     14:        char cmd[];
                     15: {
                     16: 
                     17:        int cnt = 0;
                     18: 
                     19:        while (cnt == 0) {
                     20:                printf("cpm> ");
                     21:                while((cmd[cnt] = getchar()) != '\n') {
                     22:                        if (cmd[cnt] == EOF)
                     23:                                return(-1);
                     24:                        cnt++;
                     25:                }
                     26:                cmd[cnt] = '\0';
                     27:        }
                     28:        return (cnt);
                     29: }
                     30: 
                     31: /*
                     32:  * Compare the command pointed to by cmd to the table of defined
                     33:  * commands in defcmd, return the command index if found, null
                     34:  * otherwise.
                     35:  */
                     36: 
                     37: struct command {
                     38:        char *cmd;
                     39:        int  lth, abbr;
                     40: } defcmd[] = {
                     41:        "directory",    9,      1,              /* 1 */
                     42:        "rename",       6,      1,              /* 2 */
                     43:        "copyin",       6,      0,              /* 3 */
                     44:        "delete",       6,      1,              /* 4 */
                     45:        "erase",        5,      1,              /* 5 */
                     46:        "exit",         4,      1,              /* 6 */ 
                     47:        "type",         4,      1,              /* 7 */
                     48:        "help",         4,      1,              /* 8 */
                     49:        "ls ",          2,      0,              /* 9 */ 
                     50:        "logout",       6,      1,              /* 10 */        
                     51:        "ccopyin",      7,      0,              /* 11 */
                     52:        "ccopyout",     8,      0,              /* 12 */
                     53:        "copyout",      7,      0,              /* 13 */
                     54:        "dump",         4,      1,              /* 14 */
                     55:        /*"!! ",                2,      0,              /* 15 */
                     56:        '\0' , 0 };
                     57: 
                     58: chkcmd(cmd)
                     59:        char *cmd;
                     60: 
                     61: {
                     62:        int index, len;
                     63: 
                     64:        len = strlen(cmd);
                     65:        for (index=0; *defcmd[index].cmd != '\0' ; index++) {
                     66:                if ((len == 3) && defcmd[index].abbr) {
                     67:                        if (strncmp(defcmd[index].cmd, cmd, 3) == 0)
                     68:                                goto ok;
                     69:                } else {
                     70:                        if (strncmp(defcmd[index].cmd, cmd, defcmd[index].lth) 
                     71:                                                                        == 0)
                     72:                                goto ok;
                     73:                }
                     74:        }
                     75:        return (0);
                     76: 
                     77: ok:
                     78:        if (len > defcmd[index].lth)
                     79:                return (0);
                     80:        else
                     81:                return (++index);
                     82: }
                     83: 
                     84: help()
                     85: {
                     86: 
                     87:        FILE *fd, *fopen();
                     88:        int c;
                     89: 
                     90:        if ((fd = fopen(HELPFILE, "r")) == NULL)
                     91:                printf("Can't find help file (cpm.hlp) \n");
                     92:        else
                     93:                while ( (c = getc(fd)) != EOF) 
                     94:                        putchar(c);
                     95: }
                     96: 
                     97: 
                     98: /*
                     99:  * Separate fname into name and extension, return NULL if
                    100:  * bad file name, otherwise 1.
                    101:  */
                    102: 
                    103: namesep(fname, name, ext)
                    104:        char fname[], name[], ext[];
                    105: {
                    106: 
                    107:        int i = 0;
                    108: 
                    109:        strncpy(name, "         ", 9);
                    110:        strncpy(ext, "    ", 4);
                    111:        while(i<8 && !(iscntrl(fname[i])) && fname[i] != '.') {
                    112:                name[i] = fname[i];
                    113:                i++;
                    114:        }
                    115: #ifdef DEBUG
                    116:        printf("namesep: name=%s, len=%d ", name, i);
                    117: #endif
                    118:        clean(name, 8);
                    119:        if (fname[i] == '.') {
                    120:                strncpy(ext, fname+i+1, 3);
                    121:                clean(ext, 3);
                    122:        } else {
                    123:                if (fname[i] != ' ' && fname[i] != '\0') {
                    124:                        fprintf(stderr, "Illegal filename\n");
                    125:                        return (NULL);
                    126:                }
                    127:        }
                    128: #ifdef DEBUG
                    129:        printf("name: %s, ext: %s, combined: %s\n", name, ext,
                    130:                fixname(name, ext));
                    131: #endif
                    132:        if (!(isalnum(name[0]))) {
                    133:                fprintf(stderr, "Illegal filename\n");
                    134:                return(NULL);
                    135:        }
                    136:        return(1);
                    137: }
                    138: 
                    139: clean(str, len)
                    140: char str[];
                    141: int len;
                    142: {
                    143:        str[len] = '\0';
                    144:        while (len-- > 0) {
                    145:                if (!(isspace(str[len])) && !(iscntrl(str[len]))) break;
                    146:                str[len] = ' ';
                    147:        }
                    148:        while (len >= 0) {
                    149:                str[len] = islower(str[len]) ? toupper(str[len]):str[len] ;
                    150:                len--;
                    151:        }
                    152: }

unix.superglobalmegacorp.com

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