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