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

📄 www.c

📁 web browser
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>#include <stdio.h>#include <string.h>#include <ctype.h>#include <stdarg.h>#include "lib.h"#include "scroll.h"#include "wwwrc.h"#include "WWWLib.h"#include "HTReqMan.h"#include "../HTBrowse.h"#define VERSIONSTR "v0.1 beta"	//update this version for each release// monitor size#define MAXROWS         25#define MAXCOLS         80struct _HTView {	HWND hWnd;	char * name;	ScrollInfo_t *  pScrollInfo;	FontInfo_t *  pFontInfo;	int rows;	int cols;	LineMode * pLm;};char WWWClassName[] = "WWWClass";char VersionText[] = "WWW.EXE "VERSIONSTR".";HINSTANCE HInstance;HTView * PMonitorView = 0;HTView * PDataView = 0;extern HTRequest * LineMode_getConsole(LineMode * pLm);typedef struct {	/* default */    int zeroPad;	/* 0 */    int leftJustify;	/* 0 */    int showSign;	/* 0 */    int width;		/* -1 */    int precision;	/* -1 */    char size;		/* 0 */    int iArgs;		/* 0 */} Crack_format_t;	/* = -2 */#define Crack_format_INIT {0, 0, 0, -1, -1, 0, 0}typedef struct {    int freeMe;    char * ptr;    int ptrLen;    int index;    char terminate;    Crack_format_t format;} Crack_t;#define Crack_INIT {0, 0, 0, 0, 0, Crack_format_INIT}PRIVATE int _readInt(char * ptr, int * pDest){    int i;    int ret = 0;    for (i = 0; ptr[i] >= '0' && ptr[i] <= '9'; i++) {	ret *= 10;	ret += ptr[i];    }    if (!i)	return 0;    *pDest = i;    return i;}PRIVATE int Crack_next(Crack_t * pCrack, char * fmt, va_list pArgs){    int innastring = 0;    int scanIndex = pCrack->index;    int used;    static char shortRet[50];    char sprintFmt[20];    switch (fmt[scanIndex]) {    case 0:	return 0;    case '%':	scanIndex++;	/* check for modifiers */	if (fmt[scanIndex] == '0') {	    pCrack->format.zeroPad = -1;	    scanIndex++;	}	if (fmt[scanIndex] == '-') {	    pCrack->format.leftJustify = -1;	    scanIndex++;	}	if (fmt[scanIndex] == '+') {	    pCrack->format.showSign = -1;	    scanIndex++;	}	if ((used = _readInt(fmt+scanIndex, &pCrack->format.width)) > 0)	    scanIndex += used;	if (fmt[scanIndex] == '.') {	    scanIndex++;    	    if ((used = _readInt(fmt+scanIndex, &pCrack->format.precision)) > 0)		scanIndex += used;	    else		pCrack->format.precision = 0;	}	if (fmt[scanIndex] == 'h' || fmt[scanIndex] == 'l' || fmt[scanIndex] == 'L') {	    pCrack->format.size = fmt[scanIndex];	    scanIndex++;	}	/* time for the format */	switch (fmt[scanIndex]) {	case 'd':	case 'i':	case 'o':	case 'u':	case 'x':	case 'X':	    strncpy(sprintFmt, fmt+pCrack->index, scanIndex+1-pCrack->index);	    sprintFmt[scanIndex+1-pCrack->index] = 0;	    if (!(pCrack->ptr = (char *)malloc(pCrack->format.width + pCrack->format.precision+20)))		return 0;	    pCrack->freeMe = 1;	    switch (pCrack->format.size) {	    case 0:		pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(int*)(pArgs+pCrack->format.iArgs));		pCrack->format.iArgs += sizeof(int);		break;	    case 'h':		pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(short int*)(pArgs+pCrack->format.iArgs));		pCrack->format.iArgs += sizeof(short int);		break;	    case 'l':		pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(long int*)(pArgs+pCrack->format.iArgs));	        pCrack->format.iArgs += sizeof(long int);		break;	    default:		free(pCrack->ptr);		goto FMTSTRING; /* invalid arg combo */	    }	    pCrack->index = scanIndex+1;	    return 1;	case 'e':	case 'E':	case 'f':	case 'g':	case 'G':	    strncpy(sprintFmt, fmt+pCrack->index, scanIndex+1-pCrack->index);	    sprintFmt[scanIndex+1-pCrack->index] = 0;	    if (!(pCrack->ptr = (char *)malloc(pCrack->format.width + pCrack->format.precision+20)))		return 0;	    pCrack->freeMe = 1;	    switch (pCrack->format.size) {	    case 0:		pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(double*)(pArgs+pCrack->format.iArgs));		pCrack->format.iArgs += sizeof(double);		break;	    case 'L':		pCrack->ptrLen = sprintf(pCrack->ptr, sprintFmt, *(long double*)(pArgs+pCrack->format.iArgs));	        pCrack->format.iArgs += sizeof(long double);		break;	    default:		free(pCrack->ptr);		goto FMTSTRING; /* invalid arg combo */	    }	    pCrack->index = scanIndex+1;	    return 1;	case 'c':	    shortRet[0] = *(char *)(pArgs+pCrack->format.iArgs);	    pCrack->ptr = shortRet;	    pCrack->freeMe = 0;	    pCrack->ptrLen = 1;	    pCrack->format.iArgs += sizeof(char);	    pCrack->index = scanIndex+1;	    return 1;	case 's':	    pCrack->ptr = *(char **)(pArgs+pCrack->format.iArgs);	    pCrack->freeMe = 0;	    pCrack->ptrLen = strlen(pCrack->ptr);	    pCrack->format.iArgs += sizeof(char *);	    pCrack->index = scanIndex+1;	    return 1;	case 'p':	    pCrack->ptr = shortRet;	    pCrack->freeMe = 0;	    pCrack->ptrLen = sprintf(shortRet, "%p", *(void **)(pArgs+pCrack->format.iArgs));	    pCrack->format.iArgs += sizeof(void *);	    pCrack->index = scanIndex+1;	    return 1;	case 'n':	    return 0;	case '%':	    shortRet[0] = '%';	    pCrack->ptr = shortRet;	    pCrack->freeMe = 0;	    pCrack->ptrLen = 1;	    pCrack->index = scanIndex+1;	    return 1;	}    }FMTSTRING:    while (fmt[scanIndex] && fmt[scanIndex] != '%')	scanIndex++;    pCrack->ptr = fmt+pCrack->index;    pCrack->freeMe = 0;    pCrack->ptrLen = scanIndex - pCrack->index;    pCrack->index = scanIndex;    return 1;}PUBLIC int TextToAWindow(HTView * pView, const char * fmt, va_list pArgs){    Crack_t crack = Crack_INIT;    int totalLen = 0;    while (Crack_next(&crack, fmt, pArgs)) {	totalLen += crack.ptrLen;        Scroll_WriteBlock(pView->pScrollInfo, pView->hWnd, (LPSTR)crack.ptr, crack.ptrLen);	if (crack.freeMe)	    free(crack.ptr);    }    return (totalLen);}PUBLIC int OutputConsole(const char* fmt, va_list pArgs){    return (TextToAWindow(PMonitorView, fmt, pArgs));}PUBLIC int OutputData(HTView * pView, const char * fmt, ...){    va_list pArgs;    int len;    va_start(pArgs, fmt);    len = TextToAWindow(pView ? pView : PMonitorView, fmt, pArgs);    va_end(pArgs);    return (len);}#ifndef _WIN32typedef MINMAXINFO FAR* LPMINMAXINFO;#endif#ifdef _WIN32#define WINCALLBACK CALLBACK#else#define WINCALLBACK CALLBACK _export#endifLRESULT WINCALLBACK monitorWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){static int sized = 0;    HTView * pView = (HTView *)GetWindowLong(hWnd, 0); /* valid for all events except for WM_CREATE */    switch (uMsg)    	{    	case WM_USER+1:	//we just got a data set    	    return (0);    	case WM_CREATE:    	    {    	    HMENU hMenu = GetMenu(hWnd);	    pView = (HTView *)((CREATESTRUCT *)lParam)->lpCreateParams;	    SetWindowLong(hWnd, 0, (long)pView);//	    	pView->pScrollInfo->control = Scroll_control_autoWrap | Scroll_control_crBegetsLf | Scroll_control_lfBegetsCr | Scroll_control_BSbegetsSpace;// | Scroll_control_literal;    	    Scroll_ResetScreen(hWnd, pView->pScrollInfo, pView->pFontInfo);    	    MoveWindow(hWnd, 0, 0, pView->pScrollInfo->maxTrackSize.x, pView->pScrollInfo->maxTrackSize.y, FALSE);    	    return (0);    	    }#define USEMINMAX#ifdef USEMINMAX    	case WM_GETMINMAXINFO:    	    {    	    LPMINMAXINFO pMax = (LPMINMAXINFO)lParam;			if (pView)    			pMax->ptMaxTrackSize = pView->pScrollInfo->maxTrackSize;    	    }    	    break;#endif    	case WM_COMMAND:    	    switch ((WORD) wParam)    	    	{//	    	    case IDM_CRBEGETSLF://	    	    	pView->pScrollInfo->control ^= Scroll_control_crBegetsLf;//	    	    	CheckMenuItem(GetMenu(hWnd), (UINT)IDM_CRBEGETSLF, (pView->pScrollInfo->control & Scroll_control_crBegetsLf) ? MF_CHECKED : MF_UNCHECKED);//    	    	    break;    	    	case IDM_FONT:    	    	    if (Lib_SelectWorkingFont(hWnd, pView->pFontInfo))    	    	      Scroll_ResetScreen(hWnd, pView->pScrollInfo, pView->pFontInfo) ;      	    	return (TRUE);    	    	    break;    	    	case IDM_ABOUT:    	    	    while (MessageBox(hWnd, "It's a program, all right?", "About LineMode", MB_OKCANCEL) != IDOK);    	    	    break;    	    	case IDM_EXIT:    	    	    PostMessage(hWnd, WM_CLOSE, 0, 0L);    	    	    break ;    	    	}    	    break;    	case WM_PAINT:    	    Scroll_Paint(pView->pScrollInfo, pView->pFontInfo, hWnd, Scroll_cursorShow);    	    break ;    	case WM_SIZE:    	    {static int recursing = 0;    	    RECT rect;    	    LONG style;    	    WORD xScroll = GetSystemMetrics(SM_CXVSCROLL);    	    WORD yScroll = GetSystemMetrics(SM_CYHSCROLL);    	    if (recursing == 1)    	    	return (0);    	    rect.left = 0;    	    rect.top = 0;    	    rect.right = LOWORD(lParam)+xScroll-1;    	    rect.bottom = HIWORD(lParam)+yScroll-1;    	    style = GetWindowLong(hWnd, GWL_STYLE);    	    AdjustWindowRect(&rect, style, TRUE);    	    if (style & (WS_VSCROLL | WS_HSCROLL) && rect.right-rect.left == pView->pScrollInfo->maxTrackSize.x && rect.bottom-rect.top == pView->pScrollInfo->maxTrackSize.y)    	    	{    	    	recursing = 1;    	    	Scroll_SetSize(pView->pScrollInfo, hWnd, (WORD)(HIWORD(lParam)+yScroll), (WORD)(LOWORD(lParam)+xScroll));    	    	recursing = 0;    	    	}    	    else    	    	Scroll_SetSize(pView->pScrollInfo, hWnd, HIWORD(lParam), LOWORD(lParam));    	    return (0);    	    }    	    break ;    	case WM_HSCROLL:#ifdef _WIN32    	    Scroll_SetHorz(pView->pScrollInfo, hWnd, LOWORD(wParam), HIWORD(wParam));#else    	    Scroll_SetHorz(pView->pScrollInfo, hWnd, (WORD) wParam, LOWORD(lParam));#endif    	    break ;    	case WM_VSCROLL:#ifdef _WIN32    	    Scroll_SetVert(pView->pScrollInfo, hWnd, LOWORD(wParam), HIWORD(wParam));#else    	    Scroll_SetVert(pView->pScrollInfo, hWnd, (WORD) wParam, LOWORD(lParam));#endif    	    break ;    	case WM_CHAR:    	    {#ifdef _WIN32    	    BYTE bOut = LOBYTE(LOWORD(wParam));#else    	    BYTE bOut = LOBYTE(wParam);#endif	    if (pView->pLm && 		bufferInput(&bOut, 1, 0, LineMode_getConsole(pView->pLm), 0) == -1)    	    	PostMessage(hWnd, WM_QUIT, 0, 0);    	    Scroll_WriteBlock(pView->pScrollInfo, hWnd, &bOut, 1);    	    }    	    break ;    	case WM_SETFOCUS:    	    Scroll_SetFocus(hWnd, pView->pScrollInfo);    	    break ;    	case WM_KILLFOCUS:    	    Scroll_KillFocus(hWnd, pView->pScrollInfo);    	    break ;    	case WM_DESTROY:    	    {    	    Scroll_DestroyInfo(pView->pScrollInfo);    	    Font_DestroyInfo(pView->pFontInfo);    	    PostMessage(hWnd, WM_QUIT, 0, 0);    	    }    	    break ;    	default:    	    return (DefWindowProc(hWnd, uMsg, wParam, lParam));    	}    return 0L;    } // end of monitorWndProc()int makeArgcArgv(HINSTANCE hInstance, char*** pArgv, char* commandLine){    int argc;static char* argv[20];static char argv0[256];    char* ptr = commandLine;    char lookFor = 0;    enum {nowAt_start, nowAt_text} nowAt;    *pArgv = argv;    argc = 0;    GetModuleFileName(hInstance, argv0, sizeof(argv0));    argv[argc++] = argv0;    for (nowAt = nowAt_start;;) {        if (!*ptr)            return (argc);        if (lookFor) {            if (*ptr == lookFor) {                nowAt = nowAt_start;                lookFor = 0;                *ptr = 0;   /* remove the quote */            } else if (nowAt == nowAt_start) {                argv[argc++] = ptr;

⌨️ 快捷键说明

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