亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cio.c

?? 一個使用IPX協議在兩臺機器間傳送文件的程序
?? C
字號:
/*

   CIO.C

   compatible direct access

   (c) 1996 Oliver Kraus

   kraus@lrs.e-technik.uni-erlangen.de

*/

#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "ccommon.h"

/*--- ms-dos ---*/

#ifdef C_DOS

#include <stdio.h>   /* sprintf */
#include <direct.h>
#include <ctype.h>
#include <sys\stat.h>
#include <sys\types.h>
#include <fcntl.h>
#include <io.h>
#include <dos.h>

#include "dpmicall.h"

short c_pathbuf_sel_dir;
short c_pathbuf_seg_dir;
int c_pathbuf_is_dos_mem = 0;


/*
   returns name of filesystem ("FAT", ...)
   fills flags:
   Bit(s)   Description (Table 1083)
    0 searches are case sensitive
    1 preserves case in directory entries
    2 uses Unicode characters in file and directory names
    3-13 reserved (0)
    14   supports DOS long filename functions
    15   volume is compressed
*/
char *c_get_vol_info(const char *root, int *flags)
{
   static char s[64];
   rminfo_struct rmi;
   short sel_root, seg_root;
   short sel_sys, seg_sys;

   if ( dpmi_alloc_dos_memory(strlen(root)+1, &sel_root, &seg_root ) == 0 )
      return NULL;
   if ( dpmi_alloc_dos_memory(64, &sel_sys, &seg_sys ) == 0 )
   {
      dpmi_free_dos_memory(sel_root);
      return NULL;
   }

   dpmi_copy_to_dos(sel_root, (void *)root, strlen(root)+1);

   rmi.eax = 0x071a0L;
   rmi.ebx = 0UL;
   rmi.ecx = 64UL;
   rmi.edx = 0UL;

   rmi.ds = seg_root;
   rmi.esi = 0L;
   rmi.es = seg_sys;
   rmi.edi = 0L;

   if ( dpmi_simulate_rmi(0x021, &rmi) != 0 )
   {
      dpmi_free_dos_memory(sel_root);
      dpmi_free_dos_memory(sel_sys);
      return NULL;
   }

   dpmi_copy_from_dos(sel_sys, s, 64);

   if ( flags != NULL )
   {
      *flags = (int)rmi.ebx;
   }

   dpmi_free_dos_memory(sel_root);
   dpmi_free_dos_memory(sel_sys);
   return s;
}

/* 0: current, 1: A:\, 2: B:\, 3:C:\ etc */
int c_is_long_filename(int drive)
{
   static int is_long_filename[26] =
   { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2 };

   if ( drive == 0 )
      drive = c_getdrive();
   else
      drive--;

   if ( is_long_filename[drive] >= 2 )
   {
      int flags;
      char s[8];

      sprintf(s, "%c:\\", (char)(drive+'A'));
      if ( c_get_vol_info(s, &flags) == NULL )
      {
         is_long_filename[drive] = 0;
      }
      else
      {
         if ( (flags & (1<<14)) == 0 )
            is_long_filename[drive] = 0;
         else
            is_long_filename[drive] = 1;
      }
   }
   /*
   if ( is_long_filename[drive] == 0 )
      printf("no lnf for drive %c\n", drive+'A');
   else
      printf("lnf for drive %c enabled\n", drive+'A');
   */
   return is_long_filename[drive];
}

/* 0 == 'A' */
void c_chdrive(int drive)
{
   rminfo_struct rmi;

   rmi.eax = 0x0e00UL;
   rmi.ebx = 0UL;
   rmi.ecx = 0UL;
   rmi.edx = (unsigned long)drive;

   if ( dpmi_simulate_rmi(0x021, &rmi) != 0 )
   {
      return;
   }

   return;
}

