Bài 4.1: String sử dụng trong BREW
Trong bài này tôi giải thích về cách xử lý string của BREW. Ngoài ra tôi cũng giải thích về cách vẽ string lên màn hình và giải thích về font.
Khái quát về cách xử lý string của C language
Trong C language, xử lý string là array. Trong C language có 1 số standard function dùng để xử lý string. Ví dụ như có program liên kết 2 string rồi hiển thị giống như dưới đây.
char* str1 = "Open ";
char* str2 = "Sesami !";
char* str3;
int len1 = strlen(str1);
int len2 = strlen(str2);
str3 = (char*) malloc(len1 + len2 + 1);
{
strcpy(str3, str1);
strcpy(str3 + len1, str2);
printf("%s", str3);
}
free(str3);
Xử lý string của BREW
String của BREW cũng giống với string của C language. Tuy nhiên, trong BREW, thì lại ko được phép sử dụng standard function của C language. Thay vào đó, trong BREW lại có sẵn “ヘルパー関数” (helper function) thực hiện chức năng giống như standard function của C language.
Helper function của BREW được ghi trong section có tên là 「ヘルパー関数/helper function」 trong 「BREW API リファレンス/BREW API reference」. Để các bạn tham khảo tôi đã lấy ra 1 vài helper funtion liên quan đến string và đưa vào bảng dưới đây.
| Function name | C language tương ứng | Giải thích |
|---|---|---|
| MALLOC | malloc | Cung cấp memory . |
| FREE | free | Giải phóng memory. |
| SPRINTF | sprintf | Tạo string đã được mã hóa. |
| STRCMP | strcmp | Compare string. |
| STRCPY | strcpy | Copy string. |
| STRDUP | strdup | Duplicate string. |
| STRLEN | strlen | Get length of string. |
| DBGPRINTF | printf | Thực hiện debug output. |
Trong BREW helper function thì cũng có rất nhiều các function khác ngoài các function trên đây, và cũng có những function mà ko tương ứng với standard function của C language. Để tham khảo, tôi khuyên các bạn hãy xem qua trước 1 lượt.
BREW helper function được declare ở header tên là AEEStdLib.h trong BREW SDK . Do đó khi các bạn sử dụng thì cần phải include file này.
Dưới đây là ví dụ về cách xử lý string sử dụng BREW helper function ghi trên đây. Hầu như là giống với cách xử lý string của C language.
char* str1 = "Open ";
char* str2 = "Sesami !";
char* str3;
int len1 = STRLEN(str1);
int len2 = STRLEN(str2);
str3 = (char*) MALLOC(len1 + len2 + 1);
{
STRCPY(str3, str1);
STRCPY(str3 + len1, str2);
DBGPRINTF("%s", str3);
}
FREE(str3);
About debug output
Trong code trên đây có sử dụng DBGPRINTF() với tư cách là helper function tương ứng với hàm số printf() của C language. Cách sử dụng hàm số này thì hầu như giống với printf() nhưng khi output thì sẽ ko được hiển thị vào console( ở BREW không bao giờ hiển thị vào console!) mà sẽ được hiên thị ở “出力ウィンドウ” (output window) của BREW emulator.
“出力ウィンドウ”(output window) của BREW emulator được hiển thị bằng cách chọn [表示/display] - [出力ウィンドウ/output window] ở menu.
Hàm số này rất thuận lợi khi debug BREW application. Ngoài ra, từ BREW application đang thao tác trên máy bile thật cũng có thể thực hiện việc hiển thị dựa vào hàm DBGPRINTF() cho nên có thể thực hiện debug trên máy thật 1 cách hiệu quả.
Để hiển thị debug output từ máy thật thì sử dụng tool tên là “BREW Logger” nhưng tôi sẽ ko đề cập đến tool này trong các bài viết này.

