comparison tools/lib64gfx.c @ 1852:219417325036

Split dmC64GetOpMemBlockAndName() into dmC64GetOpMemBlock() and dmC64GetOpSubjectName() functions for some flexibility.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 22 Jun 2018 23:40:20 +0300
parents cfc7046fb176
children 2081bb4a998a
comparison
equal deleted inserted replaced
1851:cfc7046fb176 1852:219417325036
808 808
809 return TRUE; 809 return TRUE;
810 } 810 }
811 811
812 812
813 void dmC64GetOpMemBlockAndName(const DMC64Image *img, const int subject, const int bank, const DMC64MemBlock **blk, char **blkname) 813 const char *dmC64GetOpSubjectName(const int subject)
814 { 814 {
815 switch (subject) 815 static const char *subjectNames[DS_LAST] =
816 { 816 {
817 case DS_COLOR_RAM : *blk = &img->color[bank]; *blkname = "Color RAM"; break; 817 "Color RAM",
818 case DS_SCREEN_RAM : *blk = &img->screen[bank]; *blkname = "Screen RAM"; break; 818 "Bitmap RAM",
819 case DS_BITMAP_RAM : *blk = &img->bitmap[bank]; *blkname = "Bitmap RAM"; break; 819 "Screen RAM",
820 case DS_CHAR_DATA : *blk = &img->charData[bank]; *blkname = "Character data"; break; 820 "Extra data",
821 case DS_EXTRA_DATA : *blk = &img->extraData[bank]; *blkname = "Extra data"; break; 821 "Character data",
822 default: *blk = NULL; *blkname = NULL; break; 822
823 } 823 "d020",
824 824 "d021/bgcol",
825 if (bank >= img->nbanks) 825 "d022",
826 *blk = NULL; 826 "d023",
827 "d024",
828 };
829 if (subject >= 0 && subject < DS_LAST)
830 return subjectNames[subject];
831 else
832 return NULL;
833 }
834
835
836 void dmC64GetOpMemBlock(const DMC64Image *img, const int subject, const int bank, const DMC64MemBlock **blk)
837 {
838 *blk = NULL;
839
840 if (bank >= 0 && bank < img->nbanks)
841 {
842 switch (subject)
843 {
844 case DS_COLOR_RAM : *blk = &img->color[bank]; break;
845 case DS_SCREEN_RAM : *blk = &img->screen[bank]; break;
846 case DS_BITMAP_RAM : *blk = &img->bitmap[bank]; break;
847 case DS_CHAR_DATA : *blk = &img->charData[bank]; break;
848 case DS_EXTRA_DATA : *blk = &img->extraData[bank]; break;
849 }
850 }
827 } 851 }
828 852
829 853
830 int dmC64DecodeGenericBMP(DMC64Image *img, const DMGrowBuf *buf, const DMC64ImageFormat *fmt) 854 int dmC64DecodeGenericBMP(DMC64Image *img, const DMGrowBuf *buf, const DMC64ImageFormat *fmt)
831 { 855 {
846 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++) 870 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
847 { 871 {
848 const DMC64EncDecOp *op = fmtGetEncDecOp(fmt, i); 872 const DMC64EncDecOp *op = fmtGetEncDecOp(fmt, i);
849 const Uint8 *src; 873 const Uint8 *src;
850 DMC64MemBlock *blk = NULL; 874 DMC64MemBlock *blk = NULL;
851 char *blkname = NULL; 875 const char *blkname = NULL;
852 size_t size; 876 size_t size;
853 Uint8 value; 877 Uint8 value;
854 878
855 // Check for last operator 879 // Check for last operator
856 if (op->type == DO_LAST) 880 if (op->type == DO_LAST)
895 case DS_SCREEN_RAM: 919 case DS_SCREEN_RAM:
896 case DS_BITMAP_RAM: 920 case DS_BITMAP_RAM:
897 case DS_CHAR_DATA: 921 case DS_CHAR_DATA:
898 case DS_EXTRA_DATA: 922 case DS_EXTRA_DATA:
899 // XXX BZZZT .. a nasty cast here --v 923 // XXX BZZZT .. a nasty cast here --v
900 dmC64GetOpMemBlockAndName(img, op->subject, op->bank, (const DMC64MemBlock **) &blk, &blkname); 924 dmC64GetOpMemBlock(img, op->subject, op->bank, (const DMC64MemBlock **) &blk);
925 blkname = dmC64GetOpSubjectName(op->subject);
926
901 if ((dmC64MemBlockReAlloc(blk, op->offs2 + size)) != DMERR_OK) 927 if ((dmC64MemBlockReAlloc(blk, op->offs2 + size)) != DMERR_OK)
902 { 928 {
903 return dmError(DMERR_MALLOC, 929 return dmError(DMERR_MALLOC,
904 "Could not allocate '%s' block! " 930 "Could not allocate '%s' block! "
905 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n", 931 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
1051 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++) 1077 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
1052 { 1078 {
1053 const DMC64EncDecOp *op = fmtGetEncDecOp(fmt, i); 1079 const DMC64EncDecOp *op = fmtGetEncDecOp(fmt, i);
1054 size_t size, chksize; 1080 size_t size, chksize;
1055 const DMC64MemBlock *blk = NULL; 1081 const DMC64MemBlock *blk = NULL;
1056 char *blkname = NULL; 1082 const char *blkname = NULL;
1057 Uint8 value; 1083 Uint8 value;
1058 1084
1059 // Check for last operator 1085 // Check for last operator
1060 if (op->type == DO_LAST) 1086 if (op->type == DO_LAST)
1061 break; 1087 break;
1096 case DS_COLOR_RAM: 1122 case DS_COLOR_RAM:
1097 case DS_SCREEN_RAM: 1123 case DS_SCREEN_RAM:
1098 case DS_BITMAP_RAM: 1124 case DS_BITMAP_RAM:
1099 case DS_CHAR_DATA: 1125 case DS_CHAR_DATA:
1100 case DS_EXTRA_DATA: 1126 case DS_EXTRA_DATA:
1101 dmC64GetOpMemBlockAndName(img, op->subject, op->bank, &blk, &blkname); 1127 dmC64GetOpMemBlock(img, op->subject, op->bank, &blk);
1128 blkname = dmC64GetOpSubjectName(op->subject);
1129
1102 switch (op->type) 1130 switch (op->type)
1103 { 1131 {
1104 case DO_COPY: 1132 case DO_COPY:
1105 if (blk->data == NULL) 1133 if (blk->data == NULL)
1106 { 1134 {