diff --git a/src/fileio.c b/src/fileio.c index 75facd55..0dcf95d5 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -130,7 +130,36 @@ char *fileio_fmtstr(FILEFMT format) { return "octal byte list"; default: return "invalid format"; - }; + } +} + +int fileio_fmtchr(FILEFMT format) { + switch (format) { + case FMT_AUTO: + return 'a'; + case FMT_SREC: + return 's'; + case FMT_IHEX: + return 'i'; + case FMT_IHXC: + return 'I'; + case FMT_RBIN: + return 'r'; + case FMT_ELF: + return 'e'; + case FMT_IMM: + return 'm'; + case FMT_BIN: + return 'b'; + case FMT_DEC: + return 'd'; + case FMT_HEX: + return 'h'; + case FMT_OCT: + return 'o'; + default: + return '?'; + } } diff --git a/src/libavrdude.h b/src/libavrdude.h index 74398df8..44ae0f7c 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -1020,6 +1020,8 @@ FILEFMT fileio_format(char c); char *fileio_fmtstr(FILEFMT format); +int fileio_fmtchr(FILEFMT format); + FILE *fileio_fopenr(const char *fname); int fileio_fmt_autodetect_fp(FILE *f); @@ -1078,6 +1080,7 @@ UPDATE *dup_update(const UPDATE *upd); UPDATE *new_update(int op, const char *memstr, int filefmt, const char *fname); UPDATE *cmd_update(const char *cmd); extern void free_update(UPDATE *upd); +char *update_str(const UPDATE *upd); int do_op(const PROGRAMMER *pgm, const AVRPART *p, const UPDATE *upd, enum updateflags flags); int memstats(const AVRPART *p, const char *memtype, int size, Filestats *fsp); diff --git a/src/update.c b/src/update.c index c2c6c8de..bd16aa48 100644 --- a/src/update.c +++ b/src/update.c @@ -145,6 +145,15 @@ void free_update(UPDATE * u) } } +char *update_str(const UPDATE *upd) { + if(upd->cmdline) + return str_sprintf("-T %s", upd->cmdline); + return str_sprintf("-U %s:%c:%s:%c", + upd->memtype, + upd->op == DEVICE_READ? 'r': upd->op == DEVICE_WRITE? 'w': 'v', + upd->filename, + fileio_fmtchr(upd->format)); +} // Memory statistics considering holes after a file read returned size bytes int memstats(const AVRPART *p, const char *memtype, int size, Filestats *fsp) { @@ -361,6 +370,13 @@ int do_op(const PROGRAMMER *pgm, const AVRPART *p, const UPDATE *upd, enum updat int rc; Filestats fs, fs_patched; + if(!upd->cmdline || !str_eq(upd->cmdline, "abort # Reset cache")) { + char *tofree; + msg_info("\v\n"); + pmsg_info("processing %s\n", tofree = update_str(upd)); + free(tofree); + } + if(upd->cmdline) return terminal_line(pgm, p, upd->cmdline);