/* 0 == 'A' */
int c_getdrive(void)
{
   rminfo_struct rmi;

   rmi.eax = 0x01900UL;
   rmi.ebx = 0UL;
   rmi.ecx = 0UL;
   rmi.edx = 0UL;

   dpmi_simulate_rmi(0x021, &rmi);

   return (int)(rmi.eax&0x0ffUL);
}


static int c_chdir_lfn(const char *newdir)
{
   size_t len;
   rminfo_struct rmi;

   if ( c_pathbuf_is_dos_mem == 0 )
   {
      if ( dpmi_alloc_dos_memory(C_MAX_PATHNAME, &c_pathbuf_sel_dir, &c_pathbuf_seg_dir ) == 0 )
         return ENOMEM;
      c_pathbuf_is_dos_mem = 1;
   }
   len = strlen(newdir);
   if ( len+1 >= C_MAX_PATHNAME )
         return EINVAL;
   dpmi_copy_to_dos(c_pathbuf_sel_dir, (void *)newdir, len+1);

   rmi.eax = 0x0713bL;
   rmi.ebx = 0UL;
   rmi.ecx = 0UL;
   rmi.edx = 0UL;

   rmi.ds = c_pathbuf_seg_dir;
   rmi.edx = 0L;

   if ( dpmi_simulate_rmi(0x021, &rmi) != 0 )
   {
      return (int)rmi.eax;
   }

   return (int)0;
}

static int c_mkdir_lfn(const char *newdir)
{
   size_t len;
   rminfo_struct rmi;

   if ( c_pathbuf_is_dos_mem == 0 )
   {
      if ( dpmi_alloc_dos_memory(C_MAX_PATHNAME, &c_pathbuf_sel_dir, &c_pathbuf_seg_dir ) == 0 )
         return ENOMEM;
      c_pathbuf_is_dos_mem = 1;
   }
   len = strlen(newdir);
   if ( len+1 >= C_MAX_PATHNAME )
         return EINVAL;
   dpmi_copy_to_dos(c_pathbuf_sel_dir, (void *)newdir, len+1);

   rmi.eax = 0x07139L;
   rmi.ebx = 0UL;
   rmi.ecx = 0UL;
   rmi.edx = 0UL;

   rmi.ds = c_pathbuf_seg_dir;
   rmi.edx = 0L;

   if ( dpmi_simulate_rmi(0x021, &rmi) != 0 )
   {
      return (int)rmi.eax;
   }

   return (int)0;
}

static char *c_getcwd_lfn(char *s)
{
   rminfo_struct rmi;

   if ( c_pathbuf_is_dos_mem == 0 )
   {
      if ( dpmi_alloc_dos_memory(C_MAX_PATHNAME, &c_pathbuf_sel_dir, &c_pathbuf_seg_dir ) == 0 )
         return NULL;
      c_pathbuf_is_dos_mem = 1;
   }

   rmi.eax = 0x07147L;
   rmi.ebx = 0UL;
   rmi.ecx = 0UL;
   rmi.edx = 0UL;    /* current drive */

   rmi.ds = c_pathbuf_seg_dir;
   rmi.esi = 0L;

   if ( dpmi_simulate_rmi(0x021, &rmi) != 0 )
   {
      return NULL;
   }

   dpmi_copy_from_dos(c_pathbuf_sel_dir, (void *)s, C_MAX_PATHNAME);
   if ( s[0] == '\0' )
      return s;
   if ( s[1] == ':' )
      return s;
   if ( s[0] == '\\' )
   {
      s[0] = (char)(c_getdrive()+'A');
      s[1] = ':';
      dpmi_copy_from_dos(c_pathbuf_sel_dir, (void *)(s+2), C_MAX_PATHNAME-2);
   }
   else
   {
      s[0] = (char)(c_getdrive()+'A');
      s[1] = ':';
      s[2] = '\\';
      dpmi_copy_from_dos(c_pathbuf_sel_dir, (void *)(s+3), C_MAX_PATHNAME-3);
   }

   return s;
}

