亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modload.c

?? quake 游戲原代碼
?? C
字號:
/*  modload.c - Tiny MOD Player V2.11 for Watcom C/C++ and DOS/4GW

    Module and Sample file loader routines.

    Copyright 1993,94 Carlos Hasan
*/

#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <io.h>
#include <fcntl.h>
#include "modplay.h"

/* MOD FileFormat */

#define ID_MK   0x2E4B2E4D
#define ID_FLT4 0x34544C46
#define ID_6CHN 0x4E484336
#define ID_8CHN 0x4E484338

typedef struct {
    byte        SampleName[22];
    word        Length;
    byte        FineTune;
    byte        Volume;
    word        LoopStart;
    word        LoopLength;
} MODSample;

typedef struct {
    byte        SongName[20];
    MODSample   Samples[31];
    byte        OrderLength;
    byte        ReStart;
    byte        Orders[128];
    dword       Sign;
} MODHeader;

/* MOD PeriodTable */
static word PeriodTable[12*7] = {
    3424,3232,3048,2880,2712,2560,2416,2280,2152,2032,1920,1812,
    1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,906,
    856,808,762,720,678,640,604,570,538,508,480,453,
    428,404,381,360,339,320,302,285,269,254,240,226,
    214,202,190,180,170,160,151,143,135,127,120,113,
    107,101,95,90,85,80,75,71,67,63,60,56,
    53,50,47,45,42,40,37,35,33,31,30,28 };

/* WAV fileformat */

#define ID_RIFF 0x46464952
#define ID_WAVE 0x45564157
#define ID_FMT  0x20746D66
#define ID_DATA 0x61746164

typedef struct {
    dword   RIFFMagic;
    dword   FileLength;
    dword   FileType;
    dword   FormMagic;
    dword   FormLength;
    word    SampleFormat;
    word    NumChannels;
    dword   PlayRate;
    dword   BytesPerSec;
    word    Pad;
    word    BitsPerSample;
    dword   DataMagic;
    dword   DataLength;
} WAVHeader;


/* MOD Loader Routine */

#define Swap(w) (((dword)(w&0xff))<<8|((dword)(w>>8)))

Module *MODLoadModule(char *Path)
{
    int handle,NumTracks,NumPatts,i,j;
    word Note,Period,Inst,Effect;
    dword Length,LoopStart,LoopLength;
    MODHeader Header;
    MODSample *Sample;
    Module *Song;
    byte *Patt;

    if ((handle = open(Path,O_RDONLY | O_BINARY)) == -1)
        return NULL;

    if (read(handle,&Header,sizeof(Header)) != sizeof(Header)) {
        close(handle);
        return NULL;
    }

    if ((Header.Sign == ID_MK) || (Header.Sign == ID_FLT4))
        NumTracks = 4;
    else if (Header.Sign == ID_6CHN)
        NumTracks = 6;
    else if (Header.Sign == ID_8CHN)
        NumTracks = 8;
    else {
        close(handle);
        return NULL;
    }

    if ((Song = calloc(1,sizeof(Module))) == NULL) {
        close(handle);
        return NULL;
    }

    Song->NumTracks = NumTracks;
    Song->OrderLength = Header.OrderLength;
    for (NumPatts = i = 0; i < 128; i++) {
        Song->Orders[i] = Header.Orders[i];
        if (NumPatts < Header.Orders[i])
            NumPatts = Header.Orders[i];
    }
    NumPatts++;

    for (i = 0; i < NumPatts; i++) {
        if ((Song->Patterns[i] = malloc(256*NumTracks)) == NULL) {
            MODFreeModule(Song);
            close(handle);
            return NULL;
        }
        if (read(handle,Song->Patterns[i],256*NumTracks) != 256*NumTracks) {
            MODFreeModule(Song);
            close(handle);
            return NULL;
        }
        for (Patt = Song->Patterns[i], j = 0; j < 64*NumTracks; Patt += 4, j++) {
            Period = ((word)(Patt[0] & 0x0F) << 8) | (Patt[1]);
            Inst = (Patt[0] & 0xF0) | (Patt[2] >> 4);
            Effect = ((word)(Patt[2] & 0x0F) << 8) | (Patt[3]);
            for (Note = 0; Note < 12*7; Note++)
                if (Period >= PeriodTable[Note]) break;
            if (Note == 12*7) Note = 0; else Note++;
            Patt[0] = Note;
            Patt[1] = Inst;
            Patt[2] = Effect & 0xFF;
            Patt[3] = Effect >> 8;
        }
    }

    for (i = 1; i <= 31; i++) {
        Sample = &Header.Samples[i-1];
        if (Sample->Length) {
            Length = Swap(Sample->Length) << 1;
            LoopStart = Swap(Sample->LoopStart) << 1;
            LoopLength = Swap(Sample->LoopLength) << 1;
            if ((Song->SampPtr[i] = malloc(Length)) == NULL) {
                MODFreeModule(Song);
                close(handle);
                return NULL;
            }
            if ((unsigned)read(handle,Song->SampPtr[i],Length) != Length) {
                MODFreeModule(Song);
                close(handle);
                return NULL;
            }
            if (LoopLength <= 2) {
                Song->SampLoop[i] = Song->SampPtr[i] + Length;
                Song->SampEnd[i] = Song->SampLoop[i];
            }
            else {
                Song->SampLoop[i] = Song->SampPtr[i] + LoopStart;
                Song->SampEnd[i] = Song->SampLoop[i] + LoopLength;
            }
            Song->SampVolume[i] = Sample->Volume;
        }
    }

    close(handle);
    return Song;
}

