00001
00002
00003
00004
00005
00006
00007
00008
00009
00014 #include <e32std.h>
00015 #include <e32svr.h>
00016
00017
00018 #include "numbers.h"
00019
00020 #include "RScreenUtils.h"
00021
00025 void RScreenUtils::DrawPicture(TPicture &aPicture) {
00026 DrawPictureAsm(&aPicture);
00027 }
00028
00032 void RScreenUtils::BlankArea(TBlank &aBlank) {
00033 BlankAreaAsm(&aBlank);
00034 }
00035
00037 RScreenUtils::RScreenUtils() : iScreenBase(NULL) {
00038 }
00039
00040
00049 TInt RScreenUtils::Open() {
00050
00051 TPckgBuf<TScreenInfoV01> info;
00052 UserSvr::ScreenInfo(info);
00053 if(info().iScreenAddressValid==EFalse ||
00054 info().iScreenSize.iWidth!=640 ||
00055 info().iScreenSize.iHeight!=200) {
00056 return KErrNotSupported;
00057 }
00058
00059
00060
00061 iScreenBase=STATIC_CAST(TUint16*,info().iScreenAddress);
00062
00063
00064
00065
00066 iScreenBase += 16;
00067 return (KErrNone);
00068 }
00069
00070
00072 TUint16 *RScreenUtils::ScreenBase() {
00073 return iScreenBase;
00074 }
00075
00077 void RScreenUtils::Close() {
00078 iScreenBase=NULL;
00079 }
00080
00092 void RScreenUtils::Number(TUint aX,TUint aY,TUint32 aNumber,
00093 TUint16 aForeColor,TUint16 aBackColor){
00094 HexNumber(aX,aY,BCDNumber(aNumber),aForeColor,aBackColor);
00095 }
00096
00105 void RScreenUtils::HexNumber(TUint aX,TUint aY,TUint32 aNumber,
00106 TUint16 aForeColor,TUint16 aBackColor){
00107
00108 if(iScreenBase==NULL)
00109 return;
00110 TUint offset=aX+aY*640;
00111 NumberAsm(iScreenBase+offset,aNumber,aForeColor,aBackColor);
00112 }
00113
00118 void RScreenUtils::Blank(TUint16 aColor) {
00119 if(iScreenBase==NULL)
00120 return;
00121 BlankAsm(aColor);
00122 }
00123
00125 TUint32 RScreenUtils::BCDNumber(TUint32 aNumber) {
00126 TUint32 out=0;
00127 TInt digit=0;
00128 while(aNumber!=0) {
00129 out += (aNumber%10) << (4*digit);
00130 digit++;
00131 aNumber /= 10;
00132 }
00133 return out;
00134 }
00135
00136