int c_open_lfn(const char *filename, int oflag, int pmode)
{
   size_t len;
   rminfo_struct rmi;

   if ( c_pathbuf_is_dos_mem == 0 )
   {
      if ( dpmi_alloc_dos_memory(C_MAX_PATHNAME, &c_pathbuf_sel_dir, &c_pathbuf_seg_dir ) == 0 )
      {
         /* errno = ENOMEM; */
         return -1;
      }
      c_pathbuf_is_dos_mem = 1;
   }
   len = strlen(filename);
   if ( len+1 >= C_MAX_PATHNAME )
   {
      /* errno = EINVAL; */
      return -1;
   }
   dpmi_copy_to_dos(c_pathbuf_sel_dir, (void *)filename, len+1);

   rmi.eax = 0x0716c;
   rmi.ebx = 0UL;
   rmi.ecx = 0UL;
   rmi.edx = 0UL;
   rmi.edi = 0UL; /* alias hint (not used) */

   rmi.ds = c_pathbuf_seg_dir;
   rmi.esi = 0UL;

   /*
   if ( (oflag & O_CREAT) != 0 && (oflag & O_TRUNC) != 0 )
      rmi.edx |= 0x005UL;
   else if ( (oflag & O_TRUNC) != 0 )
      rmi.edx |= 0x001UL;
   else if ( (oflag & O_CREAT) != 0 )
      rmi.edx |= 0x004UL;
   */

   /* O_BINARY ??? */

   if ( (oflag & O_CREAT) != 0 && (oflag & O_TRUNC) != 0 )
      rmi.edx |= 0x012UL;
   else if ( (oflag & O_TRUNC) != 0 )
      rmi.edx |= 0x002UL;
   else if ( (oflag & O_CREAT) != 0 )
      rmi.edx |= 0x011UL;
   else
      rmi.edx |= 0x001UL;

   if ( (oflag & O_WRONLY) != 0 )
      rmi.ebx |= 0x01UL;
   if ( (oflag & O_RDWR) != 0 )
      rmi.ebx |= 0x02UL;

   if ( dpmi_simulate_rmi(0x021, &rmi) == 0 )
   {
      switch((int)rmi.ecx)
      {
         case 1:
            /* puts("file open"); */
            break;
         case 2:
            /* puts("file created"); */
            break;
         case 3:
            /* puts("file replaced"); */
            break;
         default:
            /* printf("file unknown action %d\n", (int)rmi.ecx); */
            _dos_close((int)rmi.eax);
            return -1;
      }
      return (int)rmi.eax;
   }

   return -1;
}



int c_is_long_filename_by_path(const char *newdir)
{
   if ( newdir[0] == '\0' )
      return c_is_long_filename(0);
   if ( newdir[1] == '\0' )
      return c_is_long_filename(0);
   if ( newdir[1] != ':' )
      return c_is_long_filename(0);
   return c_is_long_filename(toupper((int)newdir[0])-'A'+1);
}

int c_chdir(const char *newdir)
{
   if ( strcmp( newdir, "." ) == 0 )
      return 0;
   if ( c_is_long_filename_by_path(newdir) != 0 )
      return c_chdir_lfn(newdir);
   return chdir(newdir);
}

int c_mkdir(const char *newdir)
{
   if ( strcmp( newdir, "." ) == 0 )
      return 0;
   if ( c_is_long_filename_by_path(newdir) != 0 )
      return c_mkdir_lfn(newdir);
   return mkdir(newdir);
}

int c_open(const char *filename, int oflag, int pmode)
{
   int handle = -1;
   if ( c_is_long_filename_by_path(filename) != 0 )
      handle = c_open_lfn(filename, oflag, pmode);
   else
   {

      if ( (oflag & O_CREAT) != 0 )
      {
         oflag &= ~O_CREAT;
         if ( _dos_creat(filename, oflag, &handle) != 0 )
            handle = -1;
      }
      else
      {
         if ( _dos_open(filename, oflag, &handle) != 0 )
            handle = -1;
      }
   }
   /* printf("c_open: handle %d\n", handle); */
   return handle;
}

