/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ /* * $Id: db_write_cmd.c,v 1.2 1993/05/20 03:39:40 cgd Exp $ * * HISTORY * $Log: db_write_cmd.c,v $ * Revision 1.2 1993/05/20 03:39:40 cgd * add explicit rcs id * * Revision 1.1.1.1 1993/03/21 09:46:27 cgd * initial import of 386bsd-0.1 sources * * Revision 1.1 1992/03/25 21:45:42 pace * Initial revision * * Revision 2.4 91/02/05 17:07:35 mrt * Changed to new Mach copyright * [91/01/31 16:20:19 mrt] * * Revision 2.3 90/10/25 14:44:26 rwd * Changed db_write_cmd to print unsigned. * [90/10/19 rpd] * * Revision 2.2 90/08/27 21:53:54 dbg * Set db_prev and db_next instead of explicitly advancing dot. * [90/08/22 dbg] * Reflected changes in db_printsym()'s calling seq. * [90/08/20 af] * Warn user if nothing was written. * [90/08/07 dbg] * Created. * [90/07/25 dbg] * */ /* * Author: David B. Golub, Carnegie Mellon University * Date: 7/90 */ #include "param.h" #include "proc.h" #include #include #include #include #include /* * Write to file. */ /*ARGSUSED*/ void db_write_cmd(address, have_addr, count, modif) db_expr_t address; boolean_t have_addr; db_expr_t count; char * modif; { register db_addr_t addr; register db_expr_t old_value; db_expr_t new_value; register int size; boolean_t wrote_one = FALSE; addr = (db_addr_t) address; switch (modif[0]) { case 'b': size = 1; break; case 'h': size = 2; break; case 'l': case '\0': size = 4; break; default: db_error("Unknown size\n"); return; } while (db_expression(&new_value)) { old_value = db_get_value(addr, size, FALSE); db_printsym(addr, DB_STGY_ANY); db_printf("\t\t%#8n\t=\t%#8n\n", old_value, new_value); db_put_value(addr, size, new_value); addr += size; wrote_one = TRUE; } if (!wrote_one) db_error("Nothing written.\n"); db_next = addr; db_prev = addr - size; db_skip_to_eol(); }