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