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

📄 wrap.c

📁 rxvt经典的linux下的终端.小巧实用
💻 C
字号:
#include <X11/Xlib.h>#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include "wrap.h"void __cdecl WinMainCRTStartup(void) { mainCRTStartup(); }static void *_lib=NULL;static char *_libname = NULL;static void *_loadfunc(char *name){	void *f = NULL;	if (_lib==NULL) {		if (_libname==NULL) {			fprintf(stderr,"%s called before XOpenDisplay!\n",name);			exit(3);		}		_lib = LoadLibrary(_libname);		if (_lib == NULL) {			fprintf(stderr,"failed to load %s.dll\n",_libname);			exit(1);		}	}	f = GetProcAddress(_lib,name);	if (f==NULL) {		fprintf(stderr,"failed to find %s\n",name);		exit(2);	}		return f;}static void _freelib(){	FreeLibrary(_lib);	_lib=NULL;}typedef LONG (proto_WndProc)(HWND hWnd,UINT message,UINT wParam,LONG lParam);static proto_WndProc *func_WndProc = NULL;LONG __stdcall WndProc(HWND hWnd,UINT message,UINT wParam,LONG lParam){	if (!func_WndProc) func_WndProc=(proto_WndProc *)_loadfunc("NT_handleMsg");	return (func_WndProc)(hWnd,message,wParam,lParam);}static voidhideConsole(){	HWND conwin;	HANDLE hConsole;	CONSOLE_SCREEN_BUFFER_INFO buffInfo;	SECURITY_ATTRIBUTES  sa; 	char app_name[40];	sprintf(app_name, "rxvt%08x", (unsigned int)GetCurrentThreadId());	/* from eConsole source */	sa.nLength = sizeof(sa);	sa.bInheritHandle = TRUE;	sa.lpSecurityDescriptor = NULL;		hConsole = CreateFile( "CONOUT$", GENERIC_WRITE | GENERIC_READ,						   FILE_SHARE_READ | FILE_SHARE_WRITE, &sa,							   OPEN_EXISTING, 0, 0 );	if (GetConsoleScreenBufferInfo(hConsole,&buffInfo) &&		buffInfo.dwCursorPosition.X==0 &&		buffInfo.dwCursorPosition.Y==0)	{		/* find the console window, from eConsole source */		SetConsoleTitle( app_name );		while ((conwin = FindWindow( NULL, app_name))==NULL)			Sleep( 40 );		ShowWindowAsync(conwin, SW_HIDE);	}}ATOM_register_window_class(){	WNDCLASS  wc;	HANDLE    curInstance = GetModuleHandleA(NULL);	char app_name[40];	sprintf(app_name, "rxvt%08x", (unsigned int)GetCurrentThreadId());		hideConsole();	wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; /* CS_OWNDC */	wc.lpfnWndProc = WndProc;	wc.cbClsExtra = 0;	wc.cbWndExtra = 0;	wc.hInstance = curInstance;	wc.hIcon = LoadIcon(curInstance, MAKEINTRESOURCE( IDI_RXVT ));	wc.hCursor =  LoadCursor(NULL, IDC_ARROW);	wc.hbrBackground = NULL;	wc.lpszMenuName =  NULL;	wc.lpszClassName = app_name;	return RegisterClass(&wc);}typedef void (proto_NT_SetAtom)(ATOM class);static proto_NT_SetAtom *func_NT_SetAtom = NULL;void _set_atom(ATOM class){	if (!func_NT_SetAtom) func_NT_SetAtom=(proto_NT_SetAtom *)_loadfunc("NT_SetAtom");	(func_NT_SetAtom)(class);}typedef void (proto_W11AddEventHandler)(Display *d, proto_W11EventHandler *ev);static proto_W11AddEventHandler *func_W11AddEventHandler = NULL;void W11AddEventHandler(Display *d, proto_W11EventHandler *ev){	if (func_W11AddEventHandler) 	    (func_W11AddEventHandler)(d,ev);}typedef Display * (proto_XOpenDisplay)(const char *name);static proto_XOpenDisplay *func_XOpenDisplay = NULL;Display * XOpenDisplay(const char *name) {    ATOM class;    char *env_var=NULL;    if (_libname==NULL)    {	env_var = getenv("W11_LIBRARY");	if (env_var!=NULL) _libname = strdup(env_var);	else if (name==NULL || !strcmp(name,":0")) {	    _libname="libW11";	    class = _register_window_class();	    _set_atom(class);	    func_W11AddEventHandler=(proto_W11AddEventHandler *)_loadfunc("W11AddEventHandler");	}		else _libname="libX11";    }    if (!func_XOpenDisplay) func_XOpenDisplay=(proto_XOpenDisplay *)_loadfunc("XOpenDisplay");    return (func_XOpenDisplay)(name);}typedef struct {    char    *name;    XPointer value;} XIMArg;static void_XIMVaToList(va_list var, XIMArg *args){    char   *attr;	int i = 0;    if (!args) return;    for (attr = va_arg(var, char*); attr && i<11; attr = va_arg(var, char*)) {	    args->name = attr;	    args->value = va_arg(var, XPointer);	    args++;		i++;    }	for(;i<11;i++) {		args->name=NULL;		args->value=NULL;		args++;	}}typedef XIC (proto_XCreateIC)(XIM im, ...);static proto_XCreateIC *func_XCreateIC = NULL;XICXCreateIC(XIM im, ...){    va_list var;    XIMArg a[11];    va_start(var, im);    _XIMVaToList(var, a);    va_end(var);		if (a[10].name!=NULL) {		fprintf(stderr,"call to XCreateIC with more than 20 args\n");		exit(5);	}		if (!func_XCreateIC) func_XCreateIC=(proto_XCreateIC *)_loadfunc("XCreateIC");	return (func_XCreateIC)(im,						   a[0].name, a[0].value,						   a[1].name, a[1].value,						   a[2].name, a[2].value,						   a[3].name, a[3].value,						   a[4].name, a[4].value,						   a[5].name, a[5].value,						   a[6].name, a[6].value,						   a[7].name, a[7].value,						   a[8].name, a[8].value,						   a[9].name, a[9].value,						   NULL);}typedef char * (proto_XGetIMValues)(XIM im, ...);static proto_XGetIMValues *func_XGetIMValues = NULL;char *XGetIMValues(XIM im, ...){    va_list var;    XIMArg a[11];    va_start(var, im);    _XIMVaToList(var, a);    va_end(var);		if (a[10].name!=NULL) {		fprintf(stderr,"call to XGetIMValues with more than 20 args\n");		exit(5);	}	if (!func_XGetIMValues) func_XGetIMValues=(proto_XGetIMValues *)_loadfunc("XGetIMValues");	return (func_XGetIMValues)(im,						   a[0].name, a[0].value,						   a[1].name, a[1].value,						   a[2].name, a[2].value,						   a[3].name, a[3].value,						   a[4].name, a[4].value,						   a[5].name, a[5].value,						   a[6].name, a[6].value,						   a[7].name, a[7].value,						   a[8].name, a[8].value,						   a[9].name, a[9].value,						   NULL);}#include "xwrappers.gen"

⌨️ 快捷键说明

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