惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Jina AI
Jina AI
小众软件
小众软件
GbyAI
GbyAI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
D
DataBreaches.Net
腾讯CDC
V
Visual Studio Blog
博客园 - 叶小钗
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
有赞技术团队
有赞技术团队
U
Unit 42
博客园 - 司徒正美
博客园 - 聂微东

博客园 - yesry

程序员专用IM新版本发布,诸多创新非模仿 VC的强大 + ExtJS的漂亮 + (MySQL+SQlite)数据库 + JavaScript的动态语言的灵活 通过桥接器,Java调用任何DLL 学生的福音:做错之题管理 Google 和 baidu 搜索结果二次加工 键鼠模拟的妙用 用贾樟柯访谈评《疯狂的程序员》 Widgets 引擎的设计和实现 Duceland Widgets Engine 例子一 作为软件从业员面对番茄事件的尴尬立场 招聘Windows API 熟悉人 招IE插件精通人 史上最不安全的浏览器——Dangerous Browser VC调用 JavaScript 难题:如何使当前程序的对象进入脚本 PHP能参与桌面项目吗?适合吗?——C#客户端 嵌入 PHP 一例 互联网公司老板的十大谎言之解——时间成本和竞争成本 我在外资公司的2个月 让大家见识一下新一代分析源代码生成流程图的东东吧 如何进行界面和业务逻辑分开的原型化开发
汉编卷土重来?
yesry · 2008-12-17 · via 博客园 - yesry

先看下面的程序:

然后大家猜猜是什么语言编写的呢?

其实是把脚本代码中的label进行汉字替换即可。先定义label替换的对子

如果=if
函数=function
否则=else
返回=return
新增=new
空=null
尝试=try
捕错=catch
变量=var

画图消息=WM_PAINT
获得设备上下文=GetDC
释放设备上下文=ReleaseDC
文本输出=TextOut
串长度=length
左鼠标按下消息=WM_LBUTTONDOWN
鼠标移动消息=WM_MOUSEMOVE
窗口销毁消息=WM_DESTROY
退出=Exit
产生实心刷子=CreateSolidBrush
产生GDI长方形=BuildGDIRect
填充长方形=FillRect
销毁GDI对象=DeleteObject
设置背景模式=SetBkMode
透明=TRANSPARENT
转换成整数=parseInt
消息窗=MessageBox
注册窗口类=RegisterClassEx

下面函数是提取脚本中的label:

void Analyzelabel(char *code,int len,KeywordManager *m,LabelNumberList &list)
{
    
int i;
    tagLabelNumber label;
    unsigned 
char *s=(unsigned char *)code;
    
for(i=0;i<len;i++)
    {
        
if(s[i]>0x6F || (s[i]>='a' && s[i]<='z'|| (s[i]>='A' && s[i]<='Z'|| s[i]=='_')//charater
        {
            label.begin_pos
=i;
            
if(s[i]>0x7F)
                i
++;while(s[i]>0x7F || (s[i]>='a' && s[i]<='z'|| (s[i]>='A' && s[i]<='Z'|| s[i]=='_' || (s[i]>='0' && s[i]<='9'))
            {
                i
++;
                
if(s[i]>0x7F)
                    i
++;if(s[i]==0)
                    
break;
            }

            label.end_pos

=i;
            label.len
=i-label.begin_pos;
            memcpy(label.label,code
+label.begin_pos,label.len);
            label.label[label.len]
=0;

            label.type

=eltLabel;
            
if(m->IsKeyword(label.label))
            {
                label.type
=eltKeyword;
            }
else
            
if(m->IsConstant(label.label))
            {
                label.type
=eltConstant;
            }

            list.push_back(label);
        }

else
        
if(s[i]=='\"' || s[i]=='\'')
        {
            label.begin_pos
=i;int count1;
            
int count2;
            
if(s[i]=='\"')
            {
                count1
=1;
                count2
=0;
            }
else
            {
                count1
=0;
                count2
=1;
            }

            i

++;while(count1>0 || count2>0)
            {
                
if(s[i]=='\"')
                    count1
--;
                
else
                
if(s[i]=='\'')
                    count2--;
                
else
                
if(s[i]=='\\')
                {
                    i
++;
                }

                i

++;
            }

            label.end_pos

=i;
            label.len
=i-label.begin_pos;
            label.type
=eltString;

            list.push_back(label);
        }
    }
}

然后逐个替换即可。是不是很容易?

这个看上去像IDE的程序 Duceland Widgets Engine 是含源的,从这里下载。