diff --git a/cd.c b/cd.c index 92560e0..88542f2 100644 --- a/cd.c +++ b/cd.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/cd.h b/cd.h index 15b4636..67fdc2c 100644 --- a/cd.h +++ b/cd.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/cli/etripator.c b/cli/etripator.c index 52fad01..19c4e93 100644 --- a/cli/etripator.c +++ b/cli/etripator.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/cli/options.c b/cli/options.c index 6bae600..e7b2c58 100644 --- a/cli/options.c +++ b/cli/options.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/cli/options.h b/cli/options.h index 48fdc70..6517c90 100644 --- a/cli/options.h +++ b/cli/options.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/comment.c b/comment.c index 4b3b3fa..9bc6d61 100644 --- a/comment.c +++ b/comment.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/comment.h b/comment.h index 1cb7be5..7fca303 100644 --- a/comment.h +++ b/comment.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/comment/load.c b/comment/load.c index a1687be..0f3d7a6 100644 --- a/comment/load.c +++ b/comment/load.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/comment/save.c b/comment/save.c index 6a261bb..3b62a45 100644 --- a/comment/save.c +++ b/comment/save.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/config.h b/config.h index 8a91251..c9f6f46 100644 --- a/config.h +++ b/config.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/decode.c b/decode.c index af69d38..9823cfa 100644 --- a/decode.c +++ b/decode.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/decode.h b/decode.h index 0791ce1..a1e923b 100644 --- a/decode.h +++ b/decode.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/examples/youkai_douchuuki/password.c b/examples/youkai_douchuuki/password.c index 38e65e9..fb9d0e1 100644 --- a/examples/youkai_douchuuki/password.c +++ b/examples/youkai_douchuuki/password.c @@ -1,6 +1,6 @@ /* * This file is part of Etripator, - * copyright (c) 2009--2023 Vincent Cruz. + * copyright (c) 2009--2024 Vincent Cruz. * * Etripator is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/ipl.c b/ipl.c index 28471ab..99fb33a 100644 --- a/ipl.c +++ b/ipl.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/ipl.h b/ipl.h index d794a11..387e430 100644 --- a/ipl.h +++ b/ipl.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/irq.c b/irq.c index 09a95c6..e51a142 100644 --- a/irq.c +++ b/irq.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/irq.h b/irq.h index 9839f1b..9881d17 100644 --- a/irq.h +++ b/irq.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/jsonhelpers.c b/jsonhelpers.c index 9c96f91..b91f281 100644 --- a/jsonhelpers.c +++ b/jsonhelpers.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/jsonhelpers.h b/jsonhelpers.h index c1af5c7..f5631a7 100644 --- a/jsonhelpers.h +++ b/jsonhelpers.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/label.c b/label.c index d7d9378..166dbf8 100644 --- a/label.c +++ b/label.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/label.h b/label.h index 86824cf..f140d4f 100644 --- a/label.h +++ b/label.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/label/load.c b/label/load.c index 687f83e..1ddc476 100644 --- a/label/load.c +++ b/label/load.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/label/save.c b/label/save.c index 49b5448..f901664 100644 --- a/label/save.c +++ b/label/save.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/memory.c b/memory.c index aa0b04a..4f3b785 100644 --- a/memory.c +++ b/memory.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/memory.h b/memory.h index 75e1011..e5bb2da 100644 --- a/memory.h +++ b/memory.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/memory_map.c b/memory_map.c index 05e2d1c..7903d5e 100644 --- a/memory_map.c +++ b/memory_map.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/memory_map.h b/memory_map.h index 42af452..16698ea 100644 --- a/memory_map.h +++ b/memory_map.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/message.c b/message.c index 461d465..95f9b65 100644 --- a/message.c +++ b/message.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/message.h b/message.h index 4839791..8b78edb 100644 --- a/message.h +++ b/message.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/message/console.c b/message/console.c index 69f3e73..e5c8f4c 100644 --- a/message/console.c +++ b/message/console.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/message/console.h b/message/console.h index ae2ddfe..dbf839e 100644 --- a/message/console.h +++ b/message/console.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/message/file.c b/message/file.c index ae8c5e6..31e54ca 100644 --- a/message/file.c +++ b/message/file.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/message/file.h b/message/file.h index cdcd6d6..0e70e84 100644 --- a/message/file.h +++ b/message/file.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/opcodes.c b/opcodes.c index 95a7603..a175904 100644 --- a/opcodes.c +++ b/opcodes.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/opcodes.h b/opcodes.h index 128fee4..81bcbfb 100644 --- a/opcodes.h +++ b/opcodes.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/rom.c b/rom.c index b1c8c8c..4a75011 100644 --- a/rom.c +++ b/rom.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/rom.h b/rom.h index 823485c..c0641e9 100644 --- a/rom.h +++ b/rom.h @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/section.c b/section.c index f39b850..3d54170 100644 --- a/section.c +++ b/section.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,53 +43,57 @@ static const int32_t g_default_element_size = 8; static const int32_t g_default_elements_per_line = 16; -static const char *g_supported_section_types[SectionTypeCount] = { - "data", - "code" -}; +// Retrieves section type name +const char* section_type_name(SectionType type) { + static const char *name[SECTION_TYPE_COUNT] = { + [SECTION_TYPE_DATA] = "data", + [SECTION_TYPE_CODE] = "code" + }; -static const char *g_supported_data_types[DataTypeCount] = { - "binary", - "hex", - "string", - "jumptable" -}; - -/* Retrieves section type name. */ -const char* section_type_name(section_type_t type) { - if((type <= UnknownSectionType) || (type >= SectionTypeCount)) { + if((type <= SECTION_TYPE_UNKNOWN) || (type >= SECTION_TYPE_COUNT)) { return "unknown"; } - return g_supported_section_types[type]; + return name[type]; } -/* Retrieves data type name. */ -const char* data_type_name(data_type_t type) { - if((type <= UnknownDataType) || (type >= DataTypeCount)) { +// Retrieves data type name +const char* data_type_name(DataType type) { + static const char *name[DATA_TYPE_COUNT] = { + [DATA_TYPE_BINARY] = "binary", + [DATA_TYPE_HEX] = "hex", + [DATA_TYPE_STRING] = "string", + [DATA_TYPE_JUMP_TABLE] = "jumptable" + }; + + if((type <= DATA_TYPE_UNKNOWN) || (type >= DATA_TYPE_COUNT)) { return "unknown"; } - return g_supported_data_types[type]; + return name[type]; } -/* Reset a section to its default values. */ -void section_reset(section_t *s) { +// Reset a section to its default values +void section_reset(Section *s) { + assert(s != NULL); s->name = NULL; - s->type = UnknownSectionType; + s->type = SECTION_TYPE_UNKNOWN; s->page = 0; s->logical = 0; s->offset = 0; s->size = 0; - memset(s->mpr, 0, 8*sizeof(uint8_t)); + for(unsigned int i=0; i<8U; i++) { + s->mpr[i] = 0; + } s->output = NULL; - s->data.type = UnknownDataType; + s->data.type = DATA_TYPE_UNKNOWN; s->data.element_size = g_default_element_size; s->data.elements_per_line = g_default_elements_per_line; s->description = NULL; } static int section_compare(const void *a, const void *b) { - section_t* s0 = (section_t*)a; - section_t* s1 = (section_t*)b; + Section* s0 = (Section*)a; + Section* s1 = (Section*)b; + int cmp = s0->page - s1->page; if(!cmp) { cmp = s0->logical - s1->logical; @@ -97,24 +101,18 @@ static int section_compare(const void *a, const void *b) { return cmp; } -/* Group section per output filename and sort them in bank/org order. */ -void section_sort(section_t *ptr, size_t n) { - qsort(ptr, n, sizeof(section_t), §ion_compare); +// Group section per output filename and sort them in bank/org order. +void section_sort(Section *ptr, size_t n) { + qsort(ptr, n, sizeof(Section), §ion_compare); } -/* Delete sections. */ -void section_delete(section_t *ptr, int n) { - int i; - for(i=0; itype = json_validate_section_type(json_string_value(tmp)); - if (out->type == UnknownSectionType) { +static inline bool json_parse_section_type(const json_t *obj, SectionType *out) { + bool ret = false; + const json_t *tmp = json_object_get(obj, "type"); + if (tmp == NULL) { + ERROR_MSG("Missing section type."); + } else if (!json_is_string(tmp)) { ERROR_MSG("Invalid section type."); - return 0; - } - /* page */ - tmp = json_object_get(obj, "page"); - if (!json_validate_int(tmp, &num)) { - ERROR_MSG("Invalid or missing memory page."); - return 0; - } - if ((num < 0) || (num > 255)) { - ERROR_MSG("Page out of range."); - return 0; - } - out->page = (uint8_t)num; - /* logical address */ - tmp = json_object_get(obj, "logical"); - if (!json_validate_int(tmp, &num)) { - ERROR_MSG("Invalid or missing logical address."); - return 0; + } else { + *out = json_validate_section_type(json_string_value(tmp)); + if (*out == SECTION_TYPE_UNKNOWN) { + ERROR_MSG("Invalid section type value."); + } else { + ret = true; + } } - if ((num < 0) || (num > 0xffff)) { - ERROR_MSG("Org value out of range."); - return 0; + return ret; +} + +static inline bool json_parse_section_page(const json_t *obj, uint8_t *out) { + int num; + bool ret = false; + const json_t *tmp = json_object_get(obj, "page"); + if (tmp == NULL) { + ERROR_MSG("Missing section page"); + } else if (!json_validate_int(tmp, &num)) { + ERROR_MSG("Invalid section memory page."); + } else if ((num < 0) || (num > 255)) { + ERROR_MSG("Section memory page out of range."); + } else { + *out = (uint8_t)num; + ret = true; } - out->logical = (uint16_t)num; + return ret; +} - out->offset = (out->page << 13) | (out->logical & 0x1fff); +static inline bool json_parse_section_logical(const json_t *obj, uint16_t *out) { + int num; + bool ret = false; + const json_t *tmp = json_object_get(obj, "logical"); + if (tmp == NULL) { + ERROR_MSG("Missing section logical address"); + } else if (!json_validate_int(tmp, &num)) { + ERROR_MSG("Invalid or missing section logical address."); + } else if ((num < 0) || (num > 0xFFFF)) { + ERROR_MSG("Section logical address out of range."); + } else { + *out = (uint16_t)num; + ret = true; + } + return ret; +} - /* offset */ - num = -1; - tmp = json_object_get(obj, "offset"); - if (tmp) { - if (!json_validate_int(tmp, &num)) { - ERROR_MSG("Invalid or missing offset value."); - return 0; - } else { - out->offset = (uint32_t)num; - } +static inline bool json_parse_section_offset(const json_t *obj, Section *out) { + int num; + bool ret = true; + json_t *tmp = json_object_get(obj, "offset"); + if(tmp == NULL) { + out->offset = (out->page << 13) | (out->logical & 0x1FFF); + } else if (json_validate_int(tmp, &num)) { + out->offset = (uint32_t)num; + } else { + ERROR_MSG("Invalid or missing offset value."); + ret = false; } + return ret; +} - /* size */ - tmp = json_object_get(obj, "size"); - if (tmp) { - if (!json_validate_int(tmp, &out->size)) { - ERROR_MSG("Invalid section size."); - return 0; - } +static inline bool json_parse_section_size(const json_t *obj, int32_t *out) { + bool ret = true; + int num; + const json_t *tmp = json_object_get(obj, "size"); + if (tmp == NULL) { + *out = -1; + } else if (json_validate_int(tmp, &num)) { + *out = (int32_t)num; + } else { + ERROR_MSG("Invalid section size."); + ret = false; } - /* mpr */ - tmp = json_object_get(obj, "mpr"); - if(json_is_array(tmp)) { + return ret; +} + +static inline bool json_parse_section_mpr(const json_t *obj, Section *out) { + bool ret = false; + const json_t *tmp = json_object_get(obj, "mpr"); + if(tmp == NULL) { + ERROR_MSG("Missing section memory map"); + } else if(!json_is_array(tmp)) { + ERROR_MSG("Invalid section memory map"); + } else { + int num; size_t index; json_t* value; json_array_foreach(tmp, index, value) { - if(index > 7) { - WARNING_MSG("Extra mpr values"); - break; - } - if(json_validate_int(value, &num)) { - if((num < 0) || (num > 0xff)) { - ERROR_MSG("Invalid mpr %d value", index); - return 0; - } + ret = false; + if(index > 7U) { + ERROR_MSG("Too many mpr values"); + } else if(!json_validate_int(value, &num)) { + ERROR_MSG("Invalid type for mpr value"); + } else if((num < 0) || (num > 0xFF)) { + ERROR_MSG("Invalid mpr %d value", index); + } else { out->mpr[index] = (uint8_t)num; + ret = true; } - } - } - /* output */ - tmp = json_object_get(obj, "filename"); - if (!json_is_string(tmp)) { - ERROR_MSG("Missing or invalid output filename."); - return 0; - } - out->output = strdup(json_string_value(tmp)); - /* data */ - tmp = json_object_get(obj, "data"); - if (tmp) { - json_t* value; - value = json_object_get(tmp, "type"); - if (!json_is_string(value)) { - ERROR_MSG("Invalid data for data type."); - return 0; - } - out->data.type = json_validate_data_type(json_string_value(value)); - if (out->data.type == UnknownDataType) { - ERROR_MSG("Invalid data type."); - return 0; - } - value = json_object_get(tmp, "element_size"); - if(value && (out->data.type == Hex)) { - if (!json_validate_int(value, &out->data.element_size) || (out->data.element_size > 2)) { - ERROR_MSG("Invalid element size."); - return 0; + if(!ret) { + break; } } - value = json_object_get(tmp, "elements_per_line"); - if(value && (out->data.type != Binary)) { - if (!json_validate_int(value, &out->data.elements_per_line)) { - ERROR_MSG("Invalid number of elements per line."); - return 0; - } + } + + return ret; +} + +static inline bool json_parse_section_output(const json_t *obj, Section *out) { + bool ret = false; + const json_t *tmp = json_object_get(obj, "filename"); + if (tmp == NULL) { + ERROR_MSG("Misssing section output filename"); + } else if (!json_is_string(tmp)) { + ERROR_MSG("Invalid output filename."); + } else { + out->output = strdup(json_string_value(tmp)); + if(out->output == NULL) { + ERROR_MSG("Failed to parse section output filename: %s", strerror(errno)); + } else { + ret = true; } } - /* description (optional) */ - out->description = json_load_description(obj, "description"); + return ret; +} - return 1; +static inline bool json_parse_data_config_type(const json_t *obj, DataType *out) { + bool ret = false; + const json_t *tmp = json_object_get(obj, "type"); + if (tmp == NULL) { + ERROR_MSG("Missing section data type."); + } else if (!json_is_string(tmp)) { + ERROR_MSG("Invalid section data type."); + } else { + *out = json_validate_section_type(json_string_value(tmp)); + if (*out == DATA_TYPE_UNKNOWN) { + ERROR_MSG("Invalid section data type value."); + } else { + ret = true; + } + } + return ret; } -/* Load sections from a JSON file. */ -int section_load(const char *filename, section_t **out, int *n) { - json_t* root; - json_t* obj; - json_error_t err; - section_t *ptr; - const char* key; - size_t size; - int ret = 1; +static inline bool json_parse_data_config_element_size(const json_t *obj, DataConfig *out) { + bool ret = false; + const json_t *value = json_object_get(obj, "element_size"); + if(value == NULL) { + ret = true; // use default value + } else if(out->type != DATA_TYPE_HEX) { + ERROR_MSG("Element size is only valid for hex data type"); + } else if(!json_validate_int(obj, &out->element_size)) { + ERROR_MSG("Invalid element size"); + } else if((out->element_size < 0) || (out->element_size > 2)) { + ERROR_MSG("Invalid element size value: %d", out->element_size); + } else { + ret = true; + } + return ret; +} - root = json_load_file(filename, 0, &err); - if(!root) { - ERROR_MSG("Failed to parse %s:%d:%d: %s", filename, err.line, err.column, err.text); - return 0; +static inline bool json_parse_data_config_element_per_line(const json_t *obj, DataConfig *out) { + bool ret = false; + const json_t *value = json_object_get(obj, "elements_per_line"); + if(value == NULL) { + ret = true; // use default value + } else if(out->type == DATA_TYPE_BINARY) { + ERROR_MSG("Number of elements per line is invalid for binary data section"); + } else if (!json_validate_int(obj, &out->elements_per_line)) { + ERROR_MSG("Invalid number of elements per line."); + } else { + ret = true; } + return ret; +} - if(!json_is_object(root)) { - ERROR_MSG("Invalid root element"); - json_decref(root); - return ret; +static bool json_parse_section_data_config(const json_t *obj, DataConfig *out) { + bool ret = false; + const json_t *tmp = json_object_get(obj, "data"); + if (tmp == NULL) { + ret = true; + } else if(!json_parse_data_config_type(tmp, &out->type)) { + // ... + } else if(!json_parse_data_config_element_size(tmp, out)) { + // ... + } else { + ret = json_parse_data_config_element_per_line(tmp, out); } + return ret; +} + +/// Initializes section from JSON object. +/// \param [in] obj JSON object. +/// \param [out] out Section. +/// \return 1 upon success +/// \return 0 if an error occured. +static bool section_parse(const json_t *obj, Section *out) { + assert(obj != NULL); + assert(out != NULL); + + bool ret = false; + + section_reset(out); + if (!json_is_object(obj)) { + ERROR_MSG("Invalid json element."); + } else if(!json_parse_section_type(obj, &out->type)) { + // ... + } else if(!json_parse_section_page(obj, &out->page)) { + // ... + } else if(!json_parse_section_logical(obj, &out->logical)) { + // ... + } else if(!json_parse_section_offset(obj, out)) { + // ... + } else if(!json_parse_section_size(obj, &out->size)) { + // ... + } else if(!json_parse_section_mpr(obj, out)) { - size = json_object_size(root); - *out = (section_t*)realloc(*out, (*n+size) * sizeof(section_t)); - ptr = *out + *n; - *n += (int)size; - json_object_foreach(root, key, obj) { - section_reset(ptr); - ret = ret && section_parse(obj, ptr); - if(ret) { - ptr->name = strdup(key); + } else if(!json_parse_section_output(obj, out)) { + // ... + } else { + const json_t *data = json_object_get(obj, "data"); + if(data != NULL) { + if(out->type != SECTION_TYPE_DATA) { + ERROR_MSG("Data configuration only valid for data sections"); + } else if(!json_parse_section_data_config(data, &out->data)) { + // ... + } else { + // description (optional) + ret = json_load_description(data, "description", &out->description); + } + } else { + ret = true; } - ptr++; } + return ret; +} - json_decref(root); +// Load sections from a JSON file. +bool section_load(const char *filename, Section **out, int *n) { + bool ret = false; + json_error_t err; + Section *ptr; + const char* key; + + json_t* root = json_load_file(filename, 0, &err); + if(root == NULL) { + ERROR_MSG("Failed to parse %s:%d:%d: %s", filename, err.line, err.column, err.text); + } else { + if(!json_is_object(root)) { + ERROR_MSG("Invalid root element"); + } else { + json_t* obj = NULL; + size_t size = json_object_size(root); + *out = (Section*)realloc(*out, (*n+size) * sizeof(Section)); + ptr = *out + *n; + *n += (int)size; + json_object_foreach(root, key, obj) { + section_reset(ptr); + ret = ret && section_parse(obj, ptr); + if(ret) { + ptr->name = strdup(key); + } + ptr++; + } + ret = true; + } + json_decref(root); + } return ret; } diff --git a/section/save.c b/section/save.c index 480d6ca..3649bfd 100644 --- a/section/save.c +++ b/section/save.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5fc3b3e..0729caa 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -116,3 +116,18 @@ add_unit_test( LIBRARIES cwalk jansson INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR} ) + +#[[ +add_unit_test( + NAME section + SOURCES + section.c + ${PROJECT_SOURCE_DIR}/section.c + ${PROJECT_SOURCE_DIR}/section/load.c + ${PROJECT_SOURCE_DIR}/message.c + ${PROJECT_SOURCE_DIR}/jsonhelpers.c + ${PROJECT_SOURCE_DIR}/message/console.c + LIBRARIES cwalk jansson + INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR} +) +#]] \ No newline at end of file diff --git a/test/cd.c b/test/cd.c index d042fbe..ce765ee 100644 --- a/test/cd.c +++ b/test/cd.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/comment.c b/test/comment.c index b73a1f8..14d0216 100644 --- a/test/comment.c +++ b/test/comment.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/label.c b/test/label.c index 2480239..95a9d6f 100644 --- a/test/label.c +++ b/test/label.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/memory.c b/test/memory.c index c74a683..1e0d780 100644 --- a/test/memory.c +++ b/test/memory.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/memory_map.c b/test/memory_map.c index ad348fd..6f1bb30 100644 --- a/test/memory_map.c +++ b/test/memory_map.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/message.c b/test/message.c index cf660b6..52068c6 100644 --- a/test/message.c +++ b/test/message.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/rom.c b/test/rom.c index c0ec916..b69f3d0 100644 --- a/test/rom.c +++ b/test/rom.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/section.c b/test/section.c index 954965d..2d2c64a 100644 --- a/test/section.c +++ b/test/section.c @@ -15,7 +15,7 @@ ¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯¬°¤*,¸_¸,*¤°¬°¤*,¸,*¤°¬¯ This file is part of Etripator, - copyright (c) 2009--2023 Vincent Cruz. + copyright (c) 2009--2024 Vincent Cruz. Etripator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by