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

📄 dirent.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/* file changed to make it VMS compatible. NOT ALL UNIX FEATURES WORK */#include <ssdef.h>#include <rmsdef.h>#include "dirent.h"/* routines are not reentrant... */#define NO_VERSIONSDIR *opendir(char *dirname){static DIR dir;char *closebracket;long status;struct dsc$descriptor_s entryname_desc;struct dsc$descriptor_s dirname_desc;char DirEntry[256];char VMSentry[256];char UnixEntry[256];int index;char *dot;   /* check if directory exists */   /* dirname can look like /disk$user/duns/www/test/multi    */   /* or like               /disk$user/duns/www/test/multi/   */   /* DirEntry should look like     disk$user:[duns.www.test]multi in both cases */   /* dir.dirname should look like  disk$user:[duns.www.test.multi] */   strcpy(UnixEntry,dirname);   if (UnixEntry[strlen(UnixEntry)-1] != '/')      strcat(UnixEntry,"/");   strcpy(DirEntry, HTVMS_name("",UnixEntry));   strcpy(dir.dirname, DirEntry);   index = strlen(DirEntry) - 1;   if (DirEntry[index] == ']')      DirEntry[index] = '\0';   if ((dot = strrchr(DirEntry,'.')) == NULL)   {  /* convert disk$user:[duns] into disk$user:[000000]duns.dir */      char *openbr = strrchr(DirEntry,'[');      if (!openbr)      { /* convert disk$user: into disk$user:[000000]000000.dir */         strcpy(dir.dirname, DirEntry);         strcat(dir.dirname, "[000000]");         strcat(DirEntry,"[000000]000000.dir");      }      else      {         char End[256];         strcpy(End,openbr+1);         *(openbr+1) = '\0';         strcat(DirEntry,"000000]");         strcat(DirEntry,End);         strcat(DirEntry,".dir");      }   }   else   {      *dot = ']';         strcat(DirEntry,".dir");   }   dir.context = 0;   dirname_desc.dsc$w_length = strlen(DirEntry);   dirname_desc.dsc$b_dtype = DSC$K_DTYPE_T;   dirname_desc.dsc$b_class = DSC$K_CLASS_S;   dirname_desc.dsc$a_pointer = &(DirEntry);   /* look for the directory */   entryname_desc.dsc$w_length = 255;   entryname_desc.dsc$b_dtype = DSC$K_DTYPE_T;   entryname_desc.dsc$b_class = DSC$K_CLASS_S;   entryname_desc.dsc$a_pointer = VMSentry;   status = LIB$FIND_FILE(&(dirname_desc),                           &entryname_desc,                           &(dir.context),                          0,0,0);   if (!(status & 0x01))   { /* directory not found */      return(NULL);   }#if 0   /* now correct dirname, which looks like disk$user:[duns.www.test]multi */   /* and should look like disk$user:[duns.www.test.multi] */   closebracket = strchr(dir.dirname,']');   *closebracket = '.';   closebracket = strstr(dir.dirname,".dir");   *closebracket = '\0';   strcat(dir.dirname,"]");#endif#ifdef NO_VERSIONS   strcat(dir.dirname,"*.*");#else   strcat(dir.dirname,"*.*;*");#endif   dir.context = 0;   dir.dirname_desc.dsc$w_length = strlen(dir.dirname);   dir.dirname_desc.dsc$b_dtype = DSC$K_DTYPE_T;   dir.dirname_desc.dsc$b_class = DSC$K_CLASS_S;   dir.dirname_desc.dsc$a_pointer = &(dir.dirname);   return(&dir);}struct dirent *readdir(DIR *dirp){static struct dirent entry;long status;struct dsc$descriptor_s entryname_desc;char *space, *slash;char VMSentry[256];char *UnixEntry;   entryname_desc.dsc$w_length = 255;   entryname_desc.dsc$b_dtype = DSC$K_DTYPE_T;   entryname_desc.dsc$b_class = DSC$K_CLASS_S;   entryname_desc.dsc$a_pointer = VMSentry;   status = LIB$FIND_FILE(&(dirp->dirname_desc),                           &entryname_desc,                           &(dirp->context),                          0,0,0);   if (status == RMS$_NMF)   { /* no more files */      return(NULL);   }   else   { /* ok */      if (!(status & 0x01)) return(0);#ifdef NO_VERSIONS      space = strchr(VMSentry,';');#else      space = strchr(VMSentry,' ');#endif      if (space)         *space = '\0';      /* convert to unix style... */      UnixEntry = HTVMS_wwwName(VMSentry);      slash = strrchr(UnixEntry,'/') + 1;      strcpy(entry.d_name,slash);      entry.d_namlen = strlen(entry.d_name);      entry.d_fileno = 1;      return(&entry);   }}int closedir(DIR *dirp){long status;   status = LIB$FIND_FILE_END(&(dirp->context));   if (!(status & 0x01)) exit(status);   dirp->context = 0;   return(0);}/* rest of routines not implemented */#if 0#ifndef	_POSIX_SOURCEextern	void seekdir(/* DIR *dirp, int loc */);extern	long telldir(/* DIR *dirp */);#endif	/* POSIX_SOURCE */extern	void rewinddir(/* DIR *dirp */);#ifndef	lint#define	rewinddir(dirp)	seekdir((dirp), (long)0)#endif /* not implemented */#endif /* not defined for VMS */

⌨️ 快捷键说明

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