home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_40.arc / GET.C < prev    next >
Text File  |  1988-01-11  |  6KB  |  180 lines

  1. /* listing for `Programming For Change' in Issue #40 of Micro Cornucopia */
  2.  
  3. /* program get.exe
  4.    Oct. 23, 1987
  5.    Version 0.2
  6.    JJP
  7.  
  8.    This program is used to move the user
  9.    from the current working directory
  10.    to a new directory given by the user.
  11.  
  12.  
  13.    Copyright (c) 1987 by Jack Purdum
  14.  
  15.    Each user is allowed to distribute up to 11,563
  16.    copies for non-commercial use. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>    /* Has prototypes for "un-headered" functions */
  20. #include <string.h>    /* Need for string functions                  */
  21.  
  22.  
  23. #define DATAFILE  "get.dat" /* Name of directory-info file      */
  24. #define MAXBUFF   256
  25. #define MATCH     0
  26. #define FAIL      1
  27.  
  28. char buff[MAXBUFF],    /* Input buffer for file reads      */
  29.      path[MAXBUFF],    /* Buffer for full path name        */
  30.      drive[3];         /* Buffer for disk drive            */
  31.  
  32.                        /* Prototypes for non-standard functions */
  33.  
  34. int search_file(FILE *fp, char *where);
  35. int do_switch(void);
  36. FILE *open_data_file(char *name);
  37.  
  38. int main(int argc, char **argv)
  39. {
  40.    int flag;
  41.    FILE *fpin;
  42.  
  43.    if (argc != 2) {
  44.       fprintf(stderr, "Usage: get directory_abbreviation_name");
  45.       exit(0);
  46.    }
  47.    fpin = open_data_file(DATAFILE);    /* Open the data file    */
  48.    flag = search_file(fpin, argv[1]);  /* Find the pseudo-name  */
  49.    fclose(fpin);                       /* We're done reading    */
  50.  
  51.    if (flag == FAIL) {
  52.       fprintf(stderr, "\nCannot find %s in data file.\n", argv[1]);
  53.       exit(0);
  54.    }
  55.  
  56.    flag = do_switch();                 /* Try the change       */
  57.    if (flag != MATCH) {
  58.       fprintf(stderr, "\nCannot find directory %s\n", path);
  59.       exit(0);
  60.    }
  61. }
  62.  
  63. /*
  64.    do_switch()
  65.    Function to do the work.
  66.    Argument list:    void
  67.    Return value:     int     0 if successful, 1 on error
  68. */
  69.  
  70. int do_switch(void)
  71. {
  72.    int flag;
  73.    system(drive);         /* Function to issue command to command.com */
  74.                           /* and places us on the correct drive.      */
  75.    flag = chdir(path);    /* We should be there now.                  */
  76.    return flag;
  77. }
  78. /*
  79.   search_file()
  80.  
  81.   Function reads the data file that holds the information about the
  82.   directory locations, looking for a match on the string passed in.
  83.   The format for the input file is:
  84.  
  85.   abbreviation   drive    full_pathname\n
  86.  
  87.   where:
  88.       abbreviation  --  the abbreviation for the full path name
  89.              drive  --  the disk drive designator for the search
  90.      full_pathname  --  the full MSDOS pathname desired
  91.                 \n  --  a newline terminates the data for each
  92.                         possible directory
  93.    Example:
  94.  
  95.    tut  c  \lessons\prog\tutorial
  96.  
  97.    When the user types: go tut, the user is moved to the \lessons\prog\tutorial
  98.    directory on drive C:
  99.  
  100.    Argument list:    FILE *fp       a FILE pointer to the open file.
  101.                      char *where    a string constant that is the short
  102.                                     name for the directory desired.
  103.    Return value:     int            0 if successful, 1 on no match
  104.  
  105. */
  106.  
  107. int search_file(FILE *fp, char *where)
  108. {
  109.    char *ptr, temp[MAXBUFF];
  110.    int c, i;
  111.  
  112.    i = 0;
  113.    while ((c = fgetc(fp)) != EOF) {
  114.       if (c != '\n') {
  115.          buff[i++] = (char) c;
  116.          continue;
  117.       }
  118.       buff[i] = '\0';
  119.       strcpy(temp, buff);
  120.       ptr = strtok(temp, " ");
  121.       if ( strcmp(ptr, where) == MATCH) {
  122.          ptr = strtok( (char *) 0, " ");  /* Get the disk drive      */
  123.          strcpy(drive, ptr);
  124.          strcat(drive, ":");
  125.          ptr = strtok( (char *) 0, " ");  /* Get the full path name  */
  126.          strcpy(path, ptr);
  127.          return MATCH;                    /* ...and we're done       */
  128.       }
  129.       i = 0;                              /* No match, start over    */
  130.   }
  131.   return FAIL;
  132. }
  133.  
  134. /*
  135.                                           open_data_file()
  136.  
  137.    Function attempts to open the data file that holds the information
  138.    about the directory locations. It does this by searching the PATH
  139.    environment variable. The program assumes that the dat file
  140.    is in the PATH directory.
  141.  
  142.    Argument list:    char *name     a string constant that is the name
  143.                                     of the file containing the directory
  144.                                     information.
  145.  
  146.    Return value:     FILE *fp       a FILE pointer to the open file if
  147.                                     successful, program aborts on error.
  148. */
  149.  
  150. FILE *open_data_file(char *name)
  151. {
  152.    char *ptr, p[MAXBUFF], temp[MAXBUFF];
  153.    FILE *fpin;
  154.  
  155.    ptr = getenv("PATH");            /* Find out where go.dat is.  */
  156.                                     /* NOTE: PATH must be in caps */
  157.    if (ptr == NULL) {
  158.       fprintf(stderr, "\nPATH not set. Program and data file must be on PATH.\n");
  159.       exit(0);
  160.    }
  161.    strcpy(p, ptr);
  162.    ptr = strtok(p, ";");            /* Find first PATH            */
  163.    while (ptr != NULL) {
  164.          strcpy(temp, ptr);         /* Save a copy of substring   */
  165.       strcat(temp, "\\");           /* Form a path and file name  */
  166.       strcat(temp, name);
  167.       if ( (fpin = fopen(temp, "r") ) == NULL) {
  168.          temp[0] = '\0';            /* Start over again           */
  169.          ptr = strtok( (char *) 0, ";");   /* Try next path       */
  170.       } else
  171.          break;                     /* Must have a good fpin      */
  172.    }
  173.  
  174.    if (fpin == NULL) {
  175.       fprintf(stderr, "\nCannot find %s on default path(s).\n", name);
  176.       exit(0);
  177.    } else
  178.       return fpin;
  179. }
  180.