This is s_extrnl.c in view mode; [Download] [Up]
/* * Display the external protocol setup, query for changes. A non-zero * return code means something was changed. */ #include <stdio.h> #include <curses.h> #include "config.h" #include "extrnl.h" #include "misc.h" int ext_setup() { extern char *null_ptr; WINDOW *ext_win, *newwin(); int i, ret_code; static int ext_prompt(); char *str, *get_str(); static void disp_ext(); ext_win = newwin(23, 80, 0, 0); horizontal(ext_win, 0, 0, 27); mvwattrstr(ext_win, 0, 28, A_BOLD, "External Protocol Setup"); horizontal(ext_win, 0, 52, 27); mvwaddstr(ext_win, 3, 36, "UPLOAD"); mvwaddstr(ext_win, 5, 8, "Name"); mvwaddstr(ext_win, 5, 21, "Command line"); mvwaddstr(ext_win, 5, 54, "Requires file list?"); mvwaddstr(ext_win, 10, 35, "DOWNLOAD"); mvwaddstr(ext_win, 12, 8, "Name"); mvwaddstr(ext_win, 12, 21, "Command line"); mvwaddstr(ext_win, 12, 54, "Requires file list?"); /* display the current list */ disp_ext(ext_win); horizontal(ext_win, 19, 0, 80); mvwattrstr(ext_win, 20, 0, A_BOLD, "OPTION ==> "); mvwaddstr(ext_win, 20, 58, "Press <ESC> to return"); wmove(ext_win, 20, 12); touchwin(ext_win); wrefresh(ext_win); /* get the option */ ret_code = 0; while ((str = get_str(ext_win, 1, "1234356", "")) != NULL) { switch(*str) { case '1': if (ext_prompt(ext_win, 1, 0, 6)) ret_code++; break; case '2': if (ext_prompt(ext_win, 1, 1, 7)) ret_code++; break; case '3': if (ext_prompt(ext_win, 1, 2, 8)) ret_code++; break; case '4': if (ext_prompt(ext_win, 0, 0, 13)) ret_code++; break; case '5': if (ext_prompt(ext_win, 0, 1, 14)) ret_code++; break; case '6': if (ext_prompt(ext_win, 0, 2, 15)) ret_code++; break; } mvwaddstr(ext_win, 20, 12, " "); clear_line(ext_win, 21, 0, FALSE); clear_line(ext_win, 22, 0, FALSE); wmove(ext_win, 20, 12); wrefresh(ext_win); } /* * Recalculate the number of entries. Please notice that if you * create an empty entry (a hole), all entries after that are ignored. * The software doesn't compact the holes out.. you're on your own. */ if (ret_code) { for (i=0; i<3; i++) { if (extrnl->name[1][i] == null_ptr) break; } extrnl->up_entries = i; for (i=0; i<3; i++) { if (extrnl->name[0][i] == null_ptr) break; } extrnl->dn_entries = i; } delwin(ext_win); return(ret_code); } /* * Display the current list of external file transfer programs. */ static void disp_ext(win) WINDOW *win; { int i, up, entry, line; up = 1; line = 6; for (i=0; i<6; i++) { if (i < 3) entry = i; else { up = 0; entry = i-3; line = 10; } mvwprintw(win, i+line, 5, "%d) %-12.12s %-40.40s %c\n", i+1, extrnl->name[up][entry], extrnl->command[up][entry], extrnl->prompt[up][entry]); } return; } /* * Prompt for the info in the database. A non-zero return code means * that something was changed. To delete the line, you enter a single * space character at the first prompt. */ static int ext_prompt(win, up, entry, line) WINDOW *win; int up, entry, line; { extern char *v_yn[], *null_ptr; char *ans, t_name[80], t_command[80], *str_prompt(), *str_rep(); char *strcpy(), *menu_prompt(); /* get temp name */ if ((ans = str_prompt(win, line, 8, "Protocol name", "")) == NULL) return(0); strcpy(t_name, ans); clear_line(win, 21, 0, FALSE); /* are we zapping the line */ if (ans == null_ptr) { extrnl->name[up][entry] = null_ptr; extrnl->command[up][entry] = null_ptr; extrnl->prompt[up][entry] = 'N'; return(1); } /* get temp command */ if ((ans = str_prompt(win, line, 21, "Command line", "")) == NULL) return(0); strcpy(t_command, ans); clear_line(win, 21, 0, FALSE); /* get temp prompt */ if ((ans = menu_prompt(win, line, 63, "Does it require a file list", v_yn)) == NULL) return(0); wrefresh(win); /* store 'em for real */ extrnl->name[up][entry] = str_rep(extrnl->name[up][entry], t_name); extrnl->command[up][entry] = str_rep(extrnl->command[up][entry], t_command); extrnl->prompt[up][entry] = *ans; return(1); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.