home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / hdutl / bu20.lbr / BU.HQ / BU.H
Text File  |  1986-10-05  |  8KB  |  189 lines

  1. /*  BU.H  FILE FOR  BU.C    - VERSION 2.0   
  2.  *  A File Backup Utility for    cp/m 80 
  3.  *  BDS-C version ONLY .  Requires v1.50a
  4.  *
  5.  *  Copyright     Ian Ashdown
  6.  *  byHeart Software
  7.  *  2 - 2016 West First Avenue 
  8.  *  Vancouver, B.C. V6J 1G8
  9.  *  CANADA
  10.  *
  11.  *  Originally published in  'Dr Dobb's Journal' Jan 1985 vol 10 No 1
  12.  *  Program improvement suggestions by Anthony Skjellum, DDJ 
  13.  *  Contrib Ed.
  14.  *  Modifications for BDS-C v1.50a by Peter Martin May '85 - May '86
  15.  *
  16.  *  THE STORY SO FAR.... BEGINNING FROM THE END :
  17.  *
  18.  *  VERSION
  19.  *  2.0        Reorganised for different query system and mapping of
  20.  *        active user areas into a map to be searched when
  21.  *        files are accessed, drops necessity for user area
  22.  *        to be given with a specified-filename (ambig or other)
  23.  *        Includes option to set attribute bits of files etc.
  24.  *        Also corrects corrections and new bugs in 1.4
  25.  *
  26.  *        Using L2.COM, COMPILE COMMANDS ARE:
  27.  *        cc bu -e 4700
  28.  *        cc bu2 -e 4700
  29.  *        cc bu3 -e 4700
  30.  *        cc bu4 -e 4700
  31.  *        l2 bu bu2 bu3 bu4
  32.  *                      7 May 1986  -- p.g.m.
  33.  *
  34.  *  1.5 -- 1.9    unreleased bug-ridden developments April-May 86
  35.  * 
  36.  *  1.4        incorporates option to change file attributes by entering 
  37.  *        same-drive copy command -- accepts wild-card filenames and
  38.  *        generic attribute 'pattern', but query option also active
  39.  *        to permit changing attributes file-by-file. Code 
  40.  *        reorganised into 4 files, extended list of globals, and
  41.  *        simplified some badly-structured code of my own making to
  42.  *        try to make a bit more sense.
  43.  *        Made few main segments subroutines.       2 April 1986
  44.  *                        --  p.g.m.
  45.  *
  46.  *  1.3        assayed a fix on the (documented) problem occuring
  47.  *        when the back-up for a hard disk accepts a directory
  48.  *        entry, but has no space for file data. 25 March 1986
  49.  *                         --  p.g.m.
  50.  *
  51.  *   1.2    dropped  AZTEC/DESMET options.  BDS-C ONLY.
  52.  *        12 June 1985 -- inserted new -C option for the command
  53.  *        line to allow disk swapping after program loaded -- pause
  54.  *        for disk-swap in relevant drives.
  55.  *        CONFINED CHANGES TO BDS-C Version 
  56.  *                        -- p.g.m.
  57.  *
  58.  *  1.1b    as for 1.1a +further mods to new_disk routines etc..
  59.  *        7 June 1985 -- fixed bug in full disk routines; gave 2  
  60.  *        prompts : one to abort/continue, other for drive change.
  61.  *        fixed own BDS 'hacking' call after file renaming; fixed
  62.  *        own bug in offset updating to make count of sectors
  63.  *        actually written; changed problem with routine to 
  64.  *        reloop for file that didn't fit if not hard_disk
  65.  *                          -- p.g.m.
  66.  * 
  67.  *  1.1a    (cp/m 80) with BDS-C v1.50a compile options as well
  68.  *        31 May 1985 -- changes to sequences for attribute 
  69.  *        setting, to avert bdos File R/O error on abort with full
  70.  *        disk            -- Peter G. Martin
  71.  *
  72.  *  1.1        originally for Aztec CII v1.06b (cp/m 80) and DeSmet C88
  73.  *        v2.2 (cp/m 86) -- September 7, 1984
  74.  *              -- published in Dr Dobbs' jan 1985
  75.  *
  76.  * 1.0        December 31, 1983  -- Ian Ashdown only knows !
  77.  *
  78.  * 
  79.  *  BU utilizes the undocumented 'archive' file attribute feature of
  80.  *  cp/m. 80 versions 2.x and cpm-86 to detect MANY (not all) files
  81.  *  that were changed after the disk was 'backed up' and copy them
  82.  *  (with optional verification) to a backup disk.   This program
  83.  *  was designed to perform the same action as the 'A' option of PIP
  84.  *  under DRI's MPM 2, for which  the  Archive attribute is
  85.  *  documented.
  86.  *  From Version 1.4, the entry of a 'same drive' command also permits
  87.  *  the simple setting of attribute bits WITHOUT file copying on the 
  88.  *  target drive.   The latter option allows -Q option (to permit
  89.  *  file-by-file attribute setting) but normally will work to an
  90.  *  established attribute setting 'pattern'. Change instructions
  91.  *  include a 'leave alone' command (---) for a given attribute or
  92.  *  attributes.
  93.  *
  94.  *  Usage --  BU x[:afn] y [-AFHQCSn] (for back-up operations)
  95.  *    OR    BU x[:afn] x [-AQCn]   (for attribute-setting)
  96.  *
  97.  *    where  x = drive name of disk to be backed up
  98.  *           y = drive name of backup disk
  99.  *
  100.  *    and the optional arguments are:
  101.  *
  102.  *        -A        All files, regardless of status
  103.  *        -F        Fast copy -- without verification
  104.  *        -H        Hard disk  (files may be split)
  105.  *        -Q        Query each file before backup
  106.  *        -C        Change disk in copy drive after BU loaded
  107.  *        -S        System attribute copied to backup
  108.  *        -n        Specific USER of files to be backed up
  109.  *        afn        Any legal ambiguous fileref 
  110.  *
  111.  *
  112.  *  H option renames files by changing chars in filename to segment
  113.  *  nos.  A copies files whether they are 'marked' as backed-up or not
  114.  *
  115.  *  The second command form, BU x[:afn] x [-<limited options>]
  116.  *  permits setting and resetting of file attribute bits, EITHER
  117.  *  according to a general pattern (eg R/O DIR NRC) OR (with -Q
  118.  *  option) for each file
  119.  *
  120.  *
  121.  *  DEFINES AND GLOBALS ETC FOLLOW 
  122. */
  123. #include <bdscio.h>
  124. #include <hardware.h>
  125. /* * * * * * * * * * * * * * * Definitions * * * * * * * * * * * */
  126. #define ERROR -1
  127. #define DEL    0xff    /* Deleted fileref flag */
  128. #define ALL    -1    /* All user numbers flag */
  129. #define TRUE    -1
  130. #define FALSE     0
  131. #define SUCCESS        0
  132. #define O_RDONLY    0
  133. #define USER_ERR    0 /* Specified fileref used with -n option */
  134. /* * * * * * * * * * Error codes  * * * * * * * * * * * * */
  135. #define BAD_FREF    1    /* Illegal file reference */
  136. #define BAD_ARGS    2    /* Illegal command line */
  137. #define BAD_OPT        3    /* Illegal option */
  138. #define BAD_USER    4    /* Illegal user number */
  139. #define BAD_DRV        5    /* Illegal drive name(s) */
  140. #define SAME_DRV    6    /* Same drive for output & input */
  141. #define SET_FAIL    7    /* att bit set error, NOT USED in 2.0 */
  142. #define OPN_ERR        8    /* File open error */
  143. #define READ_ERR    9    /* File read error */
  144. #define CLS_ERR           10    /* File close error */
  145. #define BAD_VFY           11    /* File verify error */
  146. /* * * * * * * * * * * * BDOS services    * * * * * * * * * * * * * * */
  147. #define DIR_IO        6    /* Direct I/O */
  148. #define RESET_DRV      13    /* Reset all drives */
  149. #define SEL_DRV           14    /* Select drive */
  150. #define SRCH_F           17    /* Search first */
  151. #define SRCH_N           18    /* Search Next */
  152. #define GET_DRV           25    /* Get Default Drive */
  153. #define SET_DMA           26    /* Set DMA Address */
  154. #define SET_ATT           30    /* Set File Attributes */
  155. #define USER_CODE      32    /* Get/Set User Code */
  156. #define MAX_USER       16    /*  user codes under cpm */
  157. /* * * * * * * * * * *    GLOBAL VARIABLES  * * * * * * * * * * */
  158. char    ent_drv,    /* Entry drive code */
  159.     ent_user,    /* Entry user code */
  160.     cur_user,    /* Current user code */
  161.     user_map[MAX_USER/8],    /* bit map of user areas */
  162.     sf_cur[32],           /* buffer for files found */
  163.     attpat[3],        /* pattern of changes to attribs*/
  164.     *alloc();
  165.  
  166. /* Structure for linked list of filerefs */
  167. struct    file_ref
  168.     {
  169.     char    name[12];           /* File reference       */
  170.     struct    file_ref *next;           /* pointer to next structure */
  171.     }; 
  172. struct    file_ref root,              /* Start of linked list      */
  173.          *fref_1,          /* Scratch struct pointers to */
  174.          *fref_2;          /* linked list instances      */
  175.  
  176. /* Flags used throughout program */
  177. int    dup_flag,    /* duplicate fileref flag */
  178.     all_files,    /* all files flag (cmd line option) */
  179.     fast_copy,    /* fast copy flag            */
  180.     hard_disk,    /* hard disk flag            */
  181.     query,        /* query flag                */
  182.     system,        /* system flag                */
  183.     user_no,    /* user number                */
  184.     swap_flag,    /* flag for -C option */
  185.     next_flag,    /* flag to switch srch-f to srch_n */
  186.     att_flag;    /* flag for attribute-setting function */
  187. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  188. /* End BU.H  7 May 1986 */
  189.