Christopher SnowhillUpdated credits with my legal name.74414b99 years agoHistory
103 lines · 4.3 KB · C
RawDownload
/*  _______         ____    __         ___    ___ * \    _  \       \    /  \  /       \   \  /   /       '   '  ' *  |  | \  \       |  |    ||         |   \/   |         .      . *  |  |  |  |      |  |    ||         ||\  /|  | *  |  |  |  |      |  |    ||         || \/ |  |         '  '  ' *  |  |  |  |      |  |    ||         ||    |  |         .      . *  |  |_/  /        \  \__//          ||    |  | * /_______/ynamic    \____/niversal  /__\  /____\usic   /|  .  . ibliotheque *                                                      /  \ *                                                     / .  \ * readany.c - Code to detect and read any of the     / / \  \ *             module formats supported by DUMB.     | <  /   \_ *                                                   |  \/ /\   / * By Christopher Snowhill.                           \_  /  > / *                                                      | \ / / *                                                      |  ' / *                                                       \__/ */ #include <stdlib.h>#include <string.h> #include "dumb.h" #ifdef _MSC_VER#define strnicmp _strnicmp#else#if defined(unix) || defined(__unix__) || defined(__unix)#include <strings.h>#endif#define strnicmp strncasecmp#endif enum { maximum_signature_size = 0x30 }; DUH *dumb_read_any_quick(DUMBFILE *f, int restrict_, int subsong) {    unsigned char signature[maximum_signature_size];    unsigned long signature_size;    DUH *duh = NULL;     /* signature_size = dumbfile_get_size(f); */     signature_size =        dumbfile_getnc((char *)signature, maximum_signature_size, f);    dumbfile_seek(f, 0, DFS_SEEK_SET);     if (signature_size >= 4 && signature[0] == 'I' && signature[1] == 'M' &&        signature[2] == 'P' && signature[3] == 'M') {        duh = dumb_read_it_quick(f);    } else if (signature_size >= 17 &&               !memcmp(signature, "Extended Module: ", 17)) {        duh = dumb_read_xm_quick(f);    } else if (signature_size >= 0x30 && signature[0x2C] == 'S' &&               signature[0x2D] == 'C' && signature[0x2E] == 'R' &&               signature[0x2F] == 'M') {        duh = dumb_read_s3m_quick(f);    } else if (signature_size >= 30 &&               /*signature[28] == 0x1A &&*/ signature[29] == 2 &&               (!strnicmp((const char *)signature + 20, "!Scream!", 8) ||                !strnicmp((const char *)signature + 20, "BMOD2STM", 8) ||                !strnicmp((const char *)signature + 20, "WUZAMOD!", 8))) {        duh = dumb_read_stm_quick(f);    } else if (signature_size >= 2 &&               ((signature[0] == 0x69 && signature[1] == 0x66) ||                (signature[0] == 0x4A && signature[1] == 0x4E))) {        duh = dumb_read_669_quick(f);    } else if (signature_size >= 0x30 && signature[0x2C] == 'P' &&               signature[0x2D] == 'T' && signature[0x2E] == 'M' &&               signature[0x2F] == 'F') {        duh = dumb_read_ptm_quick(f);    } else if (signature_size >= 4 && signature[0] == 'P' &&               signature[1] == 'S' && signature[2] == 'M' &&               signature[3] == ' ') {        duh = dumb_read_psm_quick(f, subsong);    } else if (signature_size >= 4 && signature[0] == 'P' &&               signature[1] == 'S' && signature[2] == 'M' &&               signature[3] == 254) {        duh = dumb_read_old_psm_quick(f);    } else if (signature_size >= 3 && signature[0] == 'M' &&               signature[1] == 'T' && signature[2] == 'M') {        duh = dumb_read_mtm_quick(f);    } else if (signature_size >= 4 && signature[0] == 'R' &&               signature[1] == 'I' && signature[2] == 'F' &&               signature[3] == 'F') {        duh = dumb_read_riff_quick(f);    } else if (signature_size >= 24 &&               !memcmp(signature, "ASYLUM Music Format", 19) &&               !memcmp(signature + 19, " V1.0", 5)) {        duh = dumb_read_asy_quick(f);    } else if (signature_size >= 3 && signature[0] == 'A' &&               signature[1] == 'M' && signature[2] == 'F') {        duh = dumb_read_amf_quick(f);    } else if (signature_size >= 8 && !memcmp(signature, "OKTASONG", 8)) {        duh = dumb_read_okt_quick(f);    }     if (!duh) {        dumbfile_seek(f, 0, DFS_SEEK_SET);        duh = dumb_read_mod_quick(f, restrict_);    }     return duh;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t