/* Open a module via its filename. The loader will initialize the specified song-player 'player'. */ MIKMODAPI MODULE* Player_Load(CHAR* filename,int maxchan,BOOL curious) { FILE *fp; MODULE *mf=NULL; if((fp=_mm_fopen(filename,"rb"))) { mf=Player_LoadFP(fp,maxchan,curious); _mm_fclose(fp); } return mf; }
int main() { int i=0, x, y, t; const int COLOURS_LEN = sizeof(COLOURS) / sizeof(int); const int FLAG_LEN = sizeof(FLAG) / sizeof(char) - 1; // Extract module song payload char fname[] = "/tmp/file-XXXXXX"; int fd = mkstemp(fname); if (write(fd, src_music_xm, src_music_xm_len) < 0) return -1; lseek(fd, 0, SEEK_SET); FILE *pFile = fdopen(fd, "rb"); // Load and play the module song MODULE *module; MikMod_RegisterAllDrivers(); MikMod_RegisterAllLoaders(); md_mode |= DMODE_SOFT_MUSIC; MikMod_Init(""); module = Player_LoadFP(pFile, 64, 0); module->wrap = 1; Player_Start(module); // Animation while (1) { MikMod_Update(); for (y = 0; y < COLOURS_LEN; y++) { // line loop printf("\x1b[1;%dm", COLOURS[y]); // set rainbow line colour for (x = 0; x < WIDTH - ANGLE*(COLOURS_LEN-y); x++) // rainbow line putchar(FLAG[(x + (FLAG_LEN-y)+i) % FLAG_LEN]); // print rainbow character printf("\x1b[0m"); // clear colour for (t = ANGLE; t < ANGLE * (COLOURS_LEN-y); t++) // print distance holder putchar(' '); printf("\x1b[1m"); // set bright color for cat puts(CAT[y%COLOURS_LEN + (i%10<COLOURS_LEN ? 0 : COLOURS_LEN)]); // cat } if (_kbhit()) // key pressed? break; i++; usleep(DELAY); // wait x ms printf("\x1b[%dA", COLOURS_LEN); // move up before loop } puts("\x1b[0m"); // reset colours Player_Stop(); Player_Free(module); MikMod_Exit(); return 0; }