Điều tôi muốn các bạn chú ý là, việc debug output thì developer có thể sử dụng nhiều hàm số ngoài hàm DBGPRINTF() . Giống như trong màn hình trên đây, có thể thấy là chỉ đang thao tác BREW emulator thì cũng đã có rất nhiều thông tin đang được output ra.
2 loại ký tự trong BREW
Đến đây thì các bạn nhìn thấy là string của BREW giống với string của C language. Nhưng thực ra, trong BREW còn có 1 loại string khác khác với string của C language. char type của C language là ký tự 1 byte còn trong BREW thì là type lưu ký tự 2 byte, đó là AECHAR type. Người ta gọi type đó là “ワイド文字/wide character ” .
Để tạo string dạng AECHAR thì sử dụng helper function STREXPAND(). Hàm STREXPAND() sẽ convert char string thành AECHAR string. Trong 「BREW API リファレンス/BREW API reference」 có ghi như dưới đây.
void STREXPAND
(
const byte * pSrc, // char string
int nCount, // số byte of char string
AECHAR * pDest, //buffer lưu AECHAR string
int nSize //số byte của pDest buffer
)
※Về byte type thì là type được định nghĩa trong BREW và giống như unsigned char.
Khi thực hiện BREW programming thì AECHAR type xuất hiện ở mọi nơi, vì vậy hãy làm sao để quen với việc sử dụng STREXPAND trước. Dưới đây là sample code. Sample này là sample đã update HelloWorld application đã tạo ở Lession 2 để có thể hiển thị tiếng Nhật.
// // Được gọi khi start applet. // static void HelloWorld_OnAppStart(AEEApplet* app) { char* str = "ヘロー ワールド"; int len = STRLEN(str); AECHAR* wstr; int wstr_bytes; wstr_bytes = (len + 1) * sizeof(AECHAR); wstr = (AECHAR*) MALLOC(wstr_bytes); STREXPAND(str, len, wstr, wstr_bytes); // Hiển thị string vào screen bitmap IDISPLAY_DrawText(app->m_pIDisplay, AEE_FONT_BOLD, // font chữ đậm wstr, // string sẽ hiển thị -1, // -1 = hiển thị all string 0, // ignore 0, // ignore NULL, // không thực hiện clipping IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); // căn trái phải giữa, căn trên dưới giữa FREE(wstr); // hiển thị screen bitmap đã update IDISPLAY_Update (app->m_pIDisplay); }
Hàm IDISPLAY_DrawText() sẽ nhận text sẽ vẽ làm AECHAR string cho nên sẽ sử dụng hàm STREXPAND() để tạo AECHAR string từ char string.
Khi đó, sẽ cấp AECHAR string buffer có độ dài bằng độ dài của char string gốc. Khi drawing kết thúc thì AECHAR string sẽ ko cần thiết nữa cho nên sẽ giải phóng bufer bằng hàm FREE().
※Việc convert lẫn nhau giữa char string và AECHAR string chỉ bằng C language gây ra nhiều phiền toái khi thực hiện BREW programming. Bằng cách chuẩn bị sẵn C++ class đã wrap string function của BREW thì việc thực hiện programming sẽ nhanh hơn, nhưng trong các bài viết này thì ko đề cập đến C++.
Hàm số xử lý wide character
Trong BREW helper function thì cũng có hàm số xử lý wide character. Trong table dưới đây có đưa ra 1 vài ví dụ. Về chi tiết, hãy xem 「BREW API リファレンス/BREW API reference」.
| Function | C function tương ứng |
Giải thích |
|---|---|---|
| WSPRINTF | sprintf | Tạo string đã được mã hóa. |
| WSTRCMP | strcmp | Compare string. |
| STREXPAND | strcpy | Copy string. |
| WSTRCOMPRESS | strdup | Duplicate string |
| WSTRLEN | strlen | Get length of string. |
| STREXPAND | なし | Convert char string into wide string. |
| WSTRCOMPRESS | なし | Convert wide string into char string. |
Về STREXPAND(), ngược lại khi convert AECHAR string into char string thì sử dụng hàm WSTRCOMPRESS().
Tags: Brew








[...] Some keyword in BREW [...]
Gửi nhận xét: