/* * Program source is Copyright 1993 Colten Edwards. * Central Data Services is granted the right to use this source * in thier product known as Quote Menu. They are also granted the right * to modify this source in the advent of problems and or new features * which they may want to add to the program. */ #include #include #include #define MAXPATH MAXNAMLEN /* Defines for shadows. Used in the Box rountine. */ #define NO_SHADOW 0 #define SINGLER_SHADOW 1 #define DOUBLER_SHADOW 2 #define SINGLEL_SHADOW 3 #define DOUBLEL_SHADOW 4 #define NO_LINE 0 #define SINGLE_LINE 1 #define DOUBLE_LINE 2 #define SINGLE_TOP 3 #define SINGLE_SIDE 4 #define SOLID_LINES 5 #define TOP_BOT_SLINE 6 #define TOP_BOT_DLINE 7 #define TOP_BOT_SOLID 8 #define NUM_KEYS 80 /* Number of color table entries */ #define MAXC_TABLE 6 /* Number of User Defined Functions */ #define MAXU_FUNCS 10 #define CURCOL 24 /* Starting edit cursor column */ #define WRITE_FILE 0 #define READ_FILE 1 #define CURSOROFF 0x2000 /* A define used for the CONFIG entries on the max. path allowed.*/ #define WILDCARD 0x01 #define EXTENSION 0x02 #define FILENAME 0x04 #define DIRECTORY 0x08 #define DRIVE 0x10 typedef struct { char letter; int return_answer; } _default; #define LOC_YN_Y 18 #define LOC_YN_X 24 extern struct _VIDEO { unsigned char winleft; unsigned char wintop; unsigned char winright; unsigned char winbottom; unsigned char attribute; unsigned char normattr; unsigned char currmode; unsigned char screenheight; unsigned char screenwidth; unsigned char graphics; unsigned char needcgasync; char *videobuffer; } _video; typedef struct dlistmem *dlistptr; struct datainforec { char *option; char *help; int other; char *save; int (*func)(); int integer; int type; #if 0 long act_size; int volume; long pos_in_archive; dev_t dev; uid_t uid; gid_t gid; umode_t mode; umode_t org_mode; long size; time_t atime; time_t mtime; time_t ctime; time_t backup_time; char name_len; char compressed; long checksum; #endif int mark; }; struct dlistmem { struct datainforec datainfo; dlistptr nextlistptr; dlistptr prevlistptr; }; typedef struct cell { /* * Possible Startup and Exit Procedures to use */ int (*ListEntryProc)(struct cell *cell ); int (*ListExitProc)(struct cell *cell); /* * What to do on a key and the screen paint routine * What to do on a special key */ int (*ListEventProc)(struct cell *cell); int (*ListPaintProc)(struct cell *cell); int (*OtherGetKeyProc)(struct cell *cell); /* Possible actions to take with a keystroke. */ /* * The current line we are at. */ int (*current_event)(struct cell *cell); int (*event1)(struct cell *cell); int (*event2)(struct cell *cell); int (*UpdateStatusProc)(struct cell *cell); struct KeyTable *keytable; struct FuncTable *func_table; /* These are what start everything off. */ /* start is the start of the list.*/ /* end is the end of the list. */ /* current is the current highlighted line on the screen*/ dlistptr start; dlistptr current; dlistptr end; /* * Begin and end of the current display list. current should be somewhere * between these. */ dlistptr list_start; dlistptr list_end; WINDOW *window; /* WINDOW from ncurses */ int redraw; /* screen needs attention */ int srow; /* window start row cordinate */ int scol; /* Window start Column */ int erow; /* Window Ending Row */ int ecol; /* Window ending column */ int max_cols; /* Max Columns on the screen */ int max_rows; /* Max Rows on the screen */ int save_row; /* save the cursor pos row */ int save_col; /* save the cursor pos col */ int cur_pos; /* current cursor column when using edit*/ int cur_row; /* current cursor row when using edit */ int desc_start; /* Used when editing large fields. */ unsigned int termkey; /* this is cleared on enter, setting it to * any value other than zero causes the * function to return. Usually set to the * key we terminate with. */ unsigned int special; /* Holds value for the current item function * number */ unsigned int key; /* Current Keystroke */ unsigned int other_getkey; /* set this to use other get_char routine */ /* if supplied */ unsigned int normcolor; /* Normal Text Screen Color*/ unsigned int barcolor; /* Bar text Screen Color */ int insert_mode; /* Insert/OverWrite Cursor Mode */ int menu_bar; /* Set this if a menu at the bottom * of the screen is needed */ int dest_src; char *filename; char **argv; int argc; } CELL; typedef struct KeyTable { int key; int func_num; char desc[40]; } KEYTABLE; typedef struct UKeyTable { int key; char desc[40]; char program[MAXPATH+1]; char params[40]; } USERKEYTABLE; typedef struct FuncTable { int key; int (*func)(struct cell *c); } FUNC_TABLE ; struct COLOR { unsigned char dosborder ; unsigned char dostext ; unsigned char background; unsigned char back_text; unsigned char menuborder ; unsigned char menuback ; unsigned char menutext ; unsigned char menucursor ; unsigned char menushadow ; unsigned char fileborder; unsigned char filebar; unsigned char filetext; }; #define LS_END 0 #define LS_HOME 1 #define LS_PGUP 2 #define LS_PGDN 3 #define CURSOR_UP 4 #define CURSOR_DN 5 #define LS_QUIT 6 #define WRAP_CURSOR_DN 7 #define WRAP_CURSOR_UP 8 #define DO_SHELL 9 #define LS_ENTER 10 #define UPFUNC 11 #define TOGGLE 12 #define PLUS_IT 13 #define MINUS_IT 14 #define LS_CLEAR 15 #define LS_TOGGLE 16 #define RENAME_FILE 17 #define CHANGE_SRC 18 #define CHANGE_DEST 19 #define LS_PLAY 20