comparison ppl.c @ 201:844f38cbff65

Optimize pattern drawing a bit.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 07 Oct 2012 07:54:22 +0300
parents 623e58df95c1
children bed7457cd8da
comparison
equal deleted inserted replaced
200:b842cc92c787 201:844f38cbff65
198 } 198 }
199 199
200 200
201 void dmDrawBMTextVAQ(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, va_list ap) 201 void dmDrawBMTextVAQ(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, va_list ap)
202 { 202 {
203 char *tmp = dm_strdup_vprintf(fmt, ap); 203 char tmp[512];
204 if (tmp != NULL) 204 vsnprintf(tmp, sizeof(tmp), fmt, ap);
205 { 205 dmDrawBMTextConstQ(screen, font, mode, xc, yc, tmp);
206 dmDrawBMTextConstQ(screen, font, mode, xc, yc, tmp);
207 dmFree(tmp);
208 }
209 } 206 }
210 207
211 208
212 void dmDrawBMTextQ(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, ...) 209 void dmDrawBMTextQ(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, ...)
213 { 210 {
340 337
341 338
342 #define jmpNMODEffectTable (36) 339 #define jmpNMODEffectTable (36)
343 static const char jmpMODEffectTable[jmpNMODEffectTable] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 340 static const char jmpMODEffectTable[jmpNMODEffectTable] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
344 341
342 static const char jmpHexTab[16] = "0123456789ABCDEF";
343
344 static inline char dmHexVal(int v)
345 {
346 return jmpHexTab[v & 15];
347 }
348
345 void dmPrintNote(SDL_Surface *screen, int xc, int yc, JSSNote *n) 349 void dmPrintNote(SDL_Surface *screen, int xc, int yc, JSSNote *n)
346 { 350 {
347 char text[32]; 351 char text[32];
348 char *ptr = text; 352 char *ptr = text;
349 353
350 switch (n->note) 354 switch (n->note)
351 { 355 {
352 case jsetNotSet: 356 case jsetNotSet:
353 sprintf(ptr, "..._"); 357 strcpy(ptr, "..._");
354 break; 358 break;
355 case jsetNoteOff: 359 case jsetNoteOff:
356 sprintf(ptr, "===_"); 360 strcpy(ptr, "===_");
357 break; 361 break;
358 default: 362 default:
359 sprintf(ptr, "%s%i_", 363 sprintf(ptr, "%s%i_",
360 patNoteTable[n->note % 12], 364 patNoteTable[n->note % 12],
361 n->note / 12); 365 n->note / 12);
363 } 367 }
364 368
365 ptr += 4; 369 ptr += 4;
366 370
367 if (n->instrument != jsetNotSet) 371 if (n->instrument != jsetNotSet)
368 sprintf(ptr, "%.2x_", n->instrument + 1); 372 {
373 int v = n->instrument + 1;
374 *ptr++ = dmHexVal(v >> 4);
375 *ptr++ = dmHexVal(v);
376 }
369 else 377 else
370 sprintf(ptr, ".._"); 378 {
371 379 *ptr++ = '.';
372 ptr += 3; 380 *ptr++ = '.';
381 }
382 *ptr++ = '_';
373 383
374 if (n->volume == jsetNotSet) 384 if (n->volume == jsetNotSet)
375 sprintf(ptr, ".._"); 385 {
386 *ptr++ = '.';
387 *ptr++ = '.';
388 }
376 else 389 else
377 if (n->volume >= 0x00 && n->volume <= 0x40) 390 if (n->volume >= 0x00 && n->volume <= 0x40)
378 sprintf(ptr, "%.2x_", n->volume); 391 {
392 *ptr++ = dmHexVal(n->volume >> 4);
393 *ptr++ = dmHexVal(n->volume);
394 }
379 else 395 else
380 { 396 {
381 char c; 397 char c;
382 switch (n->volume & 0xf0) 398 switch (n->volume & 0xf0)
383 { 399 {
391 case 0xc0: c = '<'; break; 407 case 0xc0: c = '<'; break;
392 case 0xd0: c = '>'; break; 408 case 0xd0: c = '>'; break;
393 case 0xe0: c = 'M'; break; 409 case 0xe0: c = 'M'; break;
394 default: c = '?'; break; 410 default: c = '?'; break;
395 } 411 }
396 sprintf(ptr, "%c%x_", c, (n->volume & 0x0f)); 412 *ptr++ = c;
397 } 413 *ptr++ = dmHexVal(n->volume);
398 414 }
399 ptr += 3; 415 *ptr++ = '_';
400 416
401 if (n->effect >= 0 && n->effect < jmpNMODEffectTable) 417 if (n->effect >= 0 && n->effect < jmpNMODEffectTable)
402 *ptr = jmpMODEffectTable[n->effect]; 418 *ptr++ = jmpMODEffectTable[n->effect];
403 else 419 else
404 if (n->effect == jsetNotSet) 420 *ptr++ = (n->effect == jsetNotSet ? '.' : '?');
405 *ptr = '.'; 421
422 if (n->param != jsetNotSet)
423 {
424 *ptr++ = dmHexVal(n->param >> 4);
425 *ptr++ = dmHexVal(n->param);
426 }
406 else 427 else
407 *ptr = '?'; 428 {
408 429 *ptr++ = '.';
409 ptr += 1; 430 *ptr++ = '.';
410 431 }
411 if (n->param != jsetNotSet) 432
412 sprintf(ptr, "%.2x", n->param); 433 *ptr = 0;
413 else
414 sprintf(ptr, "..");
415 434
416 dmDrawBMTextConstQ(screen, font, DMD_TRANSPARENT, xc, yc, text); 435 dmDrawBMTextConstQ(screen, font, DMD_TRANSPARENT, xc, yc, text);
417 } 436 }
418 437
419 438