int c_close(int fhandle)
{
   /* printf("c_close: handle %d\n", fhandle); */
   return _dos_close(fhandle);
}

/* #define C_WRITE_SIZE ((size_t)1024) */
#define C_WRITE_SIZE ((size_t)61440)
#define C_READ_SIZE C_WRITE_SIZE

long c_write(int fhandle, void *buffer, long count)
{
   long written = 0L;
   unsigned num;
   /* printf("c_write: handle %d\n", fhandle); */
   /* printf("c_write: count: %ld\n", count); */
   while( count > (long)(unsigned long)C_WRITE_SIZE )
   {
      num = 0;
      /* printf("c_write: count: %ld\n", count); */
      if ( _dos_write(fhandle, buffer, C_WRITE_SIZE, &num) != 0 )
      {
         /*
         perror("");
         printf("c_write: error exit: %ld\n", written);
         */
         return written+(long)(unsigned long)num;
      }
      buffer = ((char *)buffer) + C_WRITE_SIZE;
      written += (long)(unsigned long)num;
      count -= (long)(unsigned long)C_WRITE_SIZE;
   }
   num = 0;
   if ( _dos_write(fhandle, buffer, (unsigned)count, &num) != 0 )
   {
      /*
      perror("");
      printf("c_write: error exit: %ld\n", written);
      */
      return written+(long)(unsigned long)num;
   }
   written += (long)(unsigned long)num;
   /* printf("c_write: written: %ld\n", written); */
   return written;
}

long c_read(int fhandle, void *buffer, long count)
{
   long read = 0L;
   unsigned num;
   while( count > (long)(unsigned long)C_WRITE_SIZE )
   {
      num = 0;
      if ( _dos_read(fhandle, buffer, C_WRITE_SIZE, &num) != 0 )
      {
         return read+(long)(unsigned long)num;
      }
      buffer = ((char *)buffer) + C_WRITE_SIZE;
      read += (long)(unsigned long)num;
      count -= (long)(unsigned long)C_WRITE_SIZE;
   }
   num = 0;
   if ( _dos_read(fhandle, buffer, (unsigned)count, &num) != 0 )
   {
      return read+(long)(unsigned long)num;
   }
   read += (long)(unsigned long)num;
   return read;
}

char *c_getcwd(void)
{
   static char s[C_MAX_PATHNAME];
   if ( c_is_long_filename(0) != 0 )
   {
      /*
      printf("lfn: %s\n", c_getcwd_lfn(s));
      printf("normal: %s\n", getcwd(s,C_MAX_PATHNAME));
      */
      return c_getcwd_lfn(s);
   }
   return getcwd(s,C_MAX_PATHNAME);
}

void c_io_clear(void)
{
   if ( c_pathbuf_is_dos_mem != 0 )
   {
      dpmi_free_dos_memory(c_pathbuf_sel_dir);
   }
   c_pathbuf_is_dos_mem = 0;
}
#endif

/*--- unix ---*/

#ifdef C_UNIX
int c_chdir(const char *newdir)
{
   return chdir(newdir);
}

int c_mkdir(const char *newdir)
{
   return mkdir(newdir);
}

int c_open(const char *filename, int oflag, int pmode)
{
   return open(filename, oflag, pmode);
}

void c_io_clear(void)
{
}
#endif

/*--- common ---*/

char c_common_buf[C_MAX_PATHNAME];


void c_strncpy(char *dest, const char *src, size_t n)
{
   strncpy(dest, src, n);
   dest[n-1] = '\0';
}

/* 0 if successful */
int c_create_path(const char *path)
{
   char *s = c_common_buf;
   char *t;

   c_strncpy(s, path, C_MAX_PATHNAME);
   if ( *s == C_DELIMITER_CHAR )
   {
      c_chdir(C_DELIMITER_STR);
      s++;
   }
   t = strtok(s, C_DELIMITER_STR);
   for(;;)
   {
      if ( t == NULL )
         break;
      if ( *t == '\0' )
         break;
      /* printf("create path token: %s\n", t); */
      if ( c_chdir(t) != 0 )
      {
         if ( c_mkdir(t) != 0 )
         {
            printf("create error with %s\n", t);
            return -1;
         }
      }
      t = strtok(NULL, C_DELIMITER_STR);
   }
   /* printf("path %s ok\n", path); */
   return 0;
}

