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

📄 dosname.c

📁 汇编源代码大全
💻 C
字号:
/* Unix/HPFS filename translation for FAT file systems *//*  (with special unzip modifications:  sflag) *//* Author: Kai Uwe Rommel */#include "unzip.h"extern int sflag;  /* user wants to allow blanks (e.g., "EA DATA. SF") */void ChangeNameForFAT(char *name){  char *src, *dst, *next, *ptr, *dot, *start;  static char invalid[] = ":;,=+\"[]<>| \t";  if ( isalpha(name[0]) && (name[1] == ':') )    start = name + 2;  else    start = name;  src = dst = start;  if ( (*src == '/') || (*src == '\\') )    src++, dst++;  while ( *src )  {    for ( next = src; *next && (*next != '/') && (*next != '\\'); next++ );    for ( ptr = src, dot = NULL; ptr < next; ptr++ )      if ( *ptr == '.' )      {        dot = ptr; /* remember last dot */        *ptr = '_';      }    if ( dot == NULL )      for ( ptr = src; ptr < next; ptr++ )        if ( *ptr == '_' )          dot = ptr; /* remember last _ as if it were a dot */    if ( dot && (dot > src) &&         ((next - dot <= 4) ||          ((next - src > 8) && (dot - src > 3))) )    {      if ( dot )        *dot = '.';      for ( ptr = src; (ptr < dot) && ((ptr - src) < 8); ptr++ )        *dst++ = *ptr;      for ( ptr = dot; (ptr < next) && ((ptr - dot) < 4); ptr++ )        *dst++ = *ptr;    }    else    {      if ( dot && (next - src == 1) )        *dot = '.';           /* special case: "." as a path component */      for ( ptr = src; (ptr < next) && ((ptr - src) < 8); ptr++ )        *dst++ = *ptr;    }    *dst++ = *next; /* either '/' or 0 */    if ( *next )    {      src = next + 1;      if ( *src == 0 ) /* handle trailing '/' on dirs ! */        *dst = 0;    }    else      break;  }  for ( src = start; *src != 0; ++src )    if ( (strchr(invalid, *src) != NULL) ||         ((*src == ' ') && !sflag) )  /* allow spaces if user wants */        *src = '_';}int IsFileNameValid(char *name){  HFILE hf;#ifdef __32BIT__  ULONG uAction;#else  USHORT uAction;#endif  switch( DosOpen(name, &hf, &uAction, 0, 0, FILE_OPEN,                  OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE, 0) )  {  case ERROR_INVALID_NAME:  case ERROR_FILENAME_EXCED_RANGE:    return FALSE;  case NO_ERROR:    DosClose(hf);  default:    return TRUE;  }}typedef struct{  ULONG cbList;               /* length of value + 22 */#ifdef __32BIT__  ULONG oNext;#endif  BYTE fEA;                   /* 0 */  BYTE cbName;                /* length of ".LONGNAME" = 9 */  USHORT cbValue;             /* length of value + 4 */  BYTE szName[10];            /* ".LONGNAME" */  USHORT eaType;              /* 0xFFFD for length-preceded ASCII */  USHORT eaSize;              /* length of value */  BYTE szValue[CCHMAXPATH];}FEALST;int SetLongNameEA(char *name, char *longname){  EAOP eaop;  FEALST fealst;#ifndef __32BIT__  if ( _osmode == DOS_MODE )    return 0;#endif  eaop.fpFEAList = (PFEALIST) &fealst;  eaop.fpGEAList = NULL;  eaop.oError = 0;  strcpy(fealst.szName, ".LONGNAME");  strcpy(fealst.szValue, longname);  fealst.cbList  = sizeof(fealst) - CCHMAXPATH + strlen(fealst.szValue);  fealst.cbName  = (BYTE) strlen(fealst.szName);  fealst.cbValue = sizeof(USHORT) * 2 + strlen(fealst.szValue);#ifdef __32BIT__  fealst.oNext   = 0;#endif  fealst.fEA     = 0;  fealst.eaType  = 0xFFFD;  fealst.eaSize  = strlen(fealst.szValue);  return DosSetPathInfo(name, FIL_QUERYEASIZE,                        (PBYTE) &eaop, sizeof(eaop), 0#ifndef __32BIT__                       , 0#endif                       );}

⌨️ 快捷键说明

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