void VFSPlugin_LWO::read_tags(long length) { // Find out whether you need to read a pad byte bool NeedPad = false; if(length & 1) NeedPad = true; char *tagstring; do{ // read list of null terminated strings long stringlength = 0; tagstring = ReadString(&stringlength); length -= stringlength; // Delete the tag's temp memory delete tagstring; }while(length!=0); if(NeedPad == true) ReadPad(); }
char * VFSPlugin_LWO::ReadString(long *length) { int a=0; char c, *string = NULL; do{ c = ReadChar(); a++; }while(c!=0); m_offset-=a; if(a>0){ string = new char[a]; memcpy(string,&m_buffer[m_offset],a); m_offset+=a; if(a & 1){ ReadPad(); a++; } *length = a; } return string; }
void main(void) { uint16_t v; uint8_t i; int16_t pad; uint32_t padsNow=0; uint32_t padsLast=0; int8_t lastKey; uint8_t cnt=0; uint16_t lastEncValue; uint8_t encStep; int16_t senseDelta; uint8_t easteregg; SetupBoard(); SetupCTMU(); encStep=1; encValue=0; lastEncValue=0; octave=3; encMin=0; encMax=14; senseDelta=99; OpenTimer4(TIMER_INT_ON & T4_PS_1_1 & T4_POST_1_1); // Timer4 - Rotary Encoder polling WriteTimer4(0xFF); TMR4IF=0; OpenTimer2(TIMER_INT_ON & T2_PS_1_4 & T2_POST_1_8); // Timer2 = Display Refresh WriteTimer2(0xFF); TMR2IF=0; GIE=1; PEIE=1; ei(); disp[0]=0x00; disp[1]=0x00; disp[2]=0x00; keys=0; easteregg=0; leds=0x7fff; __delay_ms(25); leds=0x0000; CalibratePads(); leds=0x7fff; __delay_ms(25); leds=0x0000; // // encMin=1; // encMax=24; // encValue=1; // for (;;) { // pad=ReadPad(encValue); // DispValue(pad); // leds=0; // if ((encValue>=1) && (encValue<=9)) {setbit(leds,encValue-1); setbit(leds,10);} // if ((encValue>=10) && (encValue<=19)) {setbit(leds,encValue-10);setbit(leds,11);} // if ((encValue>=20) && (encValue<=29)) {setbit(leds,encValue-20);setbit(leds,12);} // __delay_ms(25); // } for (;;) { // Check for tones H+A+D if (padsLast==0b000000000000101000000100) EasterEgg(1); if (padsLast==0b101000000100000000000000) EasterEgg(2); padsNow=0; for (i=0; i<PADS; i++) { pad=ReadPad(i); if (GetPadBaseValue(i)-pad>senseDelta) { setbit(padsNow,i); } } for (i=0; i<PADS; i++) { if (testbit(padsNow,i) != testbit(padsLast,i)) { if (testbit(padsNow,i)) { SendNoteOn(octave*12+i); } else { SendNoteOff(octave*12+i); } } } padsLast=padsNow; for (i=0; i<KEYS; i++) { if (testbit(keys,i)) { disp[0]=charmap[butSettings[i].txt[0]-32]; disp[1]=charmap[butSettings[i].txt[1]-32]; disp[2]=charmap[butSettings[i].txt[2]-32]; lastKey=i; encMin=butSettings[i].min; encMax=butSettings[i].max; encValue=butSettings[i].value; encStep=butSettings[i].stepSize; lastEncValue=encValue; break; } } if ((encValue!=lastEncValue) && (lastKey!=-1)) { lastEncValue=encValue; if (butSettings[lastKey].cc==127) { // OCTAVE DispValue(encValue*encStep); octave=encValue; butSettings[lastKey].value=encValue; DispValue(encValue*encStep); } else if (butSettings[lastKey].cc==126) { // SENSE DELTA senseDelta=encValue; butSettings[lastKey].value=senseDelta; DispValue(senseDelta); if (senseDelta&1) setbit(leds,0); else clrbit(leds,0); } else { SendCC(butSettings[lastKey].cc, encValue*encStep); DispValue(encValue*encStep); } } __delay_ms(10); } }