📄 test12.c
字号:
/* $Header: /cvsroot/lesstif/lesstif/test/Xm/filesb/test12.c,v 1.4 2001/06/15 09:17:36 amai Exp $From: Eric Howe <mu@clio.trends.ca>To: lesstif@hungry.comSubject: FileSB defaultQualify procDate: Sun, 5 Jul 1998 22:36:57 -0400 (EDT)*//* * This test program will test the file selector's XmNqualifySearchDataProc * with various combinations of value, mask, dir, and pattern. */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <Xm/Xm.h>#include <Xm/FileSB.h>#include "mkdirtree.h"static char *FallBack[] = { "*.geometrySlop: 0", NULL};static XmQualifyProc defaultQualify;/* * I'm sorry (a polite lie) but this is just too much to type more than once. * True, it's better than "XmRepTypeInstallTearOffModelConverter" but that * abomination doesn't get used nearly as much. */typedef XmFileSelectionBoxCallbackStruct XmFSB;static char *tostring(XmString xs, char *buf){ char *s = NULL; if(!XmStringGetLtoR(xs, XmFONTLIST_DEFAULT_TAG, &s)) strcpy(buf, "(null)"); else sprintf(buf, "'%s'", s); XtFree(s); return buf;}/* * The lengths are the number of *bytes* in the corresponding XmString * so they're always different with Lesstif (there's a non-zero chance * that they'll be different between, say, SGI Motif and Solaris Motif * too). The Motif 2.0.1 man page for XmFileSelectionBox says that the * length fields are obsolete and only exist for backwards compatibility. * Hence, I deem the length fields irrelevant and don't print them. */static voiddumpit(XmFSB *cbs){ char buf[1024]; printf("\tvalue = %s\n", tostring(cbs->value, buf)); printf("\tmask = %s\n", tostring(cbs->mask, buf)); printf("\tdir = %s\n", tostring(cbs->dir, buf)); printf("\tpat = %s\n", tostring(cbs->pattern, buf));}static voidqualify(Widget w, XmFSB *in, XmFSB *out){ printf("in:\n"); dumpit(in); defaultQualify(w, (XtPointer)in, (XtPointer)out); printf("out:\n"); dumpit(out); printf("------------------------------------------------------\n");}/* * Make sure none of these constants have "/tmp" as the path. * We chdir to /tmp before the fun starts to make things come * out the same no matter where you are and we don't want to * mask any problems by having the current directory equal * one of the directories in a resource setting. */#define VALUE "/dev/null"#define DIRMASK "/etc/*.c"#define DIRECTORY "/bin/"#define PATTERN "*.h"static struct { char *value; char *mask; char *dir; char *pattern;} tests[] = { { 0, 0, 0, 0 }, { VALUE, 0, 0, 0 }, { 0, DIRMASK, 0, 0 }, { 0, 0, DIRECTORY, 0 }, { 0, 0, 0, PATTERN }, { VALUE, DIRMASK, 0, 0 }, { VALUE, 0, DIRECTORY, 0 }, { VALUE, 0, 0, PATTERN }, { 0, DIRMASK, DIRECTORY, 0 }, { 0, DIRMASK, 0, PATTERN }, { 0, 0, DIRECTORY, PATTERN }, { VALUE, DIRMASK, DIRECTORY, 0 }, { VALUE, DIRMASK, 0, PATTERN }, { VALUE, 0, DIRECTORY, PATTERN }, { 0, DIRMASK, DIRECTORY, PATTERN }, { VALUE, DIRMASK, DIRECTORY, PATTERN },};#define N_TESTS (sizeof(tests)/sizeof(tests[0]))static voidclear(XmFSB *x){ if(x->value != NULL) XmStringFree(x->value); if(x->mask != NULL) XmStringFree(x->mask); if(x->dir != NULL) XmStringFree(x->dir); if(x->pattern != NULL) XmStringFree(x->pattern); memset(x, '\0', sizeof(XmFSB));}static voidset(XmString *x, int *len, char *s){ if(s == NULL) return; *x = XmStringCreateLocalized(s); *len = XmStringLength(*x);}intmain(int argc, char **argv){ XtAppContext ac; Widget top, fsb; int i; XmFSB in, out; /* * Go to /tmp so that the output will be consistent no * matter where we're run from. I'll just assume that anyone * can chdir to /tmp. */ chdir("/tmp"); top = XtVaAppInitialize(&ac, "defq", NULL, 0, &argc, argv, FallBack, NULL); fsb = XtCreateManagedWidget("fsb", xmFileSelectionBoxWidgetClass, top, NULL, 0); XtVaGetValues(fsb, XmNqualifySearchDataProc, &defaultQualify, NULL); memset(&in, '\0', sizeof(in)); memset(&out, '\0', sizeof(out)); for(i = 0; i < N_TESTS; ++i) { set(&in.value, &in.length, tests[i].value); set(&in.mask, &in.mask_length, tests[i].mask); set(&in.dir, &in.dir_length, tests[i].dir); set(&in.pattern, &in.pattern_length, tests[i].pattern); qualify(fsb, &in, &out); clear(&in); clear(&out); } XtDestroyWidget(top); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -