+ String PREV_action = "Shift<KeyPress>p: set() notify() unset()";
+ String prev_action = "~Shift<KeyPress>p: set() notify() unset()";
+ String next_action = "~Shift<KeyPress>n: set() notify() unset()";
+ String NEXT_action = "Shift<KeyPress>n: set() notify() unset()";
+ String quit_action = "<KeyPress>q: set() notify() unset()";
+ Arg arg[10];
+ int i, j;
+
+ form = XtCreateManagedWidget ("form", formWidgetClass, shell, NULL, 0);
+ XtSetArg (arg[0], XtNborderWidth, 0);
+ command_area = XtCreateManagedWidget ("command-area", formWidgetClass,
+ form, arg, 1);
+ XtSetArg (arg[0], XtNborderWidth, 1);
+ XtSetArg (arg[1], XtNfromVert, command_area);
+ XtSetArg (arg[2], XtNdefaultDistance, 0);
+ glyph_area = XtCreateManagedWidget ("glyph-area", formWidgetClass,
+ form, arg, 3);
+ XtSetArg (arg[0], XtNborderWidth, 0);
+ XtSetArg (arg[1], XtNfromVert, glyph_area);
+ render_area = XtCreateManagedWidget ("render", formWidgetClass,
+ form, arg, 2);
+
+ charmap = alloca (sizeof (Widget) * (face->num_charmaps + 1));
+ XtSetArg (arg[0], XtNleft, XawChainLeft);
+ XtSetArg (arg[1], XtNright, XawChainLeft);
+ XtSetArg (arg[2], XtNtop, XawChainTop);
+ XtSetArg (arg[3], XtNbottom, XawChainTop);
+ charmap[0] = XtCreateManagedWidget (charmap_rec[0].name, commandWidgetClass,
+ command_area, arg, 4);
+ XtAddCallback (charmap[0], XtNcallback, EncodingProc, (XtPointer) -1);
+ for (i = 1; i <= face->num_charmaps; i++)
+ {
+ XtSetArg (arg[4], XtNfromHoriz, charmap[i - 1]);
+ charmap[i] = XtCreateManagedWidget (charmap_rec[i].name,
+ commandWidgetClass,
+ command_area, arg, 5);
+ XtAddCallback (charmap[i], XtNcallback, EncodingProc,
+ (XtPointer) (i - 1));
+ }
+ XtSetArg (arg[0], XtNleft, XawChainRight);
+ XtSetArg (arg[1], XtNright, XawChainRight);
+ XtSetArg (arg[4], XtNfromHoriz, charmap[i - 1]);
+ XtSetArg (arg[5], XtNaccelerators, XtParseAcceleratorTable (quit_action));
+ quit = XtCreateManagedWidget ("quit", commandWidgetClass,
+ command_area, arg, 6);
+ XtAddCallback (quit, XtNcallback, QuitProc, NULL);
+
+ XtSetArg (arg[4], XtNfromVert, charmap[0]);
+ XtSetArg (arg[5], XtNlabel, "<< (P)");
+ XtSetArg (arg[6], XtNaccelerators, XtParseAcceleratorTable (PREV_action));
+ PREV = XtCreateManagedWidget ("PREV", commandWidgetClass,
+ command_area, arg, 7);
+ XtAddCallback (PREV, XtNcallback, ChangeProc, (XtPointer) -2);
+ XtSetArg (arg[5], XtNfromHoriz, PREV);
+ XtSetArg (arg[6], XtNlabel, "< (p)");
+ XtSetArg (arg[7], XtNaccelerators, XtParseAcceleratorTable (prev_action));
+ prev = XtCreateManagedWidget ("prev", commandWidgetClass,
+ command_area, arg, 8);
+ XtAddCallback (prev, XtNcallback, ChangeProc, (XtPointer) -1);
+ XtSetArg (arg[5], XtNfromHoriz, prev);
+ XtSetArg (arg[6], XtNlabel, " 0000 ");
+ label = XtCreateManagedWidget ("label", labelWidgetClass,
+ command_area, arg, 7);
+ XtSetArg (arg[5], XtNfromHoriz, label);
+ XtSetArg (arg[6], XtNlabel, "(n) >");
+ XtSetArg (arg[7], XtNaccelerators, XtParseAcceleratorTable (next_action));
+ next = XtCreateManagedWidget ("next", commandWidgetClass,
+ command_area, arg, 8);
+ XtAddCallback (next, XtNcallback, ChangeProc, (XtPointer) 1);
+ XtSetArg (arg[5], XtNfromHoriz, next);
+ XtSetArg (arg[6], XtNlabel, "(N) >>");
+ XtSetArg (arg[7], XtNaccelerators, XtParseAcceleratorTable (NEXT_action));
+ NEXT = XtCreateManagedWidget ("NEXT", commandWidgetClass,
+ command_area, arg, 8);
+ XtAddCallback (NEXT, XtNcallback, ChangeProc, (XtPointer) 2);
+
+ for (i = 0; i < 8; i++)
+ for (j = 0; j < 16; j++)
+ {
+ int k = i * 16 + j;
+ int num_args = 0;
+
+ XtSetArg (arg[num_args], XtNwidth, glyph_width), num_args++;
+ XtSetArg (arg[num_args], XtNheight, glyph_height), num_args++;
+ if (j > 0)
+ XtSetArg (arg[num_args], XtNfromHoriz, glyph[k - 1]), num_args++;
+ if (i > 0)
+ XtSetArg (arg[num_args], XtNfromVert, glyph[k - 16]), num_args++;
+ glyph[k] = XtCreateManagedWidget ("glyph", commandWidgetClass,
+ glyph_area, arg, num_args);
+ }
+
+ clear = XtCreateManagedWidget ("clear", commandWidgetClass,
+ render_area, NULL, 0);
+
+ XtInstallAllAccelerators (form, form);