Trusted Solaris 開発ガイド

ソースコード

これは、図 15-1図 15-2 に示している簡単な Motif アプリケーションのソースコードです。ラベルウィジェットで斜体の ASCII ラベル文字列を表示するには、任意のコマンド行引数を使用してアプリケーションを起動してください。

コピー元のファイル

次に、この簡単な Motif アプリケーションのコピー元のファイルを示します。ファイルを作成し、XENVIRONMENT 変数にパス名を設定すれば、このアプリケーションが使用できます。

phoenix% setenv XENVIRONMENT /export/home/zelda/resfile

Example.*geometry: 										400X100
 Example.*orientation:										XmHORIZONTAL
 Example.*label.labelString: 										Launch an application
 Example.*xclock.labelString: 										Run xclock
 Example.*xterm.labelString: 										Run xterm
 Example.*xmag.labelString: 										Run xmag
 Example.*goodbye.labelString: 										Quit
 Example.*XmPushButton*background: 										blue
 Example.*XmLabel*foreground: 										white
 Example.*XmLabel*foreground:										white

コンパイルコマンド


phoenix% cc -I/usr/openwin/include -I/usr/dt/include ex.c -o ¥
Example -L/usr/openwin/lib -L/usr/dt/lib -lXm -lXt -lX11 -lXtsol -ltsol -lDtTsol

コード

#include <stdio.h>
 #include <X11/Intrinsic.h>
 #include <X11/StringDefs.h>
 #include <Xm/Xm.h>
 #include <Xm/Label.h>
 #include <Xm/PushB.h>
 #include <Xm/Form.h>
 #include <tsol/Xtsol.h>
 #include <Dt/label_clipping.h>

 XTsolResAttributes								winattrs;
 int								retval, error;
 uid_t								uid;
 Window								window;
 Display								*display;
 char								*string = (char *)0, *string1 = (char *)0, *string2 = (char *)0,
 								*string3 = (char *)0, *string4 = "SECRET";
 XmFontList								fontlist;
 XmString 								xmstr;
 XFontStruct 								*italic;
 Arg 								args[9];
 Dimension								width = 144;
 Widget								stringLabel;
 bslabel_t								senslabel;
 bclabel_t								cmwlabel;

/* コールバック */

 void Xclock(Widget w, caddr_t client_data, caddr_t call_data)
 { system("xclock &"); }

 void Xterm(Widget w, caddr_t client_data, caddr_t call_data)
 { system("xterm &"); }

 void Quit(Widget w, caddr_t client_data, caddr_t call_data)
 {
 	fprintf(stderr, "exiting  . . .¥n");
 	exit(0);
 }
 main(int argc, char **argv)
 {
 	Widget rowcolumn, label, xclock, xterm, quit, form, topLevel;
 	int i = 0;
 	Arg args[9];

/* ウィジェットを作成する */
 	topLevel = XtInitialize(argv[0], "XMCmds1", NULL, 0, &argc, argv);
 	form = XtCreateManagedWidget("form", xmFormWidgetClass, topLevel, NULL, 0);

/* コマンドの引数にラベルウィジェットが使用する ASCII 文字列とフォントリストを持つ */
/* アプリケーションはここで起動する */

 	if (argc == 2) {
/* フォントリストを作成しラベルを変換する */
 			retval = getcmwplabel(&cmwlabel);
 			getcsl(&senslabel, &cmwlabel);
 			italic = XLoadQueryFont(XtDisplay(topLevel),
 														"-adobe-times-medium-i-*-*-14-*-*-*-*-*-iso8859-1");
 			fontlist = XmFontListCreate(italic, "italic");
 			xmstr = (XmString)Xbsltos(XtDisplay(topLevel), &senslabel,
 								width, fontlist, LONG_WORDS);

/* フォントリストとラベルテキストを使用してラベルウィジェットを作成する */
 			i=0;
 			XtSetArg(args[i], XmNfontList, fontlist); i++;
 			XtSetArg(args[i], XmNlabelString, xmstr); i++;
 			label = XtCreateManagedWidget(																"label", xmLabelWidgetClass, form, args, i);
 	}

/* コマンドの引数にラベルウィジェット用の資源ファイル内のテキストを使用しない */
/* アプリケーションはここで起動する */

 	else {
 			label = XtCreateManagedWidget("label", xmLabelWidgetClass, form, NULL, 0); }

/* 引き続きウィジェットを作成する */
 	i=0;
 	XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET);	i++;
 	XtSetArg(args[i], XmNtopWidget, label);									i++;
 	XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); i++;
 	XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION);	i++;
 	XtSetArg(args[i], XmNrightPosition, 33); i++;
 	XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); 							i++;
 	xclock = XtCreateManagedWidget("xclock", xmPushButtonWidgetClass, form, args, i);

 	i=0;
 	XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET);																													i++;
 	XtSetArg(args[i], XmNtopWidget, label); i++;
 	XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION);	i++;
 	XtSetArg(args[i], XmNleftPosition, 33); i++;
 	XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION);i++;Ha>