void MODFreeModule(Module *Song)
{
    int i;
    if (Song) {
        for (i = 0; i < 128; i++)
            if (Song->Patterns[i]) free(Song->Patterns[i]);
        for (i = 1; i <= 31; i++)
            if (Song->SampPtr[i]) free(Song->SampPtr[i]);
        free(Song);
    }
}


/* RIFF/WAV Loader Routine */

Sample *MODLoadSample(char *Path)
{
    int handle;
    WAVHeader Header;
    Sample *Instr;
    byte *ptr;
    dword len;

    if ((handle = open(Path,O_RDONLY | O_BINARY)) == -1)
        return NULL;
    if (read(handle,&Header,sizeof(Header)) != sizeof(Header)) {
        close(handle);
        return NULL;
    }
    if (Header.RIFFMagic != ID_RIFF || Header.FileType != ID_WAVE ||
        Header.FormMagic != ID_FMT || Header.DataMagic != ID_DATA ||
        Header.SampleFormat != 1 || Header.NumChannels != 1 ||
        Header.BitsPerSample != 8) {
        close(handle);
        return NULL;
    }
    if ((Instr = malloc(sizeof(Sample)+Header.DataLength)) == NULL) {
        close(handle);
        return NULL;
    }
    Instr->Period = (8363L*428L)/Header.PlayRate;
    Instr->Volume = 64;
    Instr->Length = Header.DataLength;
    Instr->Data = (byte*)(Instr+1);
    if ((unsigned)read(handle,Instr->Data,Instr->Length) != Instr->Length) {
        free(Instr);
        close(handle);
        return NULL;
    }
    close(handle);

    for (ptr = Instr->Data, len = Instr->Length; len; len--)
        *ptr++ ^= 0x80;

    return Instr;
}

