| 1 | /************************************************* |
| 2 | * Exim Monitor * |
| 3 | *************************************************/ |
| 4 | |
| 5 | /* Copyright (c) University of Cambridge, 1995 - 2007 */ |
| 6 | /* See the file NOTICE for conditions of use and distribution. */ |
| 7 | |
| 8 | /* This file contains a number of subroutines that are in effect |
| 9 | just alternative packaging for calls to various X functions that |
| 10 | happen to be convenient for this program. */ |
| 11 | |
| 12 | #include "em_hdr.h" |
| 13 | |
| 14 | |
| 15 | |
| 16 | /************************************************* |
| 17 | * xs_SetValues * |
| 18 | *************************************************/ |
| 19 | |
| 20 | /* Unpick a variable-length argument list and set up an |
| 21 | appropriate call to XtSetValues. To make it reasonably |
| 22 | efficient, we keep a working Arg structure of length 15; |
| 23 | the largest call in eximon sets 11 values. The code uses |
| 24 | malloc/free if more, just in case there is ever a longer |
| 25 | one that gets overlooked. */ |
| 26 | |
| 27 | static Arg xs_temparg[15]; |
| 28 | |
| 29 | void xs_SetValues(Widget w, Cardinal num_args, ...) |
| 30 | { |
| 31 | int i; |
| 32 | va_list ap; |
| 33 | Arg *aa = (num_args > 15)? (Arg *)malloc(num_args*sizeof(Arg)) : xs_temparg; |
| 34 | va_start(ap, num_args); |
| 35 | for (i = 0; i < num_args; i++) |
| 36 | { |
| 37 | aa[i].name = va_arg(ap, String); |
| 38 | aa[i].value = va_arg(ap, XtArgVal); |
| 39 | } |
| 40 | XtSetValues(w, aa, num_args); |
| 41 | if (num_args > 15) free(aa); |
| 42 | } |
| 43 | |
| 44 | /* End of em_xs.c */ |