十一月 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
rgb to yuv
-
void RGB2YUV(BYTE *in, BYTE *out, DWORD len)
-
{
-
int r,g,b;
-
int y, cb,cr;
-
int i;
-
int data;
-
-
for(i=0; i<len; i=i+4)
-
{
-
r = *(in+2);
-
g = *(in+1);
-
b = *(in);
-
-
y= (0.257*r + 0.504*g + 0.098*b + 16);
-
cb = -0.148*r - 0.291*g + 0.439*b + 128;
-
cr = 0.439*r - 0.368*g - 0.071*b + 128;
-
if(y <16)
-
{
-
y = 16;
-
}
-
else if(y>235)
-
{
-
y = 235;
-
}
-
-
if(cb <16)
-
{
-
cb = 16;
-
}
-
else if(cb>240)
-
{
-
cb = 240;
-
}
-
-
if(cr <16)
-
{
-
cr = 16;
-
}
-
else if(cr>240)
-
{
-
cr = 240;
-
}
-
*(DWORD *)out = 0x7f000000 + ((DWORD)cr<<16) + ((DWORD)cb<<8) + (DWORD)y;
-
-
in += 4;
-
out += 4;
-
}
-
}
Windows 98 源代码
-
/*
-
微软最高机密——Windows 98 源代码
-
项目:Chicago(tm)
-
项目发行日期:1998年夏天
-
*/
-
-
#include "win31.h"
-
#include "win95.h"
-
#include "evenmore.h"
-
#include "oldstuff.h"
-
#include "billrulz.h"
-
#define INSTALL = HARD
-
-
char make_prog_look_big[1600000]; /*使程序看起来很大*/
-
-
void main()
-
{
-
while(!CRASHED) { /*如果不崩溃*/
-
display_copyright_message(); /*显示版权信息*/
-
display_bill_rules_message(); /*显示比尔的规则的信息*/
-
do_nothing_loop(); /*进行空循环*/
-
if (first_time_installation) { /*如果是第一次安装*/
-
make_50_megabyte_swapfile(); /*创建50M的交换文件*/
-
do_nothing_loop(); /*进行空循环*/
-
totally_screw_up_HPFS_file_system(); /*将HPFS文件系统完全搞乱*/
-
search_and_destroy_the_rest_of_OS/2(); /*搜寻并删除OS/2的所有残余信息*/
-
hang_system(); /*挂起系统*/
-
}
-
write_something(anything); /*随便写一些信息*/
-
display_copyright_message(); /*显示版权信息*/
-
do_nothing_loop(); /*进行空循环*/
-
do_some_stuff();
-
if (still_not_crashed) { /*如果还没崩溃*/
-
display_copyright_message(); /*显示版权信息*/
-
do_nothing_loop(); /*进行空循环*/
-
basically_run_windows_3.1(); /*基本上运行Windows 3.1*/
-
do_nothing_loop(); /*进行空循环*/
-
do_nothing_loop(); /*进行空循环*/
-
}
-
}
-
-
if (detect_cache()) /*如果检测到缓存*/
-
disable_cache(); /*使缓存失效*/
-
-
if (fast_cpu()) { /*如果CPU很快*/
-
set_wait_states(lots); /*设置等待状态*/
-
set_mouse(speed, very_slow); /*设置鼠标(速度很慢)*/
-
set_mouse(action, jumpy); /*设置鼠标(动作跳跃)*/
-
set_mouse(reaction, sometimes); /*设置鼠标(有时反应)*/
-
}
-
-
/* printf("Welcome to Windows 3.11"); */
-
/* printf("Welcome to Windows 95"); */
-
-
-
if (system_ok()) /*如果系统正常*/
-
crash(to_dos_prompt); /*崩溃(到DOS提示符)*/
-
else
-
system_memory = open("a:\swp0001.swp", O_CREATE);
-
/*否则打开a:\swp0001.swp作为系统内存*/
-
-
while(something) {
-
sleep(5); /*睡眠5秒钟*/
-
get_user_input(); /*接收用户输入*/
-
sleep(5); /*睡眠5秒钟*/
-
act_on_user_input(); /*对用户输入起反应*/
-
sleep(5); /*睡眠5秒钟*/
-
}
-
-
create_general_protection_fault(); /*产生一般保护错误*/
-
blue_screnn(); /*蓝屏*/
-
}
-
补充编译警告
在实际的工程中,往往会出现callback函数的参数类型,定义和实际使用的并不一致。要注意强制类型转换。
在某个 struct 定义中使用了 union,而此 union 中定义了两个结构,第一个结构包含5个 UINT8 类型的成员,第二个结构包含1个指针类型成员,1个 UINT16 类型成员,1个 UINT8 类型成员。工程中两个结构都会使用到,而编译器无法知道程序使用的是 union 中的哪一个成员,默认为第一个。由此产生类型不匹配的编译警告,这里有产生错误的隐患。
一些资源
http://digilander.libero.it/robang/rubrica/serial.htm -- Serial Programming Guide for POSIX Operating Systems
http://www.embed.com.cn/bbs/index.asp -- 嵌入开发网
http://www.lysator.liu.se/c/ANSI-C-grammar-y.html -- ANSI C Yacc grammar
http://www.51eda.com/bbs/index.asp -- 中国EDA技术网
http://bbs.driverdevelop.com/columns.php?action=columns -- 驱动开发网
http://www.linuxpilot.net.cn/ -- Linux Pilot
http://www.linuxworld.com/ -- linux world
http://www.linuxjournal.com/ -- linux journal
http://www.salon.com/tech/special/opensource/ -- the free software story
http://www.gentoo.org/ -- gentoo linux
http://www.linuxfocus.org/ -- linux focus
http://www.debian.org/intl/zh/mailing_lists -- Debian 中文计划邮件列表
http://www.debian.org/MailingLists/ -- debian Mailing Lists
http://www.sgi.com/tech/stl/ -- Standard Template Library Programmer's Guide