/* 040 14-Feb-87 ov.h Copyright (c) 1987 by Blue Sky Software. All rights reserved. */ #ifndef TRUE #define TRUE (1) #define FALSE (0) #endif #ifndef NULL #define NULL (0) #endif #define SCREEN_COLS (80) #define SCREEN_ROWS (25) /* file name display constants */ #define VOL_ROW (1) #define FILE_STAT_ROW (VOL_ROW+2) #define TAG_STAT_ROW (FILE_STAT_ROW+1) #define MASK_ROW (VOL_ROW+2) #define UP_BOUND (TAG_STAT_ROW+1) #define FIRST_NROW (UP_BOUND+1) #define NAME_ROWS (STATUS_ROW-FIRST_NROW) #define STATUS_ROW (MENU_ROW - 1) #define MENU_ROW (PROMPT_ROW - 1) #define PROMPT_ROW (SCREEN_ROWS - 1) #define PATH_COL (13) #define VOL_STAT_COL (2) #define NUM_FILES_COL (31) #define SPACE_USED_COL (44) #define MASK_COL (69) /* view display constants */ #define FIRST_VROW (1) #define VIEW_ROWS (STATUS_ROW-FIRST_VROW) /* help display constants */ #define FIRST_HROW (1) #define HELP_ROWS (STATUS_ROW-FIRST_VROW) /* configuration parameters */ #define MAX_REPLY (SCREEN_COLS-4) /* max user reply length to prompt */ #define MAX_DIR 256 /* max # dir's processed */ #define MAX_FILES 1000 /* max # files processed in files[] */ #define MAX_PATHLEN 65 /* max dir pathname length */ #define MAX_VOLLEN 11 /* max volume label length */ #define MAX_NAMELEN 12 /* max length of file name */ #define MASK_LEN 10 /* max len of file selection mask */ #define MAX_DRIVES 20 /* max drives we will handle */ /* display attribute for file names */ #define DIS_NORM 0 /* normal display */ #define DIS_HIGH 1 /* highlighted display (current file) */ #define DIS_BOX 2 /* dialog box display */ #define DIS_HIBOX 3 /* highlight in dialog box */ #define DIS_HEAD 4 /* header text */ #define DIS_TEXT 5 /* static text display */ #define DIS_TAGD 6 /* tagged display */ /* keyboard mapping */ #define LEFT 128 /* left arrow */ #define RIGHT 129 /* right arrow */ #define UP 130 /* up arrow */ #define DOWN 131 /* down arrow */ #define PGUP 132 /* page up */ #define PGDN 133 /* page dn */ #define HOME 134 /* home */ #define END 135 /* end */ #define TAG 136 /* tag the current file toggle */ #define HELP 137 /* Help via function key */ #define OPENW 138 /* open file display window */ #define CLOSEW 139 /* close file display window */ #define NEXTW 140 /* goto next file display window */ #define PREVW 141 /* goto prev file display window */ #define INS 142 /* insert toggle key */ #define DEL 143 /* delete char key */ #define GOPAR 144 /* goto parent directory */ #define GOSUB 145 /* goto subdirectory */ #define NEXTT 146 /* goto next tagged file */ #define PREVT 147 /* goto prev taggd file */ #define RUBOUT 8 /* rubout last char key */ #define RETURN 13 /* return key */ #define EOF_CH (0x1A) /* eof character which will quit overview */ #define ESC_KEY (0x1b) /* escape char */ /* file attribute flags */ #define TAGGED (128) /* file has been tagged */ #define ARCHIVE (32) /* file modified since backup */ #define DIR (16) /* file is a subdirectory */ #define SYSTEM (4) /* system file */ #define HIDDEN (2) /* hidden file */ #define RDONLY (1) /* file is read only */ /* Window update flags */ #define W_PACK (1) /* pack the files before redisplay */ #define W_DISP (2) /* just redisplay */ /* internal drive entry structure */ typedef struct drive_ent { struct drive_ent *next; /* pointer to next DRIVE_ENT in list */ int drive; /* drive letter, 'A' - ? */ unsigned int clustersiz; /* size of a cluster on volume */ unsigned long vol_size; /* size of volume */ unsigned long vol_free; /* free space on volume */ char volbuf[MAX_VOLLEN+1]; /* current volume name buffer */ } DRIVE_ENT; /* internal file entry structure */ typedef struct file_ent { char name[MAX_NAMELEN+1]; /* the file name */ unsigned char flags; /* flags for this file */ unsigned index; /* sequential index number */ unsigned date; /* date last modified */ unsigned time; /* time last modified */ char *dirp; /* ptr to dir name for file if showall */ long size; /* file size in bytes or blocks */ } FILE_ENT; /* window structure */ typedef struct window { struct window *next; /* ptr to next winwow in list */ struct window *prev; /* ptr to prev window in list */ int curidx; /* current files[] index */ int fwrow; /* first window display row */ int wrows; /* # window display rows */ int fnrow; /* first name display row */ int ndrows; /* # name display rows */ int maxlen; /* size of the largest file name */ int colsiz; /* size of a name column in chars */ int ncols; /* number of logical columns on screen */ int nrows; /* number of logical rows used 4 files */ int nbase; /* files[] idx of first name displayed */ int nfiles; /* number entries in files[] */ int updated; /* NZ if window needs redisplay */ DRIVE_ENT *drivep; /* pointer to DRIVE_ENT for window */ unsigned int num_files; /* number files selected in directory */ unsigned int num_tagged; /* number of files tagged */ unsigned long tag_size; /* size of tagged files */ unsigned long files_size; /* # bytes used by files */ char far *save_files; /* ptr to files[] data for window */ int sortopt; /* window sort option */ int (*sortfunc)(); /* pointer to sorting function */ unsigned char info_display; /* NZ when exteneded file info shown */ unsigned char showall; /* NZ when showall mode active */ unsigned char selatrs; /* selection attribute flags */ unsigned char maskcmp; /* include/exclude meaning of mask */ char mask[MASK_LEN+1]; /* current file selection mask */ char dirbuf[MAX_PATHLEN+1]; /* current dir name buffer */ } WINDOW; /* menu selection entry structure */ typedef struct menu_selection { char *choice; char *prompt; int (*func)(); struct menu_selection *sub_menu; } MENU; /* menu state control block */ #define MAX_MENU_SELECTIONS 20 typedef struct { MENU *current_menu; int number_selections; int current_selection; struct { unsigned char position; unsigned char length; } selection[MAX_MENU_SELECTIONS]; } MENU_STATE; /* misc macros to translate coordinates */ #define min(a,b) ((a < b) ? a : b) /* min of two values */ #define yes(c) (c == 'Y' || c == 'y') /* is char == Yy? */ #define lr2sr(r) (cw.fnrow + (r - cw.nbase)) /* logical row to screen row */ #define lc2sc(c) (c * cw.colsiz) /* logical col to screen col */ #define idx2lr(i) (i % cw.nrows) /* idx to logical row */ #define idx2lc(i) (i / cw.nrows) /* idx to logical col */ #define idx2sr(i) (lr2sr(idx2lr(i))) /* idx to screen row */ #define idx2sc(i) (lc2sc(idx2lc(i))) /* idx to screen col */ /* function declaration stuff */ #define ALTCALL pascal /* alternate calling method reduces overhead */ int ALTCALL disp_file(FILE_ENT *, int); /* common func declarations */ int ALTCALL disp_vol_stats(void); int ALTCALL disp_file_stats(void); int ALTCALL setvattrib(int); int ALTCALL disp_str_at(char *, int, int); int ALTCALL disp_char_at(int, int, int); int ALTCALL disp_rep_at(int, int, int, int); int ALTCALL out_int(int, int, int); int ALTCALL out_long(long, int, int); int ALTCALL out_str(char *, int, int); int ALTCALL clr_eol(void); int ALTCALL adjust_window(void); int ALTCALL update_window(int); int ALTCALL on_screen(int); int ALTCALL fp_on(int); int ALTCALL fp_off(int); char * ALTCALL prompt(char *, char *, char *, int, int); char * ALTCALL read_str(int, char *, int); char * ALTCALL fname(FILE_ENT *); #define Malloc(i) mustalloc(i) /* for cases where we must alloc */ #define Strdup(s) mustdup(s) /* memory or we die */ #define Strndup(s,n) mustndup(s,n) char * ALTCALL mustalloc(int); /* Malloc() */ char * ALTCALL mustdup(char *); /* Strdup() */ char * ALTCALL mustndup(char *, int); /* Strndup() */ #ifdef LINT_ARGS /* include common function declarations if wanted */ #include #include #include #endif