mirror of
https://github.com/kevinnlsamuel/stdouterr.git
synced 2025-12-06 09:55:58 +05:30
113 lines
2.1 KiB
C
113 lines
2.1 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h> //remove if alt to `malloc` + clone found
|
|
|
|
unsigned long int hash(){
|
|
//implement a hashing function
|
|
return 123456;
|
|
}
|
|
|
|
// define hashes of legal cli flags
|
|
/*
|
|
#define OUTPUT hash("-o");
|
|
#define ERROR hash("-e");
|
|
#define NOOUT hash("-t");
|
|
#definte NOERR hash("-r");
|
|
*/
|
|
|
|
// default values
|
|
char *output = "This is output", *error = "This is an error message";
|
|
int printOut = 1, printErr = 1;
|
|
|
|
// to make the cli args globally available
|
|
char **argv;
|
|
|
|
// ! use minimal # of functions to reduce stacks ! //
|
|
|
|
void print_usage(){
|
|
printf("HELP MENU PRINTED");
|
|
// JK. make a help menu
|
|
}
|
|
|
|
|
|
int parse(const int index){
|
|
|
|
int _return_value = 1;
|
|
char* param = argv[index];
|
|
|
|
//printf("currently parsing index %d of argv: %s\n", index, param);
|
|
|
|
if(param[0] == '-') {
|
|
//printf("it's an option\n");
|
|
switch(param [1]){
|
|
case 'o':
|
|
output = argv[index+1];
|
|
++_return_value;
|
|
break;
|
|
case 'e':
|
|
error = argv[index+1];
|
|
++_return_value;
|
|
break;
|
|
case 't':
|
|
printOut = 0;
|
|
break;
|
|
case 'r':
|
|
printErr = 0;
|
|
break;
|
|
default:
|
|
fprintf(stderr, "ERROR: unrecognised flags\n");
|
|
print_usage();
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
// hash `param`
|
|
/*
|
|
hash(param)
|
|
* */
|
|
// run switch-case matching on hash
|
|
/*
|
|
switch (hashed_param) {
|
|
case OUTPUT:
|
|
output = argv[index+1];
|
|
++_return_value;
|
|
case ERROR:
|
|
error = argv[index+1];
|
|
++_return_value;
|
|
case NOOUT:
|
|
printOut = 0;
|
|
case NOERR:
|
|
printErr = 0;
|
|
default:
|
|
fprintf(stderr, "ERROR: unrecognised flags\n");
|
|
print_usage();
|
|
exit(1);
|
|
}
|
|
*/
|
|
|
|
return _return_value;
|
|
}
|
|
|
|
int main(const int argc, char **_argv){
|
|
|
|
//look for alt method to make _argv globally accessible
|
|
argv = malloc( sizeof *argv * argc);
|
|
for(int i=0; i<argc; i++){
|
|
argv[i] = _argv[i];
|
|
}
|
|
|
|
if(argc > 1){
|
|
//parse the arguments
|
|
int counter = 1;
|
|
while ( counter < argc ){
|
|
counter += parse(counter);
|
|
}
|
|
}
|
|
|
|
if(printOut)
|
|
fprintf(stdout, "%s\n", output);
|
|
if(printErr)
|
|
fprintf(stderr, "%s\n", error);
|
|
|
|
return 0;
|
|
}
|