home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / batch / cutils10.arj / MKPATH.C < prev    next >
C/C++ Source or Header  |  1991-10-17  |  7KB  |  219 lines

  1. /*+M, MkPath.c */
  2. /************************************************************************/
  3. /************************************************************************/
  4. /*                                    */
  5. /*    COPYRIGHT (C) G. KLYNE, 1991.    All rights reserved.        */
  6. /*                                    */
  7. /*    Permission to freely distribute this software, or use it    */
  8. /*    for any purpose, is granted provided that no charge is        */
  9. /*    levied for its distribution and this notice is retained        */
  10. /*    in all copies of the source code.                */
  11. /*                                    */
  12. /************************************************************************/
  13. /************************************************************************/
  14. /*                                    */
  15. /*                                    */
  16. /*    Module name        : MkPath                */
  17. /*    File name        : MkPath.c                */
  18. /*                                    */
  19. /*                                    */
  20. /*  AMENDMENT RECORD                            */
  21. /*  ================                            */
  22. /*                                    */
  23. /*  1.    V01.0A    18-Feb-1991    Graham Klyne                */
  24. /*    Program initially created.                    */
  25. /*                                    */
  26. /*                                    */
  27. /*  PROGRAM FUNCTION                            */
  28. /*  ================                            */
  29. /*                                    */
  30. /*    This program is a simple DOS utility which creates directories    */
  31. /*    required for a supplied file name.  It checks each directory    */
  32. /*    along the path to the specified file and creates them if they    */
  33. /*    do not exist.                            */
  34. /*                                    */
  35. /*    The exit code is:                        */
  36. /*      0    if no directory was named in the file specifier.    */
  37. /*      1    if the directory already existed.            */
  38. /*      2    if the directory was succesfully created.        */
  39. /*      4    if the directory could not be created for any reason.    */
  40. /*                                    */
  41. /*    This program assumes that the current default directory does    */
  42. /*    exist.                                */
  43. /*                                    */
  44. /*                                    */
  45. /************************************************************************/
  46. /************************************************************************/
  47. /*-M*/
  48.  
  49.  
  50. /************************************************************************/
  51. /*    External declarations used                    */
  52. /************************************************************************/
  53.  
  54. #define    LINT_ARGS
  55.  
  56. #include <ctype.h>
  57. #include <stdio.h>
  58. #include <stdlib.h>
  59. #include <direct.h>
  60. #include <io.h>
  61.  
  62. /************************************************************************/
  63. /*    External entry points declared in this module            */
  64. /************************************************************************/
  65.  
  66.     /*    No external entry points  */
  67.  
  68.  
  69. /************************************************************************/
  70. /*    Local definitions                        */
  71. /************************************************************************/
  72.  
  73.     /*    No local definitions  */
  74.  
  75. /************************************************************************/
  76. /*    Local type declarations                        */
  77. /************************************************************************/
  78.  
  79.     /*    No local types  */
  80.  
  81. /************************************************************************/
  82. /*    Local variable declarations                    */
  83. /************************************************************************/
  84.  
  85.     /*    No local variables  */
  86.  
  87.  
  88. /*+F*/
  89. /************************************************************************/
  90. /*    *-CheckDirectory,    Create directory if it does not already exist    */
  91. /************************************************************************/
  92. /*
  93. /*    This function tests to see if a directory with the supplied name
  94. /*    exists, and attempts to create it if it does not.
  95. /*
  96. /*  PARAMETERS
  97. /*  ----------
  98. /*    Path        points to a string containing the name of the
  99. /*            required directory.
  100. /*
  101. /*  RESULT
  102. /*  ------
  103. /*    The result returned is:
  104. /*      1    if the directory exists.
  105. /*      2    if the directory was created.
  106. /*      4    if the directory could not be created.
  107. /*
  108. /*-F*/
  109.  
  110. int CheckDirectory( char *Path )
  111.     {
  112.  
  113.     /*--------------------------------------------------------------*/
  114.     /*    Entry point here                    */
  115.     /*--------------------------------------------------------------*/
  116.  
  117.     if ( access( Path, 0 ) == 0 )
  118.         {
  119.         return 1 ;
  120.         }
  121.     else
  122.         {
  123.         if ( mkdir( Path ) == 0 ) return 2 ;
  124.         printf( "MkPath: Failed to create directory '%s'\n", Path ) ;
  125.         }
  126.  
  127.     return 4 ;
  128.     } ;    // End of function CheckDirectory
  129.  
  130.  
  131. /*+T*/
  132. /************************************************************************/
  133. /*    *-main,            Main Program                */
  134. /************************************************************************/
  135. /*
  136. /*    This program reads commands from standard input and submits
  137. /*    them for execution, each in its own command shell.
  138. /*
  139. /*-T*/
  140.  
  141. void main( int argc, char *(argv[]), char *(envp[]) )
  142.     {
  143.     int  Status ;
  144.     int  PathNxt ;
  145.     int  PathLen ;
  146.     char PathChr ;
  147.     char Path[128] ;
  148.  
  149.     /*--------------------------------------------------------------*/
  150.     /*    Entry point here                    */
  151.     /*--------------------------------------------------------------*/
  152.  
  153.     Status = 0 ;
  154.  
  155.     if ( argc < 2 )
  156.         {
  157.         printf( "Usage:  MkPath file\n"
  158.         "               Create all directories on path to 'file'.\n"
  159.         "               Only the directories are created:  any file\n"
  160.         "               name or extension specified is ignored.\n"
  161.         "\n"
  162.         "Exit status:   0: file does not specify directory\n"
  163.         "               1: directory already exists\n"
  164.         "               2: directory created succesfully\n"
  165.         "               4: failed to create directory\n" ) ;
  166.         printf( "\n"
  167.         "Copyright (C) 1991 Graham Klyne.  All rights reserved.\n" ) ;
  168.         exit( 0 ) ;
  169.         }
  170.  
  171.     /*--------------------------------------------------------------*/
  172.     /*    Isolate drive and root directory specifiers        */
  173.     /*--------------------------------------------------------------*/
  174.  
  175.     PathNxt = 0 ;
  176.     PathLen = 0 ;
  177.  
  178.     PathChr = argv[1][PathNxt++] ;
  179.     if ( isalpha( PathChr ) && ( argv[1][PathNxt] == ':' ) )
  180.         {
  181.         Path[PathLen++] = PathChr ;
  182.         Path[PathLen++] = ':' ;
  183.         PathNxt++ ;
  184.         PathChr = argv[1][PathNxt++] ;
  185.         }
  186.  
  187.     if ( ( PathChr == '\\' ) || ( PathChr == '/' ) )
  188.         {
  189.         Path[PathLen++] = PathChr ;
  190.         PathChr = argv[1][PathNxt++] ;
  191.         }
  192.  
  193.     /*--------------------------------------------------------------*/
  194.     /*    Isolate all directories on path, create as required    */
  195.     /*--------------------------------------------------------------*/
  196.  
  197.     while ( ( PathChr != '\0' ) && ( Status <= 2 ) )
  198.         {
  199.         if ( ( PathChr == '\\' ) || ( PathChr == '/' ) )
  200.         {
  201.         Path[PathLen] = '\0' ;
  202.         Status = CheckDirectory( Path ) ;
  203.         }
  204.         Path[PathLen++] = PathChr ;
  205.         PathChr = argv[1][PathNxt++] ;
  206.         }
  207.  
  208.     /*--------------------------------------------------------------*/
  209.     /*    Exit                            */
  210.     /*--------------------------------------------------------------*/
  211.  
  212.     exit( Status ) ;
  213.  
  214.     } ;    /* End of procedure main */
  215.  
  216. /************************************************************************/
  217. /*    End of module MkPath                        */
  218. /************************************************************************/
  219.