int main(void) { print_title("exp05"); print_title("Multidimensional array"); { show_var("%d", day_of_year(2012, 3, 31)); show_var("%d", day_of_year(2012, 6, 11)); } return 0; }
static int sysctl_all(int *oid, int len) { int name1[22], name2[22]; int i, j; size_t l1, l2; #ifdef __APPLE__ sysctl_all_user(oid, len); #endif name1[0] = 0; name1[1] = 2; l1 = 2; if (len) { memcpy(name1+2, oid, len * sizeof(int)); l1 += len; } else { name1[2] = 1; l1++; } for (;;) { l2 = sizeof(name2); j = sysctl(name1, (u_int)l1, name2, &l2, 0, 0); if (j < 0) { if (errno == ENOENT) return (0); else err(1, "sysctl(getnext) %d %zu", j, l2); } l2 /= sizeof(int); if (len < 0 || l2 < (unsigned int)len) return (0); for (i = 0; i < len; i++) if (name2[i] != oid[i]) return (0); #ifdef __APPLE__ i = show_var(name2, (u_int)l2, 0); #else i = show_var(name2, (u_int)l2); #endif if (!i && !bflag) putchar('\n'); memcpy(name1+2, name2, l2 * sizeof(int)); l1 = 2 + l2; } }
void show_expr(is_expr* node) { printf("("); switch(node->type) { case t_expr_var: show_var(node->data.var); break; case t_expr_new_op: show_new_op(node->data.new_op); break; case t_expr_type_cast: printf("("); show_type_decl(node->data.type_cast.type); printf(")"); show_expr(node->data.type_cast.expr); break; case t_expr_constant: show_constant(node->data.constant); break; case t_expr_func_call: show_func_call(node->data.func_call); break; case t_expr_operation: show_expr_op(node->data.operation); break; } printf(")"); }
static void show_all_vars(FILE *f) { uint32_t i; fprintf(f, "==== all variables ====\n"); for (i=0; i<NVARS; i++) { show_var(f, i); } fprintf(f, "\n"); }
void remove_last_separator(char *dir) { int dir_length = strlen(dir); show_var("%d", dir_length); if (0 < dir_length && '/' == *(dir + dir_length - 1)) { *(dir + dir_length - 1) = '\0'; } }
void show_incr_op(is_incr_op* node) { if (node->pre) show_var(node->var); switch (node->type) { case t_incr_op_inc: printf("++"); break; case t_incr_op_dec: printf("--"); break; } if (!node->pre) show_var(node->var); }
void show_assign_op(is_assign_op* node) { show_var(node->var); printf(" "); switch (node->type) { case t_assign_op_eq: printf("="); break; case t_assign_op_shift_r_eq: printf(">>="); break; case t_assign_op_shift_l_eq: printf("<<="); break; case t_assign_op_add_eq: printf("+="); break; case t_assign_op_sub_eq: printf("-="); break; case t_assign_op_mul_eq: printf("*="); break; case t_assign_op_div_eq: printf("/="); break; case t_assign_op_mod_eq: printf("%%="); break; case t_assign_op_and_eq: printf("&="); break; case t_assign_op_xor_eq: printf("^="); break; case t_assign_op_or_eq: printf("|="); break; } printf(" "); show_expr(node->expr); }
// Support for CTL_USER static void sysctl_all_user(int *oid, int len) { int i, j; if (len > 1 || (len == 1 && oid[0] != CTL_USER)) { return; } for (i = 0; i < user_names_count; ++i) { int oid[2] = { CTL_USER, i }; j = show_var(oid, 2, 0); if (!j && !bflag) { putchar('\n'); } } }
int main(void) { print_title("exp05"); print_title("Array"); { Array Ary; InitArray(&Ary, 3, 2, 3, 4); Assign(&Ary, 558, 1, 1, 2); int e; Value(&Ary, &e, 1, 1, 2); show_var("%d", e); } return 0; }
static int sysctl_all(int *oid, size_t len) { int name1[22], name2[22]; int retval; size_t i, l1, l2; name1[0] = 0; name1[1] = 2; l1 = 2; if (len) { memcpy(name1+2, oid, len * sizeof(int)); l1 += len; } else { name1[2] = 1; l1++; } for (;;) { l2 = sizeof(name2); retval = sysctl(name1, l1, name2, &l2, 0, 0); if (retval < 0) { if (errno == ENOENT) return 0; else err(1, "sysctl(getnext) %d %zu", retval, l2); } l2 /= sizeof(int); if (l2 < len) return 0; for (i = 0; i < len; i++) if (name2[i] != oid[i]) return 0; retval = show_var(name2, l2); if (retval == 0 && !bflag) putchar('\n'); memcpy(name1+2, name2, l2 * sizeof(int)); l1 = 2 + l2; } }
void show_var(is_var* node) { switch (node->type) { case t_var_id: show_id(node->data.id); break; case t_var_new_op: show_new_op(node->data.new_op); break; case t_var_array: show_var(node->data.array.var); show_dims_sized(node->data.array.dims); break; case t_var_func_call: show_func_call(node->data.func_call.call); show_dims_sized(node->data.func_call.dims); break; } }
int main(void) { clock_t start, end; double cpu_time; start = clock(); show_var("%ld", start); print_title("exp13"); { int data = 226; say_int(data); show_var("%d", data); char c = 'a'; show_var("%c", c); char str[20] = "hello world"; show_var("%s", str); printf("Program last compile at %s on %s\n", __TIME__, __DATE__); } print_title("assert()"); { assert(0); int long_time = 99999999; while (long_time--); } print_title("time.h"); { end = clock(); cpu_time = ((double)(end - start)) / CLOCKS_PER_SEC; show_var("%ld", end - start); show_var("%.3f", cpu_time); time_t cal = time(NULL); show_var("%s", ctime(&cal)); } return 0; }
/* * Parse a name into a MIB entry. * Lookup and print out the MIB entry if it exists. * Set a new value if requested. */ static void parse(const char *string) { size_t len; int i, j; void *newval = NULL; int intval; unsigned int uintval; long longval; unsigned long ulongval; size_t newsize = 0; quad_t quadval; u_quad_t uquadval; int mib[CTL_MAXNAME]; char *cp, fmt[BUFSIZ]; const char *name; char *name_allocated = NULL; u_int kind; if ((cp = strchr(string, '=')) != NULL) { if ((name_allocated = malloc(cp - string + 1)) == NULL) err(1, "malloc failed"); strlcpy(name_allocated, string, cp - string + 1); name = name_allocated; while (isspace(*++cp)) ; newval = cp; newsize = strlen(cp); } else { name = string; } len = CTL_MAXNAME; if (sysctlnametomib(name, mib, &len) < 0) { if (errno == ENOENT) { errx(1, "unknown oid '%s'", name); } else { err(1, "sysctlnametomib(\"%s\")", name); } } if (oidfmt(mib, len, fmt, &kind)) err(1, "couldn't find format of oid '%s'", name); if (newval == NULL) { if ((kind & CTLTYPE) == CTLTYPE_NODE) { sysctl_all(mib, len); } else { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } } else { if ((kind & CTLTYPE) == CTLTYPE_NODE) errx(1, "oid '%s' isn't a leaf node", name); if (!(kind&CTLFLAG_WR)) errx(1, "oid '%s' is read only", name); switch (kind & CTLTYPE) { case CTLTYPE_INT: if (!(strcmp(fmt, "IK") == 0)) { if (!set_IK(newval, &intval)) errx(1, "invalid value '%s'", (char *)newval); } else intval = (int) strtol(newval, NULL, 0); newval = &intval; newsize = sizeof(intval); break; case CTLTYPE_UINT: uintval = (int) strtoul(newval, NULL, 0); newval = &uintval; newsize = sizeof uintval; break; case CTLTYPE_LONG: longval = strtol(newval, NULL, 0); newval = &longval; newsize = sizeof longval; break; case CTLTYPE_ULONG: ulongval = strtoul(newval, NULL, 0); newval = &ulongval; newsize = sizeof ulongval; break; case CTLTYPE_STRING: break; case CTLTYPE_QUAD: quadval = strtoq(newval, NULL, 0); newval = &quadval; newsize = sizeof(quadval); break; case CTLTYPE_UQUAD: uquadval = strtouq(newval, NULL, 0); newval = &uquadval; newsize = sizeof(uquadval); break; case CTLTYPE_OPAQUE: if (strcmp(fmt, "T,dev_t") == 0 || strcmp(fmt, "T,udev_t") == 0 ) { set_T_dev_t((char*)newval, &newval, &newsize); break; } /* FALLTHROUGH */ default: errx(1, "oid '%s' is type %d," " cannot set that", name, kind & CTLTYPE); } i = show_var(mib, len); if (sysctl(mib, len, 0, 0, newval, newsize) == -1) { if (!i && !bflag) putchar('\n'); switch (errno) { case EOPNOTSUPP: errx(1, "%s: value is not available", string); case ENOTDIR: errx(1, "%s: specification is incomplete", string); case ENOMEM: errx(1, "%s: type is unknown to this program", string); default: warn("%s", string); return; } } if (!bflag) printf(" -> "); i = nflag; nflag = 1; j = show_var(mib, len); if (!j && !bflag) putchar('\n'); nflag = i; } if (name_allocated != NULL) free(name_allocated); }
/* * Parse a name into a MIB entry. * Lookup and print out the MIB entry if it exists. * Set a new value if requested. */ static int parse(const char *string, int lineno) { int len, i, j; const void *newval; char *newvalstr = NULL; void *newbuf; size_t newsize = Bflag; int mib[CTL_MAXNAME]; char *cp, *bufp, buf[BUFSIZ], fmt[BUFSIZ], line[BUFSIZ]; u_int kind; if (lineno) snprintf(line, sizeof(line), " at line %d", lineno); else line[0] = '\0'; cp = buf; if (snprintf(buf, BUFSIZ, "%s", string) >= BUFSIZ) { warnx("oid too long: '%s'%s", string, line); return (1); } bufp = strsep(&cp, "=:"); if (cp != NULL) { /* Tflag just lists tunables, do not allow assignment */ if (Tflag || Wflag) { warnx("Can't set variables when using -T or -W"); usage(); } while (isspace(*cp)) cp++; /* Strip a pair of " or ' if any. */ switch (*cp) { case '\"': case '\'': if (cp[strlen(cp) - 1] == *cp) cp[strlen(cp) - 1] = '\0'; cp++; } newvalstr = cp; newsize = strlen(cp); } /* Trim spaces */ cp = bufp + strlen(bufp) - 1; while (cp >= bufp && isspace((int)*cp)) { *cp = '\0'; cp--; } len = name2oid(bufp, mib); if (len < 0) { if (iflag) return (0); if (qflag) return (1); else { if (errno == ENOENT) { warnx("unknown oid '%s'%s", bufp, line); } else { warn("unknown oid '%s'%s", bufp, line); } return (1); } } if (oidfmt(mib, len, fmt, &kind)) { warn("couldn't find format of oid '%s'%s", bufp, line); if (iflag) return (1); else exit(1); } if (newvalstr == NULL || dflag) { if ((kind & CTLTYPE) == CTLTYPE_NODE) { if (dflag) { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } sysctl_all(mib, len); } else { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } } else { if ((kind & CTLTYPE) == CTLTYPE_NODE) { warnx("oid '%s' isn't a leaf node%s", bufp, line); return (1); } if (!(kind & CTLFLAG_WR)) { if (kind & CTLFLAG_TUN) { warnx("oid '%s' is a read only tunable%s", bufp, line); warnx("Tunable values are set in /boot/loader.conf"); } else warnx("oid '%s' is read only%s", bufp, line); return (1); } switch (kind & CTLTYPE) { case CTLTYPE_INT: case CTLTYPE_UINT: case CTLTYPE_LONG: case CTLTYPE_ULONG: case CTLTYPE_S8: case CTLTYPE_S16: case CTLTYPE_S32: case CTLTYPE_S64: case CTLTYPE_U8: case CTLTYPE_U16: case CTLTYPE_U32: case CTLTYPE_U64: if (strlen(newvalstr) == 0) { warnx("empty numeric value"); return (1); } /* FALLTHROUGH */ case CTLTYPE_STRING: break; default: warnx("oid '%s' is type %d," " cannot set that%s", bufp, kind & CTLTYPE, line); return (1); } newbuf = NULL; switch (kind & CTLTYPE) { case CTLTYPE_STRING: newval = newvalstr; break; default: newsize = 0; while ((cp = strsep(&newvalstr, " ,")) != NULL) { if (*cp == '\0') continue; if (!parse_numeric(cp, fmt, kind, &newbuf, &newsize)) { warnx("invalid %s '%s'%s", ctl_typename[kind & CTLTYPE], cp, line); free(newbuf); return (1); } } newval = newbuf; break; } i = show_var(mib, len); if (sysctl(mib, len, 0, 0, newval, newsize) == -1) { free(newbuf); if (!i && !bflag) putchar('\n'); switch (errno) { case EOPNOTSUPP: warnx("%s: value is not available%s", string, line); return (1); case ENOTDIR: warnx("%s: specification is incomplete%s", string, line); return (1); case ENOMEM: warnx("%s: type is unknown to this program%s", string, line); return (1); default: warn("%s%s", string, line); return (1); } } free(newbuf); if (!bflag) printf(" -> "); i = nflag; nflag = 1; j = show_var(mib, len); if (!j && !bflag) putchar('\n'); nflag = i; } return (0); }
/* * Parse a name into a MIB entry. * Lookup and print out the MIB entry if it exists. * Set a new value if requested. */ static void parse(char *string) { int len, i, j; void *newval = 0; int intval; unsigned int uintval; long longval; unsigned long ulongval; size_t newsize = 0; int64_t i64val; uint64_t u64val; int mib[CTL_MAXNAME]; char *cp, *bufp, buf[BUFSIZ], *endptr, fmt[BUFSIZ]; u_int kind; bufp = buf; if (snprintf(buf, BUFSIZ, "%s", string) >= BUFSIZ) errx(1, "oid too long: '%s'", string); if ((cp = strchr(string, '=')) != NULL) { *strchr(buf, '=') = '\0'; *cp++ = '\0'; while (isspace(*cp)) cp++; newval = cp; newsize = strlen(cp); } len = name2oid(bufp, mib); if (len < 0) { if (iflag) return; if (qflag) exit(1); else errx(1, "unknown oid '%s'", bufp); } if (oidfmt(mib, len, fmt, &kind)) err(1, "couldn't find format of oid '%s'", bufp); if (newval == NULL) { if ((kind & CTLTYPE) == CTLTYPE_NODE) { if (dflag) { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } sysctl_all(mib, len); } else { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } } else { if ((kind & CTLTYPE) == CTLTYPE_NODE) errx(1, "oid '%s' isn't a leaf node", bufp); if (!(kind & CTLFLAG_WR)) { if (kind & CTLFLAG_TUN) { warnx("oid '%s' is a read only tunable", bufp); errx(1, "Tunable values are set in /boot/loader.conf"); } else { errx(1, "oid '%s' is read only", bufp); } } if ((kind & CTLTYPE) == CTLTYPE_INT || (kind & CTLTYPE) == CTLTYPE_UINT || (kind & CTLTYPE) == CTLTYPE_LONG || (kind & CTLTYPE) == CTLTYPE_ULONG || (kind & CTLTYPE) == CTLTYPE_S64 || (kind & CTLTYPE) == CTLTYPE_U64) { if (strlen(newval) == 0) errx(1, "empty numeric value"); } switch (kind & CTLTYPE) { case CTLTYPE_INT: if (strcmp(fmt, "IK") == 0) { if (!set_IK(newval, &intval)) errx(1, "invalid value '%s'", (char *)newval); } else { intval = (int)strtol(newval, &endptr, 0); if (endptr == newval || *endptr != '\0') errx(1, "invalid integer '%s'", (char *)newval); } newval = &intval; newsize = sizeof(intval); break; case CTLTYPE_UINT: uintval = (int) strtoul(newval, &endptr, 0); if (endptr == newval || *endptr != '\0') errx(1, "invalid unsigned integer '%s'", (char *)newval); newval = &uintval; newsize = sizeof(uintval); break; case CTLTYPE_LONG: longval = strtol(newval, &endptr, 0); if (endptr == newval || *endptr != '\0') errx(1, "invalid long integer '%s'", (char *)newval); newval = &longval; newsize = sizeof(longval); break; case CTLTYPE_ULONG: ulongval = strtoul(newval, &endptr, 0); if (endptr == newval || *endptr != '\0') errx(1, "invalid unsigned long integer" " '%s'", (char *)newval); newval = &ulongval; newsize = sizeof(ulongval); break; case CTLTYPE_STRING: break; case CTLTYPE_S64: i64val = strtoimax(newval, &endptr, 0); if (endptr == newval || *endptr != '\0') errx(1, "invalid int64_t '%s'", (char *)newval); newval = &i64val; newsize = sizeof(i64val); break; case CTLTYPE_U64: u64val = strtoumax(newval, &endptr, 0); if (endptr == newval || *endptr != '\0') errx(1, "invalid uint64_t '%s'", (char *)newval); newval = &u64val; newsize = sizeof(u64val); break; case CTLTYPE_OPAQUE: /* FALLTHROUGH */ default: errx(1, "oid '%s' is type %d," " cannot set that", bufp, kind & CTLTYPE); } i = show_var(mib, len); if (sysctl(mib, len, 0, 0, newval, newsize) == -1) { if (!i && !bflag) putchar('\n'); switch (errno) { case EOPNOTSUPP: errx(1, "%s: value is not available", string); case ENOTDIR: errx(1, "%s: specification is incomplete", string); case ENOMEM: errx(1, "%s: type is unknown to this program", string); default: warn("%s", string); warncount++; return; } } if (!bflag) printf(" -> "); i = nflag; nflag = 1; j = show_var(mib, len); if (!j && !bflag) putchar('\n'); nflag = i; } }
/* * Parse a name into a MIB entry. * Lookup and print out the MIB entry if it exists. * Set a new value if requested. */ static int parse(const char *string, int lineno) { int len, i, j; const void *newval; const char *newvalstr = NULL; int intval; unsigned int uintval; long longval; unsigned long ulongval; size_t newsize = 0; int64_t i64val; uint64_t u64val; int mib[CTL_MAXNAME]; char *cp, *bufp, buf[BUFSIZ], *endptr = NULL, fmt[BUFSIZ], line[BUFSIZ]; u_int kind; if (lineno) snprintf(line, sizeof(line), " at line %d", lineno); else line[0] = '\0'; cp = buf; if (snprintf(buf, BUFSIZ, "%s", string) >= BUFSIZ) { warnx("oid too long: '%s'%s", string, line); return (1); } bufp = strsep(&cp, "=:"); if (cp != NULL) { /* Tflag just lists tunables, do not allow assignment */ if (Tflag || Wflag) { warnx("Can't set variables when using -T or -W"); usage(); } while (isspace(*cp)) cp++; /* Strip a pair of " or ' if any. */ switch (*cp) { case '\"': case '\'': if (cp[strlen(cp) - 1] == *cp) cp[strlen(cp) - 1] = '\0'; cp++; } newvalstr = cp; newsize = strlen(cp); } len = name2oid(bufp, mib); if (len < 0) { if (iflag) return (0); if (qflag) return (1); else { warn("unknown oid '%s'%s", bufp, line); return (1); } } if (oidfmt(mib, len, fmt, &kind)) { warn("couldn't find format of oid '%s'%s", bufp, line); if (iflag) return (1); else exit(1); } if (newvalstr == NULL || dflag) { if ((kind & CTLTYPE) == CTLTYPE_NODE) { if (dflag) { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } sysctl_all(mib, len); } else { i = show_var(mib, len); if (!i && !bflag) putchar('\n'); } } else { if ((kind & CTLTYPE) == CTLTYPE_NODE) { warnx("oid '%s' isn't a leaf node%s", bufp, line); return (1); } if (!(kind & CTLFLAG_WR)) { if (kind & CTLFLAG_TUN) { warnx("oid '%s' is a read only tunable%s", bufp, line); warnx("Tunable values are set in /boot/loader.conf"); } else warnx("oid '%s' is read only%s", bufp, line); return (1); } switch (kind & CTLTYPE) { case CTLTYPE_INT: case CTLTYPE_UINT: case CTLTYPE_LONG: case CTLTYPE_ULONG: case CTLTYPE_S64: case CTLTYPE_U64: if (strlen(newvalstr) == 0) { warnx("empty numeric value"); return (1); } /* FALLTHROUGH */ case CTLTYPE_STRING: break; default: warnx("oid '%s' is type %d," " cannot set that%s", bufp, kind & CTLTYPE, line); return (1); } errno = 0; switch (kind & CTLTYPE) { case CTLTYPE_INT: if (strcmp(fmt, "IK") == 0) intval = strIKtoi(newvalstr, &endptr); else intval = (int)strtol(newvalstr, &endptr, 0); newval = &intval; newsize = sizeof(intval); break; case CTLTYPE_UINT: uintval = (int) strtoul(newvalstr, &endptr, 0); newval = &uintval; newsize = sizeof(uintval); break; case CTLTYPE_LONG: longval = strtol(newvalstr, &endptr, 0); newval = &longval; newsize = sizeof(longval); break; case CTLTYPE_ULONG: ulongval = strtoul(newvalstr, &endptr, 0); newval = &ulongval; newsize = sizeof(ulongval); break; case CTLTYPE_STRING: newval = newvalstr; break; case CTLTYPE_S64: i64val = strtoimax(newvalstr, &endptr, 0); newval = &i64val; newsize = sizeof(i64val); break; case CTLTYPE_U64: u64val = strtoumax(newvalstr, &endptr, 0); newval = &u64val; newsize = sizeof(u64val); break; default: /* NOTREACHED */ abort(); } if (errno != 0 || endptr == newvalstr || (endptr != NULL && *endptr != '\0')) { warnx("invalid %s '%s'%s", ctl_typename[kind & CTLTYPE], newvalstr, line); return (1); } i = show_var(mib, len); if (sysctl(mib, len, 0, 0, newval, newsize) == -1) { if (!i && !bflag) putchar('\n'); switch (errno) { case EOPNOTSUPP: warnx("%s: value is not available%s", string, line); return (1); case ENOTDIR: warnx("%s: specification is incomplete%s", string, line); return (1); case ENOMEM: warnx("%s: type is unknown to this program%s", string, line); return (1); default: warn("%s%s", string, line); return (1); } } if (!bflag) printf(" -> "); i = nflag; nflag = 1; j = show_var(mib, len); if (!j && !bflag) putchar('\n'); nflag = i; } return (0); }
/** * Execute the getbb command which gets the blackboard variables * * @param nerr * Error Return Flag * - 0 on Success * * @date 890104: Changed from terminal output to message subsystem. * @date 880901: Added TO, NAMES, and NEWLINE options. * @date 870917: Added ALL option. * @date 870514: Original version. * */ void xgetbb(int *nerr) { char kbbvalue[MCMSG+1]; int ic1, ic2, nc, ncbb ; var *v; char *name; *nerr = 0; memset(kmexm.knmbbwrite,0, sizeof(kmexm.knmbbwrite)); memset(kbbvalue, 0, sizeof(kbbvalue)); while ( lcmore( nerr ) ){ /* -- "ALL": report all of the currently defined blackboard variables. */ if( lckey( "ALL#$",6 ) ){ cmexm.lbball = TRUE; } /* -- "TO TERMINAL|filename": define where the output is to be sent. */ else if( lckey( "TO#$",5 ) ){ if( lckey( "TERM#INAL$",11 ) ){ cmexm.nunbbwrite = MUNOUT; } else if( lcchar( MCPFN, kmexm.knmbbwrite,MCPFN+1, &nc ) ){ cmexm.nunbbwrite = (FILE *)NULL; if( *nerr != 0 ) goto L_8888; } else{ cfmt( "ILLEGAL OPTION:",17 ); cresp(); } } /* -- "NAMES ON|OFF": option to include the bb variable name with the value. */ else if( lklog( "NAMES#$",8, &cmexm.lnames ) ) { } /* -- "NEWLINE ON|OFF": option to append newline after each bb variable value. */ else if( lklog( "NEWLINE#$",10, &cmexm.lnewline ) ) { } /* -- The rest of the tokens should be names of a blackboard variables. * First unset ALL flag and initialize list of bb variables. * Then set up an inner parsing loop to collect all of the * variable names. */ else{ cmexm.lbball = FALSE; memset ( kmexm.kbbcl , ' ' , MCMSG ); if(!lccl(kmexm.kbbcl, MCMSG+1, &ncbb)) { cfmt( "ILLEGAL OPTION:",17 ); cresp(); } } } /* end while */ /* - The above loop is over when one of two conditions has been met: * (1) An error in parsing has occurred. In this case NERR is > 0 . * (2) All the tokens in the command have been successfully parsed. */ if( *nerr != 0 ) goto L_8888; /* EXECUTION PHASE: */ /* - Open disk file if necessary. */ if( cmexm.nunbbwrite != MUNOUT ){ znfiles( &cmexm.nunbbwrite, kmexm.knmbbwrite,MCPFN+1, "TEXT",5, nerr ); if( *nerr != 0 ) goto L_8888; if ( fseek ( cmexm.nunbbwrite , 0L , SEEK_END ) != 0 ) fprintf ( stdout , "fseek returned error-xgetbb\n" ) ; } /* - Sequentially access blackboard if ALL was requested. */ setmsg( "OUTPUT", 99 ); if( cmexm.lbball ){ int i = 0; char **keys = sac_vars_keys(kmbbs.knmbbs); while(keys && keys[i]) { i++; } if(i > 0) { qsort(keys, i, sizeof(char*), string_cmp); i = 0; while ( keys && keys[i] ){ if(!(v = sac_vars_get_var(kmbbs.knmbbs, keys[i]))) { error(ERROR_FINDING_VARIABLE, "%s", keys[i]); outmsg(); clrmsg(); i++; continue; } show_var(v, keys[i], cmexm.nunbbwrite); i++; } if( !cmexm.lnewline ) { newline( cmexm.nunbbwrite ); } i = 0; while(keys && keys[i]) { FREE(keys[i]); i++; } FREE(keys); } } /* - Otherwise, get value for each item in request list. */ else { ic1 = 0; while ( lnxtcl( kmexm.kbbcl,MCMSG+1, &ic1, &ic2 ) ){ name = strcut(kmexm.kbbcl, ic1, ic2); if(!(v = getbb(name))) { error(ERROR_FINDING_VARIABLE, "%s", name); outmsg(); clrmsg(); continue; } show_var(v, name, cmexm.nunbbwrite); free(name); } if( !cmexm.lnewline ) { newline( cmexm.nunbbwrite ); } } clrmsg(); if( cmexm.nunbbwrite != MUNOUT ){ zcloses( &cmexm.nunbbwrite, nerr ); if( *nerr != 0 ) goto L_8888; } L_8888: return; } /* end of function */