X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fmonitor.c;h=8ad69cef13b8fb30e59a46e466b659c1a00469fb;hp=ec2464546839fcc6ff1ad16dddf0be605ec2a6f4;hb=HEAD;hpb=fc19bbf28ea2fdd9e42bc0c93ca49651aef8a752 diff --git a/src/monitor.c b/src/monitor.c index ec24645..8ad69ce 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -24,7 +24,7 @@ unsigned adrhash(WORD adr) bool getbps(WORD adr) { - BPSLIST *p; + BPSLIST *p = NULL; for(p = bps[adrhash(adr)]; p != NULL; p = p->next) { if(p->adr == adr) { @@ -36,8 +36,8 @@ bool getbps(WORD adr) bool addbps(WORD adr) { - BPSLIST *p; - unsigned h; + BPSLIST *p = NULL; + unsigned h = 0; /* 登録されたラベルを検索。すでに登録されている場合は終了 */ if(getbps(adr) == true) { @@ -56,8 +56,9 @@ bool addbps(WORD adr) bool delbps(WORD adr) { - BPSLIST *p, *q; - unsigned h; + BPSLIST *p = NULL; + BPSLIST *q = NULL; + unsigned h = 0; bool res = false; p = bps[h = adrhash(adr)]; @@ -87,11 +88,11 @@ bool delbps(WORD adr) void listbps() { - int i, cnt = 0; - BPSLIST *p; + int cnt = 0; + BPSLIST *p = NULL; fprintf(stdout, "List of breakpoints\n"); - for(i = 0; i < BPSTABSIZE; i++) { + for(int i = 0; i < BPSTABSIZE; i++) { for(p = bps[i]; p != NULL; p = p->next) { fprintf(stdout, "#%04X\n", p->adr); cnt++; @@ -104,7 +105,8 @@ void listbps() void freebpslist(BPSLIST *head) { - BPSLIST *p, *q; + BPSLIST *p = NULL; + BPSLIST *q = NULL; for(p = head; p != NULL; p = q) { q = p->next; FREE(p); @@ -113,8 +115,7 @@ void freebpslist(BPSLIST *head) void freebps() { - int i; - for(i = 0; i < BPSTABSIZE; i++) { + for(int i = 0; i < BPSTABSIZE; i++) { freebpslist(bps[i]); bps[i] = NULL; } @@ -123,8 +124,9 @@ void freebps() MONARGS *monargstok(const char *str) { MONARGS *args = malloc_chk(sizeof(MONARGS), "args"); - char *tok, *p, sepc = ' '; - int i = 0; + char *tok = NULL; + char *p = NULL; + char sepc = ' '; args->argc = 0; if(!str || !str[0]) { @@ -132,11 +134,10 @@ MONARGS *monargstok(const char *str) } tok = p = strdup_chk(str, "argstok.p"); do { - i = strcspn(p, " "); + int i = strcspn(p, " "); sepc = p[i]; args->argv[(args->argc)++] = strndup_chk(p, i, "args->argv[]"); p += i + 1; - i = 0; } while(sepc == ' '); FREE(tok); return args; @@ -144,25 +145,31 @@ MONARGS *monargstok(const char *str) MONCMDLINE *monlinetok(const char *line) { - char *tokens, *p; - long l; + char *tokens = NULL; + char *p = NULL; + int i = 0; MONCMDLINE *moncmdl = NULL; if(!line[0] || line[0] == '\n') { return NULL; } p = tokens = strdup_chk(line, "tokens"); + /* コメントを削除 */ + strip_casl2_comment(p); + /* 文字列末尾の改行と空白を削除 */ + strip_end(p); + moncmdl = malloc_chk(sizeof(MONCMDLINE), "moncmdl"); /* コマンドの取得 */ - moncmdl->cmd = malloc_chk((l = strcspn(p, " \t\n")) + 1, "moncmdl.cmd"); - strncpy(moncmdl->cmd, p, l); + i = strcspn(p, " \t\n"); + moncmdl->cmd = strndup_chk(p, i, "moncmdl->cmd"); /* コマンドと引数の間の空白をスキップ */ - p += l; + p += i; while(*p == ' ' || *p == '\t') { p++; } /* 引数として、改行までの文字列を取得 */ - if((l = strcspn(p, "\n")) > 0) { + if(strcspn(p, "\n") > 0) { moncmdl->args = monargstok(p); } else { moncmdl->args = malloc_chk(sizeof(MONARGS), "moncmdl.args"); @@ -365,35 +372,42 @@ void free_moncmdline(MONCMDLINE *moncmdl) } } +int monquit() +{ + int stat = 0; + shutdown(); + freebps(); + free_cmdtable(HASH_CMDTYPE); + free_cmdtable(HASH_CODE); + if(cerr->num > 0) { + stat = 1; + } + freecerr(); + return stat; +} + void monitor() { char *buf = NULL; - int i; - MONCMDLINE *moncmdl; + MONCMDLINE *moncmdl = NULL; MONCMDTYPE cmdtype = MONREPEAT; do { fprintf(stdout, "%s ", monitor_prompt); buf = malloc_chk(MONINSIZE + 1, "monitor.buf"); fgets(buf, MONINSIZE, stdin); - fprintf(stdout, "%s", buf); if(!buf[0]) { cmdtype = MONQUIT; } - if((i = strcspn(buf, "\n")) > 0 || buf[0] == '\n') { - buf[i] = '\0'; - } + strip_end(buf); /* 文字列末尾の改行と空白を削除 */ + fprintf(stdout, "%s\n", buf); if((moncmdl = monlinetok(buf)) != NULL) { cmdtype = monitorcmd(moncmdl->cmd, moncmdl->args); free_moncmdline(moncmdl); } FREE(buf); if(cmdtype == MONQUIT) { - shutdown(); - freebps(); - free_cmdtable(HASH_CODE); - freecerr(); - exit(0); + exit(monquit()); } } while(cmdtype == MONREPEAT); }