diff options
Diffstat (limited to 'exim_monitor/em_xs.c')
-rw-r--r-- | exim_monitor/em_xs.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/exim_monitor/em_xs.c b/exim_monitor/em_xs.c new file mode 100644 index 0000000..b145fb9 --- /dev/null +++ b/exim_monitor/em_xs.c @@ -0,0 +1,45 @@ +/************************************************* +* Exim Monitor * +*************************************************/ + +/* Copyright (c) University of Cambridge, 1995 - 2016 */ +/* See the file NOTICE for conditions of use and distribution. */ + +/* This file contains a number of subroutines that are in effect +just alternative packaging for calls to various X functions that +happen to be convenient for this program. */ + +#include "em_hdr.h" + + + +/************************************************* +* xs_SetValues * +*************************************************/ + +/* Unpick a variable-length argument list and set up an +appropriate call to XtSetValues. To make it reasonably +efficient, we keep a working Arg structure of length 15; +the largest call in eximon sets 11 values. The code uses +malloc/free if more, just in case there is ever a longer +one that gets overlooked. */ + +static Arg xs_temparg[15]; + +void xs_SetValues(Widget w, Cardinal num_args, ...) +{ +int i; +va_list ap; +Arg *aa = (num_args > 15)? (Arg *)malloc(num_args*sizeof(Arg)) : xs_temparg; +va_start(ap, num_args); +for (i = 0; i < num_args; i++) + { + aa[i].name = va_arg(ap, String); + aa[i].value = va_arg(ap, XtArgVal); + } +va_end(ap); +XtSetValues(w, aa, num_args); +if (num_args > 15) free(aa); +} + +/* End of em_xs.c */ |