Made button control fully unicode aware.

This commit is contained in:
Dmitry Timoshkov 2000-11-28 23:51:48 +00:00 committed by Alexandre Julliard
parent c568d47033
commit 2b4be4be93
2 changed files with 75 additions and 44 deletions

View File

@ -66,7 +66,7 @@ static const pfPaint btnPaintFunc[MAX_BTN_TYPE] =
ReleaseDC( (wndPtr)->hwndSelf, hdc ); } ReleaseDC( (wndPtr)->hwndSelf, hdc ); }
#define BUTTON_SEND_CTLCOLOR(wndPtr,hdc) \ #define BUTTON_SEND_CTLCOLOR(wndPtr,hdc) \
SendMessageA( GetParent((wndPtr)->hwndSelf), WM_CTLCOLORBTN, \ SendMessageW( GetParent((wndPtr)->hwndSelf), WM_CTLCOLORBTN, \
(hdc), (wndPtr)->hwndSelf ) (hdc), (wndPtr)->hwndSelf )
static HBITMAP hbitmapCheckBoxes = 0; static HBITMAP hbitmapCheckBoxes = 0;
@ -111,8 +111,8 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
if (!hbitmapCheckBoxes) if (!hbitmapCheckBoxes)
{ {
BITMAP bmp; BITMAP bmp;
hbitmapCheckBoxes = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_CHECKBOXES)); hbitmapCheckBoxes = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_CHECKBOXES));
GetObjectA( hbitmapCheckBoxes, sizeof(bmp), &bmp ); GetObjectW( hbitmapCheckBoxes, sizeof(bmp), &bmp );
checkBoxWidth = bmp.bmWidth / 4; checkBoxWidth = bmp.bmWidth / 4;
checkBoxHeight = bmp.bmHeight / 3; checkBoxHeight = bmp.bmHeight / 3;
} }
@ -141,7 +141,7 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
case WM_KEYDOWN: case WM_KEYDOWN:
if (wParam == VK_SPACE) if (wParam == VK_SPACE)
{ {
SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 ); SendMessageW( hWnd, BM_SETSTATE, TRUE, 0 );
infoPtr->state |= BUTTON_BTNPRESSED; infoPtr->state |= BUTTON_BTNPRESSED;
} }
break; break;
@ -151,7 +151,7 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
style==BS_RADIOBUTTON || style==BS_RADIOBUTTON ||
style==BS_USERBUTTON || style==BS_USERBUTTON ||
style==BS_OWNERDRAW) { style==BS_OWNERDRAW) {
SendMessageA( GetParent(hWnd), WM_COMMAND, SendMessageW( GetParent(hWnd), WM_COMMAND,
MAKEWPARAM( wndPtr->wIDmenu, BN_DOUBLECLICKED ), hWnd); MAKEWPARAM( wndPtr->wIDmenu, BN_DOUBLECLICKED ), hWnd);
break; break;
} }
@ -159,7 +159,7 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
SetCapture( hWnd ); SetCapture( hWnd );
SetFocus( hWnd ); SetFocus( hWnd );
SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 ); SendMessageW( hWnd, BM_SETSTATE, TRUE, 0 );
infoPtr->state |= BUTTON_BTNPRESSED; infoPtr->state |= BUTTON_BTNPRESSED;
break; break;
@ -174,7 +174,7 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
ReleaseCapture(); ReleaseCapture();
break; break;
} }
SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 ); SendMessageW( hWnd, BM_SETSTATE, FALSE, 0 );
ReleaseCapture(); ReleaseCapture();
GetClientRect( hWnd, &rect ); GetClientRect( hWnd, &rect );
if (uMsg == WM_KEYUP || PtInRect( &rect, pt )) if (uMsg == WM_KEYUP || PtInRect( &rect, pt ))
@ -182,19 +182,19 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
switch(style) switch(style)
{ {
case BS_AUTOCHECKBOX: case BS_AUTOCHECKBOX:
SendMessageA( hWnd, BM_SETCHECK, SendMessageW( hWnd, BM_SETCHECK,
!(infoPtr->state & BUTTON_CHECKED), 0 ); !(infoPtr->state & BUTTON_CHECKED), 0 );
break; break;
case BS_AUTORADIOBUTTON: case BS_AUTORADIOBUTTON:
SendMessageA( hWnd, BM_SETCHECK, TRUE, 0 ); SendMessageW( hWnd, BM_SETCHECK, TRUE, 0 );
break; break;
case BS_AUTO3STATE: case BS_AUTO3STATE:
SendMessageA( hWnd, BM_SETCHECK, SendMessageW( hWnd, BM_SETCHECK,
(infoPtr->state & BUTTON_3STATE) ? 0 : (infoPtr->state & BUTTON_3STATE) ? 0 :
((infoPtr->state & 3) + 1), 0 ); ((infoPtr->state & 3) + 1), 0 );
break; break;
} }
SendMessageA( GetParent(hWnd), WM_COMMAND, SendMessageW( GetParent(hWnd), WM_COMMAND,
MAKEWPARAM( wndPtr->wIDmenu, BN_CLICKED ), hWnd); MAKEWPARAM( wndPtr->wIDmenu, BN_CLICKED ), hWnd);
} }
break; break;
@ -203,7 +203,7 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
if (infoPtr->state & BUTTON_BTNPRESSED) { if (infoPtr->state & BUTTON_BTNPRESSED) {
infoPtr->state &= BUTTON_NSTATES; infoPtr->state &= BUTTON_NSTATES;
if (infoPtr->state & BUTTON_HIGHLIGHTED) if (infoPtr->state & BUTTON_HIGHLIGHTED)
SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 ); SendMessageW( hWnd, BM_SETSTATE, FALSE, 0 );
} }
break; break;
@ -211,19 +211,19 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
if (GetCapture() == hWnd) if (GetCapture() == hWnd)
{ {
GetClientRect( hWnd, &rect ); GetClientRect( hWnd, &rect );
SendMessageA( hWnd, BM_SETSTATE, PtInRect(&rect, pt), 0 ); SendMessageW( hWnd, BM_SETSTATE, PtInRect(&rect, pt), 0 );
} }
break; break;
case WM_NCHITTEST: case WM_NCHITTEST:
if(style == BS_GROUPBOX) return HTTRANSPARENT; if(style == BS_GROUPBOX) return HTTRANSPARENT;
return DefWindowProcA( hWnd, uMsg, wParam, lParam ); return DefWindowProcW( hWnd, uMsg, wParam, lParam );
case WM_SETTEXT: case WM_SETTEXT:
DEFWND_SetTextA( wndPtr, (LPCSTR)lParam ); DEFWND_SetTextW( wndPtr, (LPCWSTR)lParam );
if( wndPtr->dwStyle & WS_VISIBLE ) if( wndPtr->dwStyle & WS_VISIBLE )
PAINT_BUTTON( wndPtr, style, ODA_DRAWENTIRE ); PAINT_BUTTON( wndPtr, style, ODA_DRAWENTIRE );
return 0; return 1; /* success. FIXME: check text length */
case WM_SETFONT: case WM_SETFONT:
infoPtr->hFont = (HFONT16)wParam; infoPtr->hFont = (HFONT16)wParam;
@ -236,13 +236,13 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
case WM_SETFOCUS: case WM_SETFOCUS:
if ((style == BS_RADIOBUTTON || style == BS_AUTORADIOBUTTON) && (GetCapture() != hWnd) && if ((style == BS_RADIOBUTTON || style == BS_AUTORADIOBUTTON) && (GetCapture() != hWnd) &&
!(SendMessageA(hWnd, BM_GETCHECK, 0, 0) & BST_CHECKED)) !(SendMessageW(hWnd, BM_GETCHECK, 0, 0) & BST_CHECKED))
{ {
/* The notification is sent when the button (BS_AUTORADIOBUTTON) /* The notification is sent when the button (BS_AUTORADIOBUTTON)
is unchecked and the focus was not given by a mouse click. */ is unchecked and the focus was not given by a mouse click. */
if (style == BS_AUTORADIOBUTTON) if (style == BS_AUTORADIOBUTTON)
SendMessageA( hWnd, BM_SETCHECK, BUTTON_CHECKED, 0 ); SendMessageW( hWnd, BM_SETCHECK, BUTTON_CHECKED, 0 );
SendMessageA( GetParent(hWnd), WM_COMMAND, SendMessageW( GetParent(hWnd), WM_COMMAND,
MAKEWPARAM( wndPtr->wIDmenu, BN_CLICKED ), hWnd); MAKEWPARAM( wndPtr->wIDmenu, BN_CLICKED ), hWnd);
} }
infoPtr->state |= BUTTON_HASFOCUS; infoPtr->state |= BUTTON_HASFOCUS;
@ -273,8 +273,8 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
break; break;
case BM_CLICK: case BM_CLICK:
SendMessageA( hWnd, WM_LBUTTONDOWN, 0, 0 ); SendMessageW( hWnd, WM_LBUTTONDOWN, 0, 0 );
SendMessageA( hWnd, WM_LBUTTONUP, 0, 0 ); SendMessageW( hWnd, WM_LBUTTONUP, 0, 0 );
break; break;
case BM_SETIMAGE: case BM_SETIMAGE:
@ -353,7 +353,7 @@ static inline LRESULT WINAPI ButtonWndProc_locked(WND* wndPtr, UINT uMsg,
break; break;
default: default:
return DefWindowProcA(hWnd, uMsg, wParam, lParam); return DefWindowProcW(hWnd, uMsg, wParam, lParam);
} }
return 0; return 0;
} }
@ -476,7 +476,7 @@ static UINT BUTTON_CalcLabelRect(WND *wndPtr, HDC hdc, RECT *rc)
if (!GetIconInfo((HICON)infoPtr->hImage, &iconInfo)) if (!GetIconInfo((HICON)infoPtr->hImage, &iconInfo))
goto empty_rect; goto empty_rect;
GetObjectA (iconInfo.hbmColor, sizeof(BITMAP), &bm); GetObjectW (iconInfo.hbmColor, sizeof(BITMAP), &bm);
r.right = r.left + bm.bmWidth; r.right = r.left + bm.bmWidth;
r.bottom = r.top + bm.bmHeight; r.bottom = r.top + bm.bmHeight;
@ -486,7 +486,7 @@ static UINT BUTTON_CalcLabelRect(WND *wndPtr, HDC hdc, RECT *rc)
break; break;
case BS_BITMAP: case BS_BITMAP:
if (!GetObjectA (infoPtr->hImage, sizeof(BITMAP), &bm)) if (!GetObjectW (infoPtr->hImage, sizeof(BITMAP), &bm))
goto empty_rect; goto empty_rect;
r.right = r.left + bm.bmWidth; r.right = r.left + bm.bmWidth;
@ -537,7 +537,7 @@ static UINT BUTTON_CalcLabelRect(WND *wndPtr, HDC hdc, RECT *rc)
/********************************************************************** /**********************************************************************
* BUTTON_DrawTextCallback * BUTTON_DrawTextCallback
* *
* Callback function used be DrawStateA function. * Callback function used by DrawStateW function.
*/ */
static BOOL CALLBACK BUTTON_DrawTextCallback(HDC hdc, LPARAM lp, WPARAM wp, int cx, int cy) static BOOL CALLBACK BUTTON_DrawTextCallback(HDC hdc, LPARAM lp, WPARAM wp, int cx, int cy)
{ {
@ -557,8 +557,7 @@ static BOOL CALLBACK BUTTON_DrawTextCallback(HDC hdc, LPARAM lp, WPARAM wp, int
* *
* Common function for drawing button label. * Common function for drawing button label.
*/ */
static void BUTTON_DrawLabel(WND *wndPtr, HDC hdc, UINT dtFlags, static void BUTTON_DrawLabel(WND *wndPtr, HDC hdc, UINT dtFlags, RECT *rc)
RECT *rc)
{ {
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra; BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
DRAWSTATEPROC lpOutputProc = NULL; DRAWSTATEPROC lpOutputProc = NULL;
@ -885,7 +884,7 @@ static void BUTTON_CheckAutoRadioButton( WND *wndPtr )
tmpWnd = WIN_FindWndPtr(sibling); tmpWnd = WIN_FindWndPtr(sibling);
if ((wndPtr->hwndSelf != sibling) && if ((wndPtr->hwndSelf != sibling) &&
((tmpWnd->dwStyle & 0x0f) == BS_AUTORADIOBUTTON)) ((tmpWnd->dwStyle & 0x0f) == BS_AUTORADIOBUTTON))
SendMessageA( sibling, BM_SETCHECK, BUTTON_UNCHECKED, 0 ); SendMessageW( sibling, BM_SETCHECK, BUTTON_UNCHECKED, 0 );
sibling = GetNextDlgGroupItem( parent, sibling, FALSE ); sibling = GetNextDlgGroupItem( parent, sibling, FALSE );
WIN_ReleaseWndPtr(tmpWnd); WIN_ReleaseWndPtr(tmpWnd);
} while (sibling != start); } while (sibling != start);
@ -922,10 +921,10 @@ static void GB_Paint( WND *wndPtr, HDC hDC, WORD action )
SelectObject( hDC, hPrevBrush ); SelectObject( hDC, hPrevBrush );
SelectObject( hDC, hPrevPen ); SelectObject( hDC, hPrevPen );
} else { } else {
TEXTMETRICA tm; TEXTMETRICW tm;
rcFrame = rc; rcFrame = rc;
GetTextMetricsA (hDC, &tm); GetTextMetricsW (hDC, &tm);
rcFrame.top += (tm.tmHeight / 2) - 1; rcFrame.top += (tm.tmHeight / 2) - 1;
DrawEdge (hDC, &rcFrame, EDGE_ETCHED, BF_RECT | DrawEdge (hDC, &rcFrame, EDGE_ETCHED, BF_RECT |
((wndPtr->dwStyle & BS_FLAT) ? BF_FLAT : 0)); ((wndPtr->dwStyle & BS_FLAT) ? BF_FLAT : 0));
@ -1010,7 +1009,7 @@ static void OB_Paint( WND *wndPtr, HDC hDC, WORD action )
SetBkColor( hDC, GetSysColor( COLOR_BTNFACE ) ); SetBkColor( hDC, GetSysColor( COLOR_BTNFACE ) );
SendMessageA( GetParent(wndPtr->hwndSelf), WM_DRAWITEM, SendMessageW( GetParent(wndPtr->hwndSelf), WM_DRAWITEM,
wndPtr->wIDmenu, (LPARAM)&dis ); wndPtr->wIDmenu, (LPARAM)&dis );
SelectClipRgn(hDC, clipRegion); SelectClipRgn(hDC, clipRegion);

View File

@ -21,6 +21,38 @@
/* Built-in classes */ /* Built-in classes */
static const char bi_class_nameA[BIC32_NB_CLASSES][10] =
{
"Button",
"Edit",
"ListBox",
"ComboBox",
"ComboLBox",
POPUPMENU_CLASS_NAME,
"Static",
"ScrollBar",
"MDIClient",
DESKTOP_CLASS_NAME,
DIALOG_CLASS_NAME,
ICONTITLE_CLASS_NAME
};
static const WCHAR bi_class_nameW[BIC32_NB_CLASSES][10] =
{
{'B','u','t','t','o','n',0},
{'E','d','i','t',0},
{'L','i','s','t','B','o','x',0},
{'C','o','m','b','o','B','o','x',0},
{'C','o','m','b','o','L','B','o','x',0},
{'#','3','2','7','6','8',0},
{'S','t','a','t','i','c',0},
{'S','c','r','o','l','l','B','a','r',0},
{'M','D','I','C','l','i','e','n','t',0},
{'#','3','2','7','6','9',0},
{'#','3','2','7','7','0',0},
{'#','3','2','7','7','2',0}
};
typedef struct { typedef struct {
BOOL unicode; BOOL unicode;
union { union {
@ -32,58 +64,58 @@ typedef struct {
static BUILTINCLASS WIDGETS_BuiltinClasses[BIC32_NB_CLASSES] = static BUILTINCLASS WIDGETS_BuiltinClasses[BIC32_NB_CLASSES] =
{ {
/* BIC32_BUTTON */ /* BIC32_BUTTON */
{ FALSE, { { TRUE, {
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC, { CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
ButtonWndProc, 0, sizeof(BUTTONINFO), 0, 0, ButtonWndProc, 0, sizeof(BUTTONINFO), 0, 0,
(HCURSOR)IDC_ARROWA, 0, 0, "Button" }}}, (HCURSOR)IDC_ARROWW, 0, 0, (LPCSTR)bi_class_nameW[0] }}},
/* BIC32_EDIT */ /* BIC32_EDIT */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/, { CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/,
EditWndProc, 0, sizeof(void *), 0, 0, EditWndProc, 0, sizeof(void *), 0, 0,
(HCURSOR)IDC_IBEAMA, 0, 0, "Edit" }}}, (HCURSOR)IDC_IBEAMA, 0, 0, bi_class_nameA[1] }}},
/* BIC32_LISTBOX */ /* BIC32_LISTBOX */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/, { CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/,
ListBoxWndProc, 0, sizeof(void *), 0, 0, ListBoxWndProc, 0, sizeof(void *), 0, 0,
(HCURSOR)IDC_ARROWA, 0, 0, "ListBox" }}}, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[2] }}},
/* BIC32_COMBO */ /* BIC32_COMBO */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS, { CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
ComboWndProc, 0, sizeof(void *), 0, 0, ComboWndProc, 0, sizeof(void *), 0, 0,
(HCURSOR)IDC_ARROWA, 0, 0, "ComboBox" }}}, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[3] }}},
/* BIC32_COMBOLB */ /* BIC32_COMBOLB */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS, ComboLBWndProc, { CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS, ComboLBWndProc,
0, sizeof(void *), 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, "ComboLBox" }}}, 0, sizeof(void *), 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[4] }}},
/* BIC32_POPUPMENU */ /* BIC32_POPUPMENU */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_SAVEBITS, PopupMenuWndProc, 0, sizeof(HMENU), { CS_GLOBALCLASS | CS_SAVEBITS, PopupMenuWndProc, 0, sizeof(HMENU),
0, 0, (HCURSOR)IDC_ARROWA, NULL_BRUSH, 0, POPUPMENU_CLASS_NAME }}}, 0, 0, (HCURSOR)IDC_ARROWA, NULL_BRUSH, 0, bi_class_nameA[5] }}},
/* BIC32_STATIC */ /* BIC32_STATIC */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_PARENTDC, StaticWndProc, { CS_GLOBALCLASS | CS_DBLCLKS | CS_PARENTDC, StaticWndProc,
0, sizeof(STATICINFO), 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, "Static" }}}, 0, sizeof(STATICINFO), 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[6] }}},
/* BIC32_SCROLL */ /* BIC32_SCROLL */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC, { CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
ScrollBarWndProc, 0, sizeof(SCROLLBAR_INFO), 0, 0, ScrollBarWndProc, 0, sizeof(SCROLLBAR_INFO), 0, 0,
(HCURSOR)IDC_ARROWA, 0, 0, "ScrollBar"}}}, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[7] }}},
/* BIC32_MDICLIENT */ /* BIC32_MDICLIENT */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS, MDIClientWndProc, { CS_GLOBALCLASS, MDIClientWndProc,
0, sizeof(MDICLIENTINFO), 0, 0, (HCURSOR)IDC_ARROWA, STOCK_LTGRAY_BRUSH, 0, "MDIClient" }}}, 0, sizeof(MDICLIENTINFO), 0, 0, (HCURSOR)IDC_ARROWA, STOCK_LTGRAY_BRUSH, 0, bi_class_nameA[8] }}},
/* BIC32_DESKTOP */ /* BIC32_DESKTOP */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOP), { CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOP),
0, 0, (HCURSOR)IDC_ARROWA, 0, 0, DESKTOP_CLASS_NAME }}}, 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[9] }}},
/* BIC32_DIALOG */ /* BIC32_DIALOG */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS | CS_SAVEBITS, DefDlgProcA, 0, DLGWINDOWEXTRA, { CS_GLOBALCLASS | CS_SAVEBITS, DefDlgProcA, 0, DLGWINDOWEXTRA,
0, 0, (HCURSOR)IDC_ARROWA, 0, 0, DIALOG_CLASS_NAME }}}, 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[10] }}},
/* BIC32_ICONTITLE */ /* BIC32_ICONTITLE */
{ FALSE, { { FALSE, {
{ CS_GLOBALCLASS, IconTitleWndProc, 0, 0, { CS_GLOBALCLASS, IconTitleWndProc, 0, 0,
0, 0, (HCURSOR)IDC_ARROWA, 0, 0, ICONTITLE_CLASS_NAME }}} 0, 0, (HCURSOR)IDC_ARROWA, 0, 0, bi_class_nameA[11] }}}
}; };
static ATOM bicAtomTable[BIC32_NB_CLASSES]; static ATOM bicAtomTable[BIC32_NB_CLASSES];