#include <e32base.h> #include <e32cons.h> #include <e32std.h>
// 定义本地数据 LOCAL_D CConsoleBase* console; LOCAL_D TInt err;
//定义本地代码 LOCAL_C TInt Ex_1_L(TInt,TInt); LOCAL_C TInt Ex_2_L(TInt,TInt); LOCAL_C TInt Ex_3_L(CConsoleBase*);
//全局函数,被 E32 调用的主函数, GLDEF_C TInt E32Main() {
// 定义一个 Descriptor,作为Console的标头显示 _LIT(TITLE,"\nLeave 测试\n"); //存放一组二维值,分别表示长和宽 TSize Ts=TSize(); //设置这组值 Ts.SetSize(-1,-1);
//在 e32base.h 中定义了Console 类 ,NewL() 这个类的静态方法。 console=Console::NewL(TITLE,Ts);
TInt i=0; TKeyCode key;
while(i<1000) { //断言处理:按 Esc 键 终止线程并退出 __ASSERT_ALWAYS(key!=27,User::Panic(_L("End Thread"),key));
key=console->Getch(); console->Printf(_L("step[%d]:%c \n"),i++,key);
// 按 T 键 if (key==116) { console->Write(_L("[T]请输入A和B的值:\na=")); //从键盘输入 TInt a=console->Getch(); //把输入码转为0-9的数字 a=a-48; console->Printf(_L("%d"),a); console->Write(_L("\nb="));
TInt b=console->Getch(); b=b-48; console->Printf(_L("%d\n"),b);
//使用 Trap 宏设置 code point, //函数在Trap Harness的保护下运行 TRAP(err,Ex_1_L(a,b)); //输出错误码 console->Printf(_L("err=%d\n"),err); //错误处理 if(err==2) { console->Write(_L("错误:a不能大于b!\n")); err=KErrNone; }
}
// 按 C 键 清楚屏幕 if (key==99) { console->ClearScreen(); }
// 按 S 键 if (key==115) { console->Write(_L("[S]请输入A和B的值:\na=")); //从键盘输入 TInt a=console->Getch(); //把输入码转为0-9的数字 a=a-48; console->Printf(_L("%d"),a);
console->Write(_L("\nb="));
TInt b=console->Getch(); b=b-48; console->Printf(_L("%d\n"),b);
//使用 Trap 宏设置 code point, //函数在Trap Harness的保护下运行 TRAP(err,Ex_2_L(a,b)); //输出错误码 console->Printf(_L("err=%d\n"),err); //错误处理 if(err<0) { console->Write(_L("错误:值不可以小于零!\n")); err=KErrNone; } else { console->Write(_L("没有Leave发生!\n")); } } // 按 D 键 if (key==100) { CConsoleBase* cnsx=console; cnsx->Write(_L("我是cnsx指针\n"));
console->Write(_L("是否要取消cnsx 指针?y/n \n")); TInt ch=console->Getch(); if(ch==121 || ch==69) { cnsx=NULL; } else { cnsx->Write(_L("我还在那!\n")); } //设置Code Point TRAP(err, Ex_3_L(cnsx));
console->Printf(_L("err=%d\n"),err);
if(err<0) { console->Write(_L("错误:cnsx指针已经被取消!\n")); } } }
return 0; }
TInt Ex_1_L(TInt aNuma,TInt aNumb) {
console->Printf(_L("Ex_1_L:a=%d,b=%d\n"),aNuma,aNumb);
//如果 aNuma 的值大于aNumb 的值则leave if(aNuma>aNumb) { console->Printf(_L("%d>%d ,User Leave!\n"),aNuma,aNumb); User::Leave(2); } return 0; }
TInt Ex_2_L(TInt aNuma,TInt aNumb) {
console->Printf(_L("Ex_2_L:a=%d,b=%d\n"),aNuma,aNumb); TInt sub; sub=aNumb-aNuma; if(sub<0) { console->Printf(_L("%d-%d=%d,%d<0,User Leave!\n"),aNumb,aNuma,sub,sub); } //当sub值小于 0 时 leave User::LeaveIfError(sub); return 0; }
TInt Ex_3_L(CConsoleBase* cnx) {
//当 cnx等于 NULL 时 leave User::LeaveIfNull(cnx);
return 0; } |