home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / maint / part02 / maint.h.dist < prev    next >
Text File  |  1992-05-13  |  16KB  |  386 lines

  1. #ifndef MAINT_H
  2. /******************************************************************************
  3. *******************************************************************************
  4.  
  5.    Installation:  Western Michigan University Academic Computer Center
  6.  
  7.    System:    Directory/File System Maintenance
  8.   
  9.    Program:    maint
  10.  
  11.    Header name:    maint.h
  12.  
  13.    Version=01    Level=00    01/24/92    Leonard J. Peirce
  14.  
  15.    Purpose:  Header file for the MAINT program.  This header file should
  16.          only be used by MAINT as it would be of no use to any other
  17.          program.
  18.  
  19.    Other information:    (C) Copyright 1992, Leonard J. Peirce
  20.  
  21. ********************************************************************************
  22. *******************************************************************************/
  23.  
  24. #define MAINT_H 1            /* to prevent multiple inclusion      */
  25.  
  26. /******************************************************************************/
  27. /*                                                                            */
  28. /*                        # I N C L U D E   F I L E S                         */
  29. /*                                                                            */
  30. /******************************************************************************/
  31.  
  32. #include <sys/types.h>
  33. #include <dirent.h>
  34.  
  35. /******************************************************************************/
  36. /*                                                                            */
  37. /*                             # D E F I N E S                                */
  38. /*                                                                            */
  39. /******************************************************************************/
  40.  
  41. /* HELPFILE contains on-line help for maint and should be defined in the
  42.  * Makefile so that maints knows where it's supposed to be and so that it
  43.  * it gets installed in the right spot; if you don't want to define it in
  44.  * the Makefile you'll need to make sure that the path to the help file is
  45.  * correct in both spots
  46.  */
  47.  
  48. #ifndef HELPFILE
  49. #define HELPFILE "/usr/local/lib/maint.help"
  50. #endif
  51.  
  52. #define MAX_SCREEN_ROWS 65        /* max. # of rows for screens          */
  53. #define MAX_SCREEN_COLS 132        /* max. # of columns for screens      */
  54. #define DEFAULT_PAGER "less"        /* less is better than cat.....:-)    */
  55. #define DEFAULT_EDITOR "vi"        /* sigh.....                  */
  56. #define DEFAULT_SHELL "csh"
  57.  
  58. /* the following stuff you probably won't want to touch */
  59.  
  60. #define TRUE (1)
  61. #define FALSE (0)
  62. #define NULLPTR (char *) 0
  63.  
  64. #define LEFT 0
  65. #define RIGHT 1
  66.  
  67. #define SPEC_WINDOW_ROWS 2        /* # of rows in directory spec window */
  68. #define SPEC_WINDOW_START_ROW 0        /* starting row # of dir spec window  */
  69. #define STAT_WINDOW_ROWS 2        /* # of rows in statistics window     */
  70. #define STAT_WINDOW_START_ROW 0
  71.  
  72. #define SUCCESS 1
  73. #define FAILURE 0
  74.  
  75. #define NO_REBUILD 0            /* return values from config()          */
  76. #define REBUILD_WITH_FILEMARKS 1
  77. #define REBUILD_SCREEN 2
  78. #define REBUILD_DIRECTORY 4
  79. #define REBUILD_WITH_SORT 8
  80.  
  81. #define CANT_OPEN -1            /* can't open file to display it      */
  82. #define CANT_DISPLAY -2            /* can't display file on screen          */
  83. #define EMPTY_FILE -3            /* selected file is empty          */
  84. #define BAD_FILE -4            /* file format invalid              */
  85. #define DONT_CREATE -5            /* do not create file              */
  86. #define NO_FILE -6            /* file does not exist              */
  87. #define NEW_FILE -7            /* new file had to be created          */
  88. #define BAD_SCREEN_NO -8        /* bad screen number read in          */
  89. #define CANT_ALLOCATE -9        /* can't allocate necessary memory    */
  90. #define CANT_OPEN_DEST -10        /* can't open destination file          */
  91. #define CANT_STAT -11            /* can't stat a file              */
  92. #define CANT_WRITE -12            /* can't write to a file          */
  93. #define CANT_CHMOD -13            /* chmod() failed on a file          */
  94. #define BAD_GROUP -14            /* invalid group specified          */
  95. #define BAD_OWNER -15            /* invalid owner specified          */
  96. #define DISPLAY_TEXT 1            /* text descriptors to be displayed   */
  97. #define SLOT_OVF 2            /* text descriptor overflows slot     */
  98.  
  99.                     /**    return codes for proc_dir()   **/
  100. #define RECALL_PROC 1            /* force proc_dir() to be recalled    */
  101. #define EMPTY_DIR 2            /* selected directory is empty          */
  102.  
  103. #define NORMAL 1
  104. #define HIGHLITE 2
  105.  
  106. #define PROT_MAX 10            /* max. length of protection string   */
  107. #define DATE_MAX 12            /* max. length of date/time string    */
  108. #define DNAME_MAX 14            /* max. length of displayed filename  */
  109. #define FILEMARK_MAX 1            /* max. length of filetype mark          */
  110. #define DISP_MAX DNAME_MAX+FILEMARK_MAX /* max. length of filename & mark     */
  111. #define SIZE_MAX 8            /* max. length of filesize string     */
  112. #define OWNER_MAX 8            /* max. length of owner string          */
  113. #define GROUP_MAX 8            /* max. length of group string          */
  114. #define FIELD_GAP 2            /* space between fields in a slot     */
  115. #define SLOT_GAP 3            /* space between slots on a screen    */
  116. #define FULL_MAX PROT_MAX + DATE_MAX + DISP_MAX + OWNER_MAX + \
  117. SIZE_MAX + GROUP_MAX + (FIELD_GAP * 5)
  118. #define MESS_MAX 255            /* max. length of broadcast message   */
  119. #define STR_MAX 255            /* max. length of help input line     */
  120. #define TYPE_MAX 3            /* max. length of displayed filetype  */
  121. #define SPEC_MAX 255            /* max. length of filename          */
  122. #define FULL_SPEC_MAX 255        /* max. length of full file spec      */
  123. #define RESP_MAX 80            /* max. length of response from tty   */
  124. #define COMMAND_MAX 4            /* max. number of commands per file   */
  125. #define TEXT_MAX 40            /* max. length of text descriptor     */
  126. #define DIR_TEXT_MAX 70            /* max. length of directory text desc */
  127. #define DATE_TIME_MAX 23        /* max. length of a date/time string  */
  128. #define BUF_MAX 16384            /* buffer size for block mode copying */
  129. #define PAGE_NO_MAX 4            /* max. digits in screen number          */
  130. #define DIR_NAME_MAX MAXNAMLEN        /* this is system-dependent          */
  131. #define PROMPT_MAX 80            /* max.length of a prompt string      */
  132. #define ID_STR_MAX 16            /* max. length of uid/gid string      */
  133. #define TIME_STR_MAX 24            /* time string from ctime(3)          */
  134. #define PROT_INP_MAX 9            /* max. length of protect str read in */
  135.                     /* from the screen              */
  136.  
  137. /* maximum number of file rows; this is used to allocate the static array
  138.  * for holding file scree nodes
  139.  */
  140.  
  141. #define MAX_NODE_ROW (MAX_SCREEN_ROWS - (SPEC_WINDOW_ROWS + \
  142.  STAT_WINDOW_ROWS + 1))
  143.  
  144. #define MAX_NODE_COL ((MAX_SCREEN_COLS + (DISP_MAX + \
  145. SLOT_GAP - 1))/(DISP_MAX + SLOT_GAP))
  146.  
  147. #define MIN_SLOT_WIDTH 16        /* minimum slot width              */
  148. #define MIN_DISP_LEN 5            /* display >= 5 chars for inputting   */
  149. #define FLAG_CHAR '+'            /* long filename flag character          */
  150. #define TAG_CHAR '>'            /* tag for making marks on files      */
  151. #define OPT_STRING_MAX 40        /* option id string              */
  152.  
  153. #define GROUP_SAVE 150            /* number of gids to save          */
  154. #define OWNER_SAVE 150            /* number of uids to save          */
  155.  
  156. #define IN_REC_SIZE 512            /* size of input record buffer          */
  157. #define TEXT_REC_MAX 112        /* max. length of text descriptor rec */
  158. #define FUDGE_FACTOR 35            /* multiplied by number of elements   */
  159.                     /* needed to get the size of the      */
  160.                     /* memory pool to allocate          */
  161.  
  162. /* these must coincide with the fields in the arg_strings structure that
  163.  * is defined in main.c
  164.  */
  165.  
  166. #define SIZE_OPT 0
  167. #define PROT_OPT 1
  168. #define DATE_OPT 2
  169. #define GROUP_OPT 3
  170. #define OWNER_OPT 4
  171. #define CONFIRM_OPT 5
  172. #define AUTO_FEED_OPT 6
  173. #define TEXT_OPT 7
  174. #define DOT_FILES_OPT 8
  175. #define FILEMARKS_OPT 9
  176. #define SORT_OPT 10
  177. #define NUM_OPT_STRINGS 11
  178.  
  179. #define TEXT_FILE ".maint.tdf"        /* name of text descriptor file          */
  180.  
  181. #define DELETE 'd'            /* file command definitions          */
  182. #define RENAME 'r'
  183. #define COPY 'c'
  184. #define PROTECT 'p'
  185. #define TEXT 't'
  186. #define GROUP 'g'
  187. #define OWNER 'o'
  188.                     /* -S option flag values          */
  189. #define FILENAME 1            /* sort by filename              */
  190. #define TYPE 2                /* sort by file type              */
  191. #define SIZE 3                /* sort by file size              */
  192. #define DATE 4                /* sort by date                  */
  193. #define NUM_SORT_OPT 4            /* number of highest sort option      */
  194.  
  195. #define REGULAR '-'
  196. #define DIRECTORY 'd'
  197. #define CHARACTER 'c'
  198. #define BLOCK 'b'
  199. #define FIFO 'p'
  200. #define SOCKET 's'
  201. #define LINK 'l'
  202.  
  203. #define CONTROL_B 0x2
  204. #define CONTROL_D 0x4
  205. #define CONTROL_F 0x6
  206. #define CONTROL_G 0x7
  207. #define CONTROL_H 0x8
  208. #define CONTROL_I 0x9
  209. #define CONTROL_K 0xB
  210. #define CONTROL_L 0xC
  211. #define CONTROL_P 0x10
  212. #define CONTROL_R 0x12
  213. #define CONTROL_W 0x17
  214. #define CONTROL_Z 0x1a
  215. #define LINEFEED 0xA
  216. #define CARRIAGE_RETURN 0xD
  217. #define BACKSPACE 0x8
  218. #define ESCAPE 0x1b
  219.  
  220. #define kbytes(size) (((size) + 1023) / 1024)
  221. #define info_mess(message) write_mess(message,A_BOLD,0)
  222. #define xmess(message,prefix_len) write_mess(message,A_REVERSE,prefix_len)
  223.  
  224. #if defined(SYSV) && !defined(sun)
  225.  
  226. /* stuff that needs to be defined for System V */
  227.  
  228. #define vfork fork            /* no vfork()                  */
  229. #define dbtob(db) ((unsigned)(db) << BSHIFT)
  230. #define R_OK 04                /* for access()                  */
  231.  
  232. #endif
  233.  
  234. /******************************************************************************/
  235. /*                                                                            */
  236. /*          S T R U C T U R E S ,   U N I O N S ,   T Y P E D E F S           */
  237. /*                                                                            */
  238. /******************************************************************************/
  239.  
  240. #if defined(SYSV) && !defined(sun)
  241.  
  242. typedef unsigned long int u_long;    /* I like underscores....          */
  243. typedef unsigned int u_int;
  244. typedef unsigned short int u_short;
  245. typedef unsigned char u_char;
  246. typedef int gid_t,uid_t;
  247.  
  248. #endif
  249.  
  250. #ifdef SUNOS3
  251.  
  252. /* weird...SunOS 3.X doesn't have typedefs for uid_t and gid_t in sys/types.h;
  253.  * however, SunOS 4.0 does and it doesn't match the pw_uid and pw_gid fields
  254.  * in the passwd struct in pwd.h -- they are ints and the typedefs for uid_t
  255.  * and gid_t in sys/types.h are u_short.....sigh.....
  256.  */
  257.  
  258. typedef     int      uid_t, gid_t;        
  259.  
  260. #endif
  261.  
  262. typedef     struct      NODE_TYP {        /* screen position node              */
  263.      short      left_row,           /* row-coordinate for node array      */
  264.           left_col,        /* column-coordinate for node array   */
  265.           right_row,        /* row-coordinate for node array      */
  266.           right_col,        /* column-coordinate for node array   */
  267.           down_row,        /* row-coordinate for node array      */
  268.           down_col,        /* column-coordinate for node array   */
  269.           up_row,        /* row-coordinate for node array      */
  270.           up_col,        /* column-coordinate for node array   */
  271.           row,            /* cursor row coordinate for node     */
  272.           column;        /* cursor column coordinate for node  */
  273. } NODE_DEF;
  274.  
  275. typedef     struct      ARG_TYP {        /* run-time argument flags          */
  276.      short      sort,            /* wants files sorted              */
  277.           size,            /* wants size field included          */
  278.           prot,            /* wants protection field included    */
  279.           date,            /* wants date field included          */
  280.           def,            /* wants just default info          */
  281.           group,        /* wants group field              */
  282.           owner,        /* wants owner field              */
  283.           wide,            /* wants 132-column mode          */
  284.           confirm,        /* wants to be asked before Xecuting  */
  285.           auto_feed,        /* wants autofeed on Delete/Unmark    */
  286.           text_startup,        /* set if -t on command line          */
  287.           text,            /* wants text descriptors included    */
  288.           dot_files,        /* wants files starting with .          */
  289.           filemarks;        /* / for dirs, * for executables, etc */
  290. } ARG_DEF;
  291.  
  292. typedef     struct      ARG_STR_TYP {        /* strings for configuring on the fly */
  293.      char      string[OPT_STRING_MAX+1];
  294.      short      *ptr;            /* pointer into arg structure          */
  295. } ARG_STR;
  296.  
  297. typedef     struct      COM_TYP {        /* file command definition type          */
  298.      char      *copy_name,        /* new filename for copying          */
  299.           *ren_name,        /* new filename for renaming          */
  300.           *text;        /* text descriptor string          */
  301.      gid_t      group;        /* new group value              */
  302.      uid_t      owner;        /* new owner for file              */
  303.      u_short  prot;            /* protection value              */
  304.      short      copy_len,        /* max. length of copy filename str.  */
  305.           ren_len,        /* max. length of rename filename str */
  306.           text_len;        /* max. length of text string          */
  307.      char      comm_text,        /* text descriptor for file          */
  308.           comm_del,        /* file is to be deleted          */
  309.           comm_prot,        /* new protection for file          */
  310.           comm_copy,        /* file is to be copied              */
  311.           comm_ren,        /* file is to be renamed          */
  312.           comm_grp,        /* change group of file              */
  313.           comm_own;        /* change owner of file              */
  314.      char      dummy[3];        /* pad-out; might not be necessary    */
  315. } COM_DEF;
  316.  
  317. typedef     struct      ENT_TYP {        /* file entry definition type          */
  318.      COM_DEF  *command;        /* commands for file              */
  319.        char      *filename,        /* real filename              */
  320.           *text;        /* text descriptor              */
  321.      size_t      size;            /* in blocks                  */
  322.      time_t      time;            /* whatever type of time desired..... */
  323.      uid_t      uid;            /* owner id of file              */
  324.      gid_t      gid;            /* group id of file              */
  325.      u_short  prot,            /* integer protection value          */
  326.           name_len,        /* length of scr_name minus padding   */
  327.           disp_len;        /* displayed length of full filename  */
  328.      u_char      type,            /* file type                  */
  329.           mark_flag;        /* set if file is Marked          */
  330.      char      scr_name[DISP_MAX+1];    /* displayed filename and filemark    */
  331. } ENT_DEF;
  332.  
  333. typedef     struct      POOL_TYP {        /* memory pool node structure          */
  334.      char      *ptr,            /* pointer to next byte in pool          */
  335.           *first;        /* pointer to beginning of pool          */
  336. struct     POOL_TYP *next_pool;        /* pointer to next memory pool          */
  337.      size_t      remaining,        /* # of remaining bytes in pool          */
  338.           length;        /* original length of pool          */
  339. } POOL_DEF;
  340.  
  341. typedef     struct      OPT_TYPE {        /* displayed options definition          */
  342.      char      *keystr,        /* keystroke for command          */
  343.             *remaining,        /* rest of chars in command          */
  344.           key_len,        /* length of keystroke for command    */
  345.           rem_len,        /* length of rest of chars in command */
  346.           spaces;        /* number of spaces after command def */
  347. } OPT_DEF;
  348.  
  349. typedef     struct      {            /* saved uid/gid entry              */
  350.      uid_t      id;            /* uid/gid saved              */
  351.      char      str[ID_STR_MAX+1];    /* associated string              */
  352. } ID_ENT;
  353.  
  354. typedef     struct      {            /* summary info of directory entries  */
  355.      ENT_DEF  *ptr;            /* pointer to directory info          */
  356.      short      num_file;        /* number of files in directory          */
  357. } DIR_SUMM;
  358.  
  359. typedef     struct      DIR_TYPE {        /* directory info link structure      */
  360.      ENT_DEF  *dirptr;        /* pointer to directory information   */
  361.      char      *dir_name;        /* name of directory              */
  362. struct     DIR_TYPE *prev,        /* pointer to previous directory node */
  363.           *next;        /* pointer to next directory node     */
  364.      POOL_DEF *first_pool,        /* first memory pool for directory    */
  365.           *curr_pool;        /* current memory pool for directory  */
  366.      size_t      pool_length;        /* length for allocating new pools    */
  367.      time_t      stat_time;        /* when directory was last modified   */
  368.      u_short  count;        /* number of times directory entered  */
  369.      short      num_file;        /* number of files in directory          */
  370. } DIR_PTR;
  371.  
  372. /******************************************************************************/
  373. /*                                                                            */
  374. /*   E X T E R N A L   D E F I N I T I O N S   &   D E C L A R A T I O N S    */
  375. /*                                                                            */
  376. /******************************************************************************/
  377.  
  378.  
  379. /******************************************************************************/
  380. /*                                                                            */
  381. /*     S T A T I C   D E F I N I T I O N S   &   D E C L A R A T I O N S      */
  382. /*                                                                            */
  383. /******************************************************************************/
  384.  
  385. #endif
  386.