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
interact()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);
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
intrpt()93 intrpt()
94 {
95 firsttime = 0;
96 printf("\n");
97 longjmp(env, 0);
98 }
99