|
|
1.1 root 1:
2: #include <stdio.h>
3: #include <fcntl.h>
4: #include <curses.h>
5: #include "uuinstall.h"
6:
7:
8: main()
9: {
10: char choice;
11: int position; /* position of entry within file,
12: * returned by get_entry.
13: */
14:
15: umask(0177);
16: init_curses(); /* initialize our curses stuff */
17:
18: do{
19: dialflag = 0; /* set our flags to a default condition */
20: sysflag = 0;
21: portflag = 0;
22:
23: prevrow = 0; /* set up our coordinates to highlite */
24: prevcol = 1; /* an entry */
25: newrow = 0;
26: newcol = 1;
27:
28: open_menu(); /* print our opening (main) menu */
29:
30: choice = get_main_opt(); /* get user's choice of file to
31: * work with or possibly exit.
32: */
33:
34: /* Here's the scoop: Now that we have a file to work with, we need to find
35: * out what to do with it... modify, add, delete or view and entry. We call
36: * get_action() to determine this. get_action() will return a -1 if we're not
37: * going to do anything. If we're going to view, delete or edit a file, we
38: * call open_config() file to open the proper file and set up our selection
39: * screen, then we call get_entry to get the entry number in the file we
40: * will work with. If we don't select an entry with get_entry(), a -1 is
41: * returned, else we display the record.
42:
43: * display_rec() does more than just display a record. From there, we delete
44: * an entry or modify and entry.
45: */
46: switch(choice){
47: case 'd': dialflag = 1; /* work with dial file */
48: action = get_action();
49: if ((action != 'a') && (action != -1)){
50: open_config_file();
51: position = get_entry();
52: if (position != -1)
53: display_rec(position,action);
54: }
55: if(action == 'a')
56: add_dial();
57: break;
58:
59: case 'p': portflag = 1; /* work with port file */
60: action = get_action();
61: if ((action != 'a') && (action != -1)){
62: open_config_file();
63: position = get_entry();
64: if (position != -1);
65: display_rec(position,action);
66: }
67: if(action == 'a')
68: add_port();
69: break;
70:
71: case 's': sysflag = 1; /* work with sys file */
72: action = get_action();
73: if ((action != 'a') && (action != -1)){
74: open_config_file();
75: position = get_entry();
76: if(position != -1)
77: display_rec(position,action);
78: }
79: if (action == 'a')
80: add_sys();
81: break;
82:
83: case 'q': exit_program(0);
84: /* NOT REACHED */
85: }
86: choice = '\0';
87: action = '\0';
88: wclear(selwin);
89: wclear(promptwin);
90: wrefresh(selwin);
91: wrefresh(promptwin);
92: }
93: while (choice != 'q');
94: }
95:
96:
97: /* initialize curses stuff: allocate new windows, set up stdscr */
98:
99: init_curses()
100: {
101:
102: /* This is the window that will be used to display and highlight
103: * file entry selections.
104: */
105: if ((selwin = newwin(20, 80, 0 ,0)) == NULL)
106: fatal("Failed to allocate selection window.");
107:
108: /* this window will be used to display prompts and some help info */
109: if((promptwin = newwin(4, 40, 20, 0)) == NULL)
110: fatal("Failed to allocate prompt window.");
111:
112: /* this window will do the data entry and display work as well as
113: * some prompting and help functions.
114: */
115: if((portwin = newwin(24, 80, 0, 0)) == NULL)
116: fatal("Failed to allocate prompt window.");
117:
118:
119: initscr();
120: raw();
121: noecho();
122: clear();
123: refresh();
124: }
125:
126:
127: /* exit_program: resets curses stuff and exits program. */
128:
129: exit_program(stat)
130: int stat; /* exit status passed by calling function */
131: {
132: clear();
133: refresh();
134: echo();
135: noraw();
136: exit(stat);
137: }
138:
139: /* open_menu() prints our opening screen where we display the name of
140: * the system we happen to be and prompt to examine the port, sys or
141: * dial files.
142: */
143:
144: open_menu()
145: {
146:
147: move(3,25);
148: standout();
149: printw("UUCP Configuration: Main menu");
150: standend();
151:
152: move(SYSLINE,5);
153: printw("<s>ys file Configuration information for specific systems");
154: move(PORTLINE,5);
155: printw("<p>ort file Information for individual ports");
156: move(DIALLINE,5);
157: printw("<d>ial file Configuration information for dialing modems");
158:
159:
160: move(20,5);
161: printw("Press the letter corresponding to the file you wish to examine");
162: move(21,27);
163: printw("or <q> to quit.");
164: refresh();
165: }
166:
167:
168: /* get_main_opt(): Gets the user's choice of which file to process,
169: * which is one of the uucp config files or to exit.
170: */
171:
172: get_main_opt()
173: {
174:
175: char ch;
176:
177: ch = ' ';
178:
179: while( (ch != 'q') && (ch != 'p') && (ch != 's') && (ch != 'd')){
180: ch = getch();
181: }
182:
183: return (ch);
184: }
185:
186:
187: /* get_action(): The user will have selected a configuration file to work
188: * with by this time. This will prompt the user to perform
189: * one of the following functions: ADD an entry, REMOVE an
190: * existing entry or MODIFY an existing entry.
191: */
192:
193: get_action()
194: {
195: char ch;
196: char file[5];
197: clear();
198:
199: move(1,34);
200: standout();
201: printw("Action menu");
202: standend();
203:
204: move(5,17);
205:
206: /* determine which file we are working with from the flag(s) set and
207: * print a small message to reflect this as a cue to the user.
208: */
209:
210: if(dialflag)
211: strcpy(file,"dial");
212: if(sysflag)
213: strcpy(file,"sys");
214: if(portflag)
215: strcpy(file, "port");
216:
217: printw("You have selected to work with the %s file.",file);
218: move(7,17);
219: printw("Do you wish to:");
220: move(8,32);
221: printw("<a>dd an entry");
222: move(9,32);
223: printw("<d>elete an existing entry");
224: move(10,32);
225: printw("<m>odify an existing entry");
226: move(11,32);
227: printw("<v>iew an existing entry");
228:
229: move(15,12);
230: printw("Press the letter corresponding to the action you wish to");
231: move(16,18);
232: printw("perform or press <RETURN> for the main menu.");
233:
234: refresh();
235:
236: do{
237: ch = getch();
238: }
239: while( (ch!='\n') && (ch!='a') && (ch!='d') && (ch!='m') && (ch!='v'));
240: clear();
241: refresh();
242:
243: if (ch == '\n')
244: ch = -1;
245:
246: return (ch);
247: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.