代码拉取完成,页面将自动刷新
/* $Copyright: $
* Copyright (c) 1996 - 2024 by Steve Baker (steve.baker.llc@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "tree.h"
extern char *version, *hversion;
extern bool dflag, lflag, pflag, sflag, Fflag, aflag, fflag, uflag, gflag;
extern bool Dflag, inodeflag, devflag, Rflag, duflag, hflag, siflag;
extern bool noindent, force_color, xdev, nolinks, metafirst, noreport;
extern char *host, *sp, *title, *Hintro, *Houtro;
extern const char *charset;
extern FILE *outfile;
extern int Level, *dirs, maxdirs;
extern bool colorize, linktargetcolor;
extern char *endcode;
extern const struct linedraw *linedraw;
int htmldirlen = 0;
char *class(struct _info *info)
{
return
info->isdir ? "DIR" :
info->isexe ? "EXEC" :
info->isfifo ? "FIFO" :
info->issok ? "SOCK" : "NORM";
}
void html_encode(FILE *fd, char *s)
{
for(;*s;s++) {
switch(*s) {
case '<':
fputs("<",fd);
break;
case '>':
fputs(">",fd);
break;
case '&':
fputs("&",fd);
break;
case '"':
fputs(""",fd);
break;
default:
fputc(*s,fd);
break;
}
}
}
void url_encode(FILE *fd, char *s)
{
for(;*s;s++) {
switch(*s) {
case ' ':
case '"':
case '#':
case '%':
case '<':
case '>':
case '[':
case ']':
case '^':
case '\\':
case '?':
case '+':
fprintf(fd,"%%%02X",*s);
break;
case '&':
fprintf(fd,"&");
break;
default:
fprintf(fd,isprint((u_int)*s)?"%c":"%%%02X",(u_char)*s);
break;
}
}
}
void fcat(char *filename)
{
FILE *fp;
char buf[PATH_MAX];
int n;
if ((fp = fopen(filename, "r")) == NULL) return;
while((n = fread(buf, sizeof(char), PATH_MAX, fp)) > 0) {
fwrite(buf, sizeof(char), n, outfile);
}
fclose(fp);
}
void html_intro(void)
{
if (Hintro) fcat(Hintro);
else {
fprintf(outfile,
"<!DOCTYPE html>\n"
"<html>\n"
"<head>\n"
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n"
" <meta name=\"Author\" content=\"Made by 'tree'\">\n"
" <meta name=\"GENERATOR\" content=\"", charset ? charset : "iso-8859-1");
print_version(FALSE);
fprintf(outfile, "\">\n"
" <title>%s</title>\n"
" <style type=\"text/css\">\n"
" BODY { font-family : monospace, sans-serif; color: black;}\n"
" P { font-family : monospace, sans-serif; color: black; margin:0px; padding: 0px;}\n"
" A:visited { text-decoration : none; margin : 0px; padding : 0px;}\n"
" A:link { text-decoration : none; margin : 0px; padding : 0px;}\n"
" A:hover { text-decoration: underline; background-color : yellow; margin : 0px; padding : 0px;}\n"
" A:active { margin : 0px; padding : 0px;}\n"
" .VERSION { font-size: small; font-family : arial, sans-serif; }\n"
" .NORM { color: black; }\n"
" .FIFO { color: purple; }\n"
" .CHAR { color: yellow; }\n"
" .DIR { color: blue; }\n"
" .BLOCK { color: yellow; }\n"
" .LINK { color: aqua; }\n"
" .SOCK { color: fuchsia;}\n"
" .EXEC { color: green; }\n"
" </style>\n"
"</head>\n"
"<body>\n"
"\t<h1>%s</h1><p>\n", title, title);
}
}
void html_outtro(void)
{
if (Houtro) fcat(Houtro);
else {
fprintf(outfile,"\t<hr>\n");
fprintf(outfile,"\t<p class=\"VERSION\">\n");
fprintf(outfile,hversion,linedraw->copy, linedraw->copy, linedraw->copy, linedraw->copy);
fprintf(outfile,"\t</p>\n");
fprintf(outfile,"</body>\n");
fprintf(outfile,"</html>\n");
}
}
void html_print(char *s)
{
int i;
for(i=0; s[i]; i++) {
if (s[i] == ' ') fprintf(outfile,"%s",sp);
else fprintf(outfile,"%c", s[i]);
}
fprintf(outfile,"%s%s", sp, sp);
}
int html_printinfo(char *dirname, struct _info *file, int level)
{
char info[512];
fillinfo(info,file);
if (metafirst) {
if (info[0] == '[') {
html_print(info);
fprintf(outfile,"%s%s", sp, sp);
}
if (!noindent) indent(level);
} else {
if (!noindent) indent(level);
if (info[0] == '[') {
html_print(info);
fprintf(outfile,"%s%s", sp, sp);
}
}
return 0;
}
/* descend == add 00Tree.html to the link */
int html_printfile(char *dirname, char *filename, struct _info *file, int descend)
{
int i;
/* Switch to using 'a' elements only. Omit href attribute if not a link */
fprintf(outfile,"<a");
if (file) {
if (force_color) fprintf(outfile," class=\"%s\"", class(file));
if (file->comment) {
fprintf(outfile," title=\"");
for(i=0; file->comment[i]; i++) {
html_encode(outfile, file->comment[i]);
if (file->comment[i+1]) fprintf(outfile, "\n");
}
fprintf(outfile, "\"");
}
if (!nolinks) {
fprintf(outfile," href=\"%s",host);
if (dirname != NULL) {
if (host[strlen(host)-1] != '/') putc('/', outfile);
url_encode(outfile, dirname);
if (strcmp(dirname, filename) != 0) {
if (dirname[strlen(dirname)-1] != '/') putc('/', outfile);
url_encode(outfile, filename);
}
fprintf(outfile,"%s%s\"",(descend > 1? "/00Tree.html" : ""), (file->isdir && descend < 2?"/":""));
} else {
if (host[strlen(host)-1] != '/') putc('/', outfile);
url_encode(outfile, filename);
fprintf(outfile,"%s\"",(descend > 1? "/00Tree.html" : ""));
}
}
}
fprintf(outfile, ">");
if (dirname) html_encode(outfile,filename);
else html_encode(outfile, host);
fprintf(outfile,"</a>");
return 0;
}
int html_error(char *error)
{
fprintf(outfile, " [%s]", error);
return 0;
}
void html_newline(struct _info *file, int level, int postdir, int needcomma)
{
fprintf(outfile, "<br>\n");
}
void html_close(struct _info *file, int level, int needcomma)
{
fprintf(outfile, "</%s><br>\n", file->tag);
}
void html_report(struct totals tot)
{
char buf[256];
fprintf(outfile,"<br><br><p>\n\n");
if (duflag) {
psize(buf, tot.size);
fprintf(outfile,"%s%s used in ", buf, hflag || siflag? "" : " bytes");
}
if (dflag)
fprintf(outfile,"%ld director%s\n",tot.dirs,(tot.dirs==1? "y":"ies"));
else
fprintf(outfile,"%ld director%s, %ld file%s\n",tot.dirs,(tot.dirs==1? "y":"ies"),tot.files,(tot.files==1? "":"s"));
fprintf(outfile, "\n</p>\n");
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。