/* 0 if successful */
int c_set_path(const char *path)
{
   char *s = c_common_buf;
   char *t;
   c_strncpy(s, path, C_MAX_PATHNAME);
#ifdef C_DOS
   if ( s[0] != '\0')
   {
      if ( s[1] == ':' )
      {
         c_chdrive(toupper(s[0])-'A');
         s+=2;
      }
   }
#endif

   if ( *s == C_DELIMITER_CHAR )
   {
      c_chdir(C_DELIMITER_STR);
      s++;
   }
   t = strtok(s, C_DELIMITER_STR);
   for(;;)
   {
      if ( t == NULL )
         break;
      if ( *t == '\0' )
         break;
      if ( c_chdir(t) != 0 )
      {
         return -1;
      }
      t = strtok(NULL, C_DELIMITER_STR);
   }
   return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看一区二区精品视频| 亚洲欧美视频在线观看| 国产精品女人毛片| 黑人巨大精品欧美黑白配亚洲| 欧洲视频一区二区| 亚洲黄色录像片| 色诱亚洲精品久久久久久| 中文字幕亚洲欧美在线不卡| 麻豆精品国产91久久久久久| 欧美精品乱人伦久久久久久| 亚洲成人激情av| 欧美精品九九99久久| 午夜成人在线视频| 91精品在线免费| 视频一区二区中文字幕| 91精选在线观看| 免费观看日韩av| 精品美女在线观看| 国产精品一区二区在线观看网站| 久久精品亚洲国产奇米99| 国产福利电影一区二区三区| 日韩久久精品一区| 九九久久精品视频| 国产肉丝袜一区二区| www.色精品| 一个色综合av| 欧美一级欧美三级在线观看| 麻豆精品一区二区综合av| 精品久久五月天| 成人综合在线观看| 一区二区三区av电影| 欧美一二区视频| 成人自拍视频在线观看| 最新国产成人在线观看| 欧美日韩一二三区| 蜜臀av性久久久久蜜臀aⅴ| 2020国产精品| 欧美午夜不卡在线观看免费| 另类小说色综合网站| 久久综合久久综合久久| av午夜精品一区二区三区| 亚洲午夜精品网| 久久久久久毛片| 欧美亚洲一区二区三区四区| 精品综合久久久久久8888| 亚洲精品欧美二区三区中文字幕| 69堂国产成人免费视频| 国产精品一级片| 玉米视频成人免费看| 337p粉嫩大胆色噜噜噜噜亚洲| 91免费版在线看| 久久成人免费电影| 一区二区三区四区av| 久久综合资源网| 欧美在线免费播放| 国产福利91精品一区二区三区| 亚洲一卡二卡三卡四卡五卡| 久久久久久黄色| 在线不卡中文字幕| 日本高清不卡aⅴ免费网站| 国产一区二区不卡老阿姨| 国产乱人伦偷精品视频不卡| 亚洲国产成人在线| 欧美成人在线直播| 国内不卡的二区三区中文字幕 | 欧美一区二区三区四区五区| 成人97人人超碰人人99| 韩国精品主播一区二区在线观看 | 成人av网站在线观看免费| 蜜桃一区二区三区在线观看| 亚洲一区二区三区三| 国产精品久久午夜夜伦鲁鲁| 日韩一区二区在线免费观看| 欧美亚洲国产一区二区三区| 激情综合网av| 日日夜夜精品视频天天综合网| 中文字幕欧美一| 国产午夜精品一区二区三区四区| 日韩欧美你懂的| 91福利在线观看| 91麻豆swag| a级高清视频欧美日韩| 国产福利一区二区| 国产精品综合二区| 精品一区二区三区在线观看国产 | 91一区二区三区在线观看| 精品一区二区三区久久久| 日韩精品久久久久久| 亚洲永久精品国产| 亚洲美女电影在线| 亚洲精品一二三四区| 自拍偷拍欧美精品| 亚洲欧美一区二区三区极速播放| 久久久久国产成人精品亚洲午夜| 日韩午夜在线影院| 2014亚洲片线观看视频免费| 久久免费美女视频| 国产亚洲视频系列| 亚洲国产高清不卡| 91美女视频网站| 黑人精品欧美一区二区蜜桃| 男人的天堂亚洲一区| 日韩精品乱码免费| 美女视频一区二区三区| 伦理电影国产精品| 国内偷窥港台综合视频在线播放| 日韩高清欧美激情| 另类综合日韩欧美亚洲| www.日韩av| 欧美一区二区三区四区久久| 久久久久久亚洲综合| 一区二区三区在线免费播放| 日韩av中文字幕一区二区三区| 国产乱码精品1区2区3区| 91浏览器入口在线观看| 欧美一区二区三区视频免费播放 | 欧美久久婷婷综合色| 国产偷v国产偷v亚洲高清| 一区二区三区毛片| 麻豆高清免费国产一区| 不卡一区二区在线| 日韩一级在线观看| 亚洲美女屁股眼交| 国产呦萝稀缺另类资源| 欧美自拍偷拍午夜视频| 久久久99免费| 日韩国产欧美在线视频| 大陆成人av片| 欧美xingq一区二区| 亚洲综合一区二区三区| 国产黄色精品网站| 日韩欧美成人午夜| 亚洲综合成人在线视频| 国产成人在线影院| 欧美电影免费观看完整版| 亚洲猫色日本管| 从欧美一区二区三区| 精品日韩在线观看| 天天影视色香欲综合网老头| 成人精品一区二区三区中文字幕| 欧美一级高清大全免费观看| 亚洲一区二区三区中文字幕| 国产成人免费网站| 久久夜色精品一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美午夜视频网站| 一区二区三区四区在线播放 | 成人精品一区二区三区四区| 久久综合久色欧美综合狠狠| 日本aⅴ亚洲精品中文乱码| 91官网在线免费观看| 亚洲日韩欧美一区二区在线| 丁香婷婷综合网| 国产偷国产偷亚洲高清人白洁| 精品一区二区三区免费播放| 欧美大片一区二区| 精品一区二区久久| 日韩精品最新网址| 麻豆精品在线看| 欧美xxxxxxxx| 韩国v欧美v亚洲v日本v| 精品剧情v国产在线观看在线| 麻豆91免费观看| 欧美xxxx在线观看| 国产乱对白刺激视频不卡| 欧美xxxxx裸体时装秀| 韩日精品视频一区| 国产亚洲一区二区三区四区| 国产激情视频一区二区在线观看 | 欧美少妇bbb| 亚洲曰韩产成在线| 欧美日韩中文精品| 日韩vs国产vs欧美| 精品国产麻豆免费人成网站| 国产又粗又猛又爽又黄91精品| 久久免费看少妇高潮| 国产精品18久久久久久久网站| 久久精品亚洲麻豆av一区二区| 国产91精品一区二区麻豆网站| 国产精品久线在线观看| 99精品视频一区二区三区| 一区二区三区四区在线播放| 欧美日韩久久不卡| 久草精品在线观看| 中文字幕中文乱码欧美一区二区| 99riav一区二区三区| 亚洲18女电影在线观看| 日韩精品中文字幕一区二区三区 | 人人爽香蕉精品| 久久久久综合网| 99国产精品久久| 天天综合网天天综合色| 久久久精品中文字幕麻豆发布| 成人精品视频.| 亚洲在线免费播放| 精品嫩草影院久久| 99视频精品在线| 亚洲va在线va天堂| 国产欧美一区在线| 欧美日韩国产一二三|