📄 www.c
字号:
nowAt = nowAt_text; } ptr++; continue; } if (*ptr == ' ' || *ptr == '\t') { *ptr = 0; ptr++; nowAt = nowAt_start; continue; } if ((*ptr == '\'' || *ptr == '\"' || *ptr == '`') && nowAt == nowAt_start) { lookFor = *ptr; nowAt = nowAt_start; ptr++; continue; } if (nowAt == nowAt_start) { argv[argc++] = ptr; nowAt = nowAt_text; } ptr++; }}extern int main(int, char**);extern HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm);extern BOOL HTView_destroy(HTView * pView);int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){ int argc; char** argv; WNDCLASS wc = { 0, //UINT style monitorWndProc, //WNDPROC lpfnWndProc 0, //int cbClsExtra sizeof(long), //int cbWndExtra - HTRequest* and LineMode* hInstance, //HINSTANCE hInstance - fill in later LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WWW)), //HICON hIcon LoadCursor(NULL, IDC_ARROW), //HCURSOR hCursor (HBRUSH)(COLOR_WINDOW+1), //HBRUSH hbrBackground MAKEINTRESOURCE(IDM_SNP), //LPCSTR lpszMenuName WWWClassName}; //LPCSTR lpszClassName RegisterClass(&wc); // don't check error as class may be laying around from previously use if (!(PMonitorView = HTView_create("WWW Console", 50, 80, 0))) return (0); HTTrace_setCallback(&OutputConsole); argc = makeArgcArgv(hInstance, &argv, lpszCmdLine); main(argc, argv); HTView_destroy(PMonitorView); PMonitorView = 0; return (0);}PUBLIC HTView * HTView_create(char* name, int rows, int cols, LineMode * pLm){ HTView * pView; DWORD style;static nextX = 0;static nextY = 0; if ((pView = (HTView *)HT_CALLOC(1, sizeof(HTView))) == NULL || (pView->pScrollInfo = (ScrollInfo_t *)HT_CALLOC(1, sizeof(ScrollInfo_t))) == NULL || (pView->pFontInfo = (FontInfo_t *)HT_CALLOC(1, sizeof(FontInfo_t))) == NULL || (pView->pScrollInfo->screenBuf = (char *)HT_CALLOC(rows * cols, sizeof(char))) == NULL) HT_OUTOFMEM("HTView"); pView->rows = pView->pScrollInfo->maxRows = rows; pView->cols = pView->pScrollInfo->maxCols = cols; pView->pScrollInfo->control = Scroll_control_crBegetsLf|Scroll_control_lfBegetsCr|Scroll_control_autoWrap|Scroll_control_BSbegetsSpace; if (Font_SetupInfo(pView->pFontInfo) || Scroll_SetupInfo(pView->pScrollInfo, rows, cols)) return (0); style = WS_CAPTION | WS_VISIBLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; style |= PMonitorView ? WS_POPUPWINDOW : WS_POPUPWINDOW; pView->pLm = pLm;// pView->hWnd = CreateWindow(WWWClassName, pView->name, style, CW_USEDEFAULT, CW_USEDEFAULT, pView->hWnd = CreateWindow(WWWClassName, pView->name, style, nextX, nextY, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, HInstance, (LPVOID)pView); nextX += 400; nextY += 100; return pView;}PUBLIC BOOL HTView_destroy(HTView * pView){ DestroyWindow(pView->hWnd); Scroll_DestroyInfo(pView->pScrollInfo); Font_DestroyInfo(pView->pFontInfo); return YES;}/* ------------------------------------------------------------------------- *//* This was copied from HTDialog.c, will be put into resource or something *//*** Dialog Messages*/PRIVATE char *HTDialogs[HT_MSG_ELEMENTS] = {HT_MSG_ENGLISH_INITIALIZER};/*** All errors that are not strictly HTTP errors but originates from, e.g., ** the FTP protocol all have element numbers > HTERR_HTTP_CODES_END, i.e.,** they should be placed after the blank line*/PRIVATE HTErrorMessage HTErrors[HTERR_ELEMENTS] = {HTERR_ENGLISH_INITIALIZER};/* ------------------------------------------------------------------------- */#if 0typedef enum {Dialog_PROMPT, Dialog_CONFIRM, Dialog_Passwd, Dialog_UserPasswd} Dialog_type;#endiftypedef struct { HTRequest * request; HTAlertOpcode op; int msgnum; const char * dfault; void * input; HTAlertPar * reply; int type; char * buf; size_t bufLen; WPARAM * pWParam;} DialogParms;BOOL PASCAL AlertDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ DialogParms * pParms = (DialogParms *)GetProp(hDlg, MAKEINTATOM(0x100)); switch (uMsg) { case WM_INITDIALOG: { pParms = (DialogParms *)lParam; SetProp(hDlg, MAKEINTATOM(0x100), (HANDLE)pParms); SetDlgItemText(hDlg, IDC_PROMPT1, HTDialogs[pParms->msgnum]); if (pParms->type == IDD_CONFIRM || pParms->type == IDD_PROMPT) { } if (pParms->type == IDD_PROMPT) { if (pParms->dfault) SetDlgItemText(hDlg, IDC_TEXT, pParms->dfault); } if (pParms->type == IDD_PASSWD || pParms->type == IDD_USERPASSWD) { if (pParms->dfault) SetDlgItemText(hDlg, IDC_USER, pParms->dfault); } return TRUE; } case WM_COMMAND: *pParms->pWParam = LOWORD(wParam); switch (LOWORD(wParam)) { case IDOK: if (pParms->type == IDD_PROMPT) { char space[256]; GetDlgItemText(hDlg, IDC_TEXT, space, sizeof(space) - 1); HTAlert_setReplyMessage(pParms->reply, space); } if (pParms->type == IDD_PASSWD || pParms->type == IDD_USERPASSWD) { char space[256]; GetDlgItemText(hDlg, IDC_PASSWD, space, sizeof(space) - 1); HTAlert_setReplySecret(pParms->reply, space); } if (pParms->type == IDD_USERPASSWD) { char space[256]; GetDlgItemText(hDlg, IDC_USER, space, sizeof(space) - 1); HTAlert_setReplyMessage(pParms->reply, space); } EndDialog(hDlg, TRUE); return (TRUE); case IDCANCEL: EndDialog(hDlg, TRUE); return (TRUE); } break; case WM_DESTROY: RemoveProp(hDlg, MAKEINTATOM(0x100)); break ; } return (FALSE);} // AlertDialogProc()PRIVATE int DialogParms_do(HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply, int resource, WPARAM * pWParam, HTRequest * pRequest){ int ret; HTView * pView; DialogParms * pParms; pView = LineMode_getView(Context_getLineMode(pRequest)); if ((pParms = (DialogParms *)HT_CALLOC(1, sizeof(DialogParms))) == NULL) HT_OUTOFMEM("DialogParms"); pParms->request = request; pParms->op = op; pParms->msgnum = msgnum; pParms->dfault = dfault; pParms->input = input; pParms->reply = reply; pParms->type = resource; pParms->pWParam = pWParam; ret = Lib_ModalDialogBoxParam(HInstance, MAKEINTRESOURCE(resource), pView->hWnd, (DLGPROC)AlertDialogProc, (LPARAM)pParms); HT_FREE(pParms); return ret;}PUBLIC BOOL HTProgress (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply){ static int inside = 0; char space[256]; HTView * pView; pView = LineMode_getView(Context_getLineMode(request)); if (!request) { if (WWWTRACE) HTTrace("HTProgress.. Bad argument\n"); return NO; } switch (op) { case HT_PROG_DNS: sprintf(space, "Looking up %s\n", (char *) input); break; case HT_PROG_CONNECT: sprintf(space, "Contacting host...\n"); break; case HT_PROG_ACCEPT: sprintf(space, "Waiting for connection...\n"); break; case HT_PROG_READ: { long cl = HTAnchor_length(HTRequest_anchor(request)); if (cl > 0) { long b_read = HTRequest_bodyRead(request); double pro = (double) b_read/cl*100; char buf[10]; HTNumToStr((unsigned long) cl, buf, 10); sprintf(space, "Read (%d%% of %s)\n", (int) pro, buf); } else sprintf(space, "Reading...\n"); } break; case HT_PROG_WRITE: if (HTRequest_isPostWeb(request)) { HTParentAnchor *anchor=HTRequest_anchor(HTRequest_source(request)); long cl = HTAnchor_length(anchor); if (cl > 0) { long b_write = HTRequest_bytesWritten(request); double pro = (double) b_write/cl*100; char buf[10]; HTNumToStr((unsigned long) cl, buf, 10); sprintf(space, "Written (%d%% of %s)\n", (int) pro, buf); } else sprintf(space, "Writing...\n"); } else return YES; break; case HT_PROG_DONE: sprintf(space, "Finished\n"); break; case HT_PROG_OTHER: sprintf(space, "Waiting for HT_FREE socket...\n"); break; default: sprintf(space, "UNKNOWN PROGRESS STATE\n"); break; } if (inside) return YES; inside = 1; MessageBox(pView->hWnd, space, "HTProgress", MB_OK); inside = 0; return YES;}PUBLIC BOOL HTError_print (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply){ HTList *cur = (HTList *) input; HTError *pres; HTErrorShow showmask = HTError_show(); HTChunk *msg = NULL; int code; if (WWWTRACE) HTTrace("HTError..... Generating message\n"); if (!request || !cur) return NO; while ((pres = (HTError *) HTList_nextObject(cur))) { int index = HTError_index(pres); if (HTError_doShow(pres)) { if (!msg) { HTSeverity severity = HTError_severity(pres); msg = HTChunk_new(128); if (severity == ERR_WARN) HTChunk_puts(msg, "Warning: "); else if (severity == ERR_NON_FATAL) HTChunk_puts(msg, "Non Fatal Error: "); else if (severity == ERR_FATAL) HTChunk_puts(msg, "Fatal Error: "); else if (severity == ERR_INFO) HTChunk_puts(msg, "Information: "); else { if (WWWTRACE) HTTrace("HTError..... Unknown Classification of Error (%d)...\n", severity); HTChunk_delete(msg); return NO; } /* Error number */ if ((code = HTErrors[index].code) > 0) { char buf[10]; sprintf(buf, "%d ", code); HTChunk_puts(msg, buf); } } else HTChunk_puts(msg, "\nReason: "); HTChunk_puts(msg, HTErrors[index].msg); /* Error message */ if (showmask & HT_ERR_SHOW_PARS) { /* Error parameters */ int length; int cnt; char *pars = (char *) HTError_parameter(pres, &length); if (length && pars) { HTChunk_puts(msg, " ("); for (cnt=0; cnt<length; cnt++) { char ch = *(pars+cnt); if (ch < 0x20 || ch >= 0x7F) HTChunk_putc(msg, '#'); else HTChunk_putc(msg, ch); } HTChunk_puts(msg, ") "); } } if (showmask & HT_ERR_SHOW_LOCATION) { /* Error Location */ HTChunk_puts(msg, "This occured in "); HTChunk_puts(msg, HTError_location(pres)); HTChunk_putc(msg, '\n'); } /* ** Make sure that we don't get this error more than once even ** if we are keeping the error stack from one request to another */ HTError_setIgnore(pres); /* If we only are show the most recent entry then break here */ if (showmask & HT_ERR_SHOW_FIRST) break; } } if (msg) { HTChunk_putc(msg, '\n'); HTTrace("WARNING: %s\n", HTChunk_data(msg)); HTChunk_delete(msg); } return YES;}PUBLIC BOOL HTConfirm (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply){ WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_CONFIRM, &wParam, request); return wParam == IDOK;}PUBLIC BOOL HTPrompt (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply){ WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_PROMPT, &wParam, request); return wParam == IDOK;}PUBLIC BOOL HTPromptPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply){ WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_PASSWD, &wParam, request); return wParam == IDOK;}PUBLIC BOOL HTPromptUsernameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply){ WPARAM wParam = 0; int ret; ret = DialogParms_do(request, op, msgnum, dfault, input, reply, IDD_USERPASSWD, &wParam, request); return wParam == IDOK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -