zfuncs

This is a package of various utility programs that were used in building the other applications on this web site. These programs are also included with the other applications. This package includes documentation that will make it easier to use these programs for other projects. A menu-driven test program for most of the utilities is also included.

Highlights

MatchWild       compare strings with multiple wildcards (* and ?)
SearchWild      search for files matching pathname with wildcards anywhere
convDS          convert double to string with most compact format
quick math      faster versions of some math funcs (reduced precision, range)
bsearch         binary search function
HeapSort        heapsort with callback to compare recs, allowing weird sorts
GTK menus       build GTK menus and toolbars with simple functions
zlock           use GTK in threads more easily and safely
wprintf         printf() interface to scrolling windows, variable font
zdialog         build basic GTK dialogs with simple functions
pixbuf_rotate   rotate a GDK pixbuf through any angle (e.g. 23.4 degrees)
thumbnails      create thumbnail image window, page, select with mouse
HashTab         hash table C++ class (fast string store and search)
Queue           queue C++ class (push, pop newest, pop oldest) (thread safe)
Tree            C++ class, put/get data by string/number index (sparse array)

To download this package, visit the download page.

Example dialog box created with zdialog


// create dialog box with buttons
zdialog *zd = zdialog_new("zdialog test","OK","cancel","error","done",NULL);

// add widgets to dialog
zdialog_add_widget(zd,"hbox","hb1","dialog",0,"space=5");      //  container box
zdialog_add_widget(zd,"label","label1","hb1","label 1");       //  label
zdialog_add_widget(zd,"entry","entry1","hb1","init data 1");   //  text entry
zdialog_add_widget(zd,"hbox","hb2","dialog",0,"space=5");
zdialog_add_widget(zd,"label","label21","hb2","label 21");
zdialog_add_widget(zd,"entry","entry21","hb2","init data 21","expand");
zdialog_add_widget(zd,"label","label22","hb2","label 22");
zdialog_add_widget(zd,"entry","entry22","hb2","init data 22");
zdialog_add_widget(zd,"hbox","hb3","dialog",0,"space=5");
zdialog_add_widget(zd,"label","label3","hb3","label 3");
zdialog_add_widget(zd,"radio","rb1","hb3","RB 1");
zdialog_add_widget(zd,"radio","rb2","hb3","RB 2");
zdialog_add_widget(zd,"radio","rb3","hb3","RB3");
zdialog_add_widget(zd,"hbox","hb4","dialog",0,"space=5");
zdialog_add_widget(zd,"label","label4","hb4","label 4","space=10");
zdialog_add_widget(zd,"check","ck1","hb4","check 1","space=5");
zdialog_add_widget(zd,"check","ck2","hb4","check 2","space=5");
zdialog_add_widget(zd,"hbox","hb5","dialog",0,"space=5");
zdialog_add_widget(zd,"button","butt1","hb5","button 1");
zdialog_add_widget(zd,"togbutt","tog1","hb5","toggle button");
zdialog_add_widget(zd,"spin","spin1","hb5","10,20,1,15");
zdialog_add_widget(zd,"hbox","hb6","dialog");
zdialog_add_widget(zd,"combo","combo1","hb6","1st entry");
zdialog_add_widget(zd,"hscale","hs1","hb6","0,100,1,50","expand");
zdialog_add_widget(zd,"frame","fr1","dialog",0,"expand");
zdialog_add_widget(zd,"edit","text1","fr1","initial data");

// add entries to combo box dropdown list
zdialog_cb_app(zd,"combo1","2nd entry");
zdialog_cb_app(zd,"combo1","3rd entry");
zdialog_cb_app(zd,"combo1","4th entry");
zdialog_cb_app(zd,"combo1","5th entry");
//  run the dialog with event and completion functions
zdialog_run(zd, zcallback_event, zcallback_compl);
...

// respond to dialog events - get user data from widgets
int zcallback_event(zdialog *zd, const char * wname)
{
    char wdata[200];
    zdialog_fetch(zd,wname,wdata,200);
    printf("widget: %s data: %s \n",wname,wdata);
    return 0;
}

// respond to dialog completion buttons - print which button was used
int zcallback_compl(zdialog *zd, int zstat)
{
    printf("dialog status: %d \n",zstat);
    zdialog_free(zd);
    return 0;
}