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

📄 htdos.c

📁 elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, lynx比elinks早的多, 目前好像停止开发, 这是lynx源代码
💻 C
字号:
/*	       DOS specific routines */#include <HTUtils.h>#include <LYUtils.h>#include <HTDOS.h>#include <LYStrings.h>#include <LYLeaks.h>/* * Make a copy of the source argument in the result, allowing some extra * space so we can append directly onto the result without reallocating. */PRIVATE char * copy_plus ARGS2(char **, result, CONST char *, source){    int length = strlen(source);    HTSprintf0(result, "%-*s", length+10, source);    (*result)[length] = 0;    return (*result);}/* PUBLIC							HTDOS_wwwName()**		CONVERTS DOS Name into WWW Name** ON ENTRY:**	dosname		DOS file specification (NO NODE)**** ON EXIT:**	returns		WWW file specification***/char * HTDOS_wwwName ARGS1(CONST char *, dosname){    static char *wwwname = NULL;    char *cp_url = copy_plus(&wwwname, dosname);    int wwwname_len;#ifdef SH_EX    char ch;    while ((ch = *dosname) != '\0') {	switch (ch) {	case '\\':	/* convert dos backslash to unix-style */	    *cp_url++ = '/';	    break;	case ' ':	    *cp_url++ = '%';	    *cp_url++ = '2';	    *cp_url++ = '0';	    break;      default:	    *cp_url++ = ch;	    break;      }      dosname++;    }    *cp_url = '\0';#else    for ( ; *cp_url != '\0' ; cp_url++)	if(*cp_url == '\\')	    *cp_url = '/';   /* convert dos backslash to unix-style */#endif    wwwname_len = strlen(wwwname);    if (wwwname_len > 1)	cp_url--;	/* point last char */    if (wwwname_len > 3 && *cp_url == '/') {	cp_url++;	*cp_url = '\0';    }    return(wwwname);}/* * Convert slashes from Unix to DOS */char * HTDOS_slashes ARGS1(char *, path){    char *s;    for (s = path; *s != '\0'; ++s)	{	if (*s == '/')	{	    *s = '\\';	}    }    return path;}/* PUBLIC							HTDOS_name()**		CONVERTS WWW name into a DOS name** ON ENTRY:**	wwwname		WWW file name**** ON EXIT:**	returns		DOS file specification*/char * HTDOS_name ARGS1(char *, wwwname){#ifdef _WINDOWS	/* 1998/04/02 (Thu) 08:47:20 */    extern char windows_drive[];    char temp_buff[LY_MAXPATH];#endif    static char *result = NULL;    int joe;    copy_plus(&result, wwwname);#ifdef __DJGPP__    if (result[0] == '/'     && result[1] == 'd'     && result[2] == 'e'     && result[3] == 'v'     && result[4] == '/'     && isalpha(result[5])) {	return(result);    }#endif /* __DJGPP__ */    (void) HTDOS_slashes(result);    /* pesky leading slash, rudiment from file://localhost/  */    /* the rest of path may be with or without drive letter  */    if((result[1] != '\\') && (result[0]  == '\\')) {	for (joe = 0; (result[joe] = result[joe+1]) != 0; joe++)	    ;    }#ifdef _WINDOWS	/* 1998/04/02 (Thu) 08:59:48 */    if (LYLastPathSep(result) != NULL     && !LYIsDosDrive(result)) {	sprintf(temp_buff, "%.3s\\%.*s", windows_drive,		(int)(sizeof(temp_buff) - 5), result);	StrAllocCopy(result, temp_buff);    }#endif    /*     * If we have only a device, add a trailing slash.  Otherwise it just     * refers to the current directory on the given device.     */    if (LYLastPathSep(result) == NULL     && LYIsDosDrive(result))	LYAddPathSep0(result);    CTRACE((tfp, "HTDOS_name changed `%s' to `%s'\n", wwwname, result));    return (result);}#ifdef WIN_EXPUBLIC char *HTDOS_short_name(char *path){    static char sbuf[LY_MAXPATH];    char *ret;    DWORD r;    if (strchr(path, '/'))	path = HTDOS_name(path);    r = GetShortPathName(path, sbuf, sizeof sbuf);    if (r >= sizeof(sbuf) || r == 0) {	ret = LYstrncpy(sbuf, path, sizeof(sbuf));    } else {	ret = sbuf;    }    return ret;}#endif#if defined(DJGPP) && defined(DJGPP_KEYHANDLER)/* PUBLIC       getxkey()**              Replaces libc's getxkey() with polling of tcp/ip**              library (WatTcp or Watt-32). This is required to**              be able to finish off dead sockets, answer pings etc.**** ON EXIT:**      returns extended keypress.*//* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */#include <pc.h>#include <dpmi.h>#include <libc/farptrgs.h>#include <go32.h>int getxkey (void){    __dpmi_regs r;    /* poll tcp/ip lib and yield to DPMI-host while nothing in     * keyboard buffer (head = tail) (simpler than kbhit).     */    while (_farpeekw(_dos_ds, 0x41a) == _farpeekw(_dos_ds, 0x41c))    {	tcp_tick (NULL);	__dpmi_yield();    }    r.h.ah = 0x10;    __dpmi_int(0x16, &r);    if (r.h.al == 0x00)	return 0x0100 | r.h.ah;    if (r.h.al == 0xe0)	return 0x0200 | r.h.ah;    return r.h.al;}#endif /* DJGPP && DJGPP_KEYHANDLER */

⌨️ 快捷键说明

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