DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T l

⟦ed09f006c⟧ TextFile

    Length: 6288 (0x1890)
    Types: TextFile
    Names: »ls_f.c«

Derivation

└─⟦8ee07855d⟧ Bits:30000545 8mm tape, Rational 1000, DTIA 2_1_6
    └─ ⟦0c25cb74a⟧ »DATA« 
        └─⟦038380b96⟧ 
└─⟦d0624311f⟧ Bits:30000529 8mm tape, Rational 1000, DTIA 2_1_7
    └─ ⟦f494b5154⟧ »DATA« 
        └─⟦038380b96⟧ 
            └─ ⟦this⟧ »ls_f.c« 
└─⟦8ee07855d⟧ Bits:30000545 8mm tape, Rational 1000, DTIA 2_1_6
    └─ ⟦0c25cb74a⟧ »DATA« 
        └─⟦0732ea0cf⟧ 
└─⟦d0624311f⟧ Bits:30000529 8mm tape, Rational 1000, DTIA 2_1_7
    └─ ⟦f494b5154⟧ »DATA« 
        └─⟦0732ea0cf⟧ 
            └─ ⟦this⟧ »../../dtia/release_apollo_2.1/ls_f.c« 
└─⟦8ee07855d⟧ Bits:30000545 8mm tape, Rational 1000, DTIA 2_1_6
    └─ ⟦0c25cb74a⟧ »DATA« 
        └─⟦25fab149a⟧ 
└─⟦d0624311f⟧ Bits:30000529 8mm tape, Rational 1000, DTIA 2_1_7
    └─ ⟦f494b5154⟧ »DATA« 
        └─⟦25fab149a⟧ 
            └─ ⟦this⟧ »../../dtia/release_sun_2.1/ls_f.c« 
└─⟦8ee07855d⟧ Bits:30000545 8mm tape, Rational 1000, DTIA 2_1_6
    └─ ⟦0c25cb74a⟧ »DATA« 
        └─⟦be254d495⟧ 
└─⟦d0624311f⟧ Bits:30000529 8mm tape, Rational 1000, DTIA 2_1_7
    └─ ⟦f494b5154⟧ »DATA« 
        └─⟦be254d495⟧ 
            └─ ⟦this⟧ »../../dtia/release_aix_2.1/ls_f.c« 
└─⟦8ee07855d⟧ Bits:30000545 8mm tape, Rational 1000, DTIA 2_1_6
    └─ ⟦0c25cb74a⟧ »DATA« 
        └─⟦c67979795⟧ 
└─⟦d0624311f⟧ Bits:30000529 8mm tape, Rational 1000, DTIA 2_1_7
    └─ ⟦f494b5154⟧ »DATA« 
        └─⟦c67979795⟧ 
            └─ ⟦this⟧ »../../dtia/release_hp_2.1/ls_f.c« 

TextFile

#ifndef	lint
#ifndef	DEBUG
static char SCCS_id[] = "@(#)ls_f.c 2.1 90/08/02 19:04:54  Copyright(c) 1990 by Rational.";
#else
static char SCCS_id[] = "@(#)ls_f.c DEBUG 2.1 90/08/02 19:04:54  Copyright(c) 1990 by Rational.";
#endif
#endif

#define	LS_F
#include	"talk.h"
#undef	LS_F

#define	UNREADABLE	" unredeable"
#define	STATFAILED	" stat failed"
#define	UNACCESSIBLE	" unaccessible"

typedef	int	(*PFRE)();
static	PFRE	fct_write;

extern	int	errno;
static	int	error_number = E_OK;

static	char	type(t)
unsigned	short	t; 
{
	if		(t&S_IFDIR)	return	'd';
	else	if	(t&S_IFCHR)	return	'c';
	else	if	(t&S_IFBLK)	return	'b';
	else	if	(t&S_IFREG)	return	'-';
	else	if	(t&S_IFLNK)	return	'l';
	else	if	(t&S_IFSOCK)	return	's';
	else	if	(t&S_IFIFO)	return	'p';
	else	return	'?';
}

