|
|
1.1 ! root 1: /* interact.c 1.8 83/07/27 */ ! 2: #include <stdio.h> ! 3: #include "command.h" ! 4: #include <setjmp.h> ! 5: #include <signal.h> ! 6: ! 7: #define errinp { printf("??\n"); break; } ! 8: ! 9: jmp_buf env; ! 10: int firsttime = 0; ! 11: ! 12: interact() ! 13: ! 14: { ! 15: ! 16: int i, intrpt(); ! 17: char cmd[80], *rest, *index(); ! 18: ! 19: for (;;) { ! 20: if (firsttime++ == 0) { ! 21: signal(SIGINT, intrpt, -1); ! 22: (void) setjmp(env); ! 23: } ! 24: if (cmdinp(cmd) < 0) ! 25: return (0); ! 26: rest = index(cmd, ' '); ! 27: if (rest) ! 28: *rest++ = '\0'; ! 29: i = chkcmd(cmd); ! 30: #ifdef DEBUG ! 31: printf("command: %s, ind: %d\n", cmd, i); ! 32: #endif ! 33: ! 34: switch (i) { ! 35: default: ! 36: errinp; ! 37: break; ! 38: case CMD_DIR: ! 39: case CMD_LS: ! 40: dispdir(); ! 41: break; ! 42: ! 43: case CMD_RENAME: ! 44: rename(rest); ! 45: break; ! 46: ! 47: case CMD_OCOPY: ! 48: copyc(rest, 0); ! 49: break; ! 50: ! 51: case CMD_ICOPY: ! 52: pip(rest, 0); ! 53: break; ! 54: ! 55: case CMD_DELETE: ! 56: case CMD_ERASE: ! 57: delete(rest); ! 58: break; ! 59: ! 60: case CMD_EXIT: ! 61: case CMD_LOGOUT: ! 62: return(0); ! 63: ! 64: case CMD_TYPE: ! 65: copy(rest, stdout, 0); ! 66: break; ! 67: ! 68: case CMD_HELP: ! 69: help(); ! 70: break; ! 71: ! 72: case CMD_OCCOPY: ! 73: copyc(rest, 1); ! 74: break; ! 75: ! 76: case CMD_ICCOPY: ! 77: pip(rest,1); ! 78: break; ! 79: ! 80: case CMD_DUMP: ! 81: dump(rest); ! 82: break; ! 83: ! 84: } ! 85: } ! 86: } ! 87: ! 88: /* ! 89: * handle interrupts (in interactive mode only), ! 90: * just (long)jump back to command input mode ! 91: */ ! 92: ! 93: intrpt() ! 94: { ! 95: firsttime = 0; ! 96: printf("\n"); ! 97: longjmp(env, 0); ! 98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.