自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(28)
  • 资源 (48)
  • 收藏
  • 关注

原创 wuauclt1.exe mshta.exe 病毒清理

现象:系统 xp , 开机1小时以后还不能打开应用,从“事件查看器”来看是困在 wuauclt.exec:\windows\system32\wuauclt1.exe 在删除后就又出现了使用 360 急救后,上述文件仍然删除后就又出现了下载 Tweaking.com - Windows Repair 1.7.5 Author: Tweaking.comDate: 2012-06

2012-06-30 12:41:22 1151

原创 ANSI 转义序列: [颜色/彩色] SecureCRT的GIF动画示例

0. 将以下文本存为 txt 文件(可能需要 utf8 格式),使用 cat 即可看到效果 说明(n) 效果[n:效果]===================================0. 关 \033[0m关1. 粗体 \033[1m1. 粗体\033[0m2. 无 \033[2m2. 无\

2011-10-24 07:42:00 766

原创 VS2005 与 gcc 中可变参数宏

#include #include int my_printf(const char * fmt, ...){ int r_sn; int r = 0; va_list args; char printf_buf[256]; va

2011-10-04 10:08:16 924

原创 ICU4C 函数 ucnv_convert 参数详解

ICU4C 的获得:从网址: http://site.icu-project.org/download可以下载 windows 所需的库和头文件,当然还有 DLL 文件 :)本文测试用的 4.2 版来源于: http://icu-project.org/downloa

2011-09-14 07:51:07 3147

转载 Android多媒体支撑库OpenCore视频硬件加速

Android多媒体支撑库OpenCore视频硬件加速来源:http://my.unix-center.net/~Simon_fu/?p=748

2010-12-08 07:56:00 470

转载 Android的多媒体框架OpenCore介绍

Android的多媒体框架OpenCore介绍来源: http://qiuzhenqing.blog.edu.cn/2010/579964.html

2010-12-08 07:42:00 348

转载 Android的多媒体框架OpenCore介绍

Android的多媒体框架OpenCore介绍来源: http://qiuzhenqing.blog.edu.cn/2010/579964.html

2010-12-08 07:42:00 344

原创 在 lua 中使用 alien 调用 kernel32.dll 中函数转换 gb2313 为 UTF-8

如题.

2010-09-06 22:20:00 1759 2

转载 模式匹配函数

<br />来源: http://www.cnblogs.com/whiteyun/archive/2009/09/02/1541043.html<br />在string库中功能最强大的函数是:<br /><br />string.find(字符串查找)<br />string.gsub(全局字符串替换)<br />string.gfind(全局字符串查找)<br />string.gmatch(返回查找到字符串的迭代器)<br /><br />这些函数都是基于模式匹配的。与其他脚本语言不同的是,Lua并

2010-08-25 00:16:00 514

转载 Damerau–Levenshtein Distance, Lua Implementation (字符串相似度算法 lua 实现)

I stumbled across Levenshtein distance today and had to try my hand at writing an implementation in Lua. I choose the slightly more complex Damerau–Levenshtein distance, and I think it turned out pretty well.Some notes of interest:Complexity is O(

2010-08-24 00:55:00 962

转载 Levenshtein distance (相似度)

Levenshtein distanceFrom Free media libraryImplementations in different languages of the Levenshtein distance algorithm.

2010-08-24 00:30:00 1592

转载 字符串相似度算法( Levenshtein Distance算法)

题目: 一个字符串可以通过增加一个字符,删除一个字符,替换一个字符得到另外一个字符串,假设,我们把从字符串A转换成字符串B,前面3种操作所执行的最少次数称为AB相似度如 abc adc 度为 1 ababababa babababab 度为 2 abcd acdb 度为2 字符串相似度算法可以使用 Levenshtein Distance算法(中文翻译:编辑距离算法) 这算法是由俄国科学家Levenshtein提出的。

2010-08-24 00:26:00 494

转载 Lua常见问题回答

<br />来源: http://www.ixpub.net/thread-2376722-1-1.html<br />学习lua需要什么基础?<br /><br />很显然,lua不适合作为你第一个编程语言,因为它需要比较深的c语言编程基础,而且对于数据结构有一定的了解,最关键的是它的功能函数并不完整,需要很多额外第三方支持,比如最基本的socket。所以学习lua最好有c或者c++的基础。<br /><br />2,学习lua应该看什么文档?<br /><br />最好从Programming In L

2010-08-23 23:30:00 930

转载 Luacom 使用中文文件名 (Lua Unicode UTF-8)

Luacom内部使用的应该是UTF-8编码所以直接使用ANSI编码的中文文件名,会打不开研究了几天,写了一个ANSI UNICODE UTF-8的lua扩展,以便使用基本上应该还可以用(-_-|)(链接中的永硕网盘提供相应的Unicode.dll下载)更新历史: 2008-11-3 修正getallfilews函数使用内存浪费问题(分配内存时多分配了1倍)。将wchar_t和char 的大小比值2定义为CHAR_SCALE。getallfilews和getallfil

2010-08-23 22:53:00 1438 1

转载 VC如何改变控件的颜色(方法汇总)

<br />来源: http://hi.baidu.com/daihaipengdhp/blog/item/0241ba01205528d5267fb524.html<br /> 有两种方法。其一,可以在父类中指定控件的颜色,或者利用MFC4.0新的消息反射在控件类中指定颜色。 当控件需要重新着色时,工作框调用父窗口(通常是对话框)的CWnd: : OnCrtlColor,可以在父窗口类中重置该函数并指定控件的新的绘画属性。例如,下述代码将对话中的所有编辑控件文本颜色改为红色:HBRUSH CAboutDi

2010-08-18 23:24:00 1151

转载 编译器-VC6.0全解及调试技巧

<br />来源:看雪技术论坛 http://hi.baidu.com/greyair5360/blog/item/435f40e9cfafa033b90e2d6f.html<br />1、Run-Time Library<br />Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。<br />我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。<br />C Run-Time L

2010-08-10 21:00:00 1254 1

转载 笔记: Lua标准库: table函数, 数学函数, 字符串函数/格式化/配对, WoW新增函数, 函数别名

<br />来源: http://www.cnblogs.com/apexaddon/articles/1486622.html<br />Posted on 2009-05-21 21:25 apex.Cliz 阅读(1685) 评论(0)  编辑收藏<br />这里只介绍和插件编写比较有关的几个函数. 详细的Lua手册请参照Lua Reference Manual 5.1.<br /> <br />table函数库<br />一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均

2010-08-08 09:07:00 473

转载 让 UltraEdit-32支持lua高亮显示

让 UltraEdit-32支持lua高亮显示

2010-08-02 23:01:00 623

转载 Hyperlinks in rich edit control

<br />> First "rich edit format" is actually RTF - the Rich Text Format, a<br />> defined specification. This s what the rich edit control uses internally<br />> - which is why EM_STREAMIN (CRichEditCtrl::StreamIn) an EM_STREAMOUT<br />> (CRichEditCtrl::St

2010-07-29 22:47:00 398

转载 Class to Auto-Position Controls on Window Resize

<br />来源: http://www.codeguru.com/cpp/w-d/dislog/resizabledialogs/article.php/c1947/Class-to-Auto-Position-Controls-on-Window-Resize.htm<br /> <br /> <br />ControlPos.cpp<br />//------------------------------------------------------------------------------

2010-07-19 11:52:00 384

转载 VC窗口程序中出现中文乱码的解决

找到工程中的 rc 文件(资源文件),把其中LANGUAGE 9, 1的地方改为4,2;codepage(1252)改为codepage(936);另外把#include "afxres.rc" 改成#include "l.chs/afxres.rc";把"afxres.rc" 改成"l.chs//afxres.rc"即可,其中的数据根据不同文字代码可能不同,例子中的是英文,改为中文。

2010-07-14 23:02:00 950

原创 VC6 或 vs 2005 或 vs 2008 中MFC程序显示乱码

VC6 或 vs 2005 或 vs 2008 中MFC程序显示乱码code_page(936) l.CHS//afxres.rc

2010-07-14 23:00:00 749

原创 VC 6生成的资源文件

VC 6生成的资源文件 #pragma code_page(936)"#include ""l.chs//afxres.rc"" // Standard components/r/n"

2010-07-14 21:14:00 463

转载 学习心得:控件之Tree Control (仿系统目录树视图)

ImageList_SetOverlayImage//建立树视图插入结构 TVINSERTSTRUCT tvis; tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_PARAM; if(Attributes & SFGAO_HASSUBFOLDER) ...{ tvis.item.mask |= TVIF_

2010-07-11 12:06:00 689

转载 树型视的三个结构

CTreeCtrlTVINSERTSTRUCTImageList_SetOverlayImage

2010-07-11 10:34:00 401

转载 学习VC中的树型控件CTreeCtrl

CTreeCtrlimagelist_setoverlayimage

2010-07-11 10:26:00 417

转载 ImageList_SetOverlayImage

ImageList_SetOverlayImage

2010-07-11 10:14:00 830

转载 VC播放声音函数PlaySound和sndPlaySound的用法

PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);PlaySound("DeviceConnect",NULL,SND_ALIAS|SND_ASYNC);PlaySound("DeviceDisconnect",NULL,SND_ALIAS|SND_ASYNC);PlaySound("DeviceFail",NULL,SND_ALIAS|SND_ASYNC);

2010-07-10 23:07:00 918

LuaCOM User Manual (Version 1_3)

来源于: http://www.tecgraf.puc-rio.br/~rcerq/luacom/pub/1.3/luacom-htmldoc/ lua5.1 带的在 C:\Lua\5.1\docs\luacom 但,是PDF格式的

2010-08-23

lua51plus.part02.rar (2/2)

从 http://code.google.com/p/msysgit/ 下载 git gui 使用 git gui 从 http://luaplus.org/ 上说明的 http://git.luaplus.org/luaplus51-all.git 处下载 1100 里面的 lua 为 5.1.4 本下载为 luaplus51 的第2部分

2010-08-18

lua51plus.part01.rar(1/2)

从 http://code.google.com/p/msysgit/ 下载 git gui 使用 git gui 从 http://luaplus.org/ 上说明的 http://git.luaplus.org/luaplus51-all.git 处下载 1100 里面的 lua 为 5.1.4 本下载为 luaplus51 的第1部分

2010-08-18

richedit 及 相关文档

http://www.cnpopsoft.com/article.asp?id=13 http://www.codeproject.com/KB/edit/autoricheditctrl.aspx

2010-08-15

GNU utilities for Win32

来源: http://unxutils.sourceforge.net/ Here are some ports of common GNU utilities to native Win32. In this context, native means the executables do only depend on the Microsoft C-runtime (msvcrt.dll) and not an emulation layer like that provided by Cygwin tools.

2010-08-12

zip.exe (来源于Gow )

摘自 http://wiki.github.com/bmatzelle/gow/ Gow – The lightweight alternative to Cygwin 下面是 zip.exe 信息: Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license. Zip 3.0 (July 5th 2008). Usage: zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list] The default action is to add or replace zipfile entries from list, which can include the special name - to compress standard input. If zipfile and list are omitted, zip compresses stdin to stdout. -f freshen: only changed files -u update: only changed or new files -d delete entries in zipfile -m move into zipfile (delete OS files) -r recurse into directories -j junk (don't record) directory names -0 store only -l convert LF to CR LF (-ll CR LF to LF) -1 compress faster -9 compress better -q quiet operation -v verbose operation/print version info -c add one-line comments -z add zipfile comment -@ read names from stdin -o make zipfile as old as latest entry -x exclude the following names -i include only the following names -F fix zipfile (-FF try harder) -D do not add directory entries -A adjust self-extracting exe -J junk zipfile prefix (unzipsfx) -T test zipfile integrity -X eXclude eXtra file attributes -! use privileges (if granted) to obtain all aspects of WinNT security -$ include volume label -S include system and hidden files -e encrypt -n don't compress these suffixes -h2 show more help

2010-08-11

MinGW-5.1.6 (2/2)

MinGW-5.1.6.part2.rar 这是压缩包的第二部分 (2/2)

2010-08-11

mingw 5.16 (1/2)

MinGW-5.1.6.part1.rar 这是压缩包的第一部分 (1/2)

2010-08-11

用Gow在Windows使用Linux命令 (Gow – The lightweight alternative to Cygwin)

来源 : http://linux.solidot.org/article.pl?sid=10/08/08/1417245 riku 写道 "如果你是 Linux 及 Windows 的双料用户,而且是深度 CLI 控的话,可能会像我一样在用 Win 的时候会不知不觉间输入一些 Linux 的命令, 当然这肯定无法执行的。现在,有一个名为 Gow 的工具包就可以发挥作用了。 Gow 是一个相当于 Cygwin 的轻量级替代品,里面封装了130 多个的开源工具及 Linux 命令,其中包括: Shell : bash , zsh 压缩工具: gzip, zip, bzip2, compress SSH: putty, psftp, pscp, pageant, plink 下载工具 : cURL, wget FTP: NcFTP 编辑器 :vim 字处理 : grep, agrep, less, cat, tail, head 文件工具: mv, cp, du, ls, pwd, rmdir, whereis 开发工具: make, diff, diff3, sleep, cvs, dos2unix, unix2dos 用户下载一个 Win 安装程序并安装后,它会自动设置好相应的环境变量,这样无论在哪个目录下都能使用这些命令了。详细介绍见这里"

2010-08-11

decoda (A powerful Lua IDE and debugger)

Decoda is a professional development environment for debugging Lua script in your applications. It's familiar and fast and you'll wonder how you ever worked without it. 来源: http://www.unknownworlds.com/decoda/

2010-08-07

IconCool Sample

C:\Program Files\IconCool Software\IconCool Editor\Sample

2010-08-05

Libraries and tools for Lua

该压缩包为 http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/ 的离线境像

2010-08-04

LuaEdit 3.02a

来源: http://www.luaedit.org/ LuaEdit is an IDE/Text Editor/Debugger for the Lua language. Its interface looks like MS Studio .Net® and includes syntax highlighting, code completion, advance breakpoint management, efficient search engines, etc. Free for commercial and personal uses.

2010-08-02

让UltraEdit完美支持Lua语法

来源: http://www.cppblog.com/tuuzed/archive/2008/12/27/70516.html 最近在研究Lua脚本语言(个人觉得它是Basic、C、C++的结合体),可是“强大”的UltraEdit默认安装后是不支持Lua语法高亮显示的,满屏幕“黑黑”的鸡肠字符让人感觉编程是那么的索然无味,没有了灵感。 终于有一天GOOGLE了一下,发现了很多解决办法,最好的办法就是:先去UltraEdit的官网下载支持Lua的Wordfiles文件(这里),是个文本文件(lua.txt)。打开UltraEdit安装目录下的wordfile.txt,把lua.txt文件中的内容拷贝粘贴到wordfile.txt的末尾,存盘,OK,于是UltraEdit语法高亮项多出Lua一项,可以选择使用了。比起网上说的02年版的lua.txt,这个04版(也是很旧)已经完美支持“注释块”和“注释行”高亮了,所以无需在改它的第一行。 但是,使用一段时间后,还是发现有问题,比如:有部分关键字没有加亮(如:os,pair, ipair等);不支持代码折叠(不能很好地知道结束关键字end是属于哪个while、for、function等);对UltraEdit的F8(函数列表)功能支持得不完美。还好,看了UltraEdit帮助后,自己修改了一下,解决了上述问题,下面就贴出我的lua.txt(在这里下载修改后的Lua.txt)。

2010-08-02

如何增量 Visual c + + 中的每个版本后的版本信息(lua)

请参阅 MSDN 原文: http://support.microsoft.com/kb/237870/zh-cn 此为 lua 版,但只更新了 FILEVERSION PRODUCTVERSION 两个字段,还需要后续改进. 使用方法: 在 VC 6 中的工程设置中,设置 Post-build step 中写入以下命令: C:\Lua\5.1\lua.exe -i update_version.lua resource.rc

2010-08-01

Font Frenzy

FontFrenzy tames the frenzy of fonts that can clutter and slow down Windows. The DeFrenzy function removes and stores all fonts except those that were present when Windows was first installed. In short, it cleans up your font folder so that Windows boots quicker and runs smoother. 来源: http://www.sdsoftware.org/default.asp?id=5936

2010-08-01

get version from vs or vc

from codeguru 共两个工程 VersionInfo GetVersionInfo

2010-08-01

ShelExec v1.17 An application + source code to call the ShellExecute API

来源: http://www.naughter.com/shelexec.html Welcome to ShelExec, A very simple utility to allow you to call the ShellExecute API from the command line. Places where you might find ShelExec useful are in adding an autorun.inf file to your CD / DVD +/- RW discs. For example suppose you have a HTML page called index.htm on the root of your CD which you would like to run automatically whenever the user inserts the CD. All you need to do is put ShelExec.exe, some ico file (this is optional as is the icon=... in the autorun.inf file) and the index.htm files into the root directory and create a autorun.inf file with the following contents: [autorun] open=ShelExec.exe @EXEDRV@\index.html icon=youricon.ico Note that it is important to use the @EXEDRV@ or @EXEDIR@ replacement parameters as this helps ensures that ShelExec uses a fully quoted path when it runs your program. Otherwise you can get some problems on various versions of Windows with your AutoRun CD's. Items that ShelExec can handle include any file which is registered with the shell e.g. Word .Doc files, Text Files, batch files etc etc. It can also handle URLS such as "http://www.naughter.com", "ftp://ftp.microsoft.com " and "mailto:pjna@naughter.com". The more technically minded of you may say why is there a need to have this program since you can use "start filename" on autorun CD's without any apparent problems. The problem with this approach is that it does not work on NT / 2000 / XP and 2003 because on these operating systems "start" is implemented as an "Internal" command in cmd.exe (as opposed to a standard exe on 95/98) with the upshot that your CD's will not AutoRun on these operating systems. Using ShelExec will mean that your CD's will autorun on all OS's which support it. The enclosed zip file contains the ShelExec source code and a prebuilt version of ShelExec. Copyright You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) when your product is released in binary form. You are allowed to modify the source code in any way you want except you cannot modify the copyright details at the top of each module. If you want to distribute source code with your application, then you are only allowed to distribute versions released by the author. This is to maintain a single distribution point for the source code. The executable file itself, namely "ShelExec.exe" can be freely redistributed by anyone.

2010-07-30

Using LUA with Visual C++ (Introduction)

What is LUA? LUA is a scripting language, its power lies in the fact that it can be embedded in your C++ programs. Scripts give you the possibility to change the behaviour of your C++ programs without any need to recompile your program. A real world example would be game programming: you only have to change the script(s) and you can create a whole new game using the same engine. LUA is fully customizable, you can create your own script functions and expose them to a 3th party. Or you can create scripts, encrypt them and then decrypt them at run-time so that only a number of limited people can script for your program. Allowing the end-user to modify your program, gives your program a point ahead to the competition. Using LUA in your program does require some thinking ahead... You have to choose what kind of functions you allow in the scripts. For example: a function savegame would be logic and usefull and so could be a function deletesavegame but making a function such as deletefile public can be dangerous. The LUA version discussed is 5.0.2. Don't forget that this document is only a quick introduction and that it is not a complete tutorial about LUA. How to embed LAU into C++? Another way to formulate this question : "How can I use LUA in my Visual C++ Project?". The answer is actually pretty easy, you download it from lua.org and you follow the instructions below. Know that there are several ways to add LUA to your project and I only explain one of them. NOTE: I'm assuming that you know the basics about how to use your compiler, the instructions outlined below are ment for Microsoft Visual C++ 6. Installation : dowload LUA here (links to official website) Extract the files to a folder, for example "c:\Program Files\LUA SDK" Configuration : In your Microsoft Visual C++ IDE Go to Tools->Options. Select Directories and add the LUA include-directory. Add LUA to your project (non-MFC) : Create a new folder in your project's workspace and call it LUA. Add the files. Select and insert all the files in the LUA src-directory (from lapi.c to lzio.h). Add LUA to your project (MFC) : Create a new folder in your project's workspace and call it LUA. Add the files. Select and insert all the files in the LUA src-directory (from lapi.c to lzio.h). MFC uses precompiled headers, LUA doesn't, so let's disable them. Select the LUA folder in your workspace and press the right mouse button, then select Settings from the menu. Select "All Configurations". Then open the LUA folder and select all the .c-files (make sure your selection doesn't include a folder or a .h file!). On the right side a C++-tab will appear. In that C++-tab select the "Precompiled Headers"-catagory. And select "Not using precompiled headers". Press the OK-button to finish. About ANSI C and C++ LUA is pure ANSI C code, this means that if you build the code with a C++ compiler it will complain with "error LNK2001: unresolved external symbol" messages. Two easy ways exist to resolve this problem without modifying the original source files : Tell the compiler that the function definitions are C style by enclosing the include directive with the extern keyword : extern "C" { #include <lua.h> } You can also define LUA_API before including lua.h : #define LUA_API extern "C" #include <lua.h> I recommend that you use the first method. The LUA State In order to use LUA you have to initialize it and when you're done with it you have to deinitialize LUA. This is done by respectivily opening and closing an LUA state. // Open the LUA state lua_State *L = lua_open(); // Use LUA... ; // Close the LUA state lua_close(L); You can have multiple LUA states in your program which are all indepedent of each other. The LUA Stack LUA is stack-based. The communication between the script and the C/C++ application happens between a stack maintained by LUA. Note that each LUA state has its own stack. A clean programmer will ensure that the stack is zero at the end of his program. You can verify this by calling the lua_gettop function, the result must be zero, it's a good candidate for the _ASSERT macro (defined in crtdbg.h). // Open the LUA state lua_State *L = lua_open(); // Use LUA... ; // Verify the stack // (don't forget to include crtdbg.h) _ASSERT(lua_gettop(L) == 0); // Close the LUA state lua_close(L); LUA defines lua_pushXXX (where XXX can be "string", "number", "boolean", ...) but it doesn't define the lua_popXXX versions. Here's an example how to define them by yourself : inline LUA_API lua_Number lua_popnumber(lua_State *L) { register lua_Number tmp = lua_tonumber(L, lua_gettop(L)); lua_pop(L, 1); return tmp; } inline LUA_API const char *lua_popstring(lua_State *L) { register const char *tmp = lua_tostring(L, lua_gettop(L)); lua_pop(L, 1); return tmp; } When popping the values they are converted automaticly when possible : // Push -1 as a number lua_pushnumber(L, -1); // And pop it again as a string (s --> "-1") const char *s = lua_popstring(L); If the conversion is impossible then NULL/0 will be returned. For example we can't convert a boolean to a string : // Push 1 (true) lua_pushboolean(L, 1); // And pop it again as a string (s --> NULL) const char *s = lua_popstring(L); There are many other stack manipulation functions and there are also functions to verify the value type on the stack. I suggest that you check out the LUA manual that comes with the distribution. Executing an LUA script Executing an LUA script isn't that straight-forward at first but at the end it turns out the be very simple. I'm explaining you the full implementation of how to execute a script by creating your own "reader". LUA comes with its own library that contains ready-to-use functions but I prefer you to explain the complete version so you can understand better how LUA works. In order to execute LUA scripts you have to load them first and call them afterwarts, this is done by respectivily calling the lua_load and the lua_call or lua_pcall function. The lua_load function takes four parameters : LUA_API int lua_load (lua_State *L, lua_Chunkreader reader, void *data, const char *chunkname); The first one is the pointer to the LUA state, the second one is a pointer to a user-defined reader function, the third pointer is a user-defined value that the reader function will receive, and the fourth one is a name we decide ourselves for debugging purposes. As you can see from this call, there is no argument accepting a script. We have to define this ourselves using the data argument. Let's take a look at this structure (taken from the LUA library), we will define : typedef struct luaMemFile { const char *text; size_t size; } luaMemFile; The text variable will be our script line(s) and the size variable will tell us if we have finished reading or not (see later). A value of zero will mean : we are no longer reading. We now define a simple callback function : const char *readMemFile(lua_State *, void *ud, size_t *size) { // Convert the ud pointer (UserData) to a pointer of our structure luaMemFile *luaMF = (luaMemFile *) ud; // Are we done? if(luaMF->size == 0) return NULL; // Read everything at once // And set size to zero to tell the next call we're done *size = luaMF->size; luaMF->size = 0; // Return a pointer to the readed text return luaMF->text; } Once the script has been loaded, a simple call to lua_pcall will suffice. I prefer lua_pcall above lua_call because the later one will terminate the program if there was an error. The lua_call takes three parameters and the lua_pcall function takes four parameters : LUA_API void lua_call (lua_State *L, int nargs, int nresults); LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc); The first parameter is the pointer to the LUA state, the second parameter is the number of arguments on the stack that the command takes (and when executing a loaded script this can remain 0). The third parameter is the number of result parameters the command will return on the stack. If nresult equals LUA_MULTRET then the number of parameters that will be pushed on the stack is controlled by the called function! Yes indeed, an LUA function can return more than one parameter, for example : return "i", "return", 5, "strings", "and", 2, "numbers" The fourth parameter (errfunc) is only valid for the lua_pcall function and is used for controlling the error-handling. Please read the LUA manual for more information about this parameter. A note about the nresults argument: if we take the example return statement above, then we see that 7 values would be returned. If we execute this script with nresult==LUA_MULTRET then 7 values would be returned, if we would call the function with nresult==3 then only the 3 first values would be returned ("i", "return" and 5). This is the test script we will execute : const char *testscript = { "function double(n)\n" " return n * 2\n" "end\n" "\n" "return double(1)\n" }; function double(n) return n * 2 end return double(1) A quick but nasty way of executing would be this : // luaMemFile luaMF; // Load the command and try to execute it... luaMF.text = testscript; luaMF.size = strlen(luaMF.text); lua_load(L, readMemFile, &luaMF, "test script"); lua_pcall(L, 0, 0, 0); You may ask why is this a bad method? Well, there is no error checking, if the script contains error or an execution error occur than the stack will be messed-up, LUA functions push their error values on the stack so you need to check the result of both lua_load and lua_pcall and act accordingly! This is the implementation that I prefer : // luaMemFile luaMF; // Load the command and try to execute it... luaMF.text = testscript; luaMF.size = strlen(luaMF.text); if(lua_load(L, readMemFile, &luaMF, "test script") == 0) { // Execute the loaded command... // The function takes 0 parameters and will return 1 result if(lua_pcall(L, 0, 1, 0) == 0) { // There was no error // Let's get the result from the stack lua_Number result = lua_tonumber(L, lua_gettop(L)); } // Clean-up the stack lua_pop(L, 1); } else { // There was a lua_load error... // Pop the error value from the stack lua_pop(L, 1); } Calling C functions from LUA In order to make this topic more accessible, a whole new page has been assigned to it, please follow this link : Calling C functions from LUA or How to expose C function to LUA scripts. 来源: http://www.codegurus.be/codegurus/Programming/luaintroduction_en.htm

2010-07-27

System Hardware Information Finder

This article is an update to my previous articles on the same topic. I started this utility to get some basic information about the hardware. After that I have received some emails from some of our fellow programmers, who are frequent visitors of this site, asking to extend this utility to spit out some more information. In this update I have added the information about CPU vendor (Intel, Cyrix, AMD, etc.) ,CPU speed, and Physical memory status of sustem . CPU Information: To get CPU information I could not find any direct and simple API call. Then I thought of our friendly Registry, which contains all the system information. And there it was all the information I wanted. If you look under HKEY_LOCAL_MACHINE/Hardware/Description/System/CentralProcessor/0 key in registry, you will find the answers to your questions. ~MHz subkey gives the CPU speed and VendorIdentifier gives the vendor information. We will make use of RegQueryValueEx API call to get the information. LONG RegQueryValueEx( HKEY hKey, // handle to key to query LPTSTR lpValueName, // address of name of value to query LPDWORD lpReserved, // reserved LPDWORD lpType, // address of buffer for value type LPBYTE lpData, // address of data buffer LPDWORD lpcbData // address of data buffer size ); Before making this call, it is necessary to create the handle to registry key which needs to be queried. For this make use of RegCreateKeyEx API call. This is how the code looks like in the included code for this utility. // Get the processor speed info. result = ::RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Hardware\\Description\\System\\CentralProcessor\\0", 0, KEY_QUERY_VALUE, &hKey); // Check if the function has succeeded. if (result == ERROR_SUCCESS) { result = ::RegQueryValueEx (hKey, _T("~MHz"), NULL, NULL, (LPBYTE)&data, &dataSize); m_stCPUSpeed.Format ("%d", data); m_stCPUSpeed += _T (" MHz"); dataSize = sizeof (vendorData); result = ::RegQueryValueEx (hKey, _T("VendorIdentifier"), NULL, NULL, (LPBYTE)vendorData, &dataSize); m_stVendorInfo.Format ("%s", vendorData); } // Make sure to close the reg key RegCloseKey (hKey); Since I don't have access to any other CPU than Intel. So I couldn't test this code on CPU's from Cyrix, AMD, etc. Post a comment Email Article Print Article Share Articles Digg del.icio.us Newsvine Facebook Google LinkedIn MySpace Reddit Slashdot StumbleUpon Technorati Twitter Windows Live YahooBuzz FriendFeed Physical Memory Status: To get the information about the memory status of the system we can take routes. First one, which is not easy for a person who does not know assembly language, involves getting the required information from CMOS data. Second one which simply involves making GlobalMemoryStatus API call. And I chose the second one (Ofcourse I am not assembly language pro). VOID GlobalMemoryStatus ( LPMEMORYSTATUS lpBuffer // pointer to the memory status structure ); The information is returned in MEMORYSTATUS data structure. typedef struct _MEMORYSTATUS { // mst DWORD dwLength; // sizeof(MEMORYSTATUS) DWORD dwMemoryLoad; // percent of memory in use DWORD dwTotalPhys; // bytes of physical memory DWORD dwAvailPhys; // free physical memory bytes DWORD dwTotalPageFile; // bytes of paging file DWORD dwAvailPageFile; // free bytes of paging file DWORD dwTotalVirtual; // user bytes of address space DWORD dwAvailVirtual; // free user bytes } MEMORYSTATUS, *LPMEMORYSTATUS; The information returned by the GlobalMemoryStatus function is volatile. There is no guarantee that two sequential calls to this function will return the same information. This API call has been made in GetMemoryInfo function of the application attached. I gets the information for memory usage, total physical memory instaled, physical memory available, and total virtual memory. 来源: http://www.codeguru.com/cpp/w-p/system/hardwareinformation/article.php/c2833/

2010-07-26

luajava1.1 中的头文件 luajava.h

从 https://nodeload.github.com/jasonsantos/luajava/zipball/master 下载的 luajava 中是没有 luajava.h 文件的 该文件需要由 JDK 的 javah 生成 在此希望能帮到一些生成luajava.h因难的人 :)

2012-03-15

VC中PC SC智能卡接口的编程

来源: 【弱电通】 http://www.ruodiantong.com/index.php?action-modelview-name-Down-itemid-28700#

2011-10-13

Microsoft CNG Development Kit

http://www.microsoft.com/download/en/confirmation.aspx?id=1251 Windows CNG SDK Version 1.3 The CNG SDK contains documentation, code, and tools designed to help you develop cryptographic applications and libraries targeting the Windows Vista SP1 and Windows Server 2008 Operating Systems.

2011-10-07

使用 mingw 编译的 lsqlite3_svn08

-1. 部分文件列表 EXE or DLL size ------------------------ lsqlite3.dll 61,236 sqlite3.dll 447,579 sqlite3.exe 46,080 0. lua http://www.lua.org 下载 LuaForWindows v5.1.4 1. sqlite http://www.sqlite.org/download.html 从下面网址下载 sqlite-3070701 源码 http://www.sqlite.org/sqlite-amalgamation-3070701.zip 使用 mingw 编译出 sqlite3.dll 和 sqlite3.exe 2. lsqlite3 (也是本压缩包的原型) http://lua.sqlite.org 从下面网址下载 Version 0.8 http://lua.sqlite.org/index.cgi/zip/lsqlite3_svn08.zip?uuid=svn_8 使用 mingw 编译出 lsqlite3.dll 其他: 0. lsqlite3 链接 lua 使用了LuaForWindows v5.1.4 的 lua5.1.lib 库,故运行时需要 lua5.1.dll 1. lsqlite3 链接 sqlite 使用的 sqlite3.lib 来源于 M$ 的 lib.exe 应用,参阅 http://hi.baidu.com/opaquefog/blog/item/9b21b6deb324e25dccbf1ab7.html

2011-08-25

dll2lib.rar (需要安装 python2.X )

来源: http://lavixu.livejournal.com/14738.html 压缩包中除上述网址的dll2lib.py外还含有 VC 6 的如下几个文件: DUMPBIN.EXE LIB.EXE LINK.EXE MSPDB60.DLL 该python脚本对一个 A.dll 文件会生成如下三个文件: A.lib A.def A.exp 因为是 python 写的,所以需要下载 python (目前为 2.7 ,不要使用 3.X 版的,因为 3.X 版认为 print "string" 是语法错误的) ------------------- 传说中的分隔线 ------------------- 你可能对下面的内容也感兴趣: 标题: How can an MSVC program call an MinGW DLL, and vice versa? 网址: http://wyw.dcweb.cn/dllfaq.htm ------------------- 下面是传说中价格为$999的 DLL to Lib (d2l) 它能把 dll 转为静态库 :) DLL to Lib 3.0 (Free to try; $999.00 to buy) http://download.cnet.com/DLL-to-Lib/3000-18487_4-10064902.html

2011-06-17

sqlite3 文档集合

sqlite(中文).chm sqlite-3_7_3-docs.chm SQLITE3 使用总结.doc SQLite数据库的DB-API.pdf SQLite权威指南.pdf SQLite权威指南_v100.doc 嵌入式数据库SQLITE3使用指南.pdf 来源: http://www.sqlite.com.cn/bbs/topicdisp.asp?tid=558 http://www.sqlite.com.cn/bbs/topicdisp.asp?tid=1617 等...

2011-02-18

DVB和MPEG-II中的表格

DVB和MPEG-II中的表格 DVB中的业务信息(SI) Sipsi

2010-12-14

dvb.sip.si

DVB和MPEG-II中的表格.html DVB中的业务信息(SI).htm Sipsi.doc 数字电视EPG信息解析系统的设计与实现

2010-12-13

Sipsi DVB中的业务信息

DVB和MPEG-II中的表格.html DVB中的业务信息(SI).htm Sipsi.doc

2010-12-13

iso13818规范.pdf PSI-SI理解入门.doc

iso13818规范.pdf PSI-SI理解入门.doc 来源: 百度文库

2010-12-09

Docada+破解版.rar

Docada+破解版 游戏程序王上传 lua

2010-09-15

CPPDoc2 (http://www.cppdoc.com)

来源: http://www.cppdoc.com 共三个文件: CppDoc2.zip CppDocCommentMaker.zip CppDoc Help.mht

2010-09-15

Windows XP Service Pack 2 Support Tools 

来源:http://www.onlinedown.net/soft/21532.htm Windows XP Service Pack 2 Support Tools 概述 适用于 Microsoft Windows XP 的 Windows 支持工具之目的是提供 Microsoft 支持人员与有经验的使用者使用,以协助诊断与解决计算机问题。如需个别工具的描述,请参阅 Windows 支持工具文件 (Suptools.chm)。 适用于 Windows XP 的 Windows 支持工具只能安装在执行 Windows XP 操作系统的计算机上。适用于 Windows XP 的 Windows 支持工具无法用来升级安装在 Windows NT 或 Windows 2000 上的 Microsoft Windows NT 或 Microsoft Windows 2000 支持工具。 执行支持工具安装程序前,强烈建议您移除所有旧版支持工具 (包括适用于 Microsoft Windows XP 的 Windows 支持工具的 Beta 版本)。 重要: 这些工具尚未有中文版,而仅在英文环境撰写与测试。在英文版以外的 Microsoft Windows XP 可能无法使用这些工具

2010-09-05

init.lua (MultiByteToWideChar)

http://guacamole.googlecode.com/svn-history/r454/trunk/lua/bindings/win32/init.lua

2010-08-31

icuuc42 icuin42 icuio42 等 dll

来源: http://luaforge.net/projects/icu-lua/ 从 http://luaforge.net/projects/icu-lua/ 下载的 icu.dll 需要一系列的 dll 这些 dll 来源于: http://code.google.com/p/icu4net 该下载来源此.

2010-08-31

awk bin doc

Gawk for Windows -------------------------------------------------------------------------------- Gawk: pattern scanning and processing language Version 3.1.6 Description Several kinds of tasks occur repeatedly when working with text files. You might want to extract certain lines and discard the rest. Or you may need to make changes wherever certain patterns appear, but leave the rest of the file alone. Writing single-use programs for these tasks in languages such as C, C++ or Pascal is time-consuming and inconvenient. Such jobs are often easier with awk. The awk utility interprets a special-purpose programming language that makes it easy to handle simple data-reformatting jobs. The GNU implementation of awk is called gawk; it is fully compatible with the System V Release 4 version of awk. gawk is also compatible with the POSIX specification of the awk language. This means that all properly written awk programs should work with gawk. Thus, we usually don’t distinguish between gawk and other awk implementations. Using awk allows you to: Manage small, personal databases Generate reports Validate data Produce indexes and perform other document preparation tasks Experiment with algorithms that you can adapt later to other computer languages. In addition, gawk provides facilities that make it easy to: Extract bits and pieces of data for processing Sort data Perform simple network communications. The Win32 port has some limitations, In particular the ‘|&’ operator and TCP/IP networking are not supported 来源: http://gnuwin32.sourceforge.net/packages/gawk.htm

2010-08-30

gawk-3.1.6-1-doc.zip

Gawk: pattern scanning and processing language Version 3.1.6 Description Several kinds of tasks occur repeatedly when working with text files. You might want to extract certain lines and discard the rest. Or you may need to make changes wherever certain patterns appear, but leave the rest of the file alone. Writing single-use programs for these tasks in languages such as C, C++ or Pascal is time-consuming and inconvenient. Such jobs are often easier with awk. The awk utility interprets a special-purpose programming language that makes it easy to handle simple data-reformatting jobs. The GNU implementation of awk is called gawk; it is fully compatible with the System V Release 4 version of awk. gawk is also compatible with the POSIX specification of the awk language. This means that all properly written awk programs should work with gawk. Thus, we usually don’t distinguish between gawk and other awk implementations. Using awk allows you to: Manage small, personal databases Generate reports Validate data Produce indexes and perform other document preparation tasks Experiment with algorithms that you can adapt later to other computer languages. In addition, gawk provides facilities that make it easy to: Extract bits and pieces of data for processing Sort data Perform simple network communications. The Win32 port has some limitations, In particular the ‘|&’ operator and TCP/IP networking are not supported.

2010-08-30

Gawk for Windows 3.1.6-1

Gawk: pattern scanning and processing language Version 3.1.6 Description Several kinds of tasks occur repeatedly when working with text files. You might want to extract certain lines and discard the rest. Or you may need to make changes wherever certain patterns appear, but leave the rest of the file alone. Writing single-use programs for these tasks in languages such as C, C++ or Pascal is time-consuming and inconvenient. Such jobs are often easier with awk. The awk utility interprets a special-purpose programming language that makes it easy to handle simple data-reformatting jobs. The GNU implementation of awk is called gawk; it is fully compatible with the System V Release 4 version of awk. gawk is also compatible with the POSIX specification of the awk language. This means that all properly written awk programs should work with gawk. Thus, we usually don’t distinguish between gawk and other awk implementations. Using awk allows you to: Manage small, personal databases Generate reports Validate data Produce indexes and perform other document preparation tasks Experiment with algorithms that you can adapt later to other computer languages. In addition, gawk provides facilities that make it easy to: Extract bits and pieces of data for processing Sort data Perform simple network communications. The Win32 port has some limitations, In particular the ‘|&’ operator and TCP/IP networking are not supported.

2010-08-30

Damerau–Levenshtein Distance, Lua Implementation

来源:http://nayruden.com/?p=115

2010-08-24

LuaUnicode icu-lua

来源: http://lua-users.org/wiki/LuaUnicode 目录: | LuaUnicode.url | +---0.13A | ICU4Lua-0.13A-src.zip | ICU4Lua-0.13A-win32-dll.zip | \---0.2B ICU4Lua-0.2B-docs.zip ICU4Lua-0.2B-src.zip ICU4Lua-0.2B-win32dll.zip 下面的来源于: http://lua-users.org/wiki/LuaUnicode This is an attempt to answer the LuaFaq : Can I use unicode strings? or Does Lua support unicode? In short, yes and no. Lua gives you the bare bones support and enough rope and not much else. Unicode is a large and complex standard and questions like "does lua support unicode" are extremely vague. Some of the issues are: Can I store and retrieve Unicode strings? Can my Lua programs be written in Unicode? Can I compare Unicode strings for equality? Sorting strings. Pattern matching. Can I determine the length of a Unicode string? Support for bracket matching, bidirectional printing, arbitrary composition of characters, and other issues that arise in high quality typesetting. Lua strings are fully 8-bit clean, so simple uses are supported (like storing and retrieving), but there's no built in support for more sophisticated uses. For a fuller story, see below. Unicode strings and Lua strings A Lua string is an aribitrary sequence of values which have at least 8 bits (octets); they map directly into the char type of the C compiler. (This may be wider than eight bits, but eight bits are guaranteed.) Lua does not reserve any value, including NUL. That means that you can store a UTF-8 string in Lua without problems. Note that UTF-8 is just one option for storing Unicode strings. There are many other encoding schemes, including UTF-16 and UTF-32 and their various big-endian/little-endian variants. However, all of these are simply sequences of octets and can be stored in a Lua string without problems. Input and output of strings in Lua (using the io library) uses C's stdio library. ANSI C does not require the stdio library to handle arbitrary octet sequences unless the file is opened in binary mode; furthermore, in non-binary mode, some octet sequences are converted into other ones (in order to deal with varying end-of-line markers on different platforms). This may affect your ability to do non-binary file input and output of Unicode strings in formats other than UTF-8. UTF-8 strings will probably be safe because UTF-8 does not use control characters such as \n and \r as part of multi-octet encodings. However, there are no guarantees; if you need to be certain, you must use binary mode input and output. (If you do so, line-endings will not be converted.) Unix file IO has been 8-bit clean for a long while. If you are not concerned with portability and are only using Unix and Unix-like operating systems, you can almost certainly not worry about the above. If your use of Unicode is restricted to passing the strings to external libraries which support Unicode, you should be OK. For example, you should be able to extract a Unicode string from a database and pass it to a Unicode-aware graphics library. But see the sections below on pattern matching and string equality. Unicode Lua programs Literal Unicode strings can appear in your lua programs. Either a UTF-8 encoded string can appear directly with 8-bit characters or you can use the \ddd syntax (note that ddd is a decimal number, unlike some other languages). However, there is no facility for encoding multi-octet sequences (such as \U+20B4); you would need to either manually encode them to UTF-8, or insert individual octets in the correct big-endian/little-endian order (for UTF-16 or UTF-32). Unless you are using an operating system in which a char is more than eight bits wide, you will not be able to use arbitrary Unicode characters in Lua identifers (for the names of variables and so on). You may be able to use eight-bit characters outside of the ANSI range. Lua uses the C functions isalpha and isalnum to identify valid characters in identifiers, so it will depend on the current locale. To be honest, using characters outside of the ANSI range in Lua identifiers is not a good idea, since your programs will not compile in the standard C locale. Comparison and Sorting Lua string comparison (using the == operator) is done byte-by-byte. That means that == can only be used to compare Unicode strings for equality if the strings have been normalized in one of the four Unicode normalizations. (See the [Unicode FAQ on normalization] for details.) The standard Lua library does not provide any facility for normalizing Unicode strings. Consequently, non-normalized Unicode strings cannot be reliably used as table keys. If you want to use the Unicode notion of string equality, or use Unicode strings as table keys, and you cannot guarantee that your strings are normalized, then you'll have to write or find a normalization function and use that; this is non-trivial exercise! The Lua comparison operators on strings (< and <=) use the C function strcoll which is locale dependent. This means that two strings can compare in different ways according to what the current locale is. For example, strings will compare differently when using Spanish Traditional sorting to that when using Welsh sorting. It may be that your operating system has a locale that implements the sorting algorithm that you want, in which case you can just use that, otherwise you will have to write a function to sort Unicode strings. This is an even more non-trivial exercise. UTF-8 was designed so that a naive octet-by-octet string comparison of an octet sequence would produce the same result if a naive octet-by-octet string comparison were done on the UTF-8 encoding of the octet sequence. This is also true of UTF-32BE but I do not know of any system which uses that encoding. Unfortunately, naive octet-by-octet comparison is not the collation order used by any language. (Note: sometimes people use the terms UCS-2 and UCS-4 for "two-byte" and four-byte encodings. These are not Unicode standards; they come from the closely corresponding ISO standard ISO/IEC 10646-1:2000 and currently differ in that they allow codes outside of the Unicode range, which runs from 0x0 to 0x10FFFF.) Pattern Matching Lua's pattern matching facilities work character by character. In general, this will not work for Unicode pattern matching, although some things will work as you want. For example, "%u" will not match all Unicode upper case letters. You can match individual Unicode characters in a normalized Unicode string, but you might want to worry about combining character sequences. If there are no following combining characters, "a" will match only the letter a in a UTF-8 string. In UTF-16LE you could match "a%z". (Remember that you cannot use \0 in a Lua pattern.) Length and string indexing If you want to know the length of a Unicode string there are different answers you might want according to the circumstances. If you just want to know how many bytes the string occupies, so that you can make space for copying it into a buffer for example, then the existing Lua function string.len will work. You might want to know how many Unicode characters are in a string. Depending on the encoding used, a single Unicode character may occupy up to four bytes. Only UTF-32LE and UTF-32BE are constant length encodings (four bytes per character); UTF-32 is mostly a constant length encoding but the first element in a UTF-32 sequence should be a "Byte Order Mark", which does not count as a character. (UTF-32 and variants are part of Unicode with the latest version, Unicode 4.0.) Some implementations of UTF-16 assume that all characters are two bytes long, but this has not been true since Unicode version 3.0. Happily UTF-8 is designed so that it is relatively easy to count the number of unicode symbols in a string: simply count the number of octets that are in the ranges 0x00 to 0x7f (inclusive) or 0xC2 to 0xF4 (inclusive). (In decimal, 0-127 and 194-244.) These are the codes which can start a UTF-8 character code. Octets 0xC0, 0xC1 and 0xF5 to 0xFF (192, 193 and 245-255) cannot appear in a conforming UTF-8 sequence; octets in the range 0x80 to 0xBF (128-191) can only appear in the second and subsequent octets of a multi-octet encoding. Remember that you cannot use \0 in a Lua pattern. For example, you could use the following code snippet to count UTF-8 characters in a string you knew to be conforming (it will incorrectly count some invalid characters): local _, count = string.gsub(unicode_string, "[^\128-\193]", "") If you want to know how many printing columns a Unicode string will occupy when you print it out using a fixed-width font (imagine you are writing something like the Unix ls program that formats its output into several columns), then that is a different answer again. That's because some Unicode characters do not have a printing width, while others are double-width characters. Combining characters are used to add accents to other letters, and generally they do not take up any extra space when printed. So that's at least 3 different notions of length that you might want at different times. Lua provides one of them (string.len) the others you'll need to write functions for. There's a similar issue with indexing the characters of a string by position. string.sub(s, -3) will return the last 3 bytes of the string which is not necessarily the same as the last three characters of the string, and may or may not be a complete code. You could use the following code snippet to iterate over UTF-8 sequences (this will simply skip over most invalid codes): for uchar in string.gfind(ustring, "([%z\1-\127\194-\244][\128-\191]*)") do -- something end More sophisticated issues As you might have guessed by now, Lua provides no support for things like bidirectional printing or the proper formatting of Thai accents. Normally such things will be taken care of by a graphics or typography library. It would of course be possible to interface to such a library that did these things if you had access to one. There is a little string-like package [slnunicode] with upper/lower, len/sub and pattern matching for UTF-8. See ValidateUnicodeString for a smaller library. [ICU4Lua] is a Lua binding to ICU (International Components for Unicode [1]), an open-source library originally developed by IBM. See UnicodeIdentifers for platform independent Unicode Lua programs.

2010-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除