home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / maint / part01 / locate.c < prev    next >
C/C++ Source or Header  |  1992-05-13  |  8KB  |  249 lines

  1. /******************************************************************************
  2. *******************************************************************************
  3.  
  4.    Site:    Western Michigan University Academic Computer Center
  5.  
  6.    System:    Directory/File System Maintenance
  7.   
  8.    Program:    maint
  9.  
  10.    Version=01    Level=00    01/24/92    Leonard J. Peirce
  11.  
  12.    Purpose:    Search for a file in the current directory and return its
  13.         location.
  14.  
  15.    Arguments:    See individual routines
  16.  
  17.    External variables:    See individual routines
  18.  
  19.    Maint external functions:
  20.  
  21.     Defined:    file_locate, file_ptr_locate
  22.  
  23.     Called:        prompt_getstr
  24.  
  25.    Files accessed:    None
  26.  
  27.    Return codes:    See individual routines
  28.  
  29.    Compiling instructions:    See Makefile
  30.  
  31.    Linking instructions:    See Makefile
  32.  
  33.    Other information:    (C) Copyright 1992, Leonard J. Peirce
  34.  
  35. ********************************************************************************
  36. *******************************************************************************/
  37.  
  38. /******************************************************************************/
  39. /*                                                                            */
  40. /*                        # I N C L U D E   F I L E S                         */
  41. /*                                                                            */
  42. /******************************************************************************/
  43.  
  44. #ifdef ultrix
  45. #include <cursesX.h>
  46. #else
  47. #include <curses.h>
  48. #endif
  49. #include <ctype.h>
  50. #include "maint.h"
  51.  
  52. /******************************************************************************/
  53. /*                                                                            */
  54. /*                             # D E F I N E S                                */
  55. /*                                                                            */
  56. /******************************************************************************/
  57.  
  58. /******************************************************************************/
  59. /*                                                                            */
  60. /*          S T R U C T U R E S ,   U N I O N S ,   T Y P E D E F S           */
  61. /*                                                                            */
  62. /******************************************************************************/
  63.  
  64. /******************************************************************************/
  65. /*                                                                            */
  66. /*   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    */
  67. /*                                                                            */
  68. /******************************************************************************/
  69.  
  70. extern     int      main_rows;
  71.  
  72. extern     void      prompt_getstr();
  73.  
  74.      int      file_locate(),
  75.           file_search(),
  76.           file_ptr_search();
  77.  
  78. /******************************************************************************/
  79. /*                                                                            */
  80. /*     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      */
  81. /*                                                                            */
  82. /******************************************************************************/
  83.  
  84. /*******************************************************************************
  85. ********************************************************************************
  86.  
  87.   Function:    file_locate
  88.  
  89.   Purpose:    Get the filename prefix that is desired by the user and
  90.         search for it.
  91.  
  92.   Global variables:
  93.  
  94.     Name            Examine/Modify/Use/Read/Write
  95.     ----            -----------------------------
  96.     main_rows                X
  97.  
  98.   Return Codes:
  99.  
  100.     Code            Reason
  101.     ----            ------
  102.     file_search()        return code from file_search
  103.  
  104. ********************************************************************************
  105. *******************************************************************************/
  106.  
  107. int file_locate(window,dirptr,num_file)
  108.                     /*******   FORMAL  PARAMETERS   *******/
  109.      WINDOW      *window;        /* where to read/write              */
  110.      ENT_DEF  *dirptr;        /* pointer to directory entry memory  */
  111.      short      num_file;        /* number of files in directory          */
  112.  
  113. {    /*** file_locate ***/
  114.                     /********   LOCAL  VARIABLES   ********/
  115.      char      prefix[SPEC_MAX+1];    /* filename prefix read in          */
  116.  
  117.  
  118.    /* prompt and ye shall receive....... */
  119.  
  120.    prompt_getstr(window,"Search for: ",prefix,main_rows,SPEC_MAX);
  121.  
  122.    /* now search for the filename prefix in the directory entries */
  123.  
  124.    return(file_search(dirptr,prefix,num_file,strlen(prefix)));
  125.  
  126. }    /*** file_locate ***/
  127.  
  128. /*******************************************************************************
  129. ********************************************************************************
  130.  
  131.   Function:    file_search
  132.  
  133.   Purpose:    Search for the filename prefix specified
  134.  
  135.   Global variables:
  136.  
  137.     Name            Examine/Modify/Use/Read/Write
  138.     ----            -----------------------------
  139.     none
  140.  
  141.   Return Codes:
  142.  
  143.     Code            Reason
  144.     ----            ------
  145.      i            number of file in directory
  146.      -1            file prefix not found in directory
  147.  
  148. ********************************************************************************
  149. *******************************************************************************/
  150.                                    
  151. int file_search(dirptr,prefix,num_file,length)
  152.                     /*******   FORMAL  PARAMETERS   *******/
  153. register ENT_DEF  *dirptr;        /* pointer to directory entries          */
  154. register char      *prefix;        /* filename prefix to find          */
  155. register short      num_file;        /* number of files in directory          */
  156.      int      length;        /* length of prefix string          */
  157.  
  158. {    /*** file_search ***/
  159.                     /********   LOCAL  VARIABLES   ********/
  160. register short      i = 0;        /* loop index and file entry counter  */
  161.      short      done = 0;        /* loop control flag              */
  162.  
  163.  
  164.    /* search from the beginning for the filename prefix until 1) we find
  165.     * what we are looking for or 2) we run out of files; when we exit the
  166.     * loop we look at why we exited to see if we found the file or not
  167.     */
  168.  
  169.    while((i < num_file) && (!done))
  170.    {
  171.       if(!strncmp(dirptr->filename,prefix,length))
  172.      done++;            /* we found it; stop searching....    */
  173.       else
  174.       {
  175.      ++i;                /* count this file entry          */
  176.      ++dirptr;            /* go to next file entry          */
  177.       }
  178.    }
  179.  
  180.    /* did we find what we were looking for? */
  181.  
  182.    if(i == num_file)            /* did we find the filename prefix?   */
  183.       i = -1;                /* nope.....                  */
  184.  
  185.    return((int) i);            /* say whether or not we found it...  */
  186.  
  187. }    /*** file_search ***/
  188.  
  189. /*******************************************************************************
  190. ********************************************************************************
  191.  
  192.   Function:    file_ptr_search
  193.  
  194.   Purpose:    Search for the filename by comparing pointers to the
  195.         memory in the memory pool holding the memory.
  196.  
  197.   Global variables:
  198.  
  199.     Name            Examine/Modify/Use/Read/Write
  200.     ----            -----------------------------
  201.     none
  202.  
  203.   Return Codes:
  204.  
  205.     Code            Reason
  206.     ----            ------
  207.      i            number of file in directory
  208.      -1            file prefix not found in directory
  209.  
  210. ********************************************************************************
  211. *******************************************************************************/
  212.  
  213. int file_ptr_search(dirptr,filename,num_file)
  214.                     /*******   FORMAL  PARAMETERS   *******/
  215. register ENT_DEF  *dirptr;        /* pointer to directory entries          */
  216. register char      *filename;        /* pointer to memory holding filename */
  217. register short      num_file;        /* number of files in directory          */
  218.  
  219. {    /*** file_ptr_search ***/
  220.                     /********   LOCAL  VARIABLES   ********/
  221. register short      i = 0;        /* loop index and file entry counter  */
  222.      short      done = 0;        /* loop control flag              */
  223.  
  224.  
  225.    /* search from the beginning for the filename pointer until 1) we find
  226.     * what we are looking for or 2) we run out of files; when we exit the
  227.     * loop we look at why we exited to see if we found the file or not
  228.     */
  229.  
  230.    while((i < num_file) && (!done))
  231.    {
  232.       if(dirptr->filename == filename)
  233.      done++;            /* we found it; stop searching....    */
  234.       else
  235.       {
  236.      ++i;                /* count this file entry          */
  237.      ++dirptr;            /* go to next file entry          */
  238.       }
  239.    }
  240.  
  241.    /* did we find what we were looking for? */
  242.  
  243.    if(i == num_file)            /* did we find the filename prefix?   */
  244.       i = -1;                /* nope.....                  */
  245.  
  246.    return((int) i);            /* say whether or not we found it...  */
  247.  
  248. }    /*** file_ptr_search ***/
  249.