--- l2_channel.c 2001/05/10 19:46:01 1.1
+++ l2_channel.c 2001/05/22 18:47:31 1.2
@@ -134,3 +134,71 @@
return rv;
}
+int l2_channel_setparams(l2_param_t pa[], const char *fmt, va_list ap)
+{
+ const char *cpB, *cpE;
+ const char *cpC, *cpG;
+ int ok;
+ int i;
+
+ cpE = fmt;
+ while (*cpE != '\0') {
+ /* determine begin of parameter name */
+ cpB = cpE;
+ while (*cpB == ',')
+ cpB++;
+
+ /* determine end of parameter name */
+ cpE = cpB;
+ while (*cpE != ',' && *cpE != '\0')
+ cpE++;
+
+ /* try to match with configured parameters */
+ ok = FALSE;
+ for (i = 0; pa[i].name != NULL; i++) {
+ cpC = pa[i].name;
+ cpG = cpB;
+ while (*cpC != '\0' && cpG < cpE) {
+ if (*cpC != *cpG)
+ break;
+ cpC++;
+ cpG++;
+ }
+ if (*cpC == '\0' && cpG == cpE) {
+ /* parameter matched, so store value */
+ switch (pa[i].type) {
+ case L2_TYPE_CHAR:
+ *(char *)(pa[i].store) = va_get(ap, char);
+ break;
+ case L2_TYPE_SHORT:
+ *(short *)(pa[i].store) = va_get(ap, short);
+ break;
+ case L2_TYPE_INT:
+ *(int *)(pa[i].store) = va_get(ap, int);
+ break;
+ case L2_TYPE_LONG:
+ *(long *)(pa[i].store) = va_get(ap, long);
+ break;
+ case L2_TYPE_FLOAT:
+ *(float *)(pa[i].store) = va_get(ap, float);
+ break;
+ case L2_TYPE_DOUBLE:
+ *(double *)(pa[i].store) = va_get(ap, double);
+ break;
+ case L2_TYPE_CHARPTR:
+ *(char **)(pa[i].store) = va_get(ap, charptr);
+ break;
+ case L2_TYPE_VOIDPTR:
+ *(void **)(pa[i].store) = va_get(ap, voidptr);
+ break;
+ }
+ ok = TRUE;
+ break;
+ }
+ }
+ if (!ok)
+ return L2_ERROR;
+ }
+ return L2_OK;
+}
+
|