From 709c6fba8ecbb9ca87bb86b5b64f4bc11f574a61 Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 20:41:40 +0100 Subject: [PATCH 01/12] Remove warnings from test_cmd2.h. In the process, improve simpleio's print so it doesn't have to compute the string length. --- src/cli/test_cmd2.c | 47 +++++++++++++++++++++++++++++---------------- src/simpleio.c | 12 +++++++----- src/simpleio.h | 4 ++-- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/cli/test_cmd2.c b/src/cli/test_cmd2.c index 81aaa86..2722879 100644 --- a/src/cli/test_cmd2.c +++ b/src/cli/test_cmd2.c @@ -4,6 +4,7 @@ #include #include +#include #include "cli.h" #include "cli/test_cmds.h" @@ -16,6 +17,8 @@ #include "dev/uart.h" #include "fatfs/ff.h" #include "interrupt.h" +#include "log.h" +#include "dev/ps2.h" #include "rtc_reg.h" #include "simpleio.h" #include "syscalls.h" @@ -76,6 +79,8 @@ short cli_test_bitmap(short channel, int argc, char * argv[]) { for (i = 0; i< 640 * 480; i++) { VRAM_Bank0[i] = i & 0xff; } + + return 0; } short cli_test_uart(short channel, int argc, char * argv[]) { @@ -89,7 +94,7 @@ short cli_test_uart(short channel, int argc, char * argv[]) { sprintf(buffer, "COM1: 115200, no parity, 1 stop bit, 8 data bits\nPress ESC to finish (%d).\n", UART_115200); sys_chan_write(0, buffer, strlen(buffer)); - while (1) { + for (;;) { c = kbd_getc(); if (c != 0) { if (c == 0x1b) { @@ -101,6 +106,8 @@ short cli_test_uart(short channel, int argc, char * argv[]) { sys_chan_write_b(channel, c); } } + + return 0; } short cli_test_panic(short channel, int argc, char * argv[]) { @@ -123,19 +130,21 @@ short cli_test_rtc(short channel, int argc, char * argv[]) { ticks = sys_time_jiffies(); - sprintf(buffer, "Waiting for updated ticks starting from %d\n", ticks); + sprintf(buffer, "Waiting for updated ticks starting from %ld\n", ticks); sys_chan_write(channel, buffer, strlen(buffer)); - while (1) { + for (;;) { if (ticks < sys_time_jiffies()) { /* We got the periodic interrupt */ - sprintf(buffer, "Tick! %d\n", ticks); + sprintf(buffer, "Tick! %ld\n", ticks); sys_chan_write(channel, buffer, strlen(buffer)); ticks = sys_time_jiffies(); } } + + return 0; } /* @@ -158,27 +167,27 @@ short cli_mem_test(short channel, int argc, char * argv[]) { for (i = mem_start; i < mem_end; i++) { memory[i] = 0x55; if (memory[i] != 0x55) { - sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0x55... read %02X at %08X\n\n", memory[i], i); + sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0x55... read %02X at %p\n\n", memory[i], (void*)i); sys_chan_write(channel, message, strlen(message)); - return -1; + return ERR_GENERAL; } memory[i] = 0xAA; if (memory[i] != 0xAA) { - sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0xAA... read %02X at %08X\n\n", memory[i], i); + sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0xAA... read %02X at %p\n\n", memory[i], (void*)i); sys_chan_write(channel, message, strlen(message)); - return -1; + return ERR_GENERAL; } memory[i] = 0x00; if (memory[i] != 0x00) { - sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0x00... read %02X at %08\n\nX", memory[i], i); + sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0x00... read %02X at %p\n\nX", memory[i], (void*)i); sys_chan_write(channel, message, strlen(message)); - return -1; + return ERR_GENERAL; } if ((i % 1024) == 0) { - sprintf(message, "\x1B[H\x1B[0KMemory tested: %08X", i); + sprintf(message, "\x1B[H\x1B[0KMemory tested: %p", (void*)i); sys_chan_write(channel, message, strlen(message)); } } @@ -198,7 +207,7 @@ short cli_test_ide(short screen, int argc, char * argv[]) { short scancode; short n = 0; - while (1) { + for (;;) { n = bdev_read(BDEV_HDC, 0, buffer, 512); if (n <= 0) { err_print(screen, "Unable to read MBR", n); @@ -214,6 +223,8 @@ short cli_test_ide(short screen, int argc, char * argv[]) { break; } } + + return 0; } /* @@ -236,12 +247,12 @@ short cli_test_create(short screen, int argc, char * argv[]) { } else { err_print(screen, "Unable to open to file", channel); - return -1; + return ERR_GENERAL; } } else { print(screen, "USAGE: TEST CREATE \n"); - return -1; + return ERR_GENERAL; } } @@ -374,7 +385,7 @@ short cmd_test(short screen, int argc, char * argv[]) { feature_upcase[i] = toupper(feature_upcase[i]); } - for (f = cli_test_features; f->name != 0; f++) { + for (f = (p_cli_test_feature)cli_test_features; f->name != 0; f++) { if (strcmp(f->name, feature_upcase) == 0) { f->handler(screen, argc - 1, &argv[1]); return 0; @@ -382,9 +393,11 @@ short cmd_test(short screen, int argc, char * argv[]) { } test_help(screen); - return -1; + return ERR_GENERAL; } else { test_help(screen); - return -1; + return ERR_GENERAL; } + + return 0; } diff --git a/src/simpleio.c b/src/simpleio.c index 147b949..df78bfa 100644 --- a/src/simpleio.c +++ b/src/simpleio.c @@ -25,10 +25,12 @@ void print_c(short channel, char c) { * channel = the number of the channel * message = the ASCII-Z string to print */ -void print(short channel, char * message) { - int i; - for (i = 0; i < strlen(message); i++) { - print_c(channel, message[i]); +void print(short channel, const char * message) { + char *p = (char*)message; + char c; + + while ((c = *p++)) { + print_c(channel, c); } // sys_chan_write(channel, message, strlen(message)); } @@ -158,7 +160,7 @@ unsigned char i_to_bcd(unsigned short n) { * size = the number of bytes to print * labels = 0: none, 1: offset, 2: address */ -void dump_buffer(short channel, unsigned char * buffer, short size, short labels) { +void dump_buffer(short channel, const unsigned char * buffer, short size, short labels) { short i, j, ascii_idx; char ascii_buffer[17]; unsigned char c; diff --git a/src/simpleio.h b/src/simpleio.h index a4dfc3e..22a753a 100644 --- a/src/simpleio.h +++ b/src/simpleio.h @@ -12,7 +12,7 @@ * channel = the number of the channel * message = the ASCII-Z string to print */ -extern void print(short channel, char * message); +extern void print(short channel, const char * message); /* * Print a character to a channel @@ -81,6 +81,6 @@ extern unsigned char i_to_bcd(unsigned short n); * size = the number of bytes to print * labels = 0: none, 1: offset, 2: address */ -extern void dump_buffer(short channel, unsigned char * buffer, short size, short labels); +extern void dump_buffer(short channel, const unsigned char * buffer, short size, short labels); #endif From 54fd4fa440de370e2a67530973815bd0c9e16936 Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 21:35:20 +0100 Subject: [PATCH 02/12] Address warnings in settings.c. Made sys_chan_write buffer "const". --- src/cli/settings.c | 47 +++++++++++++++++++++--------------------- src/cli/settings.h | 10 +++++---- src/include/syscalls.h | 2 +- src/syscalls.c | 2 +- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/cli/settings.c b/src/cli/settings.c index fbc851a..626db5e 100644 --- a/src/cli/settings.c +++ b/src/cli/settings.c @@ -6,8 +6,10 @@ #include #include +#include #include +#include "cli.h" #include "log.h" #include "errors.h" #include "settings.h" @@ -73,7 +75,8 @@ short cli_set_register(const char * name, const char * help, cli_setter setter, } else { /* Set the fields for the setting */ cli_name_upper(setting->name, name); - strncpy(setting->help, help); + strncpy(setting->help, help, MAX_SETTING_HELP); + setting->help[MAX_SETTING_HELP] = '\0'; setting->setter = setter; setting->getter = getter; setting->next = 0; @@ -155,7 +158,7 @@ short cli_set_value(short channel, const char * name, const char * value) { * Returns: * 0 on success, any other number is an error */ -short cli_get_value(short channel, const char * name, char * buffer, short size) { +short cli_get_value(short channel, char * name, char * buffer, short size) { p_setting setting = cli_find_setting(name); if (setting == 0) { /* Setting not found... */ @@ -181,14 +184,12 @@ void cli_set_help(short channel) { sys_chan_write(channel, setting->help, strlen(setting->help)); sys_chan_write(channel, "\n", 1); } - - return 0; } /* * Command to set the value of a setting */ -short cli_cmd_set(short channel, int argc, char * argv[]) { +short cli_cmd_set(short channel, int argc, const char * argv[]) { char message[80]; short result; @@ -201,7 +202,7 @@ short cli_cmd_set(short channel, int argc, char * argv[]) { } return result; - } else if ((argc == 2) && ((strcmp(argv[1], "HELP") == 0) || (strcmp(argv[1], "help") == 0) || (strcmp(argv[1], "?") == 0)) { + } else if ((argc == 2) && (strcmp(argv[1], "HELP") == 0 || strcmp(argv[1], "help") == 0 || strcmp(argv[1], "?") == 0)) { cli_set_help(channel); } else { @@ -328,19 +329,19 @@ short cli_date_set(short channel, const char * date) { if ((i == 4) || (i == 7)) { if (date[i] != '-') { sys_chan_write(channel, usage, strlen(usage)); - return -1; + return ERR_GENERAL; } } else { if ((date[i] < '0') || (date[i] > '9')) { sys_chan_write(channel, usage, strlen(usage)); - return -1; + return ERR_GENERAL; } } } - date_time.year = atoi_n(&date[0], 4); - date_time.month = atoi_n(&date[5], 2); - date_time.day = atoi_n(&date[8], 2); + date_time.year = atoi_n(&((char*)date)[0], 4); + date_time.month = atoi_n(&((char*)date)[5], 2); + date_time.day = atoi_n(&((char*)date)[8], 2); rtc_set_time(&date_time); @@ -350,7 +351,7 @@ short cli_date_set(short channel, const char * date) { /* * DATE getter */ -short cli_date_get(short channel, char * value) { +short cli_date_get(short channel, char * value, short size) { t_time time; rtc_get_time(&time); @@ -377,19 +378,19 @@ short cli_time_set(short channel, const char * time) { if ((i == 2) || (i == 5)) { if (time[i] != ':') { sys_chan_write(channel, usage, strlen(usage)); - return -1; + return ERR_GENERAL; } } else { if ((time[i] < '0') || (time[i] > '9')) { sys_chan_write(channel, usage, strlen(usage)); - return -1; + return ERR_GENERAL; } } } - date_time.hour = atoi_n(&time[0], 2); - date_time.minute = atoi_n(&time[3], 2); - date_time.second = atoi_n(&time[6], 2); + date_time.hour = atoi_n(&((char*)time)[0], 2); + date_time.minute = atoi_n(&((char*)time)[3], 2); + date_time.second = atoi_n(&((char*)time)[6], 2); rtc_set_time(&date_time); @@ -399,7 +400,7 @@ short cli_time_set(short channel, const char * time) { /* * TIME getter */ -short cli_time_get(short channel, char * value) { +short cli_time_get(short channel, char * value, short size) { t_time time; rtc_get_time(&time); @@ -443,7 +444,7 @@ short cli_font_set(short screen, const char * value) { /* * Font setter -- GET FONT */ -short cli_font_get(short channel, char * value) { +short cli_font_get(short channel, char * value, short size) { /* We don't keep the font path */ *value = 0; return 0; @@ -452,7 +453,7 @@ short cli_font_get(short channel, char * value) { /* * Volume setter -- SET VOLUME */ -short cli_volume_set(short channel, char * value) { +short cli_volume_set(short channel, const char * value) { unsigned char volume = (unsigned char)cli_eval_number(value); codec_set_volume(volume); return 0; @@ -461,8 +462,8 @@ short cli_volume_set(short channel, char * value) { /* * Volume getter -- GET VOLUME */ -short cli_volume_get(short channel, char * value) { - sprintf(value, "%d", codec_get_volume()); +short cli_volume_get(short channel, char * value, short size) { + sprintf(value, "%d", (short)codec_get_volume()); return 0; } @@ -494,7 +495,7 @@ short cli_layout_set(short channel, const char * value) { /* * Get the keyboard layout given a keyboard layout file -- GET LAYOUT */ -short cli_layout_get(short channel, char * value) { +short cli_layout_get(short channel, char * value, short size) { return 0; } diff --git a/src/cli/settings.h b/src/cli/settings.h index 3a04251..19773d1 100644 --- a/src/cli/settings.h +++ b/src/cli/settings.h @@ -29,24 +29,26 @@ extern void cli_set_init(); * Returns: * 0 on success, any other number is an error */ -extern short cli_set_register(const char * name, cli_setter setter, cli_getter getter); +extern short cli_set_register(const char * name, const char * help, cli_setter setter, cli_getter getter); /* * Set the value of a setting * * Inputs: + * channel = the channel to use for reporting success or error * name = the name of the setting to update (case insensitive) * value = the value to store in the setting (may be interpreted by the setting) * * Returns: * 0 on success, any other number is an error */ -extern short cli_set_value(const char * name, const char * value); +extern short cli_set_value(short channel, const char * name, const char * value); /* * Get the value of a setting * * Inputs: + * channel = the channel to use for reporting success or error * name = the name of the setting to update (case insensitive) * buffer = the place to copy a string representing the value of the setting * size = the number of characters that can be stored in the buffer @@ -54,12 +56,12 @@ extern short cli_set_value(const char * name, const char * value); * Returns: * 0 on success, any other number is an error */ -extern short cli_get_value(const char * name, char * buffer, short size); +extern short cli_get_value(short channel, char * name, char * buffer, short size); /* * Command to set the value of a setting */ -extern short cli_cmd_set(short screen, int argc, char * argv[]); +extern short cli_cmd_set(short screen, int argc, const char * argv[]); /* * Command to set the value of a setting diff --git a/src/include/syscalls.h b/src/include/syscalls.h index b6e47cb..c844615 100644 --- a/src/include/syscalls.h +++ b/src/include/syscalls.h @@ -245,7 +245,7 @@ extern short sys_chan_write_b(short channel, unsigned char b); * Returns: * number of bytes written, any negative number is an error code */ -extern short sys_chan_write(short channel, unsigned char * buffer, short size); +extern short sys_chan_write(short channel, const unsigned char * buffer, short size); /* * Return the status of the channel device diff --git a/src/syscalls.c b/src/syscalls.c index 928ac2d..cb832cc 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -175,7 +175,7 @@ short sys_chan_write_b(short channel, unsigned char b) { * Returns: * number of bytes written, any negative number is an error code */ -short sys_chan_write(short channel, unsigned char * buffer, short size) { +short sys_chan_write(short channel, const unsigned char * buffer, short size) { return syscall(KFN_CHAN_WRITE, channel, buffer, size); } From 00ba42664e8b5db7f93de156ae9175b8001d907d Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 21:45:20 +0100 Subject: [PATCH 03/12] Remove warning in sound_cmds.c --- src/cli/sound_cmds.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cli/sound_cmds.c b/src/cli/sound_cmds.c index 3c890e7..152635b 100644 --- a/src/cli/sound_cmds.c +++ b/src/cli/sound_cmds.c @@ -8,6 +8,7 @@ #include "snd/psg.h" #include "snd/opl2.h" #include "dev/midi.h" +#include "syscalls.h" /* * Play a sound on the PSG From 75670275e55354cdbc1443d318c9f1208bc96288 Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 21:51:10 +0100 Subject: [PATCH 04/12] Fix warnings in mem_cmds --- src/cli/mem_cmds.c | 20 ++++++++++---------- src/cli/mem_cmds.h | 16 ++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/cli/mem_cmds.c b/src/cli/mem_cmds.c index 8d4928a..837fed0 100644 --- a/src/cli/mem_cmds.c +++ b/src/cli/mem_cmds.c @@ -14,7 +14,7 @@ * * DUMP
[] */ -short mem_cmd_dump(short channel, int argc, char * argv[]) { +short mem_cmd_dump(short channel, int argc, const char * argv[]) { unsigned char * address = 0; long count = 16; long i; @@ -38,7 +38,7 @@ short mem_cmd_dump(short channel, int argc, char * argv[]) { } } -short mem_cmd_dasm(short channel, int argc, char * argv[]) { +short mem_cmd_dasm(short channel, int argc, const char * argv[]) { unsigned long address = 0; long count = 1000; long i; @@ -73,7 +73,7 @@ short mem_cmd_dasm(short channel, int argc, char * argv[]) { * * POKE8
*/ -short mem_cmd_poke8(short channel, int argc, char * argv[]) { +short mem_cmd_poke8(short channel, int argc, const char * argv[]) { TRACE("mem_cmd_poke8"); if (argc == 3) { @@ -93,7 +93,7 @@ short mem_cmd_poke8(short channel, int argc, char * argv[]) { * * PEEK8
*/ -short mem_cmd_peek8(short channel, int argc, char * argv[]) { +short mem_cmd_peek8(short channel, int argc, const char * argv[]) { TRACE("mem_cmd_peek8"); @@ -114,7 +114,7 @@ short mem_cmd_peek8(short channel, int argc, char * argv[]) { * * POKE16
*/ -short mem_cmd_poke16(short channel, int argc, char * argv[]) { +short mem_cmd_poke16(short channel, int argc, const char * argv[]) { TRACE("mem_cmd_poke16"); if (argc == 3) { @@ -134,11 +134,11 @@ short mem_cmd_poke16(short channel, int argc, char * argv[]) { * * PEEK16
*/ -short mem_cmd_peek16(short channel, int argc, char * argv[]) { +short mem_cmd_peek16(short channel, int argc, const char * argv[]) { TRACE("mem_cmd_peek16"); if (argc == 2) { - unsigned short * address = (unsigned char *)cli_eval_number(argv[1]); + unsigned short * address = (unsigned short *)cli_eval_number(argv[1]); unsigned short c = *address; print_hex_16(channel, c); @@ -154,7 +154,7 @@ short mem_cmd_peek16(short channel, int argc, char * argv[]) { * * POKE32
*/ -short mem_cmd_poke32(short channel, int argc, char * argv[]) { +short mem_cmd_poke32(short channel, int argc, const char * argv[]) { TRACE("mem_cmd_poke32"); if (argc == 3) { @@ -174,11 +174,11 @@ short mem_cmd_poke32(short channel, int argc, char * argv[]) { * * PEEK32
*/ -short mem_cmd_peek32(short channel, int argc, char * argv[]) { +short mem_cmd_peek32(short channel, int argc, const char * argv[]) { TRACE("mem_cmd_peek32"); if (argc == 2) { - unsigned long * address = (unsigned char *)cli_eval_number(argv[1]); + unsigned long * address = (unsigned long *)cli_eval_number(argv[1]); unsigned long c = *address; print_hex_32(channel, c); diff --git a/src/cli/mem_cmds.h b/src/cli/mem_cmds.h index b5883fa..e0e3bb1 100644 --- a/src/cli/mem_cmds.h +++ b/src/cli/mem_cmds.h @@ -12,55 +12,55 @@ * * DUMP
[] */ -extern short mem_cmd_dump(short channel, int argc, char * argv[]); +extern short mem_cmd_dump(short channel, int argc, const char * argv[]); /* * Print out the dissassembly of a block of memory * * DASM
[] */ -extern short mem_cmd_dasm(short channel, int argc, char * argv[]); +extern short mem_cmd_dasm(short channel, int argc, const char * argv[]); /* * Write an 8-bit byte to memory * * POKE8
*/ -extern short mem_cmd_poke8(short channel, int argc, char * argv[]); +extern short mem_cmd_poke8(short channel, int argc, const char * argv[]); /* * Read an 8-bit byte from memory and display it * * PEEK8
*/ -extern short mem_cmd_peek8(short channel, int argc, char * argv[]); +extern short mem_cmd_peek8(short channel, int argc, const char * argv[]); /* * Write an 16-bit word to memory * * POKE16
*/ -extern short mem_cmd_poke16(short channel, int argc, char * argv[]); +extern short mem_cmd_poke16(short channel, int argc, const char * argv[]); /* * Read an 16-bit word from memory and display it * * PEEK16
*/ -extern short mem_cmd_peek16(short channel, int argc, char * argv[]); +extern short mem_cmd_peek16(short channel, int argc, const char * argv[]); /* * Write an 32-bit long word to memory * * POKE32
*/ -extern short mem_cmd_poke32(short channel, int argc, char * argv[]); +extern short mem_cmd_poke32(short channel, int argc, const char * argv[]); /* * Read an 32-bit long word from memory and display it * * PEEK32
*/ -extern short mem_cmd_peek32(short channel, int argc, char * argv[]); +extern short mem_cmd_peek32(short channel, int argc, const char * argv[]); #endif From 0d2984fecc45b183c71821fd33c94680e4eb0de6 Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 21:57:18 +0100 Subject: [PATCH 05/12] Address warnings in dos_cmds.c --- src/cli/dos_cmds.c | 4 ++-- src/include/types.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cli/dos_cmds.c b/src/cli/dos_cmds.c index 09860b5..40f03b4 100644 --- a/src/cli/dos_cmds.c +++ b/src/cli/dos_cmds.c @@ -34,7 +34,7 @@ short cmd_diskread(short screen, int argc, char * argv[]) { bdev_number = (short)cli_eval_number(argv[1]); lba = cli_eval_number(argv[2]); - sprintf(buffer, "Reading drive #%d, sector 0x%X\n", bdev_number, lba); + sprintf(buffer, "Reading drive #%d, sector 0x%p\n", bdev_number, (void*)lba); print(screen, buffer); result = bdev_read(bdev_number, lba, buffer, 512); @@ -70,7 +70,7 @@ short cmd_diskfill(short screen, int argc, char * argv[]) { lba = cli_eval_number(argv[2]); value = (unsigned char)cli_eval_number(argv[3]); - sprintf(buffer, "Filling drive #%d, sector 0x%X with 0x%02X\n", bdev_number, lba, value); + sprintf(buffer, "Filling drive #%d, sector %p with 0x%02X\n", bdev_number, (void*)lba, (short)value); print(screen, buffer); for (i = 0; i < 512; i++) { diff --git a/src/include/types.h b/src/include/types.h index 59c9e0d..dbb9b02 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6,6 +6,7 @@ #define __TYPES_H #include +#include /* * Function types @@ -15,7 +16,6 @@ * Integer types in their standard sizes, signed and unsigned. */ -typedef unsigned char bool; // // A color (BGR) From 4b46f4e7d8c17478f399eac8ea5a641b5b5b707d Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 22:19:55 +0100 Subject: [PATCH 06/12] Address warnings in dis68k.c --- src/cli/dis68k.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/cli/dis68k.c b/src/cli/dis68k.c index d1253ca..8f76ca3 100644 --- a/src/cli/dis68k.c +++ b/src/cli/dis68k.c @@ -124,23 +124,23 @@ static void sprintmode(unsigned int mode, unsigned int reg, unsigned int size, c const char ir[2] = {'W','L'}; /* for mode 6 */ switch(mode) { - case 0 : sprintf(out_s, "D%i", reg); break; - case 1 : sprintf(out_s, "A%i", reg); break; - case 2 : sprintf(out_s, "(A%i)", reg); break; - case 3 : sprintf(out_s, "(A%i)+", reg); break; - case 4 : sprintf(out_s, "-(A%i)", reg); break; + case 0 : sprintf(out_s, "D%u", reg); break; + case 1 : sprintf(out_s, "A%u", reg); break; + case 2 : sprintf(out_s, "(A%u)", reg); break; + case 3 : sprintf(out_s, "(A%u)+", reg); break; + case 4 : sprintf(out_s, "-(A%u)", reg); break; case 5 : /* reg + disp */ case 9 : { /* pcr + disp */ int32_t displacement = (int32_t) getword(); if (displacement >= 32768) displacement -= 65536; if (mode == 5) { - sprintf(out_s, "%+i(A%i)", displacement, reg); + sprintf(out_s, "%+li(A%u)", displacement, reg); } else { const uint32_t ldata = address - 2 + displacement; if (!rawmode) { - sprintf(out_s, "%+i(PC) {$%08u}", displacement, ldata); + sprintf(out_s, "%+li(PC) {$%08lu}", displacement, ldata); } else { - sprintf(out_s, "%+i(PC)", displacement); + sprintf(out_s, "%+li(PC)", displacement); } } } break; @@ -157,15 +157,15 @@ static void sprintmode(unsigned int mode, unsigned int reg, unsigned int size, c if (mode == 6) { if (itype == 0) { - sprintf(out_s, "%+i(A%i,D%i.%c)", displacement, reg, ireg, ir[isize]); + sprintf(out_s, "%+d(A%u,D%d.%c)", displacement, reg, ireg, ir[isize]); } else { - sprintf(out_s, "%+i(A%i,A%i.%c)", displacement, reg, ireg, ir[isize]); + sprintf(out_s, "%+d(A%u,A%d.%c)", displacement, reg, ireg, ir[isize]); } } else { /* PC */ if (itype == 0) { - sprintf(out_s, "%+i(PC,D%i.%c)", displacement, ireg, ir[isize]); + sprintf(out_s, "%+d(PC,D%d.%c)", displacement, ireg, ir[isize]); } else { - sprintf(out_s, "%+i(PC,A%i.%c)", displacement, ireg, ir[isize]); + sprintf(out_s, "%+d(PC,A%d.%c)", displacement, ireg, ir[isize]); } } } break; @@ -191,7 +191,7 @@ static void sprintmode(unsigned int mode, unsigned int reg, unsigned int size, c } } break; default : { - sprintf(line_buf, "Mode out of range in sprintmode = %i\n", mode); + sprintf(line_buf, "Mode out of range in sprintmode = %u\n", mode); print(0,line_buf); break; } @@ -224,7 +224,7 @@ void disasm(unsigned long int start, unsigned long int end) { char operand_s[100]; while (address < end) { - sprintf(line_buf, "%08x : ", address); + sprintf(line_buf, "%p : ", (void*)address); print(0, line_buf); const uint32_t start_address = address; @@ -505,11 +505,11 @@ void disasm(unsigned long int start, unsigned long int end) { int offset = (word & 0x00FF); if (offset != 0) { if (offset >= 128) offset -= 256; - sprintf(operand_s, "$%08x", address + offset); + sprintf(operand_s, "$%p", (void*)(address + offset)); } else { offset = getword(); if (offset >= 32768l) offset -= 65536l; - sprintf(operand_s, "$%08x" , address - 2 + offset); + sprintf(operand_s, "$%p" , (void*)(address - 2 + offset)); } decoded = true; } break; @@ -652,7 +652,7 @@ void disasm(unsigned long int start, unsigned long int end) { int offset = getword(); if (offset >= 32768) offset -= 65536; const int dreg = word & 0x0007; - sprintf(operand_s, "D%i,$%08x", dreg, address - 2 + offset); + sprintf(operand_s, "D%d,$%p", dreg, (void*)(address - 2 + offset)); decoded = true; } break; case 33 : { /* EXG */ @@ -1094,7 +1094,7 @@ void disasm(unsigned long int start, unsigned long int end) { //for (int i = 0 ; i < (5 - fetched); ++i) print(0," "); if (decoded != 0) { - sprintf(line_buf, "%-8s %s\n", opcode_s, operand_s) + sprintf(line_buf, "%-8s %s\n", opcode_s, operand_s); print(0,line_buf); } else { print(0,"???\n"); From 4508526f77ec2560b97bff523aac6108888e900c Mon Sep 17 00:00:00 2001 From: Vincent Barrilliot Date: Wed, 8 Dec 2021 23:09:44 +0100 Subject: [PATCH 07/12] Address warning messages in cli.c and dependencies. Made internal handlers's argv const as it' safe to do for internal purposes and helps the compiler's optimizations. --- src/cli/cli.c | 46 +++++++++++++++++++++++--------------------- src/cli/cli.h | 4 ++-- src/cli/dos_cmds.c | 32 +++++++++++++++--------------- src/cli/dos_cmds.h | 28 +++++++++++++-------------- src/cli/settings.c | 6 +++--- src/cli/settings.h | 4 ++-- src/cli/sound_cmds.c | 12 ++++++------ src/cli/sound_cmds.h | 12 ++++++------ src/cli/test_cmd2.c | 20 +++++++++---------- src/cli/test_cmds.h | 2 +- src/dev/fsys.c | 4 +++- src/dev/fsys.h | 2 +- src/log.c | 5 ++++- src/log.h | 2 +- 14 files changed, 93 insertions(+), 86 deletions(-) diff --git a/src/cli/cli.c b/src/cli/cli.c index afd9239..f513076 100644 --- a/src/cli/cli.c +++ b/src/cli/cli.c @@ -3,7 +3,9 @@ */ #include +#include #include + #include "log.h" #include "types.h" #include "interrupt.h" @@ -39,11 +41,11 @@ typedef struct s_cli_command { cli_cmd_handler handler; } t_cli_command, *p_cli_command; -extern short cmd_sysinfo(short channel, int argc, char * argv[]); -extern short cmd_cls(short channel, int argc, char * argv[]); -extern short cmd_showint(short channel, int argc, char * argv[]); -extern short cmd_getjiffies(short channel, int argc, char * argv[]); -extern short cmd_get_ticks(short channel, int argc, char * argv[]); +extern short cmd_sysinfo(short channel, int argc, const char * argv[]); +extern short cmd_cls(short channel, int argc, const char * argv[]); +extern short cmd_showint(short channel, int argc, const char * argv[]); +extern short cmd_getjiffies(short channel, int argc, const char * argv[]); +extern short cmd_get_ticks(short channel, int argc, const char * argv[]); /* * Variables @@ -89,20 +91,20 @@ const t_cli_command g_cli_commands[] = { // // List all the commands // -int cmd_help(short channel, int argc, char * argv[]) { +short cmd_help(short channel, int argc, const char * argv[]) { p_cli_command command; - for (command = g_cli_commands; (command != 0) && (command->name != 0); command++) { + for (command = (p_cli_command)g_cli_commands; (command != 0) && (command->name != 0); command++) { sys_chan_write(channel, command->help, strlen(command->help)); sys_chan_write(channel, "\n", 2); } return 0; } -short cmd_getjiffies(short channel, int argc, char * argv[]) { +short cmd_getjiffies(short channel, int argc, const char * argv[]) { char buffer[80]; - sprintf(buffer, "%d\n", timers_jiffies()); + sprintf(buffer, "%ld\n", timers_jiffies()); sys_chan_write(channel, buffer, strlen(buffer));; return 0; } @@ -110,10 +112,10 @@ short cmd_getjiffies(short channel, int argc, char * argv[]) { /* * Print the number of ticks since last restart */ -short cmd_get_ticks(short channel, int argc, char * argv[]) { +short cmd_get_ticks(short channel, int argc, const char * argv[]) { char buffer[80]; - sprintf(buffer, "%d\n", rtc_get_jiffies()); + sprintf(buffer, "%ld\n", rtc_get_jiffies()); sys_chan_write(channel, buffer, strlen(buffer)); return 0; } @@ -121,7 +123,7 @@ short cmd_get_ticks(short channel, int argc, char * argv[]) { /* * Clear the screen */ -short cmd_cls(short channel, int argc, char * argv[]) { +short cmd_cls(short channel, int argc, const char * argv[]) { const char * ansi_cls = "\x1B[2J\x1B[H"; sys_chan_write(channel, ansi_cls, strlen(ansi_cls)); @@ -131,7 +133,7 @@ short cmd_cls(short channel, int argc, char * argv[]) { /* * Display information about the system */ -short cmd_sysinfo(short channel, int argc, char * argv[]) { +short cmd_sysinfo(short channel, int argc, const char * argv[]) { t_sys_info info; char buffer[80]; @@ -143,22 +145,22 @@ short cmd_sysinfo(short channel, int argc, char * argv[]) { sprintf(buffer, "\nCPU: %s", info.cpu_name); sys_chan_write(channel, buffer, strlen(buffer)); - sprintf(buffer, "\nSystem Memory: 0x%X", info.system_ram_size); + sprintf(buffer, "\nSystem Memory: 0x%lX", info.system_ram_size); sys_chan_write(channel, buffer, strlen(buffer)); - sprintf(buffer, "\nPCB version: %s", &info.pcb_version); + sprintf(buffer, "\nPCB version: %s", (char*)&info.pcb_version); sys_chan_write(channel, buffer, strlen(buffer)); - sprintf(buffer, "\nFPGA Date: %08X", info.fpga_date); + sprintf(buffer, "\nFPGA Date: %08lX", info.fpga_date); sys_chan_write(channel, buffer, strlen(buffer)); - sprintf(buffer, "\nFPGA Model: %08X", info.fpga_model); + sprintf(buffer, "\nFPGA Model: %08lX", info.fpga_model); sys_chan_write(channel, buffer, strlen(buffer)); sprintf(buffer, "\nFPGA Version: %04X.%04X", info.fpga_version, info.fpga_subver); sys_chan_write(channel, buffer, strlen(buffer)); - sprintf(buffer, "\nMCP version: v%02d.%02d.%04d\n", info.mcp_version, info.mcp_rev, info.mcp_build); + sprintf(buffer, "\nMCP version: v%02u.%02u.%04u\n", info.mcp_version, info.mcp_rev, info.mcp_build); sys_chan_write(channel, buffer, strlen(buffer)); return 0; @@ -167,7 +169,7 @@ short cmd_sysinfo(short channel, int argc, char * argv[]) { /* * Show information about the interrupt registers */ -short cmd_showint(short channel, int argc, char * argv[]) { +short cmd_showint(short channel, int argc, const char * argv[]) { char buffer[80]; TRACE("cmd_showint"); @@ -197,9 +199,9 @@ short cmd_showint(short channel, int argc, char * argv[]) { // command = the upper case name of the command (first word of the command line) // parameters = the string of parameters to be passed to the command // -short cli_exec(short channel, char * command, int argc, char * argv[]) { +short cli_exec(short channel, char * command, int argc, const char * argv[]) { const char * cmd_not_found = "Command not found.\n"; - p_cli_command commands = g_cli_commands; + p_cli_command commands = (p_cli_command)g_cli_commands; log3(LOG_INFO, "cli_exec: '", argv[0], "'"); log_num(LOG_INFO, "argc = ", argc); @@ -249,7 +251,7 @@ char * strtok_r(char * source, const char * delimiter, char ** saveptr) { return x; } -short cli_rerepl() { +void cli_rerepl() { while (1) { cli_repl(g_current_channel); } diff --git a/src/cli/cli.h b/src/cli/cli.h index 0f8d135..e1ef1c7 100644 --- a/src/cli/cli.h +++ b/src/cli/cli.h @@ -9,7 +9,7 @@ * A function pointer for command implementations: * short cmd_foo(short screen, char * parameters) { ... } */ -typedef short (*cli_cmd_handler)(short screen, int argc, char * argv[]); +typedef short (*cli_cmd_handler)(short screen, int argc, const char * argv[]); /** * About the CLI... @@ -42,6 +42,6 @@ extern long cli_eval_number(const char * arg); /* * Print a help message */ -extern int cmd_help(short channel, int argc, char * argv[]); +extern short cmd_help(short channel, int argc, const char * argv[]); #endif diff --git a/src/cli/dos_cmds.c b/src/cli/dos_cmds.c index 40f03b4..099c16a 100644 --- a/src/cli/dos_cmds.c +++ b/src/cli/dos_cmds.c @@ -19,7 +19,7 @@ * * DISKREAD */ -short cmd_diskread(short screen, int argc, char * argv[]) { +short cmd_diskread(short screen, int argc, const char * argv[]) { unsigned char buffer[512]; short bdev_number = 0; long lba = 0; @@ -53,7 +53,7 @@ short cmd_diskread(short screen, int argc, char * argv[]) { * * DISKFILL */ -short cmd_diskfill(short screen, int argc, char * argv[]) { +short cmd_diskfill(short screen, int argc, const char * argv[]) { unsigned char buffer[512]; unsigned char value; short bdev_number = 0; @@ -93,7 +93,7 @@ short cmd_diskfill(short screen, int argc, char * argv[]) { * * Command name is in argv[0]. */ -short cmd_run(short screen, int argc, char * argv[]) { +short cmd_run(short screen, int argc, const char * argv[]) { TRACE("cmd_run"); short result = proc_run(argv[0], argc, argv); @@ -108,7 +108,7 @@ short cmd_run(short screen, int argc, char * argv[]) { /* * Create a directory */ -short cmd_mkdir(short screen, int argc, char * argv[]) { +short cmd_mkdir(short screen, int argc, const char * argv[]) { TRACE("cmd_mkdir"); @@ -127,7 +127,7 @@ short cmd_mkdir(short screen, int argc, char * argv[]) { /* * Delete a file */ -short cmd_del(short screen, int argc, char * argv[]) { +short cmd_del(short screen, int argc, const char * argv[]) { TRACE("cmd_del"); @@ -143,7 +143,7 @@ short cmd_del(short screen, int argc, char * argv[]) { } } -short cmd_copy(short screen, int argc, char * argv[]) { +short cmd_copy(short screen, int argc, const char * argv[]) { FRESULT find_result; FRESULT result; DIR dir; /* Directory object */ @@ -228,7 +228,7 @@ error: /* * Change the directory */ -short cmd_cd(short screen, int argc, char * argv[]) { +short cmd_cd(short screen, int argc, const char * argv[]) { TRACE("cmd_cd"); @@ -253,7 +253,7 @@ short cmd_cd(short screen, int argc, char * argv[]) { /* * Change the directory */ -short cmd_pwd(short screen, int argc, char * argv[]) { +short cmd_pwd(short screen, int argc, const char * argv[]) { char buffer[128]; TRACE("cmd_pwd"); @@ -271,7 +271,7 @@ short cmd_pwd(short screen, int argc, char * argv[]) { /* * Rename a file or directory */ -short cmd_rename(short screen, int argc, char * argv[]) { +short cmd_rename(short screen, int argc, const char * argv[]) { TRACE("cmd_rename"); @@ -286,7 +286,7 @@ short cmd_rename(short screen, int argc, char * argv[]) { return 0; } -short cmd_dir(short screen, int argc, char * argv[]) { +short cmd_dir(short screen, int argc, const char * argv[]) { short result; char buffer[80]; t_file_info my_file; @@ -294,7 +294,7 @@ short cmd_dir(short screen, int argc, char * argv[]) { char label[40]; if (argc > 1) { - path = argv[1]; + path = (char*)(argv[1]); } short dir = fsys_opendir(path); @@ -342,11 +342,11 @@ short cmd_dir(short screen, int argc, char * argv[]) { /* * Print the contents of a file to the screen */ -short cmd_type(short screen, int argc, char * argv[]) { +short cmd_type(short screen, int argc, const char * argv[]) { if (argc > 1) { unsigned char buffer[128]; - log3(LOG_INFO, "Attempting to type [", argv[1], "]"); + log3(LOG_INFO, "Attempting to type [", (char*)(argv[1]), "]"); short fd = fsys_open(argv[1], FA_READ); if (fd >= 0) { log_num(LOG_INFO, "File open: ", fd); @@ -379,7 +379,7 @@ short cmd_type(short screen, int argc, char * argv[]) { * Load a binary file into memory * parameters: path [address] */ -short cmd_load(short screen, int argc, char * argv[]) { +short cmd_load(short screen, int argc, const char * argv[]) { if (argc > 1) { long start = 0; long destination = 0; @@ -413,7 +413,7 @@ short cmd_load(short screen, int argc, char * argv[]) { * LABEL