home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource4 / 235_01 / ovselect.c < prev    next >
Text File  |  1987-06-18  |  7KB  |  208 lines

  1. /*  005  24-Jan-87  ovselect.c
  2.  
  3.         Copyright (c) 1987 by Blue Sky Software.  All rights reserved.
  4. */
  5.  
  6. #include "ov.h"
  7.  
  8. extern MENU top_file_menu[], *top_menu;
  9.  
  10. int selatr_quit();
  11. int selatr_set(), selatr_a(), selatr_d(), selatr_h(), selatr_r(), selatr_s();
  12.  
  13. MENU top_selatr_menu[] = {
  14.    { "Enter", "Change the selection attributes as shown", selatr_set, top_file_menu },
  15.    { "Archive", "Toggle selection of entries with Archive attribute", selatr_a, NULL },
  16.    { "Dir", "Toggle selection of directory entries", selatr_d, NULL },
  17.    { "Hidden", "Toggle selection of entries with Hidden attribute", selatr_h, NULL },
  18.    { "Read/only", "Toggle selection of entries with Read/Only attribute", selatr_r, NULL },
  19.    { "System", "Toggle selection of entries with System attribute", selatr_s, NULL },
  20.    { "Quit", "Don't change the current selection attributes", selatr_quit, top_file_menu },
  21.    { NULL, NULL, NULL, NULL }
  22. };
  23.  
  24. static unsigned char selatr_to_set;
  25.  
  26. extern WINDOW cw;
  27. extern FILE_ENT files[];
  28. extern unsigned char restricted;
  29.  
  30. char *strupr();
  31.  
  32.  
  33. /****************************************************************************
  34.                            S E L _ A T T R I B
  35.  ****************************************************************************/
  36.  
  37. sel_attrib() {         /* set the selection attributes */
  38.  
  39.    top_menu = top_selatr_menu; /* setup the select attrib menu as main menu */
  40.  
  41.    restricted = TRUE;          /* disable cursor movement, etc */
  42.  
  43.    selatr_to_set = cw.selatrs; /* initial attribs to select */
  44. }
  45.  
  46.  
  47. /*****************************************************************************
  48.                             S E L A T R _ S E T
  49.  *****************************************************************************/
  50.  
  51. selatr_set() {         /* set the selection attributes as show */
  52.  
  53.    cw.selatrs = selatr_to_set;         /* assign selection attributes */
  54.  
  55.    renew_window();                     /* reget/display files */
  56.  
  57.    selatr_quit();                      /* back to normal display mode */
  58. }
  59.  
  60.  
  61. /*****************************************************************************
  62.                           S E L A T R _ Q U I T
  63.  *****************************************************************************/
  64.  
  65. selatr_quit() {        /* exit back to normal file display mode */
  66.  
  67.    top_menu = top_file_menu;   /* restore file menu as main */
  68.  
  69.    restricted = FALSE;         /* enable all commands */
  70. }
  71.  
  72.  
  73. /*****************************************************************************
  74.                              S E L A T R _ x
  75.  *****************************************************************************/
  76.  
  77. selatr_a() {           /* toggle selection archive attribute */
  78.  
  79.    selatr_toggle(ARCHIVE);
  80. }
  81.  
  82. selatr_d() {           /* toggle selection dir attribute */
  83.  
  84.    selatr_toggle(DIR);
  85. }
  86.  
  87. selatr_h() {            /* toggle selection hidden attribute */
  88.  
  89.    selatr_toggle(HIDDEN);
  90. }
  91.  
  92. selatr_r() {           /* toggle selection read/only attribute */
  93.  
  94.    selatr_toggle(RDONLY);
  95. }
  96.  
  97. selatr_s() {           /* toggle selection system attribute */
  98.  
  99.    selatr_toggle(SYSTEM);
  100. }
  101.  
  102.  
  103. /*****************************************************************************
  104.                           S E L A T R _ T O G G L E
  105.  *****************************************************************************/
  106.  
  107. selatr_toggle(at)      /* toggle the state of the passed attribute */
  108. int at;
  109. {
  110.    selatr_to_set ^= at;                /* toggle the attribute */
  111.  
  112.    gotorc(MASK_ROW+1,MASK_COL-1);      /* then redisplay the current settings */
  113.    disp_attrib(selatr_to_set);
  114.  
  115.    if (at == DIR)                      /* disp_attrib() doesn't do dirs */
  116.       disp_str(selatr_to_set & DIR ? " D" : " .");
  117. }
  118.  
  119.  
  120. /*****************************************************************************
  121.                             S E L _ A L L
  122.  *****************************************************************************/
  123.  
  124. sel_all() {            /* select everything in directory */
  125.  
  126.    cw.selatrs = ARCHIVE | DIR | HIDDEN | RDONLY | SYSTEM;
  127.  
  128.    mask_off();                 /* clear selection mask and renew window */
  129. }
  130.  
  131.  
  132. /*****************************************************************************
  133.                             S E T _ M A S K
  134.  *****************************************************************************/
  135.  
  136. set_mask() {           /* set the file selection mask */
  137.  
  138.    char *mask;
  139.  
  140.    mask = strupr(prompt("","Enter Selection Mask: ",NULL,0,MASK_LEN));
  141.    if (strlen(mask) == 0)
  142.       return;
  143.  
  144.    strcpy(cw.mask,mask);               /* copy new mask to window */
  145.  
  146.    renew_window();                     /* renew the window */
  147. }
  148.  
  149.  
  150. /*****************************************************************************
  151.                             C L R _ M A S K
  152.  *****************************************************************************/
  153.  
  154. clr_mask() {           /* clear the file selection mask */
  155.  
  156.    int ans;
  157.  
  158.    ans = ask("Clear the selection mask? (y/N): ");
  159.    if (yes(ans))
  160.       mask_off();                      /* wipe out the mask */
  161. }
  162.  
  163.  
  164. /*****************************************************************************
  165.                          M A S K _ O F F
  166.  *****************************************************************************/
  167.  
  168. static int
  169. mask_off() {           /* force the selection mask off */
  170.  
  171.    *cw.mask = '\0';                 /* wipe out the mask */
  172.    cw.maskcmp = 1;                  /* mask means include next time */
  173.    renew_window();                  /* update the file display */
  174. }
  175.  
  176. /*****************************************************************************
  177.                        I N V E R T _ M A S K
  178.  *****************************************************************************/
  179.  
  180. invert_mask() {        /* invert the include/exclude meaning of the mask */
  181.  
  182.    cw.maskcmp ^= 1;    /* invert the flag */
  183.    renew_window();     /* update the file display */
  184. }
  185.  
  186.  
  187. /*****************************************************************************
  188.                          S E L _ T A G G E D
  189.  *****************************************************************************/
  190.  
  191. sel_tagged() {         /* "Select" the tagged files */
  192.  
  193.    register int i;
  194.    register struct file_ent *fp;
  195.  
  196.    /* to select the tagged files, we delete every files[] that isn't tagged,
  197.       note that the file isn't deleted, just the files[] entry */
  198.  
  199.    for (i = 0, fp = files; i < cw.nfiles; i++, fp++)
  200.       if (!(fp->flags & TAGGED))
  201.          delent(fp);
  202.  
  203.    disp_file_stats();                  /* disp updated file stats */
  204.    packfiles();                        /* pack the files structure */
  205.    adjust_window();                    /* redisplay window */
  206.    update_window(1);
  207. }
  208.