static BOOL S3M_ReadPattern(void) { int row=0,flag,ch; S3MNOTE *n; S3MNOTE dummy; /* clear pattern data */ mod_memset(s3mbuf, (char)255, 16*64*sizeof(S3MNOTE)); while(row<64){ flag=_mm_read_UBYTE(); // if(flag==255) // { // gModPlayerErrorMessage=ERROR_LOADING_PATTERN; // return 0; // } if(flag) { ch=flag&31; if(mh_s3m->channels[ch]<16) { n=&s3mbuf[(64U*remap[ch])+row]; } else { n=&dummy; } if(flag&32) { n->note=_mm_read_UBYTE(); n->ins=_mm_read_UBYTE(); } if(flag&64) { n->vol=_mm_read_UBYTE(); } if(flag&128) { n->cmd=_mm_read_UBYTE(); n->inf=_mm_read_UBYTE(); } } else { row++; } } return 1; }
static void XM_ReadNote(XMNOTE *n) { UBYTE cmp; mod_memset(n,0,sizeof(XMNOTE)); cmp=_mm_read_SBYTE(); if(cmp&0x80){ if(cmp&1) n->note=_mm_read_SBYTE(); if(cmp&2) n->ins=_mm_read_SBYTE(); if(cmp&4) n->vol=_mm_read_SBYTE(); if(cmp&8) n->eff=_mm_read_SBYTE(); if(cmp&16) n->dat=_mm_read_SBYTE(); } else{ n->note=cmp; n->ins=_mm_read_SBYTE(); n->vol=_mm_read_SBYTE(); n->eff=_mm_read_SBYTE(); n->dat=_mm_read_SBYTE(); } }