MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / load

Method load

Source/Amiga/rjp1.cpp:40–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38}
39
40bool Rjp1::load(tSharedBuffer pSong, tSharedBuffer pInstruments ) {
41 uint8* songData = pSong->data();
42 uint8* instrumentsData = pInstruments->data();
43
44 if (!songData)
45 return false;
46
47 if ( readBEDWord(songData) == 'RJP1' && readBEDWord(songData + 4) == 'SMOD') {
48 songData += 8;
49
50 for (int i = 0; i < 7; ++i) {
51 uint32 size = readBEDWord(songData);
52 songData += 4;
53
54 _vars.songDataSize[i] = size;
55 _vars.songData[i] = (uint8 *)malloc(size);
56 if (!_vars.songData[i])
57 return false;
58
59 memcpy( _vars.songData[i], songData, size );
60 songData += size;
61
62 switch (i) {
63 case 0:
64 _vars.instrumentsCount = size / 32;
65 break;
66 case 1:
67 break;
68 case 2:
69 // sequence index to offsets, 1 per channel
70 _vars.subsongsCount = size / 4;
71 break;
72 case 3:
73 case 4:
74 // sequence offsets
75 break;
76 case 5:
77 case 6:
78 // sequence data
79 break;
80 default:
81 break;
82 }
83 }
84
85 if (readBEDWord(instrumentsData) == 'RJP1') {
86 instrumentsData += 4;
87
88 size_t size = pInstruments->size() - 4;
89 _vars.instData = (int8 *)malloc(size);
90 _vars.instDataSize = (uint32)size;
91
92 if (!_vars.instData)
93 return false;
94
95 memcpy( _vars.instData, instrumentsData, size );
96 instrumentsData += size;
97 }

Callers 1

makeRjp1StreamFunction · 0.45

Calls 2

readBEDWordFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected