Mercurial > hg > dmlib
comparison src/dmsimple.c @ 958:985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 27 Feb 2015 03:58:25 +0200 |
parents | 2c6b092328be |
children | b7c01d4ca984 |
comparison
equal
deleted
inserted
replaced
957:b66653c9acb3 | 958:985225a93aeb |
---|---|
51 case 1: | 51 case 1: |
52 dmVerbosity++; | 52 dmVerbosity++; |
53 break; | 53 break; |
54 | 54 |
55 default: | 55 default: |
56 dmError("Unknown option '%s'.\n", currArg); | 56 dmError(DMERR_INTERNAL, |
57 "Unknown option '%s'.\n", currArg); | |
57 return FALSE; | 58 return FALSE; |
58 } | 59 } |
59 | 60 |
60 return TRUE; | 61 return TRUE; |
61 } | 62 } |
122 SDL_FreeSurface(engine.screen); | 123 SDL_FreeSurface(engine.screen); |
123 | 124 |
124 engine.screen = SDL_SetVideoMode(width, height, depth, flags); | 125 engine.screen = SDL_SetVideoMode(width, height, depth, flags); |
125 if (engine.screen == NULL) | 126 if (engine.screen == NULL) |
126 { | 127 { |
127 dmError("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); | 128 dmError(DMERR_INIT_FAIL, |
129 "Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); | |
128 return FALSE; | 130 return FALSE; |
129 } | 131 } |
130 | 132 |
131 SDL_WM_SetCaption(dmProgDesc, dmProgName); | 133 SDL_WM_SetCaption(dmProgDesc, dmProgName); |
132 | 134 |
255 sscanf(str, "textWindowed %s", engine.setupTextWindowed) != 1 && | 257 sscanf(str, "textWindowed %s", engine.setupTextWindowed) != 1 && |
256 sscanf(str, "textPrefix %s", engine.setupTextPrefix) != 1 && | 258 sscanf(str, "textPrefix %s", engine.setupTextPrefix) != 1 && |
257 sscanf(str, "textEnterToStart %s", engine.setupTextEnterToStart) != 1 | 259 sscanf(str, "textEnterToStart %s", engine.setupTextEnterToStart) != 1 |
258 ) | 260 ) |
259 { | 261 { |
260 dmError("Syntax error in configuration:\n%s\n", buf); | 262 res = dmError(DMERR_INVALID_DATA, |
261 res = DMERR_INVALID_DATA; | 263 "Syntax error in configuration:\n%s\n", buf); |
262 goto out; | 264 goto out; |
263 } | 265 } |
264 } | 266 } |
265 | 267 |
266 out: | 268 out: |
294 goto out; | 296 goto out; |
295 | 297 |
296 SDL_Rect **modes = SDL_ListModes(engine.screen->format, engine.screen->flags | SDL_FULLSCREEN); | 298 SDL_Rect **modes = SDL_ListModes(engine.screen->format, engine.screen->flags | SDL_FULLSCREEN); |
297 if (modes == (SDL_Rect**) 0) | 299 if (modes == (SDL_Rect**) 0) |
298 { | 300 { |
299 dmError("No compatible video resolutions/depths available at all. Bailing out.\n"); | 301 dmError(DMERR_INIT_FAIL, |
302 "No compatible video resolutions/depths available at all. Bailing out.\n"); | |
300 goto out; | 303 goto out; |
301 } | 304 } |
302 | 305 |
303 if (modes != (SDL_Rect**) -1) | 306 if (modes != (SDL_Rect**) -1) |
304 { | 307 { |
308 engineAddModeToList(modes[i]->w, modes[i]->h); | 311 engineAddModeToList(modes[i]->w, modes[i]->h); |
309 } | 312 } |
310 | 313 |
311 if (nengineModeList == 0) | 314 if (nengineModeList == 0) |
312 { | 315 { |
313 dmError("Umm, no modes found.\n"); | 316 dmError(DMERR_INIT_FAIL, |
317 "Umm, no modes found.\n"); | |
314 goto out; | 318 goto out; |
315 } | 319 } |
316 | 320 |
317 qsort(engineModeList, nengineModeList, sizeof(engineModeList[0]), engineModeSort); | 321 qsort(engineModeList, nengineModeList, sizeof(engineModeList[0]), engineModeSort); |
318 | 322 |
361 dmf_close(file); | 365 dmf_close(file); |
362 } | 366 } |
363 | 367 |
364 if (menuBgImage == NULL || menuBarImage == NULL) | 368 if (menuBgImage == NULL || menuBarImage == NULL) |
365 { | 369 { |
366 dmError("Could not instantiate setup screen images, %d: %s\n", | 370 dmError(result, |
371 "Could not instantiate setup screen images, %d: %s\n", | |
367 result, dmErrorStr(result)); | 372 result, dmErrorStr(result)); |
368 goto out; | 373 goto out; |
369 } | 374 } |
370 | 375 |
371 if (menuBgImage->w != DM_VSETUP_WIDTH || | 376 if (menuBgImage->w != DM_VSETUP_WIDTH || |
372 menuBgImage->h != DM_VSETUP_HEIGHT) | 377 menuBgImage->h != DM_VSETUP_HEIGHT) |
373 { | 378 { |
374 dmError("Setup screen background image does not match " | 379 dmError(DMERR_INIT_FAIL, |
380 "Setup screen background image does not match " | |
375 "required dimensions (%dx%d vs %dx%d)\n", | 381 "required dimensions (%dx%d vs %dx%d)\n", |
376 menuBgImage->w, menuBgImage->h, | 382 menuBgImage->w, menuBgImage->h, |
377 DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT); | 383 DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT); |
378 goto out; | 384 goto out; |
379 } | 385 } |
386 result = dmLoadBitmapFont(file, &menuFont); | 392 result = dmLoadBitmapFont(file, &menuFont); |
387 dmf_close(file); | 393 dmf_close(file); |
388 } | 394 } |
389 if (result != DMERR_OK) | 395 if (result != DMERR_OK) |
390 { | 396 { |
391 dmError("Could not instantiate setup screen font, %d: %s\n", | 397 dmError(result, |
398 "Could not instantiate setup screen font, %d: %s\n", | |
392 result, dmErrorStr(result)); | 399 result, dmErrorStr(result)); |
393 goto out; | 400 goto out; |
394 } | 401 } |
395 | 402 |
396 SDL_Surface *tmp = dmConvertScaledSurface(menuBgImage, | 403 SDL_Surface *tmp = dmConvertScaledSurface(menuBgImage, |
397 engine.screen->format, engine.screen->flags, | 404 engine.screen->format, engine.screen->flags, |
398 engine.screen->w, engine.screen->h); | 405 engine.screen->w, engine.screen->h); |
399 if (tmp == NULL) | 406 if (tmp == NULL) |
400 { | 407 { |
401 dmError("Could not convert setup screen background image.\n"); | 408 dmError(DMERR_MALLOC, |
409 "Could not convert setup screen background image.\n"); | |
402 goto out; | 410 goto out; |
403 } | 411 } |
404 | 412 |
405 SDL_FreeSurface(menuBgImage); | 413 SDL_FreeSurface(menuBgImage); |
406 menuBgImage = tmp; | 414 menuBgImage = tmp; |
476 | 484 |
477 // Draw frame | 485 // Draw frame |
478 engine.frameTime = SDL_GetTicks(); | 486 engine.frameTime = SDL_GetTicks(); |
479 if (SDL_MUSTLOCK(engine.screen) && SDL_LockSurface(engine.screen) != 0) | 487 if (SDL_MUSTLOCK(engine.screen) && SDL_LockSurface(engine.screen) != 0) |
480 { | 488 { |
481 dmError("Can't lock surface.\n"); | 489 dmError(DMERR_INTERNAL, "Can't lock surface.\n"); |
482 goto out; | 490 goto out; |
483 } | 491 } |
484 | 492 |
485 // Render the menu | 493 // Render the menu |
486 dmDirectBlitSurface(menuBgImage, engine.screen); | 494 dmDirectBlitSurface(menuBgImage, engine.screen); |
608 // Initialize resource subsystem | 616 // Initialize resource subsystem |
609 dmPrint(1, "Initializing resources subsystem.\n"); | 617 dmPrint(1, "Initializing resources subsystem.\n"); |
610 if ((err = dmResourcesInit(&engine.resources, engine.optPackFilename, | 618 if ((err = dmResourcesInit(&engine.resources, engine.optPackFilename, |
611 engine.optDataPath, engine.optResFlags, engineClassifier)) != DMERR_OK) | 619 engine.optDataPath, engine.optResFlags, engineClassifier)) != DMERR_OK) |
612 { | 620 { |
613 dmError("Could not initialize resource manager, #%d: %s.\n", err, dmErrorStr(err)); | 621 dmError(err, |
622 "Could not initialize resource manager, #%d: %s.\n", | |
623 err, dmErrorStr(err)); | |
614 goto error_exit; | 624 goto error_exit; |
615 } | 625 } |
616 | 626 |
617 // Initialize SDL components | 627 // Initialize SDL components |
618 dmPrint(1, "Initializing libSDL.\n"); | 628 dmPrint(1, "Initializing libSDL.\n"); |
619 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) | 629 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) |
620 { | 630 { |
621 dmError("Could not initialize SDL: %s\n", SDL_GetError()); | 631 dmError(DMERR_INIT_FAIL, |
632 "Could not initialize SDL: %s\n", | |
633 SDL_GetError()); | |
622 goto error_exit; | 634 goto error_exit; |
623 } | 635 } |
624 initSDL = TRUE; | 636 initSDL = TRUE; |
625 | 637 |
626 // Set start time | 638 // Set start time |
665 dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n", | 677 dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n", |
666 engine.jssFormat, engine.optAfmt.channels, engine.optAfmt.freq); | 678 engine.jssFormat, engine.optAfmt.channels, engine.optAfmt.freq); |
667 | 679 |
668 if ((engine.jssDev = jvmInit(engine.jssFormat, engine.optAfmt.channels, engine.optAfmt.freq, JMIX_AUTO)) == NULL) | 680 if ((engine.jssDev = jvmInit(engine.jssFormat, engine.optAfmt.channels, engine.optAfmt.freq, JMIX_AUTO)) == NULL) |
669 { | 681 { |
670 dmError("jvmInit() returned NULL, voi perkele.\n"); | 682 dmError(DMERR_INIT_FAIL, |
683 "jvmInit() returned NULL, voi perkele.\n"); | |
671 goto error_exit; | 684 goto error_exit; |
672 } | 685 } |
673 | 686 |
674 if ((engine.jssPlr = jmpInit(engine.jssDev)) == NULL) | 687 if ((engine.jssPlr = jmpInit(engine.jssDev)) == NULL) |
675 { | 688 { |
676 dmError("jmpInit() returned NULL\n"); | 689 dmError(DMERR_INIT_FAIL, |
690 "jmpInit() returned NULL\n"); | |
677 goto error_exit; | 691 goto error_exit; |
678 } | 692 } |
679 #else | 693 #else |
680 dmError("miniJSS support not included.\n"); | 694 dmError(DMERR_INTERNAL, "miniJSS support not included.\n"); |
681 #endif | 695 #endif |
682 break; | 696 break; |
683 | 697 |
684 case DM_ASETUP_TREMOR: | 698 case DM_ASETUP_TREMOR: |
685 #ifndef DM_USE_TREMOR | 699 #ifndef DM_USE_TREMOR |
686 dmError("Tremor support not included.\n"); | 700 dmError(DMERR_INTERNAL, "Tremor support not included.\n"); |
687 #endif | 701 #endif |
688 break; | 702 break; |
689 } | 703 } |
690 | 704 |
691 // Initialize SDL audio | 705 // Initialize SDL audio |
693 engine.optAfmt.format, engine.optAfmt.channels, | 707 engine.optAfmt.format, engine.optAfmt.channels, |
694 engine.optAfmt.freq, engine.optAfmt.samples); | 708 engine.optAfmt.freq, engine.optAfmt.samples); |
695 | 709 |
696 if ((err = engineInitAudioParts(&engine)) != DMERR_OK) | 710 if ((err = engineInitAudioParts(&engine)) != DMERR_OK) |
697 { | 711 { |
698 dmError("engineInitAudioParts() failed: #%d: %s\n", err, dmErrorStr(err)); | 712 dmError(err, |
713 "engineInitAudioParts() failed: #%d: %s\n", | |
714 err, dmErrorStr(err)); | |
699 goto error_exit; | 715 goto error_exit; |
700 } | 716 } |
701 | 717 |
702 // Initialize SDL video | 718 // Initialize SDL video |
703 if (engine.demoInitPreVideo != NULL && | 719 if (engine.demoInitPreVideo != NULL && |
704 (err = engine.demoInitPreVideo(&engine)) != DMERR_OK) | 720 (err = engine.demoInitPreVideo(&engine)) != DMERR_OK) |
705 { | 721 { |
706 dmError("demoInitPreVideo() failed, #%d: %s\n", err, dmErrorStr(err)); | 722 dmError(err, |
723 "demoInitPreVideo() failed, #%d: %s\n", | |
724 err, dmErrorStr(err)); | |
707 goto error_exit; | 725 goto error_exit; |
708 } | 726 } |
709 | 727 |
710 if (!engineInitializeVideo()) | 728 if (!engineInitializeVideo()) |
711 goto error_exit; | 729 goto error_exit; |
712 | 730 |
713 if (engine.demoInitPostVideo != NULL && | 731 if (engine.demoInitPostVideo != NULL && |
714 (err = engine.demoInitPostVideo(&engine)) != DMERR_OK) | 732 (err = engine.demoInitPostVideo(&engine)) != DMERR_OK) |
715 { | 733 { |
716 dmError("demoInitPostVideo() failed, #%d: %s\n", err, dmErrorStr(err)); | 734 dmError(err, |
735 "demoInitPostVideo() failed, #%d: %s\n", | |
736 err, dmErrorStr(err)); | |
717 goto error_exit; | 737 goto error_exit; |
718 } | 738 } |
719 | 739 |
720 // Hide cursor | 740 // Hide cursor |
721 SDL_ShowCursor(SDL_DISABLE); | 741 SDL_ShowCursor(SDL_DISABLE); |
738 } | 758 } |
739 | 759 |
740 // Initialize effects | 760 // Initialize effects |
741 if ((err = engineInitializeEffects(&engine)) != DMERR_OK) | 761 if ((err = engineInitializeEffects(&engine)) != DMERR_OK) |
742 { | 762 { |
743 dmError("Effects initialization failed, #%d: %s\n", | 763 dmError(err, |
764 "Effects initialization failed, #%d: %s\n", | |
744 err, dmErrorStr(err)); | 765 err, dmErrorStr(err)); |
745 goto error_exit; | 766 goto error_exit; |
746 } | 767 } |
747 | 768 |
748 // Use a timeline, if set | 769 // Use a timeline, if set |
749 #ifdef DM_USE_TIMELINE | 770 #ifdef DM_USE_TIMELINE |
750 if (engine.timeline != NULL) | 771 if (engine.timeline != NULL) |
751 { | 772 { |
752 if ((err = dmLoadTimeline(engine.timeline, &engine.tl)) != DMERR_OK) | 773 if ((err = dmLoadTimeline(engine.timeline, &engine.tl)) != DMERR_OK) |
753 { | 774 { |
754 dmError("Error loading timeline, #%d: %s\n", err, | 775 dmError(err, |
755 dmErrorStr(err)); | 776 "Error loading timeline, #%d: %s\n", |
777 err, dmErrorStr(err)); | |
756 goto error_exit; | 778 goto error_exit; |
757 } | 779 } |
758 | 780 |
759 if ((err = dmPrepareTimeline(engine.tl, engine.ptl)) != DMERR_OK) | 781 if ((err = dmPrepareTimeline(engine.tl, engine.ptl)) != DMERR_OK) |
760 { | 782 { |
761 dmError("Error creating prepared timeline, #%d: %s\n", | 783 dmError(err, |
784 "Error creating prepared timeline, #%d: %s\n", | |
762 err, dmErrorStr(err)); | 785 err, dmErrorStr(err)); |
763 goto error_exit; | 786 goto error_exit; |
764 } | 787 } |
765 } | 788 } |
766 #endif | 789 #endif |
831 engine.startTime = engine.frameTime - engine.pauseTime; | 854 engine.startTime = engine.frameTime - engine.pauseTime; |
832 } | 855 } |
833 | 856 |
834 if (SDL_MUSTLOCK(engine.screen) && SDL_LockSurface(engine.screen) != 0) | 857 if (SDL_MUSTLOCK(engine.screen) && SDL_LockSurface(engine.screen) != 0) |
835 { | 858 { |
836 dmError("Can't lock surface.\n"); | 859 dmError(DMERR_INTERNAL, "Can't lock surface.\n"); |
837 goto error_exit; | 860 goto error_exit; |
838 } | 861 } |
839 | 862 |
840 // Call main tick | 863 // Call main tick |
841 if (engine.demoRender != NULL) | 864 if (engine.demoRender != NULL) |