static	char	*mode(m)
unsigned	short	m; 
{
	static	char	m_value[10];
	int	su_mode		=04000;
	int	read_mode	=0400;
	int	write_mode	=0200;
	int	exec_mode	=0100;

	/*	Owner modes	*/
	m_value[0]=(m&read_mode)?'r':'-';
	m_value[1]=(m&write_mode)?'w':'-';
	m_value[2]=(m&exec_mode)?((m&su_mode)?'s':'x'):
	((m&su_mode)?'S':'-');

	/*	Group modes	*/
	su_mode>>=1;
	read_mode>>=3;
	write_mode>>=3;
	exec_mode>>=3;
	m_value[3]=(m&read_mode)?'r':'-';
	m_value[4]=(m&write_mode)?'w':'-';
	m_value[5]=(m&exec_mode)?((m&su_mode)?'s':'x'):
	((m&su_mode)?'S':'-');

	/*	Other modes	*/
	su_mode>>=1;
	read_mode>>=3;
	write_mode>>=3;
	exec_mode>>=3;
	m_value[6]=(m&read_mode)?'r':'-';
	m_value[7]=(m&write_mode)?'w':'-';
	m_value[8]=(m&exec_mode)?((m&su_mode)?'t':'x'):
	((m&su_mode)?'T':'-');

	/*	The end		*/
	m_value[9]='\0';
	return	m_value;
}

static	char	*owner(u)
int	u; 
{
	static	struct	passwd	password,*p_password;
	if ((p_password=getpwuid(u))==NULL)	return	"?";
	else {
		password= *p_password;
		return	password.pw_name;
	}
}

static	char	*group(g)
int	g; 
{
	static	struct	group	grp,*p_grp;
	if ((p_grp=getgrgid(g))==NULL)	return	"?";
	else {
		grp= *p_grp;
		return	grp.gr_name;
	}
}

#define	LEFT	0
#define	RIGHT	1
#define	MAXLINE	100
static	char	line[MAXLINE+1];
static	int	lg_line=0;
#define	FREEZON	(line+lg_line)
#define	NBFREE	(MAXLINE-lg_line)
#define	CONCAT(ss,ll)	if(ll<=NBFREE){bcopy(ss,FREEZON,ll);lg_line+=ll;} \
			 else{bcopy(ss,FREEZON,NBFREE);lg_line=MAXLINE;}

static	void	empty() {
	lg_line=0;
}

static	void	concat(string,adjustment,size)
char	*string;
int	adjustment,size; 
{
	int	lg_string=strlen(string);
	int	size_padding;
	if (size== -1)	size=strlen(string);
	size_padding=size-lg_string;
	if (size_padding<0)		size_padding=0;
	if (lg_string>size)	{
		string[size]='\0';
		lg_string=size;
	}
	switch	(adjustment) {
	case LEFT:
		CONCAT(string,lg_string);
		while (size_padding--)	CONCAT(" ",1);
		break;
	case RIGHT:
		while (size_padding--)	CONCAT(" ",1);
		CONCAT(string,lg_string);
		break;
	}
}

static	void	my_itoa(i,s,l)
int	i;
char	*s;
int	l; 
{
	int	index=l-2;
	s[l-1]='\0';
	while (1) {
		if (index<0)	break;
		s[index]='0'+(i % 10);
		index--;
		i /= 10;
		if (i==0)	break;
	}
	if (index>=0)	bcopy(s+index+1,s,l-index-1);
}

static	void	print_line() {
	line[lg_line]='\0';
	(*fct_write)(line);
	empty();
}

