layout_object_setvalue 子例程

用途

设置 LayoutObject 结构的布局值。

布局库 (libi18n.a)

语法

#include <sys/lc_layout.h> 
int layout_object_setvalue( layout_object,  values,  index)
LayoutObject layout_object;
LayoutValues values;
int *index;

描述

layout_object_setvalue 子例程更改 LayoutObject 结构的当前布局值。 layout_object 参数指定由 layout_object_create 子例程创建的 LayoutObject 结构。 这些值将写入 LayoutObject 结构中,并可能影响后续布局函数的行为。

注: 某些布局值确实会改变由 LayoutObject 结构维护的内部状态。

LayoutValueRec结构的 name 字段包含要设置的布局值的名称。 值字段包含要设置的实际值。 值字段足够大,可以支持所有类型的布局值。 有关布局值类型的更多信息,请参阅 常规编程概念: 编写和调试程序 中的 布局库的布局值

注: 如果要开发可能支持多字节语言环境的国际化应用程序,请参阅 常规编程概念: 编写和调试程序 中的 使用 libcur 包

参数

描述
layout_object 指定 layout_object_create 子例程返回的 LayoutObject 结构。
指定子程序要设置的LayoutValueRec类型布局值数组。 数组的结尾由以下各项指示:name=0.
INDEX 指定要查询的布局值。 如果无法查询该值,那么将返回导致错误的索引参数,并且子例程将返回非零值。 如果生成了错误,那么可能先前已设置了值的子集。

返回值

成功完成时, layout_object_setvalue 子例程返回值 0。 已成功设置所有布局值。

错误代码

如果 layout_object_setvalue 子例程失败,它将返回以下值:

描述
LAYOUT_EINVAL index 参数指定的布局值未知,其值无效,或者 layout_object 参数无效。
LAYOUT_EMFILE (OPEN_MAX) 文件描述符当前在调用进程中打开。
LAYOUT_ENOMEM 存储空间不足。

示例

以下示例将 TypeofText 值设置为隐式值,将 out 值设置为 Visual。

#include <sys/lc_layout.h>
#include <locale.h>

main()
{
LayoutObject plh;
int RC=0;
LayoutValues layout;
LayoutTextDescriptor Descr;
int index;

RC=layout_object_create(setlocale(LC_CTYPE,""),&plh); /* create object */
if (RC) {printf("Create error !!\n"); exit(0);}

layout=malloc(2*sizeof(LayoutValueRec)); /*allocate layout array*/  
Descr=malloc(sizeof(LayoutTextDescriptorRec)); /* allocate text descriptor */
layout[0].name=TypeOfText;            /* set name */  
layout[0].value=(caddr_t)Descr;       /* set value */  
layout[1].name=0;                     /* indicate end of array */

Descr->in=TEXT_IMPLICIT;
Descr->out=TEXT_VISUAL;  RC=layout_object_setvalue(plh,layout,&index);
if (RC) printf("SetValue error at %d!!\n",index); /* check return code */
free(layout);                       /* free allocated memory */  
free (Descr);
RC=layout_object_free(plh);         /* free layout object */
if (RC) printf("Free error !!\n");
}