[CONTACT]

[ABOUT]

[POLICY]

sites like to publish compressed fi

Found at: ftp.icm.edu.pl:70/packages/netlib/crc/htmlunz.c

/* for removing .Z suffix from certain HREFs, needed because some mirror
   sites like to publish compressed files and some sites don't. */
/* Eric Grosse <ehg@research.att.com>  30 Jul 1995 */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

nt NR = 0;
char *FN;

#define SMAX 4096

char*
findfile(char*filename,char*right)
{
	char *f, *e;
	*filename = 0;
	f = right;
	if(*f=='"'){
		f++;
		for(e = f; *e!='#' && *e!='"'; e++)
			if(*e==0){
				fprintf(stderr,"unmatched \" at %s:%d\n",FN,NR);
				return(e);
			}
	}else{
		for( e = f; *e!='#' && *e!='>' && *e!=' '; e++)
			if(*e==0){
				fprintf(stderr,"unterminated HREF at %s:%d\n",FN,NR);
				return(e);
			}
	}
	strncpy(filename,f,e-f);
	filename[e-f] = 0;
	return(e);
}

/* returns length of compression suffix (e.g. 2 for ".Z") if pointer
   should apparently be to uncompressed file, else returns 0 */
nt
{
	int n, suff = 0;

	if(*filename==0 || strchr(filename,':'))
		return(0);
	n = strlen(filename);
	if(strcmp(filename+n-2,".Z")==0)
		suff = 2;
	else if(strcmp(filename+n-3,".gz")==0)
		suff = 3;
	if(suff==0 || access(filename,R_OK)==0)
		return(0);
	filename[n-suff] = 0;
	if(access(filename,R_OK)==0)
		return(suff);
	return(0);
}

char*
match_assn(char *pat, char *text)
{
	while(*pat){
		if(*pat==*text || isupper(*text) && *pat==tolower(*text) ){
			pat++;
			text++;
		}else return(0);
	}
	while(*text==' ')
		text++;
	if(*text!='=')
		return(0);
	text++;
	while(*text==' ')
		text++;
	return(text);
}

nt
main(int argc, char**argv)
{
	FILE *I, *Z;
	char *Ztmp, line[SMAX], *left, *right, *href, filename[SMAX];
	int suff;

	if(argc!=2) exit(1);
	FN = argv[1];
	if(right = strrchr(FN,'/')){
		*right = 0;
		chdir(FN);   /* cd to local dir, so relative HREFs work */
		FN = right+1;
	}
	I = fopen(FN,"r");
	if(I==NULL){
		fprintf(stderr,"can't open %s\n",FN);
		exit(3);
	}
	Ztmp = tmpnam(0);
	Z = fopen(Ztmp,"w");
	if(Z==NULL){
		fprintf(stderr,"can't open %s\n",Ztmp);
		exit(3);
	}
	while(fgets(line,sizeof(line),I)!=NULL){
		NR++;
		left = right = line;
		while(*right){
			if(href = match_assn("href",right)){
				right = findfile(filename,href);
				suff = suffix(filename);
				fwrite(left,1,right-left-suff,Z);
				left = right;
			}else
				right++;
		}
		if(left!=right){
			fwrite(left,1,right-left,Z);
		}
	}
	fclose(I);
	I = fopen(FN,"w");
	if(I==NULL){
		fprintf(stderr,"can't reopen %s for writing\n",FN);
		exit(3);
	}
	fclose(Z);
	Z = fopen(Ztmp,"r");
	if(Z==NULL){
		fprintf(stderr,"can't reopen %s\n",Ztmp);
		exit(3);
	}
	while(fgets(line,sizeof(line),Z)!=NULL)
		fputs(line,I);
	fclose(I);
	fclose(Z);
	remove(Ztmp);
	exit(0);
}

.


AD:

NEW PAGES:

[ODDNUGGET]

[GOPHER]