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

📄 lyprint.c

📁 基于rtos开发的浏览器!
💻 C
📖 第 1 页 / 共 3 页
字号:
		outfile_fp = stdout;		stop_curses();#ifndef VMS		signal(SIGINT, SIG_IGN);#endif /* !VMS */		if (LYPrependBaseToSource && HTisDocumentSource()) {		    /*		     *	Added the document's base as a BASE tag		     *	to the top of the file.  May create		     *	technically invalid HTML, but will help		     *	get any partial or relative URLs resolved		     *	properly if no BASE tag is present to		     *	replace it. - FM		     */		    fprintf(outfile_fp,			    "<!-- X-URL: %s -->\n<BASE HREF=\"%s\">\n\n",			    newdoc->address, content_base);		}		print_wwwfile_to_fd(outfile_fp, 0);		if (keypad_mode)		    printlist(outfile_fp, FALSE);#ifdef VMS		if (HadVMSInterrupt) {		     HadVMSInterrupt = FALSE;		     start_curses();		     break;		}#endif /* VMS */		fprintf(stdout,"\n\n%s", PRESS_RETURN_TO_FINISH);		fflush(stdout);  /* refresh to screen */		LYgetch();  /* grab some user input to pause */#ifdef VMS		HadVMSInterrupt = FALSE;#endif /* VMS */		start_curses();		break;	case PRINTER:		pages = lines_in_file/pagelen;		/* count fractional pages ! */		if ((lines_in_file % pagelen) > 0)		    pages++;		if (pages > 4) {		    sprintf(filename, CONFIRM_LONG_PAGE_PRINT, pages);		    _statusline(filename);		    c=LYgetch();#ifdef VMS		    if (HadVMSInterrupt) {			HadVMSInterrupt = FALSE;			_statusline(PRINT_REQUEST_CANCELLED);			sleep(InfoSecs);			break;		    }#endif /* VMS */		    if (c == RTARROW || c == 'y' || c== 'Y'			 || c == '\n' || c == '\r') {			addstr("   Ok...");		    } else  {			_statusline(PRINT_REQUEST_CANCELLED);			sleep(InfoSecs);			break;		    }		}		if (first) {		    tempname(tempfile, NEW_FILE);		    first = FALSE;		} else {		    remove(tempfile);	/* Remove previous tempfile. */		}		if (((cp = strrchr(tempfile, '.')) != NULL) &&#ifdef VMS		    NULL == strchr(cp, ']') &&#endif /* VMS */		    NULL == strchr(cp, '/')) {		    if (HTisDocumentSource() &&			strcasecomp(cp, HTML_SUFFIX)) {			*cp = '\0';			strcat(tempfile, HTML_SUFFIX);		    } else if (!HTisDocumentSource() &&			       strcasecomp(cp, ".txt")) {			*cp = '\0';			strcat(tempfile, ".txt");		    }		}		if ((outfile_fp = LYNewTxtFile(tempfile)) == NULL) {		    HTAlert(FILE_ALLOC_FAILED);		    break;		}		if (LYPrependBaseToSource && HTisDocumentSource()) {		    /*		     *	Added the document's base as a BASE tag		     *	to the top of the file.  May create		     *	technically invalid HTML, but will help		     *	get any partial or relative URLs resolved		     *	properly if no BASE tag is present to		     *	replace it. - FM		     */		    fprintf(outfile_fp,			    "<!-- X-URL: %s -->\n<BASE HREF=\"%s\">\n\n",			    newdoc->address, content_base);		}		print_wwwfile_to_fd(outfile_fp, 0);		if (keypad_mode)		    printlist(outfile_fp, FALSE);		fclose(outfile_fp);		/* find the right printer number */		{		    int count=0;		    for (cur_printer = printers;			 count < printer_number;			 count++, cur_printer = cur_printer->next)			; /* null body */		}		/*		 *  Commands have the form "command %s [%s] [etc]"		 *  where %s is the filename and the second optional		 *  %s is the suggested filename.		 */		if (cur_printer->command != NULL) {		    /*		     *	Check for two '%s' and ask for the second filename		     *	argument if there is.		     */		    char *first_s = strstr(cur_printer->command, "%s");		    if (first_s && strstr(first_s+1, "%s")) {			_statusline(FILENAME_PROMPT);		again:	strcpy(filename, sug_filename);			change_sug_filename(filename);			if (!(HTisDocumentSource()) &&			    (cp = strrchr(filename, '.')) != NULL) {			    format = HTFileFormat(filename, &encoding, NULL);			    if (!strcasecomp(format->name, "text/html") ||				!IsUnityEnc(encoding)) {				*cp = '\0';				strcat(filename, ".txt");			    }			}		check_again:			if ((ch = LYgetstr(filename, VISIBLE,					   sizeof(filename), recall)) < 0 ||			    *filename == '\0' ||			    ch == UPARROW || ch == DNARROW) {			    if (recall && ch == UPARROW) {				if (FirstRecall) {				    FirstRecall = FALSE;				    /*				     *	Use the last Fname in the list. - FM				     */				    FnameNum = 0;				} else {				    /*				     *	Go back to the previous Fname				     *	in the list. - FM				     */				    FnameNum++;				}				if (FnameNum >= FnameTotal) {				    /*				     *	Reset the FirstRecall flag,				     *	and use sug_file or a blank. - FM				     */				    FirstRecall = TRUE;				    FnameNum = FnameTotal;				    _statusline(FILENAME_PROMPT);				    goto again;				} else if ((cp = (char *)HTList_objectAt(							sug_filenames,							FnameNum)) != NULL) {				    strcpy(filename, cp);				    if (FnameTotal == 1) {					_statusline(EDIT_THE_PREV_FILENAME);				    } else {					_statusline(EDIT_A_PREV_FILENAME);				    }				    goto check_again;				}			    } else if (recall && ch == DNARROW) {				if (FirstRecall) {				    FirstRecall = FALSE;				    /*				     *	Use the first Fname in the list. - FM				     */				    FnameNum = FnameTotal - 1;				} else {				    /*				     *	Advance to the next Fname				     *	in the list. - FM				     */				    FnameNum--;				}				if (FnameNum < 0) {				    /*				     *	Set the FirstRecall flag,				     *	and use sug_file or a blank. - FM				     */				    FirstRecall = TRUE;				    FnameNum = FnameTotal;				    _statusline(FILENAME_PROMPT);				    goto again;				} else if ((cp = (char *)HTList_objectAt(							sug_filenames,							FnameNum)) != NULL) {				    strcpy(filename, cp);				    if (FnameTotal == 1) {					_statusline(EDIT_THE_PREV_FILENAME);				    } else {					_statusline(EDIT_A_PREV_FILENAME);				    }				    goto check_again;				}			    }			    /*			     *	Printer cancelled.			     */			    _statusline(PRINT_REQUEST_CANCELLED);			    sleep(InfoSecs);			    break;			}			if (no_dotfiles || !show_dotfiles) {			    if (*filename == '.' ||#ifdef VMS			       ((cp = strrchr(filename, ':')) &&						*(cp+1) == '.') ||			       ((cp = strrchr(filename, ']')) &&						*(cp+1) == '.') ||#endif /* VMS */			       ((cp = strrchr(filename, '/')) &&						*(cp+1) == '.')) {				HTAlert(FILENAME_CANNOT_BE_DOT);				_statusline(NEW_FILENAME_PROMPT);				FirstRecall = TRUE;				FnameNum = FnameTotal;				goto again;			    }			}			/*			 *  Cancel if the user entered "/dev/null" on Unix,			 *  or an "nl:" path (case-insensitive) on VMS. - FM			 */#ifdef VMS			if (!strncasecomp(filename, "nl:", 3) ||			    !strncasecomp(filename, "/nl/", 4))#else			if (!strcmp(filename, "/dev/null"))#endif /* VMS */			{			    _statusline(PRINT_REQUEST_CANCELLED);			    sleep(InfoSecs);			    break;			}			HTAddSugFilename(filename);		    }#ifdef VMS		    sprintf(buffer, cur_printer->command, tempfile, filename,				    "", "", "", "", "", "", "", "", "", "");#else /* Unix: */		    /*		     *	Prevent spoofing of the shell.		     */		    cp = quote_pathname(filename);		    sprintf(buffer, cur_printer->command, tempfile, cp,				    "", "", "", "", "", "", "", "", "", "");		    FREE(cp);#endif /* !VMS */		} else {		    HTAlert(PRINTER_MISCONF_ERROR);		    break;		}		/*		 *  Move the cursor to the top of the screen so that		 *  output from system'd commands don't scroll up		 *  the screen.		 */		move(1,1);		stop_curses();		if (TRACE)		    fprintf(stderr, "command: %s\n", buffer);		printf(PRINTING_FILE);#ifdef VMS		/*		 *  Set document's title as a VMS logical. -  FM		 */		StrAllocCopy(envbuffer, HText_getTitle());		if (!(envbuffer && *envbuffer))		    StrAllocCopy(envbuffer, "No Title");		Define_VMSLogical("LYNX_PRINT_TITLE", envbuffer);#else		/*		 *  Set document's title as an environment variable. - JKT		 */		StrAllocCopy(envbuffer, "LYNX_PRINT_TITLE=");		StrAllocCat(envbuffer, HText_getTitle());		putenv(envbuffer);#endif /* VMS */		fflush(stdout);		system(buffer);#ifdef VMS		/*		 *  Remove LYNX_PRINT_TITLE logical. - FM		 */		Define_VMSLogical("LYNX_PRINT_TITLE", "");#else		/*		 *  Remove LYNX_PRINT_TITLE value from environment. - KW		 */		envbuffer[17] = '\0'; /* truncate after '=' */		putenv(envbuffer);#endif /* VMS */		FREE(envbuffer);		fflush(stdout);#ifndef VMS		signal(SIGINT, cleanup_sig);#endif /* !VMS */		sleep(MessageSecs);		start_curses();		/* don't remove(tempfile); */    } /* end switch */    FREE(link_info);    FREE(sug_filename);    FREE(content_base);    FREE(content_location);    return(NORMAL);}#ifdef VMSPRIVATE int remove_quotes ARGS1(	char *, 	string){   int i;   for(i = 0; string[i] != '\0'; i++)	if(string[i] == '"')	   string[i] = ' ';	else if(string[i] == '&')	   string[i] = ' ';	else if(string[i] == '|')	   string[i] = ' ';   return(0);}#endif /* VMS *//* * print_options writes out the current printer choices to a file * so that the user can select printers in the same way that * they select all other links * printer links look like *  LYNXPRINT://LOCAL_FILE/lines=#	     print to a local file *  LYNXPRINT://TO_SCREEN/lines=#	     print to the screen *  LYNXPRINT://MAIL_FILE/lines=#	     mail the file *  LYNXPRINT://PRINTER/lines=#/number=#   print to printer number # */PUBLIC int print_options ARGS2(	char **,	newfile,	int,		lines_in_file){    static char tempfile[256];    static BOOLEAN first = TRUE;    static char print_filename[256];    char buffer[LINESIZE];    int count;    int pages;    FILE *fp0;    lynx_printer_item_type *cur_printer;    pages = lines_in_file/66 + 1;    if (first) {	tempname(tempfile, NEW_FILE);#if defined (VMS) || defined (DOSPATH)	sprintf(print_filename, "file://localhost/%s", tempfile);#else	sprintf(print_filename, "file://localhost%s", tempfile);#endif /* VMS */	first = FALSE;#ifdef VMS    } else {	remove(tempfile);   /* Remove duplicates on VMS. */#endif /* !VMS */    }    if ((fp0 = LYNewTxtFile(tempfile)) == NULL) {	HTAlert(UNABLE_TO_OPEN_PRINTOP_FILE);	return(-1);    }    StrAllocCopy(*newfile, print_filename);    LYforce_no_cache = TRUE;    fprintf(fp0, "<head>\n<title>%s</title>\n</head>\n<body>\n",		 PRINT_OPTIONS_TITLE);    fprintf(fp0,"<h1>Printing Options (%s Version %s)</h1><pre>\n",				       LYNX_NAME, LYNX_VERSION);    pages = (lines_in_file+65)/66;    sprintf(buffer,	   "   There are %d lines, or approximately %d page%s, to print.\n",	    lines_in_file, pages, (pages > 1 ? "s" : ""));    fputs(buffer,fp0);    if (no_print || no_disk_save || child_lynx || no_mail)	fprintf(fp0, "   Some print functions have been disabled!!!\n");    fprintf(fp0, "   You have the following print choices.\n");    fprintf(fp0, "   Please select one:\n\n");    if (child_lynx == FALSE && no_disk_save == FALSE && no_print == FALSE)	fprintf(fp0,   "   <a href=\"LYNXPRINT://LOCAL_FILE/lines=%d\">Save to a local file</a>\n",		lines_in_file);    else	fprintf(fp0,"   Save to disk disabled.\n");    if (child_lynx == FALSE && no_mail == FALSE)	 fprintf(fp0,   "   <a href=\"LYNXPRINT://MAIL_FILE/lines=%d\">Mail the file</a>\n",		lines_in_file);    fprintf(fp0,   "   <a href=\"LYNXPRINT://TO_SCREEN/lines=%d\">Print to the screen</a>\n",		lines_in_file);    for (count = 0, cur_printer = printers; cur_printer != NULL;	cur_printer = cur_printer->next, count++)    if (no_print == FALSE || cur_printer->always_enabled) {	fprintf(fp0,   "   <a href=\"LYNXPRINT://PRINTER/number=%d/pagelen=%d/lines=%d\">",		count, cur_printer->pagelen, lines_in_file);	fprintf(fp0, (cur_printer->name ?		      cur_printer->name : "No Name Given"));	fprintf(fp0, "</a>\n");    }    fprintf(fp0, "</pre>\n</body>\n");    fclose(fp0);    LYforce_no_cache = TRUE;    return(0);}

⌨️ 快捷键说明

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