home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / cprog / actlib12.zip / TOOLS.ZIP / FNREDUCE.C < prev    next >
C/C++ Source or Header  |  1993-02-25  |  2KB  |  67 lines

  1. /*  Copyright (C) 1993   Marc Stern  (internet: stern@mble.philips.be)  */
  2.  
  3. #include "tools.h"
  4. #include <stdlib.h>
  5. #include <direct.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <ctype.h>
  9.  
  10.  
  11. /***
  12.  *
  13.  *  Function   :    fnreduce
  14.  *
  15.  *  Topics     :    Transforms a filename into a full reduced filename.
  16.  *
  17.  *  Parameters  :  in/out   char *filename    input/reduced filename
  18.  *                  
  19.  *  Return     :    pointer to result
  20.  *
  21.  ***/
  22.  
  23. char *fnreduce( char *filename )
  24.  
  25. { char *ptr1, *ptr2;
  26.   char drive[_MAX_DRIVE], dir[_MAX_DIR], file[_MAX_FNAME], ext[_MAX_EXT];
  27.  
  28.   for ( ptr1 = filename; *ptr1; ptr1 ++ ) if ( *ptr1 == '/' ) *ptr1 = '\\';
  29.  
  30.   _splitpath( filename, drive, dir, file, ext );
  31.  
  32.   if ( ! *drive ) sprintf( drive, "%c:", _getdrive() + 'A'- 1 );
  33.  
  34.   if ( *dir != '\\' ) { char buffer[_MAX_DIR];
  35.  
  36.                         strcpy( buffer, dir );
  37.                         *dir = '\\';
  38.                         getcurdir( toupper(*drive) - 'A' + 1, dir + 1 );
  39.                         if ( *(dir + 1) )
  40.                            {
  41.                              strcat( dir, "\\" );
  42.                              strcat( dir, buffer );
  43.                            }
  44.                       }
  45.  
  46.   for ( ptr1 = dir; *ptr1; ptr1++ )
  47.       if ( *ptr1 == '.' )
  48.          switch( *++ptr1 )
  49.                {
  50.                  case '.' : for ( ptr2 = ptr1 + 1, ptr1 -= 3; *ptr1 != '\\'; ptr1 -- );
  51.                             strcpy( ptr1--, ptr2 );
  52.                             break;
  53.  
  54.                  case '\0':
  55.                  case '\\': strcpy( ptr1 - 2, ptr1 );
  56.                             ptr1 -= 3;
  57.                             break;
  58.  
  59.                  default  : break;
  60.                }
  61.  
  62.   if ( (ptr1 == dir) || (*--ptr1 != '\\') ) strcat( ptr1, "\\" );
  63.  
  64.   _makepath( filename, drive, dir, file, ext );
  65.   return strupr( filename );
  66. }
  67.