git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-support/ihxcheck/ihxcheck.c

      1 // This is free and unencumbered software released into the public domain.
      2 // For more information, please refer to <https://unlicense.org>
      3 // bbbbbr 2020
      4 
      5 #include <stdio.h>
      6 #include <string.h>
      7 #include <stdlib.h>
      8 #include <unistd.h>
      9 #include <stdbool.h>
     10 #include <stdint.h>
     11 
     12 #include "ihx_file.h"
     13 #include "areas.h"
     14 
     15 #define MAX_STR_LEN     4096
     16 
     17 void display_help(void);
     18 int handle_args(int argc, char * argv[]);
     19 
     20 char filename_in[MAX_STR_LEN] = {'\0'};
     21 
     22 
     23 void display_help(void) {
     24     fprintf(stdout,
     25            "ihx_check input_file.ihx [options]\n"
     26            "\n"
     27            "Options\n"
     28            "-h : Show this help\n"
     29            "-e : Treat warnings as errors\n"
     30            "\n"
     31            "Use: Read a .ihx and warn about overlapped areas.\n"
     32            "Example: \"ihx_check build/MyProject.ihx\"\n"
     33            );
     34 }
     35 
     36 
     37 int handle_args(int argc, char * argv[]) {
     38 
     39     int i;
     40 
     41     if( argc < 2 ) {
     42         display_help();
     43         return false;
     44     }
     45 
     46     // Copy input filename (if not preceded with option dash)
     47     if (argv[1][0] != '-')
     48         snprintf(filename_in, sizeof(filename_in), "%s", argv[1]);
     49 
     50     // Start at first optional argument, argc is zero based
     51     for (i = 1; i <= (argc -1); i++ ) {
     52 
     53         if (strstr(argv[i], "-h") == argv[i]) {
     54             display_help();
     55             return false;  // Don't parse input when -h is used
     56 
     57         } else if (strstr(argv[i], "-e") == argv[i]) {
     58             set_option_warnings_as_errors(true);
     59         }
     60 
     61     }
     62 
     63     return true;
     64 }
     65 
     66 
     67 int matches_extension(char * filename, char * extension) {
     68     return (strcmp(filename + (strlen(filename) - strlen(extension)), extension) == 0);
     69 }
     70 
     71 
     72 int main( int argc, char *argv[] )  {
     73 
     74     int ret = EXIT_FAILURE; // Exit with failure by default
     75 
     76     if (handle_args(argc, argv)) {
     77 
     78         // Must at least have extension
     79         if (strlen(filename_in) >=5) {
     80             // detect file extension
     81             if (matches_extension(filename_in, (char *)".ihx")) {
     82                 ret = ihx_file_process_areas(filename_in);
     83             }
     84         }
     85     }
     86 
     87     return ret; // Exit with failure by default
     88 }

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.