void MODFreeSample(Sample *Instr)
{
    if (Instr) free(Instr);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最新国产の精品合集bt伙计| 夜夜嗨av一区二区三区| 亚洲精品成人a在线观看| 日韩高清一区在线| 欧美亚洲禁片免费| 亚洲婷婷综合久久一本伊一区| 日本一不卡视频| 欧美日韩国产123区| 亚洲视频一区二区在线观看| 国产福利一区在线| 精品国产亚洲在线| 美女诱惑一区二区| 精品国产一区二区三区av性色| 日本麻豆一区二区三区视频| 欧美日韩一级视频| 午夜伊人狠狠久久| 国产亚洲欧美日韩日本| 人人超碰91尤物精品国产| 51午夜精品国产| 国产99久久久久久免费看农村| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲国产精品成人综合| 色视频一区二区| 国产一区二区91| 五月天一区二区| 17c精品麻豆一区二区免费| 欧美一区二区三区在线观看视频| 福利电影一区二区三区| 天天综合天天综合色| 国产精品国产三级国产aⅴ入口 | 久久久久久久免费视频了| 97国产一区二区| 盗摄精品av一区二区三区| 青青国产91久久久久久| 亚洲精品日韩综合观看成人91| 337p日本欧洲亚洲大胆精品| 欧美日韩国产色站一区二区三区| av激情综合网| 色综合天天狠狠| 懂色av一区二区三区蜜臀| 久久99精品久久只有精品| 日本伊人色综合网| 日本特黄久久久高潮| 无吗不卡中文字幕| 日本91福利区| 国产麻豆精品在线| 极品少妇一区二区| 成人免费视频app| 91美女精品福利| 欧美日韩国产精品自在自线| 欧美日韩电影在线| 日韩欧美第一区| 日本一区二区在线不卡| 国产精品久久久久久久岛一牛影视 | 亚洲二区在线观看| 亚洲va欧美va国产va天堂影院| 亚洲国产另类av| 日本欧美韩国一区三区| 国产精品国产成人国产三级| 婷婷夜色潮精品综合在线| 成人在线综合网| 欧美成人乱码一区二区三区| 亚洲另类在线一区| 成人涩涩免费视频| 久久婷婷色综合| 偷偷要91色婷婷| 欧美日韩国产小视频在线观看| 国产精品午夜在线观看| 国产在线播精品第三| 7777精品伊人久久久大香线蕉的 | 欧美伊人精品成人久久综合97| 国产日韩欧美激情| 激情综合五月天| 欧美精品一区在线观看| 日本视频在线一区| 日韩一区二区三区av| 国产清纯白嫩初高生在线观看91 | 99re这里都是精品| 精品少妇一区二区三区视频免付费 | 亚洲v精品v日韩v欧美v专区| 国产黑丝在线一区二区三区| 欧美一区二区三区四区高清| 一区二区三区欧美亚洲| 91香蕉国产在线观看软件| 国产日韩综合av| 国产福利一区二区三区| 精品精品欲导航| 精油按摩中文字幕久久| 7777精品伊人久久久大香线蕉| 一区二区三区在线观看动漫| 成人精品免费视频| 亚洲婷婷国产精品电影人久久| 成人精品鲁一区一区二区| 日本一区二区在线不卡| av成人免费在线观看| 国产精品白丝在线| 色噜噜狠狠成人中文综合| 亚洲成人黄色小说| 日韩欧美色综合| 国内不卡的二区三区中文字幕| 久久夜色精品一区| 成人高清视频免费观看| 亚洲免费观看在线视频| 欧美精品一卡二卡| 另类专区欧美蜜桃臀第一页| 国产亚洲精品福利| 91成人免费在线| 久久电影网站中文字幕 | 国产精品久久久久久妇女6080| 91女人视频在线观看| 日韩av不卡在线观看| 亚洲国产精品传媒在线观看| 在线视频一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 中文字幕av一区 二区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 五月综合激情婷婷六月色窝| 国产日韩欧美综合在线| 在线视频综合导航| 国产成人精品综合在线观看| 亚洲黄网站在线观看| 久久久午夜精品| 4438亚洲最大| 欧美综合视频在线观看| 国产成人在线视频播放| 欧美aaaaaa午夜精品| 亚洲视频电影在线| 国产清纯白嫩初高生在线观看91| 欧美久久一二区| 欧美亚洲国产一区二区三区| 成人黄色小视频在线观看| 激情综合网最新| 久久66热re国产| 国产在线精品免费av| 日本欧美加勒比视频| 亚洲成人精品影院| 亚洲国产wwwccc36天堂| 一区二区三区精密机械公司| 亚洲欧美区自拍先锋| 亚洲欧洲日韩av| 一区二区三区电影在线播| 亚洲免费观看在线观看| 一区二区三区在线免费播放| 亚洲日本中文字幕区| 亚洲精品视频在线观看免费| 夜夜爽夜夜爽精品视频| 亚洲国产精品自拍| 久久国产尿小便嘘嘘尿| 国产精品一区免费在线观看| 大尺度一区二区| 色综合天天性综合| 欧美乱妇23p| 2019国产精品| 亚洲欧美aⅴ...| 日本中文一区二区三区| 国产尤物一区二区在线| www.爱久久.com| 91.麻豆视频| 中文字幕 久热精品 视频在线| 亚洲美女视频一区| 日韩va欧美va亚洲va久久| 国产成人8x视频一区二区| 91久久精品一区二区二区| 精品少妇一区二区三区免费观看 | 国产成人精品一区二| 91视频xxxx| 精品少妇一区二区三区| 亚洲欧美另类综合偷拍| 久久国产精品区| 91蜜桃网址入口| 久久久久久久精| 免费观看一级欧美片| 日本精品免费观看高清观看| 欧美va天堂va视频va在线| 亚洲欧美另类小说| 国产成人自拍在线| 亚洲精品一区二区三区精华液| 亚洲欧美国产77777| 国产成人精品1024| 精品女同一区二区| 麻豆精品一区二区三区| 欧美日韩激情一区| 夜夜夜精品看看| 91福利资源站| 亚洲va欧美va国产va天堂影院| 99re视频精品| 亚洲欧美日韩国产手机在线| 国产v综合v亚洲欧| 中文无字幕一区二区三区| 国产在线不卡一卡二卡三卡四卡| 91精品国产色综合久久不卡电影| 亚洲国产综合在线| 欧美丝袜第三区| 日本成人中文字幕在线视频| 欧美人与禽zozo性伦| 午夜激情一区二区三区| 日韩精品最新网址| 国内精品视频一区二区三区八戒| 久久久亚洲国产美女国产盗摄| 国产一区二区三区国产|