Mercurial > hg > dmlib
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 { |