Commit | Line | Data |
---|---|---|
984263bc MD |
1 | /* |
2 | * Mach Operating System | |
3 | * Copyright (c) 1991,1990 Carnegie Mellon University | |
4 | * All Rights Reserved. | |
5 | * | |
6 | * Permission to use, copy, modify and distribute this software and its | |
7 | * documentation is hereby granted, provided that both the copyright | |
8 | * notice and this permission notice appear in all copies of the | |
9 | * software, derivative works or modified versions, and any portions | |
10 | * thereof, and that both notices appear in supporting documentation. | |
11 | * | |
12 | * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS | |
13 | * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR | |
14 | * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. | |
15 | * | |
16 | * Carnegie Mellon requests users of this software to return to | |
17 | * | |
18 | * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU | |
19 | * School of Computer Science | |
20 | * Carnegie Mellon University | |
21 | * Pittsburgh PA 15213-3890 | |
22 | * | |
23 | * any improvements or extensions that they make and grant Carnegie the | |
24 | * rights to redistribute these changes. | |
25 | * | |
26 | * $FreeBSD: src/sys/ddb/db_write_cmd.c,v 1.13 1999/08/28 00:41:12 peter Exp $ | |
27 | */ | |
28 | ||
29 | /* | |
30 | * Author: David B. Golub, Carnegie Mellon University | |
31 | * Date: 7/90 | |
32 | */ | |
33 | ||
34 | #include <sys/param.h> | |
35 | ||
36 | #include <ddb/ddb.h> | |
37 | #include <ddb/db_access.h> | |
38 | #include <ddb/db_command.h> | |
8d0b962d | 39 | #include <ddb/db_lex.h> |
984263bc MD |
40 | #include <ddb/db_sym.h> |
41 | ||
42 | /* | |
43 | * Write to file. | |
44 | */ | |
45 | /*ARGSUSED*/ | |
46 | void | |
2c9702b2 SW |
47 | db_write_cmd(db_expr_t address, boolean_t have_addr, db_expr_t count, |
48 | char *modif) | |
984263bc | 49 | { |
984263bc | 50 | db_addr_t addr; |
984263bc MD |
51 | db_expr_t old_value; |
52 | db_expr_t new_value; | |
ad0290bd | 53 | int size; |
984263bc MD |
54 | boolean_t wrote_one = FALSE; |
55 | ||
56 | addr = (db_addr_t) address; | |
57 | ||
58 | switch (modif[0]) { | |
59 | case 'b': | |
60 | size = 1; | |
61 | break; | |
62 | case 'h': | |
63 | size = 2; | |
64 | break; | |
65 | case 'l': | |
66 | case '\0': | |
67 | size = 4; | |
68 | break; | |
69 | default: | |
70 | db_error("Unknown size\n"); | |
71 | return; | |
72 | } | |
73 | ||
74 | while (db_expression(&new_value)) { | |
75 | old_value = db_get_value(addr, size, FALSE); | |
76 | db_printsym(addr, DB_STGY_ANY); | |
8d0b962d | 77 | db_printf("\t\t%s = ", db_num_to_str(old_value)); |
78 | db_printf("%s\n", db_num_to_str(new_value)); | |
984263bc MD |
79 | db_put_value(addr, size, new_value); |
80 | addr += size; | |
81 | ||
82 | wrote_one = TRUE; | |
83 | } | |
84 | ||
85 | if (!wrote_one) | |
86 | db_error("Nothing written.\n"); | |
87 | ||
88 | db_next = addr; | |
89 | db_prev = addr - size; | |
90 | ||
91 | db_skip_to_eol(); | |
92 | } | |
93 |