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

📄 mu.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
#include "hexbin.h"#ifdef MU#include "globals.h"#include "readline.h"#include "../util/masks.h"#include "../util/util.h"#include "../fileio/machdr.h"#include "../fileio/wrfile.h"#include "buffer.h"#include "printhdr.h"extern void exit();static void do_mu_fork();static int mu_comp_to_bin();static int mu_convert();/* mu format -- process .mu files */void mu(macname)char *macname;{    int n;    for(n = 0; n < INFOBYTES; n++) {	info[n] = 0;    }    /* set up name for output files */    if(macname[0] == '\0') {	n = 0;	while(line[n] != '"') {	    n++;	}	macname = line + n + 1;	line[strlen(line) - 1] = 0;    }    n = strlen(macname);    if(n > F_NAMELEN) {	n = F_NAMELEN;    }    (void)strncpy(mh.m_name, macname, n);    mh.m_name[n] = '\0';    info[I_NAMEOFF] = n;    (void)strncpy(info + I_NAMEOFF + 1, mh.m_name, n);    if(listmode) {	(void)fprintf(stderr, "This file is in \"mu\" format.\n");    }    transname(mh.m_name, trname, n);    define_name(trname);    print_header0(0);    set_put(0);    set_put(1);    do_mu_fork();    mh.m_datalen = data_size;    if(!readline()) {	(void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN	do_error("hexbin: Premature EOF");#endif /* SCAN */	exit(1);    }    if(strncmp(line, "begin ", 6)) {	(void)fprintf(stderr, "No UU header found.\n");#ifdef SCAN	do_error("hexbin: No UU header found");#endif /* SCAN */	exit(1);    }    if(!strncmp(line + 10, " .rsrc", 6)) {	set_put(0);	do_mu_fork();	mh.m_rsrclen = rsrc_size;	if(!readline()) {	    (void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN	    do_error("hexbin: Premature EOF");#endif /* SCAN */	    exit(1);	}	if(strncmp(line, "begin ", 6)) {	    (void)fprintf(stderr, "No UU header found.\n");#ifdef SCAN	    do_error("hexbin: No UU header found");#endif /* SCAN */	    exit(1);	}    } else {	mh.m_rsrclen = 0;    }    if(strncmp(line + 10, " .finfo", 7)) {	(void)fprintf(stderr, "No finder info found.\n");#ifdef SCAN	do_error("hexbin: No finder info found");#endif /* SCAN */	exit(1);    }    if(!readline()) {	(void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN	do_error("hexbin: Premature EOF");#endif /* SCAN */	exit(1);    }    (void)mu_convert(line, info + I_TYPEOFF);    if(!readline()) {	(void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN	do_error("hexbin: Premature EOF");#endif /* SCAN */	exit(1);    }    if(mu_convert(line, line)) {	(void)fprintf(stderr, "Long finderinfo.\n");#ifdef SCAN	do_error("hexbin: Long finderinfo");#endif /* SCAN */	exit(1);    }    if(!readline()) {	(void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN	do_error("hexbin: Premature EOF");#endif /* SCAN */	exit(1);    }    if(strncmp(line, "end", 3)) {	(void)fprintf(stderr, "\"end\" line missing.\n");#ifdef SCAN	do_error("hexbin: \"end\" line missing");#endif /* SCAN */	exit(1);    }    (void)strncpy(mh.m_type, info + I_TYPEOFF, 4);    (void)strncpy(mh.m_author, info + I_AUTHOFF, 4);    print_header1(0, 0);    put4(info + I_DLENOFF, (unsigned long)mh.m_datalen);    put4(info + I_RLENOFF, (unsigned long)mh.m_rsrclen);    put4(info + I_CTIMOFF, (unsigned long)mh.m_createtime);    put4(info + I_MTIMOFF, (unsigned long)mh.m_modifytime);    print_header2(0);    end_put();}static void do_mu_fork(){    long newbytes;    while(readline()) {	if(line[0] == 0) {	    continue;	}	newbytes = mu_comp_to_bin();	if(newbytes != 0) {	    continue;	}	if(!readline()) {	    (void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN	    do_error("hexbin: Premature EOF");#endif /* SCAN */	    exit(1);	}	if(strncmp(line, "end", 3)) {	    (void)fprintf(stderr, "\"end\" line missing.\n");#ifdef SCAN	    do_error("hexbin: \"end\" line missing");#endif /* SCAN */	    exit(1);	}	return;    }    (void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN    do_error("hexbin: Premature EOF");#endif /* SCAN */    exit(1);    /*NOTREACHED*/}static int mu_comp_to_bin(){    char obuf[BUFSIZ];    int outcount, n;    outcount = mu_convert(line, obuf);    for(n = 0; n < outcount; n++) {	put_byte(obuf[n]);    }    return outcount;}#define SIXB(c) (((c)-0x20) & 0x3f)static int mu_convert(ibuf, obuf)char *ibuf, *obuf;{    register char *ip = ibuf;    register char *op = obuf;    register int n, outcount;    int numread, incount;    numread = strlen(ip);    outcount = SIXB(ip[0]);    incount = ((outcount / 3) + 1) * 4;    for(n = numread; n < incount; n++) {  /* restore lost spaces */	ip[n] = ' ';    }    ip++;    n = 0;    while(n <= outcount) {	*op++ = SIXB(ip[0]) << 2 | SIXB(ip[1]) >> 4;	*op++ = SIXB(ip[1]) << 4 | SIXB(ip[2]) >> 2;	*op++ = SIXB(ip[2]) << 6 | SIXB(ip[3]);	ip += 4;	n += 3;    }    return outcount;}#else /* MU */int mu; /* keep lint and some compilers happy */#endif /* MU */

⌨️ 快捷键说明

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