Ejemplo n.º 1
0
void btcmd(char* prompt_string,CMDENTRY app_cmds[],
              void(error_handler)(int))
{
    char* rlbuf = NULL;
    char* cp = NULL;
    static char cmdbuf[MAXBUFSZ+1];
    int status = 0;
    
    if (input == NULL) input = stdin;
    current_app_cmds = app_cmds;
    cblk.function = NULL;
    
    while (status >= 0) {
        if (rlbuf != NULL) {
            free(rlbuf);
            rlbuf = NULL;
        }
        if (tty_input(input)) {
#ifdef READLINE
            if (issue_prompt) 
                rlbuf = readline(prompt_string);
            else    
                rlbuf = readline(NULL);
            if (rlbuf != NULL) {
                if (strcmp(rlbuf,"") == 0) continue;
                strncpy(cmdbuf,rlbuf,MAXBUFSZ);
            }
#else
            if (issue_prompt) printf("%s",prompt_string);
            cp = fgets(cmdbuf,MAXBUFSZ,input);
#endif            
        }
        else {
            cp = fgets(cmdbuf,MAXBUFSZ,input);
        }
        if (cp == NULL && rlbuf == NULL) {
            if (input == stdin) {
                return; /* end of file in tty command stream */
            }
            else {
                btcmd_close_execute(&cblk);
                continue;
            }
        }
        find_cmd(cmdbuf,app_cmds);
        if (cblk.function != NULL) {
            if (cblk.nargs < 0) {
                bad_args(cblk.cmd);
                status = 1;
            }
            else {
                rl_history(input,rlbuf);
                if (echo && !tty_input(input)) {
                    fprintf(stdout,"%s%s",
                            prompt_string,
                            cmdbuf);
                }
                status = (cblk.function)(&cblk);
                if (status > 0  && !cblk.unknown_cmd) {
                    (error_handler)(status);
                }
            }
            if (status > 0 && stop_on_error && !tty_input(input)) {
                fprintf(stdout,
                        "command file processing terminated "
                        "(error on).\n");
                if (input == stdin) {
                    return; /* must be error in here document */
                }
                else {
                    while (input != stdin) btcmd_close_execute(&cblk);
                }
            }   
        }
    }
    return;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
	printf("Zetsubou v0.1. Written by SquidMan (Alex Marshall)\nFormat information from YAGCD. RGB5A3 code by booto. CMP code by segher.\nLightly based off of gentpl by comex.\n\n");
	if(argc < 3)
		bad_args(argv[0]);
	char type = toupper(argv[1][0]);
	char fmt = toupper(argv[1][1]);
	if(type == 'R') {	// Read TPL.
		if(argc != 3)
			bad_args(argv[0]);
		FILE* fp = fopen(argv[2], "rb");
		if(fp == NULL) {
			printf("Error opening %s.\n", argv[2]);
			exit(1);
		}
		char *basename = strdup(argv[2]);
		char *last_dot = strrchr(basename, '.');
		if(last_dot) *last_dot = 0;
		fseek(fp, 0, SEEK_END);
		u32 tplsize = ftell(fp);
		u8* tplbuf  = (u8*)malloc(tplsize);
		fseek(fp, 0, SEEK_SET);
		fread(tplbuf, tplsize, 1, fp);
		fclose(fp);
		int ret;
		int outfmt;
		if(fmt == 'B')
			outfmt = 0;
		else if(fmt == 'P')
			outfmt = 1;
		else
			bad_args(argv[0]);
		ret = TPL_ConvertToGD(tplbuf, tplsize, basename, outfmt);
		free(tplbuf);
		free(basename);
		if(ret < 0) {
			printf("Error converting from TPL.\n");
			exit(1);
		}
	}else if(type == 'W') {	// Write TPL.
		if(argc < 5)
			bad_args(argv[0]);
		char** names = (char**)calloc(sizeof(char*), argc - 4);
		int i;
		for(i = 0; i < argc - 4; i++)
			names[i] = argv[i + 3];
		int format;
		char formatstr[256];
		memset(formatstr, 0, 256);
		for(i = 0; i < strlen(argv[2]); i++) formatstr[i] = toupper(argv[2][i]);
		if(strcmp(formatstr, "I4") == 0) format = TPL_FORMAT_I4;
		else if(strcmp(formatstr, "I8") == 0) format = TPL_FORMAT_I8;
		else if(strcmp(formatstr, "IA4") == 0) format = TPL_FORMAT_IA4;
		else if(strcmp(formatstr, "IA8") == 0) format = TPL_FORMAT_IA8;
		else if(strcmp(formatstr, "RGB565") == 0) format = TPL_FORMAT_RGB565;
		else if(strcmp(formatstr, "RGB5A3") == 0) format = TPL_FORMAT_RGB5A3;
		else if(strcmp(formatstr, "RGBA8") == 0) format = TPL_FORMAT_RGBA8;
		else if(strcmp(formatstr, "CI4") == 0) format = TPL_FORMAT_CI4;
		else if(strcmp(formatstr, "CI8") == 0) format = TPL_FORMAT_CI8;
		else if(strcmp(formatstr, "CI14X2") == 0) format = TPL_FORMAT_CI14X2;
		else if(strcmp(formatstr, "CMP") == 0) format = TPL_FORMAT_CMP;
		int ret;
		int outfmt;
		if(fmt == 'B')
			outfmt = 0;
		else if(fmt == 'P')
			outfmt = 1;
		else
			bad_args(argv[0]);
		ret = TPL_ConvertFromGDs(argc - 4, names, argv[argc - 1], format, outfmt);
		if(ret < 0) {
			printf("Error converting to TPL.\n");
			exit(1);
		}
	}
	return 0;
}