static	void	print(level,type,mode,nb_links,owner,group,size,path)
int	level;
char	type,*mode;
short	nb_links;
char	*owner,*group;
off_t	size;
char	*path; 
{
	char	buffer[9];
	char	*p;
	p=rindex(path,'/');
	if ((p?p+1:path)[0]=='.')	return;
	while (level--)	concat(" ",LEFT,1);
	empty();
	concat(&type,LEFT,1);
	concat(mode,LEFT,9);
	concat("  ",LEFT,2);
	my_itoa(nb_links,buffer,3);
	concat(buffer,RIGHT,2);
	concat("  ",LEFT,2);
	concat(owner,LEFT,8);
	concat("  ",LEFT,2);
	concat(group,LEFT,8);
	concat("  ",LEFT,2);
	my_itoa((int)size,buffer,9);
	concat(buffer,RIGHT,8);
	concat("  ",LEFT,2);
	concat((p)?p+1:path,LEFT,20);
	print_line();
}

static	int	print_dir(arg,root,level,level_max)
char	*arg,*root;
int	level,level_max; 
{
	static	char	pathname[MAXPATHLEN];
	static	int	to_be_removed;
#define	FULL_PATH	(to_be_removed=(arg[0]=='/')?			\
				0:(rindex(root,'/')-root+1),		\
			 (getwd(pathname)+to_be_removed)		\
			)
	int	i;
	int	ret_stat;
	struct	stat	infos;
	DIR	*dirp;
#ifdef	APOLLO
	struct	direct	*dp;
#else
	struct	dirent	*dp;
#endif
	if ((level>=level_max)&&(level_max>0))	return;
	empty();
	if (strcmp(root,getwd(pathname)))	print_line();
	concat(FULL_PATH,LEFT,-1);
	if ((dirp=opendir("."))==NULL) {
		concat(UNREADABLE,LEFT,-1);
		print_line();
		return;
	} else {
		concat(":",LEFT,1);
		print_line();
	}
	for (i=1;i<3;i++) {
		for (dp=readdir(dirp);dp!=NULL;dp=readdir(dirp)) {
			if (dp->d_name[0]=='.')	continue;
			ret_stat=stat(dp->d_name,&infos);
			switch (i) {
			case 1:
				if (ret_stat!= -1)
					print( 	level,
					    type(infos.st_mode),
					    mode(infos.st_mode),
					    infos.st_nlink,
					    owner(infos.st_uid),
					    group(infos.st_gid),
					    infos.st_size,
					    dp->d_name
					    );
				else	{
					concat(dp->d_name,LEFT,-1);
					concat(STATFAILED,LEFT,-1);
					print_line();
				}
				break;
			case 2:
				if ( ((level+1<level_max)||(level_max<=0))
				    &&
				    (type(infos.st_mode)=='d')
				    ) {
					if (chdir(dp->d_name)== -1) {
						empty();
						print_line();
						empty();
						concat(FULL_PATH,LEFT,-1);
						concat("/",LEFT,1);
						concat(dp->d_name,LEFT,-1);
						concat(UNACCESSIBLE,LEFT,-1);
						print_line();
						continue;
					}
					print_dir(arg,root,
					    level+1,
					    level_max);
					chdir("..");
				}
				break;
			}
		}
		switch (i) {
		case 1:
			rewinddir(dirp);
			break;
		case 2:
			closedir(dirp);
			break;
		}
	}
}

static	int	print_dirs(path,level)
char	*path;
int	level; 
{
	static	char	pathname[MAXPATHLEN];
	if (chdir(path)== -1)	{
		empty();
		concat(path,LEFT,-1);
		concat(UNACCESSIBLE,LEFT,-1);
		print_line();
		return	-1;
	}
	print_dir(path,getwd(pathname),0,level);
	return	0;
}

static	int	error;
static	int	level;
int	ls_f_from_remote_directory_in(directory)
char	*directory; 
{
	error_number = E_OK;
	error=0;
	level=0;
	put_unix_name(directory);
	return	E_OK;
}

int	ls_f_level_in(l)
int	l; 
{
	level = l;
	return	E_OK;
}

int	ls_f_end(f)
PFRE	f; 
{
	int	error;
	char	*directory;
	fct_write = f;
	get_unix_name(&directory);
	error = print_dirs(directory,level);
	chdir(get_user_home());
	return	(error == -1) ? error_number : E_OK;
}