⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
字号:
/* * Modified for use with MPlayer, detailed changelog at * http://svn.mplayerhq.hu/mplayer/trunk/ * $Id: driver.c,v 1.2 2008/03/03 08:11:38 dsqiu Exp $ */#include "config.h"#include "debug.h"#include <mplaylib.h>#ifdef HAVE_MALLOC_H#include <uclib.h>#endif#include <mplaylib.h>#ifdef __FreeBSD__#include <sys/time.h>#endif#include "win32.h"#include "wine/driver.h"#include "wine/pe_image.h"#include "wine/winreg.h"#include "wine/vfw.h"#include "registry.h"#ifdef WIN32_LOADER#include "ldt_keeper.h"#endif#include "driver.h"#ifndef __MINGW32__#include "ext.h"#endif#ifndef WIN32_LOADERchar* def_path=WIN32_PATH;#elseextern char* def_path;#endif#if 1/* * STORE_ALL/REST_ALL seems like an attempt to workaround problems due to * WINAPI/no-WINAPI bustage. * * There should be no need for the STORE_ALL/REST_ALL hack once all * function definitions agree with their prototypes (WINAPI-wise) and * we make sure, that we do not call these functions without a proper * prototype in scope. */#define STORE_ALL#define REST_ALL#else// this asm code is no longer needed#define STORE_ALL \    __asm__ __volatile__ ( \    "push %%ebx\n\t" \    "push %%ecx\n\t" \    "push %%edx\n\t" \    "push %%esi\n\t" \    "push %%edi\n\t"::)#define REST_ALL \    __asm__ __volatile__ ( \    "pop %%edi\n\t" \    "pop %%esi\n\t" \    "pop %%edx\n\t" \    "pop %%ecx\n\t" \    "pop %%ebx\n\t"::)#endifstatic int needs_free=0;void SetCodecPath(const char* path){    if(needs_free)free(def_path);    if(path==0)    {	def_path=WIN32_PATH;	needs_free=0;	return;    }    def_path = (char*) malloc(strlen(path)+1);    strcpy(def_path, path);    needs_free=1;}static DWORD dwDrvID = 0;LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message,				 LPARAM lParam1, LPARAM lParam2){    DRVR* module=(DRVR*)hDriver;    int result;#ifndef __svr4__    char qw[300];#endif#ifdef DETAILED_OUT    printf("SendDriverMessage: driver %X, message %X, arg1 %X, arg2 %X\n", hDriver, message, lParam1, lParam2);#endif    if (!module || !module->hDriverModule || !module->DriverProc) return -1;#ifndef __svr4__    __asm__ __volatile__ ("fsave (%0)\n\t": :"r"(&qw));#endif#ifdef WIN32_LOADER    Setup_FS_Segment();#endif    STORE_ALL;    result=module->DriverProc(module->dwDriverID, hDriver, message, lParam1, lParam2);    REST_ALL;#ifndef __svr4__    __asm__ __volatile__ ("frstor (%0)\n\t": :"r"(&qw));#endif#ifdef DETAILED_OUT    printf("\t\tResult: %X\n", result);#endif    return result;}void DrvClose(HDRVR hDriver){    if (hDriver)    {	DRVR* d = (DRVR*)hDriver;	if (d->hDriverModule)	{#ifdef WIN32_LOADER	    Setup_FS_Segment();#endif	    if (d->DriverProc)	    {		SendDriverMessage(hDriver, DRV_CLOSE, 0, 0);		d->dwDriverID = 0;		SendDriverMessage(hDriver, DRV_FREE, 0, 0);	    }	    FreeLibrary(d->hDriverModule);	}	free(d);    }#ifdef WIN32_LOADER    CodecRelease();#endif}//DrvOpen(LPCSTR lpszDriverName, LPCSTR lpszSectionName, LPARAM lParam2)HDRVR DrvOpen(LPARAM lParam2){    NPDRVR hDriver;    char unknown[0x124];    const char* filename = (const char*) ((ICOPEN*) lParam2)->pV1Reserved;#ifdef WIN32_LOADER    Setup_LDT_Keeper();#endif    printf("Loading codec DLL: '%s'\n",filename);    hDriver = (NPDRVR) malloc(sizeof(DRVR));    if (!hDriver)	return ((HDRVR) 0);    memset((void*)hDriver, 0, sizeof(DRVR));#ifdef WIN32_LOADER    CodecAlloc();    Setup_FS_Segment();#endif    hDriver->hDriverModule = LoadLibraryA(filename);    if (!hDriver->hDriverModule)    {	printf("Can't open library %s\n", filename);	DrvClose((HDRVR)hDriver);	return ((HDRVR) 0);    }    hDriver->DriverProc = (DRIVERPROC) GetProcAddress(hDriver->hDriverModule,						      "DriverProc");    if (!hDriver->DriverProc)    {	printf("Library %s is not a valid VfW/ACM codec\n", filename);	DrvClose((HDRVR)hDriver);	return ((HDRVR) 0);    }    TRACE("DriverProc == %X\n", hDriver->DriverProc);    SendDriverMessage((HDRVR)hDriver, DRV_LOAD, 0, 0);    TRACE("DRV_LOAD Ok!\n");    SendDriverMessage((HDRVR)hDriver, DRV_ENABLE, 0, 0);    TRACE("DRV_ENABLE Ok!\n");    hDriver->dwDriverID = ++dwDrvID; // generate new id    // open driver and remmeber proper DriverID    hDriver->dwDriverID = SendDriverMessage((HDRVR)hDriver, DRV_OPEN, (LPARAM) unknown, lParam2);    TRACE("DRV_OPEN Ok!(%X)\n", hDriver->dwDriverID);    printf("Loaded DLL driver %s at %x\n", filename, hDriver->hDriverModule);    return (HDRVR)hDriver;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -