static UBYTE* S3M_ConvertTrack(S3MNOTE* tr) { int t; UniReset(); for(t=0;t<64;t++) { UBYTE note,ins,vol; note=tr[t].note; ins=tr[t].ins; vol=tr[t].vol; if((ins)&&(ins!=255)) UniInstrument(ins-1); if(note!=255) { if(note==254) { UniPTEffect(0xc,0); /* note cut command */ vol=255; } else UniNote(((note>>4)*OCTAVE)+(note&0xf)); /* normal note */ } if(vol<255) UniPTEffect(0xc,vol); S3MIT_ProcessCmd(tr[t].cmd,tr[t].inf, tracker == 1 ? S3MIT_OLDSTYLE | S3MIT_SCREAM : S3MIT_OLDSTYLE); UniNewline(); } return UniDup(); }
static UBYTE* IT_ConvertTrack(ITNOTE* tr,UWORD numrows) { int t; UBYTE note,ins,volpan; UniReset(); for(t=0;t<numrows;t++) { note=tr[t*of.numchn].note; ins=tr[t*of.numchn].ins; volpan=tr[t*of.numchn].volpan; if(note!=255) { if(note==253) UniWriteByte(UNI_KEYOFF); else if(note==254) { UniPTEffect(0xc,-1); /* note cut command */ volpan=255; } else UniNote(note); } if((ins)&&(ins<100)) UniInstrument(ins-1); else if(ins==253) UniWriteByte(UNI_KEYOFF); else if(ins!=255) { /* crap */ _mm_errno=MMERR_LOADING_PATTERN; return NULL; } /* process volume / panning column volume / panning effects do NOT all share the same memory address yet. */ if(volpan<=64) UniVolEffect(VOL_VOLUME,volpan); else if(volpan<=74) /* fine volume slide up (65-74) */ UniVolEffect(VOL_VOLSLIDE,0x0f+((volpan-65)<<4)); else if(volpan<=84) /* fine volume slide down (75-84) */ UniVolEffect(VOL_VOLSLIDE,0xf0+(volpan-75)); else if(volpan<=94) /* volume slide up (85-94) */ UniVolEffect(VOL_VOLSLIDE,((volpan-85)<<4)); else if(volpan<=104)/* volume slide down (95-104) */ UniVolEffect(VOL_VOLSLIDE,(volpan-95)); else if(volpan<=114)/* pitch slide down (105-114) */ UniVolEffect(VOL_PITCHSLIDEDN,(volpan-105)); else if(volpan<=124)/* pitch slide up (115-124) */ UniVolEffect(VOL_PITCHSLIDEUP,(volpan-115)); else if(volpan<=127) { /* crap */ _mm_errno=MMERR_LOADING_PATTERN; return NULL; } else if(volpan<=192) UniVolEffect(VOL_PANNING,((volpan-128)==64)?255:((volpan-128)<<2)); else if(volpan<=202)/* portamento to note */ UniVolEffect(VOL_PORTAMENTO,portatable[volpan-193]); else if(volpan<=212)/* vibrato */ UniVolEffect(VOL_VIBRATO,(volpan-203)); else if((volpan!=239)&&(volpan!=255)) { /* crap */ _mm_errno=MMERR_LOADING_PATTERN; return NULL; } S3MIT_ProcessCmd(tr[t*of.numchn].cmd,tr[t*of.numchn].inf,old_effect|2); UniNewline(); } return UniDup(); }