msys+mingw的基本配置
作者:淡月清风 日期:2012-02-02
0.本文中的程序安装路径
MinGW:D:\Tools\MinGW
msys:D:\Tools\MinGW\msys\1.0
此时,MSYS的"/"目录对应"D:\Tools\MinGW\msys\1.0"
1.在MSYS中指定MinGW的位置
修改:/etc/fstab
D:\Tools\MinGW\ /mingw
2.MSYS文字彩色
修改:/etc/profile
加上:alias ls='ls --show-control-chars -F --color=tty'
3.中文乱码
修改:/etc/inputrc.default 和 ~/.inputrc
set meta-flag on
set input-meta on
set output-meta on
set convert-meta on
几个日期相关的shell函数
作者:淡月清风 日期:2012-01-30
#@brief:检查指定年份是否为闰年
#@param1:YYYY格式的年份
check_leap()
{
#http://baike.baidu.com/view/29649.htm
#四年一闰,百年不闰,四百年再闰
# 测试:
# year=2005;
# check_leap $year;
# if [ $? -eq 0 ] ; then
# echo $year is leap year;
# else
# echo $year is not leap year;
# fi;
mod4=$(($1 % 4));
mod100=$(($1 % 100));
mod400=$(($1 % 400));
if [ $mod400 -eq 0 -o $mod100 -ne 0 -a $mod4 -eq 0 ] ; then
return 0;
fi;
return 1;
}
#@brief:获取指定月的天数
#@param1:YYYYMM格式的月份
get_days_in_month()
{
# 测试:
# month=200502;
# days=`get_days_in_month $month`;
# echo $month has $days days.
YYYY=`echo $1 | awk '{print substr($1,1,4)}'`;
MM=`echo $1 | awk '{print substr($1,5,2)}'`;
days=0;
case "$MM"in
01|03|05|07|08|10|12)
days=31;
;;
02)
check_leap $YYYY;
if [ $? -eq 0 ] ; then
days=29;
else
days=28;
fi;
;;
04|06|09|11)
days=30;
;;
*)
days=0;
;;
esac;
echo $days;
}
#@brief:返回指定日期前一天的日期
#@param1:YYYYMMDD格式的日期
get_yesterday()
{
# 测试:
# day=20120101;
# yesterday=`get_yesterday $day`;
# echo yesterday is $yesterday;
YYYY=`echo $1 | awk '{print substr($1,1,4)}'`;
MM=`echo $1 | awk '{print substr($1,5,2)}'`;
DD=`echo $1 | awk '{print substr($1,7,2)}'`;
days_in_month=`get_days_in_month ${YYYY}${MM}`;
DD=$(( $DD-1 ));
if [ $DD -eq 0 ] ; then
DD=$days_in_month;
MM=$(( $MM-1 ));
if [ $MM -eq 0 ] ; then
MM=12;
YYYY=$(($YYYY-1));
fi;
fi;
echo "${YYYY}${MM}${DD}";
}
#@brief:检查指定日期是否合法
#@param1:YYYYMMDD格式的日期
check_date()
{
# 测试:
# day=20111232;
# check_date $day;
# if [ $? -eq 0 ] ; then
# echo $day is a valid date.
# else
# echo $day is a invalid date.
# fi;
if [ $# -lt 1 ] ; then
return 1;
fi;
numberstr=`echo $1 | grep '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'`;
if [ -z "${numberstr}" ] ; then
return 1;
fi;
length=`echo $1 | awk '{print length($1)}'`;
if [ $length -ne 8 ] ; then
return 1;
fi;
YYYY=`echo $1 | awk '{print substr($1,1,4)}'`;
MM=`echo $1 | awk '{print substr($1,5,2)}'`;
DD=`echo $1 | awk '{print substr($1,7,2)}'`;
if [ $YYYY -lt 1000 -o $YYYY -gt 9999 ] ; then
return 1;
fi;
if [ $MM -lt 1 -o $MM -gt 12 ] ; then
return 1;
fi;
days_in_month=`get_days_in_month ${YYYY}${MM}`;
if [ $DD -lt 1 -o $DD -gt $days_in_month ] ; then
return 1;
fi;
return 0;
}
以上脚本在Cygwin和HP-UX上测试通过。
DirectShow.5 找不到Qedit.h的一种解决方法
作者:淡月清风 日期:2012-01-01
// 在Microsoft DirectX 9.0 SDK Update (April 2005)之后,DirectShow
// 已经被集成到了Windows SDK中,但是有些版本的SDK缺少Qedit.h。
// 解决方法为:
// #import "qedit.dll" raw_interfaces_only named_guids
// using namespace DexterLib;
// 见如下完整示例:
#include <atlbase.h>
#import "qedit.dll" raw_interfaces_only named_guids
using namespace DexterLib;
#include <assert.h>
int main()
{
CoInitialize(NULL);
//ISampleGrabber 的声明本来在Qedit.h 中
//现在包含在#import "qedit.dll"指令生成的qedit.tlh中
CComPtr<ISampleGrabber> pSampleGrabber=NULL;
HRESULT hr=pSampleGrabber.CoCreateInstance(CLSID_SampleGrabber);
assert(hr==S_OK);
pSampleGrabber.Release();
CoUninitialize();
return 0;
}
// 参考文章:
// http://social.msdn.microsoft.com/Forums/en-US/windowsdirectshowdevelopment/thread/2ab5c212-5824-419d-b5d9-7f5db82f57cd
// http://www.cnblogs.com/taoxu0903/archive/2008/06/09/1216390.html






