int YglInit(int width, int height, unsigned int depth) { unsigned int i; VideoInitGlut(); YglTMInit(width, height); if ((_Ygl = (Ygl *) malloc(sizeof(Ygl))) == NULL) return -1; _Ygl->depth = depth; if ((_Ygl->levels = (YglLevel *) malloc(sizeof(YglLevel) * depth)) == NULL) return -1; for(i = 0;i < depth;i++) { _Ygl->levels[i].currentQuad = 0; _Ygl->levels[i].maxQuad = 8 * 2000; #ifdef USEMICSHADERS _Ygl->levels[i].currentColors = 0; _Ygl->levels[i].maxColors = 16 * 2000; #endif if ((_Ygl->levels[i].quads = (int *) malloc(_Ygl->levels[i].maxQuad * sizeof(int))) == NULL) return -1; if ((_Ygl->levels[i].textcoords = (int *) malloc(_Ygl->levels[i].maxQuad * sizeof(int) * 2)) == NULL) return -1; #ifdef USEMICSHADERS if ((_Ygl->levels[i].colors = (unsigned char *) malloc(_Ygl->levels[i].maxColors * sizeof(unsigned char))) == NULL) return -1; #endif } YuiSetVideoAttribute(DOUBLEBUFFER, 1); if (!YglScreenInit(8, 8, 8, 24)) { if (!YglScreenInit(4, 4, 4, 24)) { if (!YglScreenInit(5, 6, 5, 16)) { YuiErrorMsg("Couldn't set GL mode\n"); return -1; } } } YglGLInit(width, height); _Ygl->st = 0; _Ygl->msglength = 0; // This is probably wrong, but it'll have to do for now if ((cachelist = (cache_struct *)malloc(0x100000 / 8 * sizeof(cache_struct))) == NULL) return -1; return 0; }
static void AllocAmendPrintString(const char *string1, const char *string2) { char *string; if ((string = (char *)malloc(strlen(string1) + strlen(string2) + 2)) == NULL) return; sprintf(string, "%s%s\n", string1, string2); YuiErrorMsg(string); free(string); }
void YabErrorMsg(const char * format, ...) { va_list l; int n; char * buffer; va_start(l, format); n = vsnprintf(NULL, 0, format, l); va_end(l); buffer = malloc(n + 1); va_start(l, format); vsprintf(buffer, format, l); va_end(l); YuiErrorMsg(buffer); free(buffer); }
void YabSetError(int type, const void *extra) { char tempstr[512]; SH2_struct *sh; switch (type) { case YAB_ERR_FILENOTFOUND: AllocAmendPrintString(_("File not found: "), extra); break; case YAB_ERR_MEMORYALLOC: YuiErrorMsg(_("Error allocating memory\n")); break; case YAB_ERR_FILEREAD: AllocAmendPrintString(_("Error reading file: "), extra); break; case YAB_ERR_FILEWRITE: AllocAmendPrintString(_("Error writing file: "), extra); break; case YAB_ERR_CANNOTINIT: AllocAmendPrintString(_("Cannot initialize "), extra); break; case YAB_ERR_SH2INVALIDOPCODE: sh = (SH2_struct *)extra; SH2GetRegisters(sh, &sh->regs); sprintf(tempstr, "%s SH2 invalid opcode\n\n" "R0 = %08lX\tR12 = %08lX\n" "R1 = %08lX\tR13 = %08lX\n" "R2 = %08lX\tR14 = %08lX\n" "R3 = %08lX\tR15 = %08lX\n" "R4 = %08lX\tSR = %08lX\n" "R5 = %08lX\tGBR = %08lX\n" "R6 = %08lX\tVBR = %08lX\n" "R7 = %08lX\tMACH = %08lX\n" "R8 = %08lX\tMACL = %08lX\n" "R9 = %08lX\tPR = %08lX\n" "R10 = %08lX\tPC = %08lX\n" "R11 = %08lX\n", sh->isslave ? "Slave" : "Master", (long)sh->regs.R[0], (long)sh->regs.R[12], (long)sh->regs.R[1], (long)sh->regs.R[13], (long)sh->regs.R[2], (long)sh->regs.R[14], (long)sh->regs.R[3], (long)sh->regs.R[15], (long)sh->regs.R[4], (long)sh->regs.SR.all, (long)sh->regs.R[5], (long)sh->regs.GBR, (long)sh->regs.R[6], (long)sh->regs.VBR, (long)sh->regs.R[7], (long)sh->regs.MACH, (long)sh->regs.R[8], (long)sh->regs.MACL, (long)sh->regs.R[9], (long)sh->regs.PR, (long)sh->regs.R[10], (long)sh->regs.PC, (long)sh->regs.R[11]); YuiErrorMsg(tempstr); break; case YAB_ERR_SH2READ: YuiErrorMsg(_("SH2 read error\n")); // fix me break; case YAB_ERR_SH2WRITE: YuiErrorMsg(_("SH2 write error\n")); // fix me break; case YAB_ERR_SDL: AllocAmendPrintString(_("SDL Error: "), extra); break; case YAB_ERR_OTHER: YuiErrorMsg((char *)extra); break; case YAB_ERR_UNKNOWN: default: YuiErrorMsg(_("Unknown error occurred\n")); break; } }