⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flnorm.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/***  FLNORM.C - Normalize DOS file names****  Original Copyright 1988-1991 by Bob Stout as part of**  the MicroFirm Function Library (MFL)****  The user is granted a free limited license to use this source file**  to create royalty-free programs, subject to the terms of the**  license restrictions specified in the LICENSE.MFL file.*/#include <stdio.h>#include <string.h>#ifdef __TURBOC__ #include <dir.h>#else #include <direct.h>#endif#include <dos.h>#include <io.h>#include "sniptype.h"#include "filnames.h"#if defined(_WIN32) || defined(WIN32) || defined(__NT__) #define chdrv _chdrive#else #include "dosfiles.h"#endifint flnorm(char *in_name, char *out_name){      Boolean_T dir_flag = False_, new_drv = False_;      int status = 0, level = 0;      char *p, *out;      static char drive[2][3];      static char file[14];      static char I_am_here[FILENAME_MAX];      static char I_am_there[FILENAME_MAX];      static char remember[FILENAME_MAX];      getcwd(I_am_here, FILENAME_MAX);      if (!in_name || !in_name[0])      {            strcpy(out_name, I_am_here);            goto ERRexit;      }      strncpy(drive[0], I_am_here, 2);      drive[0][2] = '\0';      if (':' == in_name[1])      {     /* If a drive is specified                            */            if (chdrv(in_name[0]))            {     /* If the drive is invalid                      */                  status = Error_;                  goto ERRexit;            }            new_drv = True_;            getcwd(remember, FILENAME_MAX);            strncpy(drive[1], remember, 2);            drive[1][2] = '\0';      }      else      {     /* If a drive isn't specified                         */            if (NULL != (p = strchr(in_name, ':')))            {     /* If filename is illegal                       */                  status = Error_;                  goto ERRexit;            }      }      unix2dos(in_name);      if (new_drv)      {            if ('\\' == in_name[2])                  strcpy(out_name, drive[1]);            else            {                  strcpy(out_name, remember);                  if ('\\' != LAST_CHAR(remember))                        strcat(out_name, "\\");            }      }      else      {            strcpy(out_name, drive[0]);            if ('\\' != *in_name)            {                  strcat(out_name, I_am_here);                  if ('\\' != LAST_CHAR(I_am_here))                        strcat(out_name, "\\");            }      }      strcat(out_name, &in_name[(new_drv) ? 2 : 0]);      fln_fix(out_name);      out = &out_name[2];      if (!(*out))            goto ERRexit;      while ('\\' == LAST_CHAR(out))      {     /* Strip trailing `\'s                                */            LAST_CHAR(out_name) = '\0';            dir_flag = True_;      }      if (!(*out))      {            if (dir_flag)            {                  strcat(out, "\\");                  goto ERRexit;            }            else  goto BADPATH;      }      if (NULL != (p = strrchr(out_name, '\\')))            strcpy(file, p);        /* Save filename              */      if (chdir(out))      {     /* If can't move to path                              */            if ((!dir_flag) && p)            {     /* If there was a separate path                 */                  *p = '\0';                  if (!(*out))                  {     /* Back at the root, handle it            */                        strcpy(p, "\\");                        strcpy(file, &file[1]);                  }                  if (chdir(out))                  {     /* If we can't move to path               */                        *p = '\\';                        goto BADPATH;                  }                  ++level;          /* Flag we stripped name      */            }            else            {     /* No path as specified                         */                  if (p)                  {BADPATH:                status = Error_;                        goto ERRexit;                  }            }      }      getcwd(I_am_there, FILENAME_MAX); /* Get normalized path        */      strupr(I_am_there);      strcpy(out_name, I_am_there);      if (level)            strcat(out_name, file);ERRexit:      if (new_drv)      {            chdir(remember);            chdrv(I_am_here[0]);      }      chdir(I_am_here);      if (status)            out_name[0] = '\0';      return status;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -