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

📄 unios2.cpp

📁 RAR源码相关
💻 CPP
字号:
// (c) 2001,2004 by Max Alekseyev// ver. 2.1#include <stddef.h>#define INCL_DOSMODULEMGR#include <os2.h>typedef void* UconvObject;typedef unsigned short UniChar;int uni_init(int codepage);int uni_done();int uni_toucs(           /* translate to Unicode                   */	      char*,     /* I - input string                       */	      size_t,    /* I - length of input string (chars)     */	      UniChar*,  /* O - output Unicode string              */	      size_t* ); /* O - length of output string (UniChars) */int uni_fromucs(            /* translate from Unicode                */		UniChar*,   /* I - input Unicode string              */		size_t,     /* I - length of input string (UniChars) */		char*,      /* O - output string                     */		size_t* );  /* O - length of output string (chars)   *//* IMPLEMENTATION */static int (*uniMapCpToUcsCp) (	  unsigned long, /* I  - Codepage to convert         */	  UniChar*,      /* O  - Output buffer               */	  size_t );      /* I  - UniChars in output buffer   */static int (*uniCreateUconvObject) (	  UniChar*,      /* I  - Unicode name of uconv table */	  UconvObject* );/* O  - Uconv object handle         */static int (*uniFreeUconvObject) (          UconvObject ); /* I  - Uconv object handle         */static int (*uniUconvToUcs) (	  UconvObject,   /* I  - Uconv object handle         */	  void**,        /* IO - Input buffer                */	  size_t*,       /* IO - Input buffer size (bytes)   */	  UniChar**,     /* IO - Output buffer size          */	  size_t*,       /* IO - Output size (chars)         */	  size_t* );     /* IO - Substitution count          */static int (*uniUconvFromUcs) (	  UconvObject,   /* I  - Uconv object handle         */	  UniChar**,     /* IO - Input buffer                */	  size_t*,       /* IO - Input buffer size (bytes)   */	  void**,        /* IO - Output buffer size          */	  size_t*,       /* IO - Output size (chars)         */	  size_t* );     /* IO - Substitution count          */static int uni_ready = 0;static HMODULE uni_UCONV;static UconvObject uni_obj;int uni_init(int codepage) {    UniChar unistr[256];    uni_ready = 0;    if(!&DosLoadModule) {	/* DOS enviroment detected */	return -1;    }    if( DosLoadModule(0,0,(PCSZ)"UCONV",&uni_UCONV) ) {	/* no Unicode API found (obsolete OS/2 version) */	return -2;    }    if( !DosQueryProcAddr(uni_UCONV,0,(PCSZ)"UniMapCpToUcsCp",     (PPFN)&uniMapCpToUcsCp     ) &&        !DosQueryProcAddr(uni_UCONV,0,(PCSZ)"UniUconvToUcs",       (PPFN)&uniUconvToUcs       ) &&        !DosQueryProcAddr(uni_UCONV,0,(PCSZ)"UniUconvFromUcs",     (PPFN)&uniUconvFromUcs     ) &&        !DosQueryProcAddr(uni_UCONV,0,(PCSZ)"UniCreateUconvObject",(PPFN)&uniCreateUconvObject) &&        !DosQueryProcAddr(uni_UCONV,0,(PCSZ)"UniFreeUconvObject",  (PPFN)&uniFreeUconvObject  )      ) {	unistr[0] = 0;	if( (!codepage || !uniMapCpToUcsCp(codepage, unistr, 256)) && !uniCreateUconvObject(unistr,&uni_obj) ) {	    uni_ready = 1;	    return 0;	}    }    DosFreeModule(uni_UCONV);    return -2;}int uni_toucs(char* src, size_t srclen, UniChar* dst, size_t* dstlen) {    size_t srcbytes, srcsize, dstsize, subsc=0;    if(!uni_ready) return -1;    dstsize = srcbytes = srclen * sizeof(UniChar);    if( uniUconvToUcs(uni_obj,(void**)&src,&srclen,&dst,&dstsize,&subsc) ) {        return -1;    }    *dstlen = srcbytes - dstsize;    return 0;}int uni_fromucs(UniChar* src, size_t srclen, char* dst, size_t* dstlen) {    size_t srcbytes, srcsize, dstsize, subsc=0;    if(!uni_ready) return -1;    dstsize = srcbytes = *dstlen;    if( uniUconvFromUcs(uni_obj,&src,&srclen,(void**)&dst,&dstsize,&subsc) ) {        return -1;    }    *dstlen = srcbytes - dstsize;    return 0;}int uni_done() {    if( uni_ready ) {      uniFreeUconvObject(uni_obj);      DosFreeModule(uni_UCONV);      uni_ready = 0;    }    return 0;}

⌨️ 快捷键说明

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