123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #include <sys/param.h>
- #include <sys/systm.h>
- #include <machine/db_machdep.h>
- #include <ddb/db_lex.h>
- #include <ddb/db_variables.h>
- #include <ddb/db_command.h>
- #include <ddb/db_sym.h>
- #include <ddb/db_extern.h>
- #include <ddb/db_var.h>
- struct db_variable db_vars[] = {
- { "radix", (long *)&db_radix, db_var_rw_int },
- { "maxoff", (long *)&db_maxoff, db_var_rw_int },
- { "maxwidth", (long *)&db_max_width, db_var_rw_int },
- { "tabstops", (long *)&db_tab_stop_width, db_var_rw_int },
- { "lines", (long *)&db_max_line, db_var_rw_int },
- { "log", (long *)&db_log, db_var_rw_int }
- };
- struct db_variable *db_evars = db_vars + nitems(db_vars);
- int
- db_find_variable(struct db_variable **varp)
- {
- int t;
- struct db_variable *vp;
- t = db_read_token();
- if (t == tIDENT) {
- for (vp = db_vars; vp < db_evars; vp++) {
- if (!strcmp(db_tok_string, vp->name)) {
- *varp = vp;
- return (1);
- }
- }
- for (vp = db_regs; vp < db_eregs; vp++) {
- if (!strcmp(db_tok_string, vp->name)) {
- *varp = vp;
- return (1);
- }
- }
- }
- db_error("Unknown variable\n");
-
- return 0;
- }
- int
- db_get_variable(db_expr_t *valuep)
- {
- struct db_variable *vp;
- if (!db_find_variable(&vp))
- return (0);
- db_read_variable(vp, valuep);
- return (1);
- }
- int
- db_set_variable(db_expr_t value)
- {
- struct db_variable *vp;
- if (!db_find_variable(&vp))
- return (0);
- db_write_variable(vp, &value);
- return (1);
- }
- void
- db_read_variable(struct db_variable *vp, db_expr_t *valuep)
- {
- int (*func)(struct db_variable *, db_expr_t *, int) = vp->fcn;
- if (func == FCN_NULL)
- *valuep = *(vp->valuep);
- else
- (*func)(vp, valuep, DB_VAR_GET);
- }
- void
- db_write_variable(struct db_variable *vp, db_expr_t *valuep)
- {
- int (*func)(struct db_variable *, db_expr_t *, int) = vp->fcn;
- if (func == FCN_NULL)
- *(vp->valuep) = *valuep;
- else
- (*func)(vp, valuep, DB_VAR_SET);
- }
- void
- db_set_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif)
- {
- db_expr_t value;
- struct db_variable *vp;
- int t;
- t = db_read_token();
- if (t != tDOLLAR) {
- db_error("Unknown variable\n");
-
- }
- if (!db_find_variable(&vp)) {
- db_error("Unknown variable\n");
-
- }
- t = db_read_token();
- if (t != tEQ)
- db_unread_token(t);
- if (!db_expression(&value)) {
- db_error("No value\n");
-
- }
- if (db_read_token() != tEOL) {
- db_error("?\n");
-
- }
- db_write_variable(vp, &value);
- }
- int
- db_var_rw_int(struct db_variable *var, db_expr_t *expr, int mode)
- {
- if (mode == DB_VAR_SET)
- *var->valuep = *(int *)expr;
- else
- *expr = *(int *)var->valuep;
- return (0);
- }
|