📄 rc.c
字号:
void input_resid(RES_ID *id)
{
int i;
switch (lastst)
{
case ident:
id->hasname = 1;
for (i = 0; i < strlen(lastid); i++)
lastid[i] = toupper(lastid[i]);
id->v.n.len = unicode_from_ascii(&id->v.n.name, lastid, strlen
(lastid));
getsym();
break;
case iconst:
case lconst:
case iuconst:
case luconst:
id->hasname = 0;
id->v.id = intexpr();
break;
default:
generror(ERR_RESOURCE_ID_EXPECTED, 0, 0);
break;
}
}
//-------------------------------------------------------------------------
void input_quoted_resid(RES_ID *id)
{
if (is_number())
input_resid(id);
else if (lastst == sconst)
{
id->hasname = 1;
id->v.n.len = unicode_from_ascii(&id->v.n.name, laststr, laststrlen);
getsym();
}
else
generror(ERR_INVALIDCLASS, 0, 0);
}
//-------------------------------------------------------------------------
void input_secondary_characteristics(RES_INFO *info)
{
int done = FALSE;
info->language = base_language;
while (!done)
{
while (lastst == eol)
getsym();
switch (lastst)
{
case kw_language:
getsym();
info->language = intexpr();
skip_comma();
intexpr();
break;
case kw_version:
getsym();
info->version = intexpr();
break;
case kw_characteristics:
getsym();
info->characteristics = intexpr();
break;
default:
done = TRUE;
break;
}
if (!done)
{
need_eol();
}
}
}
//-------------------------------------------------------------------------
void input_memflags(RES_INFO *info)
{
int done = FALSE;
while (!done)
{
switch (lastst)
{
case kw_discardable:
info->memflags |= MF_DISCARDABLE;
break;
case kw_pure:
info->memflags |= MF_PURE;
break;
case kw_preload:
info->memflags |= MF_PRELOAD;
break;
case kw_moveable:
info->memflags |= MF_MOVEABLE;
break;
case kw_nondiscardable:
info->memflags &= ~MF_DISCARDABLE;
break;
case kw_impure:
info->memflags &= ~MF_PURE;
break;
default:
done = TRUE;
break;
}
if (!done)
{
getsym();
}
skip_comma();
}
}
//-------------------------------------------------------------------------
void getfilename(void)
{
int done = FALSE;
if (lastst == sconst)
{
getsym();
return ;
}
laststr[0] = 0;
while (!done)
{
switch (lastst)
{
case divide:
case backslash:
strcat(laststr, "\\");
break;
case dot:
strcat(laststr, ".");
break;
case ident:
strcat(laststr, lastid);
break;
default:
done = TRUE;
break;
}
if (!done)
getsym();
}
}
//-------------------------------------------------------------------------
int input_string(CHARACTER **string)
{
int rv;
if (lastst == sconst)
{
rv = unicode_from_ascii(string, laststr, laststrlen);
getsym();
}
else
generror(ERR_STRING_EXPECTED, 0, 0);
return rv;
}
//-------------------------------------------------------------------------
void parse_accelerator(RES_ID *id, RES_INFO *info)
{
int mode;
struct accelerator *data, **p = &data, *x;
getsym();
input_memflags(info);
need_eol();
info->memflags |= MF_PURE;
info->memflags &= ~MF_DISCARDABLE;
input_secondary_characteristics(info);
need_begin();
// info->memflags = MF_PURE | MF_MOVEABLE ;
while (TRUE)
{
int done;
x = *p = AllocateMemory(sizeof(*data));
x->link = NULL;
x->flags = 0;
if (lastst == sconst)
{
if (laststr[0] == '^')
x->key = laststr[1] &0x1f;
else
x->key = laststr[0];
mode = 1;
getsym();
}
else if (is_number())
{
x->key = intexpr();
mode = 0;
}
else
break;
skip_comma();
x->id = intexpr();
skip_comma();
done = FALSE;
while (!done)
{
switch (lastst)
{
case kw_ascii:
x->flags &= ~ACC_VIRTKEY;
break;
case kw_virtkey:
x->flags |= ACC_VIRTKEY;
break;
case kw_noinvert:
x->flags |= ACC_NOINVERT;
break;
case kw_shift:
x->flags |= ACC_SHIFT;
break;
case kw_control:
x->flags |= ACC_CONTROL;
break;
case kw_alt:
x->flags |= ACC_ALT;
break;
default:
done = TRUE;
break;
}
if (!done)
{
getsym();
skip_comma();
}
}
need_eol();
p = &(*p)->link;
}
*p = 0;
need_end();
define_accelerator(id, info, data);
}
//-------------------------------------------------------------------------
void parse_bitmap(RES_ID *id, RES_INFO *info)
{
incconst = TRUE;
info->memflags |= MF_PURE;
info->memflags &= ~MF_DISCARDABLE;
getsym();
input_memflags(info);
getfilename();
need_eol();
define_bitmap(id, info, laststr);
incconst = FALSE;
}
//-------------------------------------------------------------------------
void parse_cursor(RES_ID *id, RES_INFO *info)
{
incconst = TRUE;
getsym();
input_memflags(info);
getfilename();
need_eol();
define_cursor(id, info, laststr);
incconst = FALSE;
}
//-------------------------------------------------------------------------
void dlg_error(extended)
{
if (!extended)
generror(ERR_NOT_DIALOGEX, 0, 0);
}
//-------------------------------------------------------------------------
void input_dialog_settings(struct dialog *dlg, RES_INFO *info, int extended)
{
int done = FALSE;
info->language = base_language;
while (!done)
{
while (lastst == eol)
getsym();
switch (lastst)
{
case kw_language:
getsym();
info->language = intexpr();
skip_comma();
intexpr();
break;
case kw_version:
getsym();
info->version = intexpr();
break;
case kw_characteristics:
getsym();
info->characteristics = intexpr();
break;
case kw_style:
getsym();
dlg->style |= intexpr();
break;
case kw_exstyle:
getsym();
dlg->exstyle |= intexpr();
break;
case kw_menu:
getsym();
input_resid(&dlg->menu);
break;
case kw_font:
dlg->style |= DS_SETFONT;
getsym();
dlg->pointsize = intexpr();
skip_comma();
input_string(&dlg->font);
break;
case kw_caption:
// dlg->style |= WS_DLGFRAME ;
getsym();
input_string(&dlg->caption);
break;
case kw_class:
getsym();
input_quoted_resid(&dlg->class );
break;
case kw_help:
getsym();
dlg_error(extended);
dlg->ex->help = intexpr();
break;
case kw_weight:
getsym();
dlg_error(extended);
dlg->ex->weight = intexpr();
break;
case kw_italic:
getsym();
dlg_error(extended);
dlg->ex->italic = intexpr();
break;
default:
done = TRUE;
break;
}
if (!done)
{
need_eol();
}
}
//-------------------------------------------------------------------------
}
//-------------------------------------------------------------------------
void parse_control_extended(struct dialog_control *c, int extended)
{
// if (extended) {
if (lastst != eol)
{
c->exstyle = intexpr();
skip_comma();
} if (lastst != eol)
{
c->help = intexpr();
skip_comma();
}
// }
}
//-------------------------------------------------------------------------
void set_class(struct dialog_control *c, int st)
{
int v = 0;
int found = TRUE;
switch (st)
{
case kw_auto3state:
case kw_autocheckbox:
case kw_autoradiobutton:
case kw_checkbox:
case kw_pushbutton:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -