add directory Linux-0.11
This commit is contained in:
10
Linux-0.11/sources/libs/README.curses
Normal file
10
Linux-0.11/sources/libs/README.curses
Normal file
@@ -0,0 +1,10 @@
|
||||
curses.tar.Z contains the curses library from bsd-net-2, with
|
||||
pre-installed diffs & RCS files for linux changes.
|
||||
You'll need to use 'pmake' to build it, or reconstruct the Makefile.
|
||||
|
||||
I'm not completely certain that I got all of the raw(), crmode() etc
|
||||
stuff right. If you have applications that use curses, try them out and
|
||||
send back patches if you find bugs.
|
||||
|
||||
John Kohl <jtkohl@cs.berkeley.edu>
|
||||
|
||||
BIN
Linux-0.11/sources/libs/curses.tar.Z
Normal file
BIN
Linux-0.11/sources/libs/curses.tar.Z
Normal file
Binary file not shown.
103
Linux-0.11/sources/sbin/df.c
Normal file
103
Linux-0.11/sources/sbin/df.c
Normal file
@@ -0,0 +1,103 @@
|
||||
/* df.c: Copywrite (92) Peter MacDonald: distribute freely, don't restrict. */
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
char *hdr1="\n inodes inodes inodes blocks blocks blocks mount";
|
||||
char *hdr2= "device total used free total used free point";
|
||||
char *hdr3= "--------------------------------------------------------------------";
|
||||
char *fmt = "%-9s %-7d %-7d %-7d %-7d %-7d %-7d %s\n";
|
||||
|
||||
void do_df(char *dev, char *dir);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{ int i;
|
||||
|
||||
sync();
|
||||
puts(hdr1);
|
||||
puts(hdr2);
|
||||
puts(hdr3);
|
||||
if (argc != 1)
|
||||
for (i=1; i<argc; i++)
|
||||
do_df(argv[i],"");
|
||||
else
|
||||
{ FILE *F = fopen("/etc/mtab","r");
|
||||
if (!F)
|
||||
{ fprintf(stderr,"/etc/mtab not found\n");
|
||||
exit(1);
|
||||
}
|
||||
do
|
||||
{ char buf[200], dev[40], dir[150];
|
||||
fgets(buf,200,F);
|
||||
if (feof(F) || (strlen(buf)<6))
|
||||
break;
|
||||
sscanf(buf,"%s %s",dev,dir);
|
||||
do_df(dev,dir);
|
||||
} while (1);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
#define oops(str,arg) { fprintf(stderr,str,arg); close(fd); return; }
|
||||
|
||||
int fd;
|
||||
int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };
|
||||
|
||||
ino_t count(unsigned numblocks, unsigned numbits)
|
||||
{ unsigned i, j, end, sum = 0;
|
||||
char buf[BLOCK_SIZE];
|
||||
|
||||
for (i=0; (i<numblocks) && numbits; i++)
|
||||
{
|
||||
if (read(fd,buf,sizeof(buf))<0)
|
||||
return(0);
|
||||
if (numbits >= (8*BLOCK_SIZE))
|
||||
{
|
||||
end = BLOCK_SIZE;
|
||||
numbits -= 8*BLOCK_SIZE;
|
||||
}
|
||||
else
|
||||
{ int tmp;
|
||||
end = numbits >> 3;
|
||||
numbits &= 0x7;
|
||||
tmp = buf[end] & ((1<<numbits)-1);
|
||||
sum += nibblemap[tmp&0xf] + nibblemap[(tmp>>4)&0xf];
|
||||
numbits = 0;
|
||||
}
|
||||
for (j=0; j<end; j++)
|
||||
sum += nibblemap[buf[j] & 0xf] + nibblemap[(buf[j]>>4)&0xf];
|
||||
}
|
||||
return(sum);
|
||||
}
|
||||
|
||||
void do_df(char *dev, char *dir)
|
||||
{ int it,iu,bt,bu;
|
||||
struct super_block supstruct;
|
||||
|
||||
if ((fd=open(dev,O_RDONLY))<0)
|
||||
oops("df can't open device: %s",dev);
|
||||
|
||||
lseek(fd,BLOCK_SIZE,SEEK_SET);
|
||||
if (read(fd,(char*)&supstruct,sizeof(struct super_block))
|
||||
!= sizeof(struct super_block))
|
||||
oops("super block unreadable: %s",dev);
|
||||
|
||||
lseek(fd,BLOCK_SIZE*2,SEEK_SET);
|
||||
if (supstruct.s_magic != SUPER_MAGIC)
|
||||
oops("not a valid file system: %s",dev);
|
||||
|
||||
it = supstruct.s_ninodes;
|
||||
iu = count(supstruct.s_imap_blocks,supstruct.s_ninodes+1);
|
||||
|
||||
bt = supstruct.s_nzones << supstruct.s_log_zone_size;
|
||||
bu = count(supstruct.s_zmap_blocks,supstruct.s_nzones) <<
|
||||
supstruct.s_log_zone_size;
|
||||
|
||||
printf(fmt,dev,it,iu,it-iu,bt,bu,bt-bu,dir);
|
||||
}
|
||||
645
Linux-0.11/sources/sbin/fsck.c
Normal file
645
Linux-0.11/sources/sbin/fsck.c
Normal file
@@ -0,0 +1,645 @@
|
||||
/*
|
||||
* fsck.c - a file system consistency checker for Linux.
|
||||
*
|
||||
* (C) 1991 Linus Torvalds. This file may be redistributed as per
|
||||
* the Linux copyright.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 09.11.91 - made the first rudimetary functions
|
||||
*
|
||||
* 10.11.91 - updated, does checking, no repairs yet.
|
||||
* Sent out to the mailing-list for testing.
|
||||
*
|
||||
* 14.11.91 - Testing seems to have gone well. Added some
|
||||
* correction-code, and changed some functions.
|
||||
*
|
||||
* 15.11.91 - More correction code. Hopefully it notices most
|
||||
* cases now, and tries to do something about them.
|
||||
*
|
||||
* 16.11.91 - More corrections (thanks to Matti Jalava). Most
|
||||
* things seem to work now.
|
||||
*
|
||||
* I've had no time to add comments - hopefully the function names
|
||||
* are comments enough. As with all file system checkers, this assumes
|
||||
* the file system is quiescent - don't use it on a mounted device
|
||||
* unless you can be sure nobody is writing to it (and remember that the
|
||||
* kernel can write to it when it searches for files).
|
||||
*
|
||||
* Usuage: fsck [-larvsm] device
|
||||
* -l for a listing of all the filenames
|
||||
* -a for automatic repairs (not implemented)
|
||||
* -r for repairs (interactive) (not implemented)
|
||||
* -v for verbose (tells how many files)
|
||||
* -s for super-block info
|
||||
* -m for minix-like "mode not cleared" warnings
|
||||
*
|
||||
* The device may be a block device or a image of one, but this isn't
|
||||
* enforced (but it's not much fun on a character device :-).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <termios.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
#ifndef __GNUC__
|
||||
#error "needs gcc for the bitop-__asm__'s"
|
||||
#endif
|
||||
|
||||
#ifndef __linux__
|
||||
#define volatile
|
||||
#endif
|
||||
|
||||
#define ROOT_INO 1
|
||||
|
||||
#define UPPER(size,n) ((size+((n)-1))/(n))
|
||||
#define INODE_SIZE (sizeof(struct d_inode))
|
||||
#define INODE_BLOCKS UPPER(INODES,INODES_PER_BLOCK)
|
||||
#define INODE_BUFFER_SIZE (INODE_BLOCKS * BLOCK_SIZE)
|
||||
|
||||
#define BITS_PER_BLOCK (BLOCK_SIZE<<3)
|
||||
|
||||
static char * program_name = "fsck";
|
||||
static char * device_name = NULL;
|
||||
static int IN;
|
||||
static int repair=0, automatic=0, verbose=0, list=0, show=0, warn_mode=0;
|
||||
static int directory=0, regular=0, blockdev=0, chardev=0, links=0, total=0;
|
||||
|
||||
/* this is used to implement the (coming) two-pass zone checking. */
|
||||
static int trust_zone_bit_map=0;
|
||||
|
||||
static int changed = 0; /* flags if the filesystem has been changed */
|
||||
|
||||
/* File-name data */
|
||||
#define MAX_DEPTH 50
|
||||
static int name_depth = 0;
|
||||
static char name_list[MAX_DEPTH][NAME_LEN+1];
|
||||
|
||||
static char * inode_buffer = NULL;
|
||||
#define Inode (((struct d_inode *) inode_buffer)-1)
|
||||
static char super_block_buffer[BLOCK_SIZE];
|
||||
#define Super (*(struct super_block *)super_block_buffer)
|
||||
#define INODES ((unsigned long)Super.s_ninodes)
|
||||
#define ZONES ((unsigned long)Super.s_nzones)
|
||||
#define IMAPS ((unsigned long)Super.s_imap_blocks)
|
||||
#define ZMAPS ((unsigned long)Super.s_zmap_blocks)
|
||||
#define FIRSTZONE ((unsigned long)Super.s_firstdatazone)
|
||||
#define ZONESIZE ((unsigned long)Super.s_log_zone_size)
|
||||
#define MAXSIZE ((unsigned long)Super.s_max_size)
|
||||
#define MAGIC (Super.s_magic)
|
||||
#define NORM_FIRSTZONE (2+IMAPS+ZMAPS+INODE_BLOCKS)
|
||||
|
||||
static char inode_map[BLOCK_SIZE * I_MAP_SLOTS];
|
||||
static char zone_map[BLOCK_SIZE * Z_MAP_SLOTS];
|
||||
|
||||
static unsigned char * inode_count = NULL;
|
||||
static unsigned char * zone_count = NULL;
|
||||
|
||||
void recursive_check(unsigned int ino);
|
||||
|
||||
#define bitop(name,op) \
|
||||
static inline int name(char * addr,unsigned int nr) \
|
||||
{ \
|
||||
int __res; \
|
||||
__asm__("bt" op " %1,%2; adcl $0,%0" \
|
||||
:"=g" (__res) \
|
||||
:"r" (nr),"m" (*(addr)),"0" (0)); \
|
||||
return __res; \
|
||||
}
|
||||
|
||||
bitop(bit,"")
|
||||
bitop(setbit,"s")
|
||||
bitop(clrbit,"c")
|
||||
|
||||
#define inode_in_use(x) (bit(inode_map,(x)))
|
||||
#define zone_in_use(x) (bit(zone_map,(x)-FIRSTZONE+1))
|
||||
|
||||
#define mark_inode(x) (setbit(inode_map,(x)),changed=1)
|
||||
#define unmark_inode(x) (clrbit(inode_map,(x)),changed=1)
|
||||
|
||||
#define mark_zone(x) (setbit(zone_map,(x)-FIRSTZONE+1),changed=1)
|
||||
#define unmark_zone(x) (clrbit(zone_map,(x)-FIRSTZONE+1),changed=1)
|
||||
|
||||
/*
|
||||
* Volatile to let gcc know that this doesn't return. When trying
|
||||
* to compile this under minix, volatile gives a warning, as
|
||||
* exit() isn't defined as volatile under minix.
|
||||
*/
|
||||
volatile void fatal_error(const char * fmt_string)
|
||||
{
|
||||
fprintf(stderr,fmt_string,program_name,device_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#define usage() fatal_error("Usage: %s [-larvsm] /dev/name\n")
|
||||
#define die(str) fatal_error("%s: " str "\n")
|
||||
|
||||
/*
|
||||
* This simply goes through the file-name data and prints out the
|
||||
* current file.
|
||||
*/
|
||||
void print_current_name(void)
|
||||
{
|
||||
int i=0;
|
||||
|
||||
while (i<name_depth)
|
||||
printf("/%.14s",name_list[i++]);
|
||||
}
|
||||
|
||||
int ask(const char * string,int def)
|
||||
{
|
||||
int c;
|
||||
|
||||
if (!repair) {
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
if (automatic) {
|
||||
printf("\n");
|
||||
return def;
|
||||
}
|
||||
printf(def?"%s (y/n)? ":"%s (n/y)? ",string);
|
||||
for (;;) {
|
||||
fflush(stdout);
|
||||
if ((c=getchar())==EOF)
|
||||
return def;
|
||||
c=toupper(c);
|
||||
if (c == 'Y') {
|
||||
def = 1;
|
||||
break;
|
||||
} else if (c == 'N') {
|
||||
def = 0;
|
||||
break;
|
||||
} else if (c == ' ' || c == '\n')
|
||||
break;
|
||||
}
|
||||
if (def)
|
||||
printf("y\n");
|
||||
else
|
||||
printf("n\n");
|
||||
return def;
|
||||
}
|
||||
|
||||
/*
|
||||
* check_zone_nr checks to see that *nr is a valid zone nr. If it
|
||||
* isn't, it will possibly be repaired. Check_zone_nr returns != 0
|
||||
* if it changed the nr.
|
||||
*/
|
||||
int check_zone_nr(unsigned short * nr)
|
||||
{
|
||||
if (!*nr)
|
||||
return 0;
|
||||
if (*nr < FIRSTZONE)
|
||||
printf("Zone nr < FIRSTZONE in file `");
|
||||
else if (*nr >= ZONES)
|
||||
printf("Zone nr > ZONES in file `");
|
||||
else
|
||||
return 0;
|
||||
print_current_name();
|
||||
printf("'.");
|
||||
if (ask("Remove block",1)) {
|
||||
*nr=0;
|
||||
changed = 1;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* read-block reads block *nr into the buffer at addr. It returns
|
||||
* 0 if the *nr is unchanged, 1 if it was changed.
|
||||
*/
|
||||
int read_block(unsigned short * nr, char * addr)
|
||||
{
|
||||
int blk_chg = check_zone_nr(nr);
|
||||
|
||||
if (!*nr || *nr >= ZONES) {
|
||||
memset(addr,0,BLOCK_SIZE);
|
||||
return changed;
|
||||
}
|
||||
if (BLOCK_SIZE*(*nr) != lseek(IN, BLOCK_SIZE*(*nr), SEEK_SET))
|
||||
die("seek failed in read_block");
|
||||
if (BLOCK_SIZE != read(IN, addr, BLOCK_SIZE)) {
|
||||
printf("Read error: bad block in file '");
|
||||
print_current_name();
|
||||
printf("'\n");
|
||||
memset(addr,0,BLOCK_SIZE);
|
||||
}
|
||||
return blk_chg;
|
||||
}
|
||||
|
||||
/*
|
||||
* write_block writes block nr to disk.
|
||||
*/
|
||||
inline void write_block(unsigned int nr, char * addr)
|
||||
{
|
||||
if (!nr)
|
||||
return;
|
||||
if (nr < FIRSTZONE || nr >= ZONES) {
|
||||
printf("Internal error: trying to write bad block\n"
|
||||
"Write request ignored\n");
|
||||
return;
|
||||
}
|
||||
if (BLOCK_SIZE*nr != lseek(IN, BLOCK_SIZE*nr, SEEK_SET))
|
||||
die("seek failed in write_block");
|
||||
if (BLOCK_SIZE != write(IN, addr, BLOCK_SIZE)) {
|
||||
printf("Write error: bad block in file '");
|
||||
print_current_name();
|
||||
printf("'\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* mapped-read-block reads block nr blknr from the specified file.
|
||||
* it returns 1 if the inode has been changed due to bad zone nrs
|
||||
*/
|
||||
inline int mapped_read_block(struct d_inode * inode,
|
||||
unsigned int blknr, char * addr)
|
||||
{
|
||||
unsigned short ind[BLOCK_SIZE>>1];
|
||||
unsigned short dind[BLOCK_SIZE>>1];
|
||||
int result;
|
||||
|
||||
if (blknr<7)
|
||||
return read_block(blknr + inode->i_zone,addr);
|
||||
blknr -= 7;
|
||||
if (blknr<512) {
|
||||
result = read_block(7 + inode->i_zone, (char *) ind);
|
||||
if (read_block(blknr + ind,addr))
|
||||
write_block(inode->i_zone[7], (char *) ind);
|
||||
return result;
|
||||
}
|
||||
blknr -= 512;
|
||||
result = read_block(8 + inode->i_zone, (char *) dind);
|
||||
if (read_block(blknr/512 + dind, (char *) ind))
|
||||
write_block(inode->i_zone[8], (char *) dind);
|
||||
if (read_block(blknr%512 + ind,addr))
|
||||
write_block(dind[blknr/512], (char *) ind);
|
||||
return result;
|
||||
}
|
||||
|
||||
void write_tables(void)
|
||||
{
|
||||
if (BLOCK_SIZE != lseek(IN, BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed in write_tables");
|
||||
if (BLOCK_SIZE != write(IN, super_block_buffer, BLOCK_SIZE))
|
||||
die("unable to write super-block");
|
||||
if (IMAPS*BLOCK_SIZE != write(IN,inode_map,IMAPS*BLOCK_SIZE))
|
||||
die("Unable to write inode map");
|
||||
if (ZMAPS*BLOCK_SIZE != write(IN,zone_map,ZMAPS*BLOCK_SIZE))
|
||||
die("Unable to write zone map");
|
||||
if (INODE_BUFFER_SIZE != write(IN,inode_buffer,INODE_BUFFER_SIZE))
|
||||
die("Unable to write inodes");
|
||||
}
|
||||
|
||||
void read_tables(void)
|
||||
{
|
||||
memset(inode_map,0,sizeof(inode_map));
|
||||
memset(zone_map,0,sizeof(zone_map));
|
||||
if (BLOCK_SIZE != lseek(IN, BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed");
|
||||
if (BLOCK_SIZE != read(IN, super_block_buffer, BLOCK_SIZE))
|
||||
die("unable to read super block");
|
||||
if (MAGIC != SUPER_MAGIC)
|
||||
die("bad magic number in super-block");
|
||||
if (ZONESIZE != 0 || BLOCK_SIZE != 1024)
|
||||
die("Only 1k blocks/zones supported");
|
||||
if (!IMAPS || IMAPS > I_MAP_SLOTS)
|
||||
die("bad s_imap_blocks field in super-block");
|
||||
if (!ZMAPS || ZMAPS > Z_MAP_SLOTS)
|
||||
die("bad s_zmap_blocks field in super-block");
|
||||
inode_buffer = malloc(INODE_BUFFER_SIZE);
|
||||
if (!inode_buffer)
|
||||
die("Unable to allocate buffer for inodes");
|
||||
inode_count = malloc(INODES);
|
||||
if (!inode_count)
|
||||
die("Unable to allocate buffer for inode count");
|
||||
zone_count = malloc(ZONES);
|
||||
if (!zone_count)
|
||||
die("Unable to allocate buffer for zone count");
|
||||
if (IMAPS*BLOCK_SIZE != read(IN,inode_map,IMAPS*BLOCK_SIZE))
|
||||
die("Unable to read inode map");
|
||||
if (ZMAPS*BLOCK_SIZE != read(IN,zone_map,ZMAPS*BLOCK_SIZE))
|
||||
die("Unable to read zone map");
|
||||
if (INODE_BUFFER_SIZE != read(IN,inode_buffer,INODE_BUFFER_SIZE))
|
||||
die("Unable to read inodes");
|
||||
if (NORM_FIRSTZONE != FIRSTZONE)
|
||||
printf("Warning: Firstzone != Norm_firstzone\n");
|
||||
if (show) {
|
||||
printf("%d inodes\n",INODES);
|
||||
printf("%d blocks\n",ZONES);
|
||||
printf("Firstdatazone=%d (%d)\n",FIRSTZONE,NORM_FIRSTZONE);
|
||||
printf("Zonesize=%d\n",BLOCK_SIZE<<ZONESIZE);
|
||||
printf("Maxsize=%d\n\n",MAXSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
struct d_inode * get_inode(unsigned int nr)
|
||||
{
|
||||
struct d_inode * inode;
|
||||
|
||||
if (!nr || nr > INODES)
|
||||
return NULL;
|
||||
total++;
|
||||
inode = Inode + nr;
|
||||
if (!inode_count[nr]) {
|
||||
if (!inode_in_use(nr)) {
|
||||
printf("Inode %d marked not used, but used for file '",
|
||||
nr);
|
||||
print_current_name();
|
||||
printf("'\n");
|
||||
if (repair)
|
||||
if (ask("Mark in use",1))
|
||||
mark_inode(nr);
|
||||
}
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
directory++;
|
||||
else if (S_ISREG(inode->i_mode))
|
||||
regular++;
|
||||
else if (S_ISCHR(inode->i_mode))
|
||||
chardev++;
|
||||
else if (S_ISBLK(inode->i_mode))
|
||||
blockdev++;
|
||||
} else
|
||||
links++;
|
||||
if (!++inode_count[nr]) {
|
||||
printf("Warning: inode count too big.\n");
|
||||
inode_count[nr]--;
|
||||
}
|
||||
return inode;
|
||||
}
|
||||
|
||||
void check_root(void)
|
||||
{
|
||||
struct d_inode * inode = Inode + ROOT_INO;
|
||||
|
||||
if (!inode || !S_ISDIR(inode->i_mode))
|
||||
die("root inode isn't a directory");
|
||||
}
|
||||
|
||||
static int add_zone(unsigned short * znr)
|
||||
{
|
||||
int result;
|
||||
|
||||
result=check_zone_nr(znr);
|
||||
if (!*znr || *znr >= ZONES)
|
||||
return result;
|
||||
if (zone_count[*znr]) {
|
||||
printf("Block has been used before. Now in file `");
|
||||
print_current_name();
|
||||
printf("'.");
|
||||
if (ask("Clear",1)) {
|
||||
*znr = 0;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
if (!*znr || *znr >= ZONES)
|
||||
return result;
|
||||
if (!zone_in_use(*znr)) {
|
||||
printf("Block %d in file `",*znr);
|
||||
print_current_name();
|
||||
printf("' is marked not in use.");
|
||||
if (ask("Correct",1))
|
||||
mark_zone(*znr);
|
||||
}
|
||||
if (!++zone_count[*znr])
|
||||
zone_count[*znr]--;
|
||||
return result;
|
||||
}
|
||||
|
||||
static int add_zone_ind(unsigned short * znr)
|
||||
{
|
||||
static char blk[BLOCK_SIZE];
|
||||
int i, result, chg_blk=0;
|
||||
|
||||
result = add_zone(znr);
|
||||
if (!*znr || *znr>=ZONES)
|
||||
return result;
|
||||
read_block(znr,blk);
|
||||
for (i=0 ; i < (BLOCK_SIZE>>1) ; i++)
|
||||
chg_blk |= add_zone(i + (unsigned short *) blk);
|
||||
if (chg_blk)
|
||||
write_block(*znr,blk);
|
||||
return result;
|
||||
}
|
||||
|
||||
static int add_zone_dind(unsigned short * znr)
|
||||
{
|
||||
static char blk[BLOCK_SIZE];
|
||||
int i, result, blk_chg=0;
|
||||
|
||||
result = add_zone(znr);
|
||||
if (!*znr || *znr >= ZONES)
|
||||
return result;
|
||||
read_block(znr,blk);
|
||||
for (i=0 ; i < (BLOCK_SIZE>>1) ; i++)
|
||||
blk_chg |= add_zone_ind(i + (unsigned short *) blk);
|
||||
if (blk_chg)
|
||||
write_block(*znr,blk);
|
||||
return result;
|
||||
}
|
||||
|
||||
void check_zones(unsigned int i)
|
||||
{
|
||||
struct d_inode * inode;
|
||||
|
||||
if (!i || i >= INODES)
|
||||
return;
|
||||
if (inode_count[i] > 1) /* have we counted this file already? */
|
||||
return;
|
||||
inode = Inode + i;
|
||||
if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode))
|
||||
return;
|
||||
for (i=0 ; i<7 ; i++)
|
||||
add_zone(i + inode->i_zone);
|
||||
add_zone_ind(7 + inode->i_zone);
|
||||
add_zone_dind(8 + inode->i_zone);
|
||||
}
|
||||
|
||||
void check_file(struct d_inode * dir, unsigned int offset)
|
||||
{
|
||||
static char blk[BLOCK_SIZE];
|
||||
struct d_inode * inode;
|
||||
int ino;
|
||||
char * name;
|
||||
|
||||
changed |= mapped_read_block(dir,offset/BLOCK_SIZE,blk);
|
||||
name = blk + (offset % BLOCK_SIZE) + 2;
|
||||
ino = * (unsigned short *) (name-2);
|
||||
inode = get_inode(ino);
|
||||
if (!offset)
|
||||
if (!inode || strcmp(".",name)) {
|
||||
print_current_name();
|
||||
printf(": bad directory: '.' isn't first\n");
|
||||
} else return;
|
||||
if (offset == 16)
|
||||
if (!inode || strcmp("..",name)) {
|
||||
print_current_name();
|
||||
printf(": bad directory: '..' isn't second\n");
|
||||
} else return;
|
||||
if (!inode)
|
||||
return;
|
||||
if (name_depth < MAX_DEPTH)
|
||||
strncpy(name_list[name_depth],name,14);
|
||||
name_depth++;
|
||||
if (list) {
|
||||
if (verbose)
|
||||
printf("%6d %07o ",ino,inode->i_mode);
|
||||
print_current_name();
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
printf(":\n");
|
||||
else
|
||||
printf("\n");
|
||||
}
|
||||
check_zones(ino);
|
||||
if (inode && S_ISDIR(inode->i_mode))
|
||||
recursive_check(ino);
|
||||
name_depth--;
|
||||
return;
|
||||
}
|
||||
|
||||
void recursive_check(unsigned int ino)
|
||||
{
|
||||
struct d_inode * dir;
|
||||
unsigned int offset;
|
||||
|
||||
dir = Inode + ino;
|
||||
if (!S_ISDIR(dir->i_mode))
|
||||
die("internal error");
|
||||
for (offset = 0 ; offset < dir->i_size ; offset += 16)
|
||||
check_file(dir,offset);
|
||||
}
|
||||
|
||||
void check_counts(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=1 ; i < INODES ; i++) {
|
||||
if (!inode_in_use(i) && Inode[i].i_mode && warn_mode) {
|
||||
printf("Inode %d mode not cleared.",i);
|
||||
if (ask("Clear",1)) {
|
||||
Inode[i].i_mode = 0;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
if (inode_in_use(i)*Inode[i].i_nlinks == inode_count[i])
|
||||
continue;
|
||||
if (!inode_count[i]) {
|
||||
printf("Inode %d not used, marked used in the bitmap.",
|
||||
i);
|
||||
if (ask("Clear",1))
|
||||
unmark_inode(i);
|
||||
} else if (!inode_in_use(i)) {
|
||||
printf("Inode %d used, marked unused in the bitmap.",
|
||||
i);
|
||||
if (ask("Set",1))
|
||||
mark_inode(i);
|
||||
}
|
||||
if (inode_in_use(i) && Inode[i].i_nlinks != inode_count[i]) {
|
||||
printf("Inode %d, i_nlinks=%d, counted=%d.",
|
||||
i,Inode[i].i_nlinks,inode_count[i]);
|
||||
if (ask("Set i_nlinks to count",1)) {
|
||||
Inode[i].i_nlinks=inode_count[i];
|
||||
changed=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i=FIRSTZONE ; i < ZONES ; i++) {
|
||||
if (zone_in_use(i) == zone_count[i])
|
||||
continue;
|
||||
printf("Zone %d: %s in use, counted=%d\n",
|
||||
i,zone_in_use(i)?"":"not",zone_count[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void check(void)
|
||||
{
|
||||
memset(inode_count,0,INODES*sizeof(*inode_count));
|
||||
memset(zone_count,0,ZONES*sizeof(*zone_count));
|
||||
check_zones(ROOT_INO);
|
||||
recursive_check(ROOT_INO);
|
||||
check_counts();
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
struct termios termios,tmp;
|
||||
|
||||
if (argc && *argv)
|
||||
program_name = *argv;
|
||||
if (INODE_SIZE * INODES_PER_BLOCK != BLOCK_SIZE)
|
||||
die("bad inode size");
|
||||
while (argc-- > 1) {
|
||||
argv++;
|
||||
if (argv[0][0] != '-')
|
||||
if (device_name)
|
||||
usage();
|
||||
else
|
||||
device_name = argv[0];
|
||||
else while (*++argv[0])
|
||||
switch (argv[0][0]) {
|
||||
case 'l': list=1; break;
|
||||
case 'a': automatic=1; repair=1; break;
|
||||
case 'r': automatic=0; repair=1; break;
|
||||
case 'v': verbose=1; break;
|
||||
case 's': show=1; break;
|
||||
case 'm': warn_mode=1; break;
|
||||
default: usage();
|
||||
}
|
||||
}
|
||||
if (!device_name)
|
||||
usage();
|
||||
if (repair && !automatic) {
|
||||
if (!isatty(0) || !isatty(1))
|
||||
die("need terminal for interactive repairs");
|
||||
tcgetattr(0,&termios);
|
||||
tmp = termios;
|
||||
tmp.c_lflag &= ~(ICANON|ECHO);
|
||||
tcsetattr(0,TCSANOW,&tmp);
|
||||
}
|
||||
IN = open(device_name,repair?O_RDWR:O_RDONLY);
|
||||
if (IN < 0)
|
||||
die("unable to open '%s'");
|
||||
read_tables();
|
||||
check_root();
|
||||
check();
|
||||
if (verbose) {
|
||||
int i, free;
|
||||
|
||||
for (i=1,free=0 ; i<INODES ; i++)
|
||||
if (!inode_in_use(i))
|
||||
free++;
|
||||
printf("\n%6d inodes used (%d%%)\n",(INODES-free),
|
||||
100*(INODES-free)/INODES);
|
||||
for (i=FIRSTZONE,free=0 ; i<ZONES ; i++)
|
||||
if (!zone_in_use(i))
|
||||
free++;
|
||||
printf("%6d zones used (%d%%)\n",(ZONES-free),
|
||||
100*(ZONES-free)/ZONES);
|
||||
printf("\n%6d regular files\n"
|
||||
"%6d directories\n"
|
||||
"%6d character device files\n"
|
||||
"%6d block device files\n"
|
||||
"%6d links\n"
|
||||
"------\n"
|
||||
"%6d files\n",
|
||||
regular,directory,chardev,blockdev,
|
||||
links-2*directory+1,total-2*directory+1);
|
||||
}
|
||||
if (changed) {
|
||||
write_tables();
|
||||
printf( "----------------------------\n"
|
||||
"FILE SYSTEM HAS BEEN CHANGED\n"
|
||||
"----------------------------\n");
|
||||
}
|
||||
if (repair && !automatic)
|
||||
tcsetattr(0,TCSANOW,&termios);
|
||||
return (0);
|
||||
}
|
||||
BIN
Linux-0.11/sources/sbin/fsck.c.Z
Normal file
BIN
Linux-0.11/sources/sbin/fsck.c.Z
Normal file
Binary file not shown.
96
Linux-0.11/sources/sbin/kill.c
Normal file
96
Linux-0.11/sources/sbin/kill.c
Normal file
@@ -0,0 +1,96 @@
|
||||
/* kill.c : copyright (92) Peter MacDonald: Distribute freely, don't restrict*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <strings.h>
|
||||
|
||||
#define ERR 2
|
||||
const char *usagestr = "usage: kill [-signal] pid ...\n";
|
||||
|
||||
void oops(void)
|
||||
{ write(ERR,usagestr,strlen(usagestr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void oops2(char *str1, char *str2)
|
||||
{
|
||||
write(ERR,str1,strlen(str1));
|
||||
write(ERR,str2,strlen(str2));
|
||||
write(ERR,"\n",1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char *itoa(int num)
|
||||
{ int sign = 0;
|
||||
static char buf[15];
|
||||
char *cp = buf+sizeof(buf)-1;
|
||||
if (num<0)
|
||||
{ sign = 1;
|
||||
num = -num;
|
||||
}
|
||||
do
|
||||
{
|
||||
*cp-- = '0'+num%10;
|
||||
num /= 10;
|
||||
} while (num);
|
||||
if (sign)
|
||||
*cp-- = '-';
|
||||
return(cp+1);
|
||||
}
|
||||
|
||||
const char *signames[] = {
|
||||
"HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "UNUSED",
|
||||
"FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM",
|
||||
"STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", 0 };
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i, signum = SIGTERM;
|
||||
|
||||
if (argc < 2)
|
||||
oops();
|
||||
if ((argc>1) && ('-' == *argv[1]))
|
||||
{
|
||||
if ('?' == argv[1][1])
|
||||
for (i=0; i<NSIG; i++)
|
||||
if (!signames[i])
|
||||
{ write(ERR,"\n",1);
|
||||
exit(0);
|
||||
}
|
||||
else
|
||||
{ write(ERR,signames[i],strlen(signames[i]));
|
||||
write(ERR," ", 1);
|
||||
if (i==10)
|
||||
write(ERR,"\n",1);
|
||||
}
|
||||
|
||||
for (i=0; i<NSIG; i++)
|
||||
if (!signames[i])
|
||||
{ i = NSIG;
|
||||
break;
|
||||
}
|
||||
else
|
||||
if (!strcmp(signames[i],argv[1]+1))
|
||||
break;
|
||||
|
||||
if (i < NSIG)
|
||||
signum = i+1;
|
||||
else
|
||||
if ((!(signum = atoi(argv[1]+1))) || (signum<=0) || (signum>NSIG))
|
||||
oops();
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
while (--argc)
|
||||
{
|
||||
argv++;
|
||||
if ((i = atoi(*argv)) <= 3)
|
||||
oops();
|
||||
if (kill(i,signum))
|
||||
oops2( "kill: no such process ", itoa(i));
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
365
Linux-0.11/sources/sbin/mkfs.c
Normal file
365
Linux-0.11/sources/sbin/mkfs.c
Normal file
@@ -0,0 +1,365 @@
|
||||
/*
|
||||
* mkfs.c - make a linux (minix) file-system.
|
||||
*
|
||||
* (C) 1991 Linus Torvalds. This file may be redistributed as per
|
||||
* the Linux copyright.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 24.11.91 - time began. Used the fsck sources to get started.
|
||||
*
|
||||
* 25.11.91 - corrected some bugs. Added support for ".badblocks"
|
||||
* The algorithm for ".badblocks" is a bit weird, but
|
||||
* it should work. Oh, well.
|
||||
*
|
||||
* Usuage: mkfs [-c] device size-in-blocks
|
||||
*
|
||||
* -c for readablility checking (SLOW!)
|
||||
*
|
||||
* The device may be a block device or a image of one, but this isn't
|
||||
* enforced (but it's not much fun on a character device :-).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <termios.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
||||
#ifndef __GNUC__
|
||||
#error "needs gcc for the bitop-__asm__'s"
|
||||
#endif
|
||||
|
||||
#ifndef __linux__
|
||||
#define volatile
|
||||
#endif
|
||||
|
||||
#define ROOT_INO 1
|
||||
#define BAD_INO 2
|
||||
|
||||
#define TEST_BUFFER_BLOCKS 32
|
||||
#define MAX_GOOD_BLOCKS 512
|
||||
|
||||
#define UPPER(size,n) ((size+((n)-1))/(n))
|
||||
#define INODE_SIZE (sizeof(struct d_inode))
|
||||
#define INODE_BLOCKS UPPER(INODES,INODES_PER_BLOCK)
|
||||
#define INODE_BUFFER_SIZE (INODE_BLOCKS * BLOCK_SIZE)
|
||||
|
||||
#define BITS_PER_BLOCK (BLOCK_SIZE<<3)
|
||||
|
||||
static char * program_name = "mkfs";
|
||||
static char * device_name = NULL;
|
||||
static int DEV = -1;
|
||||
static long BLOCKS = 0;
|
||||
static int check = 0;
|
||||
static int badblocks = 0;
|
||||
|
||||
#define ROOT_INO_STRING "\001\000"
|
||||
#define BAD_INO_STRING "\002\000"
|
||||
|
||||
static char root_block[BLOCK_SIZE] =
|
||||
ROOT_INO_STRING ".\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
ROOT_INO_STRING "..\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
BAD_INO_STRING ".badblocks\0\0\0\0";
|
||||
|
||||
static char * inode_buffer = NULL;
|
||||
#define Inode (((struct d_inode *) inode_buffer)-1)
|
||||
static char super_block_buffer[BLOCK_SIZE];
|
||||
#define Super (*(struct super_block *)super_block_buffer)
|
||||
#define INODES ((unsigned long)Super.s_ninodes)
|
||||
#define ZONES ((unsigned long)Super.s_nzones)
|
||||
#define IMAPS ((unsigned long)Super.s_imap_blocks)
|
||||
#define ZMAPS ((unsigned long)Super.s_zmap_blocks)
|
||||
#define FIRSTZONE ((unsigned long)Super.s_firstdatazone)
|
||||
#define ZONESIZE ((unsigned long)Super.s_log_zone_size)
|
||||
#define MAXSIZE ((unsigned long)Super.s_max_size)
|
||||
#define MAGIC (Super.s_magic)
|
||||
#define NORM_FIRSTZONE (2+IMAPS+ZMAPS+INODE_BLOCKS)
|
||||
|
||||
static char inode_map[BLOCK_SIZE * I_MAP_SLOTS];
|
||||
static char zone_map[BLOCK_SIZE * Z_MAP_SLOTS];
|
||||
|
||||
static unsigned short good_blocks_table[MAX_GOOD_BLOCKS];
|
||||
static int used_good_blocks = 0;
|
||||
|
||||
#define bitop(name,op) \
|
||||
static inline int name(char * addr,unsigned int nr) \
|
||||
{ \
|
||||
int __res; \
|
||||
__asm__ __volatile__("bt" op " %1,%2; adcl $0,%0" \
|
||||
:"=g" (__res) \
|
||||
:"r" (nr),"m" (*(addr)),"0" (0)); \
|
||||
return __res; \
|
||||
}
|
||||
|
||||
bitop(bit,"")
|
||||
bitop(setbit,"s")
|
||||
bitop(clrbit,"r")
|
||||
|
||||
#define inode_in_use(x) (bit(inode_map,(x)))
|
||||
#define zone_in_use(x) (bit(zone_map,(x)-FIRSTZONE+1))
|
||||
|
||||
#define mark_inode(x) (setbit(inode_map,(x)))
|
||||
#define unmark_inode(x) (clrbit(inode_map,(x)))
|
||||
|
||||
#define mark_zone(x) (setbit(zone_map,(x)-FIRSTZONE+1))
|
||||
#define unmark_zone(x) (clrbit(zone_map,(x)-FIRSTZONE+1))
|
||||
|
||||
/*
|
||||
* Volatile to let gcc know that this doesn't return. When trying
|
||||
* to compile this under minix, volatile gives a warning, as
|
||||
* exit() isn't defined as volatile under minix.
|
||||
*/
|
||||
volatile void fatal_error(const char * fmt_string)
|
||||
{
|
||||
fprintf(stderr,fmt_string,program_name,device_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#define usage() fatal_error("Usage: %s [-c] /dev/name blocks\n")
|
||||
#define die(str) fatal_error("%s: " str "\n")
|
||||
|
||||
void write_tables(void)
|
||||
{
|
||||
if (BLOCK_SIZE != lseek(DEV, BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed in write_tables");
|
||||
if (BLOCK_SIZE != write(DEV, super_block_buffer, BLOCK_SIZE))
|
||||
die("unable to write super-block");
|
||||
if (IMAPS*BLOCK_SIZE != write(DEV,inode_map,IMAPS*BLOCK_SIZE))
|
||||
die("Unable to write inode map");
|
||||
if (ZMAPS*BLOCK_SIZE != write(DEV,zone_map,ZMAPS*BLOCK_SIZE))
|
||||
die("Unable to write zone map");
|
||||
if (INODE_BUFFER_SIZE != write(DEV,inode_buffer,INODE_BUFFER_SIZE))
|
||||
die("Unable to write inodes");
|
||||
}
|
||||
|
||||
void write_block(int blk, char * buffer)
|
||||
{
|
||||
if (blk*BLOCK_SIZE != lseek(DEV, blk*BLOCK_SIZE, SEEK_SET))
|
||||
die("seek failed in write_block");
|
||||
if (BLOCK_SIZE != write(DEV, buffer, BLOCK_SIZE))
|
||||
die("write failed in write_block");
|
||||
}
|
||||
|
||||
int get_free_block(void)
|
||||
{
|
||||
int blk;
|
||||
|
||||
if (used_good_blocks+1 >= MAX_GOOD_BLOCKS)
|
||||
die("too many bad blocks");
|
||||
if (used_good_blocks)
|
||||
blk = good_blocks_table[used_good_blocks-1]+1;
|
||||
else
|
||||
blk = FIRSTZONE;
|
||||
while (blk < ZONES && zone_in_use(blk))
|
||||
blk++;
|
||||
if (blk >= ZONES)
|
||||
die("not enough good blocks");
|
||||
good_blocks_table[used_good_blocks] = blk;
|
||||
used_good_blocks++;
|
||||
return blk;
|
||||
}
|
||||
|
||||
void mark_good_blocks(void)
|
||||
{
|
||||
int blk;
|
||||
|
||||
for (blk=0 ; blk < used_good_blocks ; blk++)
|
||||
mark_zone(good_blocks_table[blk]);
|
||||
}
|
||||
|
||||
inline int next(int zone)
|
||||
{
|
||||
if (!zone)
|
||||
zone = FIRSTZONE-1;
|
||||
while (++zone < ZONES)
|
||||
if (zone_in_use(zone))
|
||||
return zone;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void make_bad_inode(void)
|
||||
{
|
||||
struct d_inode * inode = &Inode[BAD_INO];
|
||||
int i,j,zone;
|
||||
int ind=0,dind=0;
|
||||
unsigned short ind_block[BLOCK_SIZE>>1];
|
||||
unsigned short dind_block[BLOCK_SIZE>>1];
|
||||
|
||||
#define NEXT_BAD (zone = next(zone))
|
||||
|
||||
if (!badblocks)
|
||||
return;
|
||||
mark_inode(BAD_INO);
|
||||
inode->i_nlinks = 1;
|
||||
inode->i_time = time(NULL);
|
||||
inode->i_mode = S_IFREG + 0000;
|
||||
inode->i_size = badblocks*BLOCK_SIZE;
|
||||
zone = next(0);
|
||||
for (i=0 ; i<7 ; i++) {
|
||||
inode->i_zone[i] = zone;
|
||||
if (!NEXT_BAD)
|
||||
goto end_bad;
|
||||
}
|
||||
inode->i_zone[7] = ind = get_free_block();
|
||||
memset(ind_block,0,BLOCK_SIZE);
|
||||
for (i=0 ; i<512 ; i++) {
|
||||
ind_block[i] = zone;
|
||||
if (!NEXT_BAD)
|
||||
goto end_bad;
|
||||
}
|
||||
inode->i_zone[8] = dind = get_free_block();
|
||||
memset(dind_block,0,BLOCK_SIZE);
|
||||
for (i=0 ; i<512 ; i++) {
|
||||
write_block(ind,(char *) ind_block);
|
||||
dind_block[i] = ind = get_free_block();
|
||||
memset(ind_block,0,BLOCK_SIZE);
|
||||
for (j=0 ; j<512 ; j++) {
|
||||
ind_block[j] = zone;
|
||||
if (!NEXT_BAD)
|
||||
goto end_bad;
|
||||
}
|
||||
}
|
||||
die("too many bad blocks");
|
||||
end_bad:
|
||||
if (ind)
|
||||
write_block(ind, (char *) ind_block);
|
||||
if (dind)
|
||||
write_block(dind, (char *) dind_block);
|
||||
}
|
||||
|
||||
void make_root_inode(void)
|
||||
{
|
||||
struct d_inode * inode = &Inode[ROOT_INO];
|
||||
|
||||
mark_inode(ROOT_INO);
|
||||
inode->i_zone[0] = get_free_block();
|
||||
inode->i_nlinks = 2;
|
||||
inode->i_time = time(NULL);
|
||||
if (badblocks)
|
||||
inode->i_size = 48;
|
||||
else
|
||||
inode->i_size = 32;
|
||||
inode->i_mode = S_IFDIR + 0755;
|
||||
write_block(inode->i_zone[0],root_block);
|
||||
}
|
||||
|
||||
void setup_tables(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
memset(inode_map,0xff,sizeof(inode_map));
|
||||
memset(zone_map,0xff,sizeof(zone_map));
|
||||
memset(super_block_buffer,0,BLOCK_SIZE);
|
||||
MAGIC = SUPER_MAGIC;
|
||||
ZONESIZE = 0;
|
||||
MAXSIZE = (7+512+512*512)*1024;
|
||||
ZONES = BLOCKS;
|
||||
/* some magic nrs: 1 inode / 3 blocks */
|
||||
INODES = BLOCKS/3;
|
||||
/* I don't want some off-by-one errors, so this hack... */
|
||||
if ((INODES & 8191) > 8188)
|
||||
INODES -= 5;
|
||||
if ((INODES & 8191) < 10)
|
||||
INODES -= 20;
|
||||
IMAPS = UPPER(INODES,BITS_PER_BLOCK);
|
||||
ZMAPS = 0;
|
||||
while (ZMAPS != UPPER(BLOCKS - NORM_FIRSTZONE,BITS_PER_BLOCK))
|
||||
ZMAPS = UPPER(BLOCKS - NORM_FIRSTZONE,BITS_PER_BLOCK);
|
||||
FIRSTZONE = NORM_FIRSTZONE;
|
||||
for (i = FIRSTZONE ; i<ZONES ; i++)
|
||||
unmark_zone(i);
|
||||
for (i = ROOT_INO ; i<INODES ; i++)
|
||||
unmark_inode(i);
|
||||
inode_buffer = malloc(INODE_BUFFER_SIZE);
|
||||
if (!inode_buffer)
|
||||
die("Unable to allocate buffer for inodes");
|
||||
memset(inode_buffer,0,INODE_BUFFER_SIZE);
|
||||
printf("%d inodes\n",INODES);
|
||||
printf("%d blocks\n",ZONES);
|
||||
printf("Firstdatazone=%d (%d)\n",FIRSTZONE,NORM_FIRSTZONE);
|
||||
printf("Zonesize=%d\n",BLOCK_SIZE<<ZONESIZE);
|
||||
printf("Maxsize=%d\n\n",MAXSIZE);
|
||||
}
|
||||
|
||||
void check_blocks(void)
|
||||
{
|
||||
unsigned int current_block=0;
|
||||
int try,got;
|
||||
static char buffer[BLOCK_SIZE * TEST_BUFFER_BLOCKS];
|
||||
|
||||
while (current_block < ZONES) {
|
||||
if (lseek(DEV,current_block*BLOCK_SIZE,SEEK_SET) !=
|
||||
current_block*BLOCK_SIZE)
|
||||
die("seek failed in check_blocks");
|
||||
try = TEST_BUFFER_BLOCKS;
|
||||
if (current_block + try > ZONES)
|
||||
try = ZONES-current_block;
|
||||
got = read(DEV, buffer, try * BLOCK_SIZE);
|
||||
if (got<0)
|
||||
got = 0;
|
||||
if (got & (BLOCK_SIZE-1))
|
||||
printf("Weird values in check_blocks: probably bugs\n");
|
||||
got /= BLOCK_SIZE;
|
||||
current_block += got;
|
||||
if (got == try)
|
||||
continue;
|
||||
if (current_block < FIRSTZONE)
|
||||
die("bad blocks before data-area: cannot make fs");
|
||||
mark_zone(current_block);
|
||||
badblocks++;
|
||||
current_block++;
|
||||
}
|
||||
if (badblocks)
|
||||
printf("%d bad block%s\n",badblocks,(badblocks>1)?"s":"");
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
char * tmp;
|
||||
struct stat statbuf;
|
||||
|
||||
if (argc && *argv)
|
||||
program_name = *argv;
|
||||
if (INODE_SIZE * INODES_PER_BLOCK != BLOCK_SIZE)
|
||||
die("bad inode size");
|
||||
while (argc-- > 1) {
|
||||
argv++;
|
||||
if (argv[0][0] != '-')
|
||||
if (device_name) {
|
||||
BLOCKS = strtol(argv[0],&tmp,0);
|
||||
if (*tmp)
|
||||
usage();
|
||||
} else
|
||||
device_name = argv[0];
|
||||
else while (*++argv[0])
|
||||
switch (argv[0][0]) {
|
||||
case 'c': check=1; break;
|
||||
default: usage();
|
||||
}
|
||||
}
|
||||
if (!device_name || BLOCKS<10 || BLOCKS > 65536)
|
||||
usage();
|
||||
DEV = open(device_name,O_RDWR);
|
||||
if (DEV<0)
|
||||
die("unable to open %s");
|
||||
if (fstat(DEV,&statbuf)<0)
|
||||
die("unable to stat %s");
|
||||
if (!S_ISBLK(statbuf.st_mode))
|
||||
check=0;
|
||||
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0305)
|
||||
die("Will not try to make filesystem on '%s'");
|
||||
setup_tables();
|
||||
if (check)
|
||||
check_blocks();
|
||||
make_root_inode();
|
||||
make_bad_inode();
|
||||
mark_good_blocks();
|
||||
write_tables();
|
||||
return 0;
|
||||
}
|
||||
BIN
Linux-0.11/sources/sbin/mount.c.Z
Normal file
BIN
Linux-0.11/sources/sbin/mount.c.Z
Normal file
Binary file not shown.
54
Linux-0.11/sources/sbin/nice.c
Normal file
54
Linux-0.11/sources/sbin/nice.c
Normal file
@@ -0,0 +1,54 @@
|
||||
/* nice.c: copywrite (92) Peter MacDonald: Distribute freely, don't restrict */
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
|
||||
/* link nice to renice to change running processes priorities. */
|
||||
|
||||
int is_nice;
|
||||
|
||||
void usage()
|
||||
{
|
||||
if (is_nice)
|
||||
puts("usage: nice [-n] command");
|
||||
else
|
||||
puts("usage: renice [-n] pid");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int renice(int priority, int pid)
|
||||
{
|
||||
puts("renice system call not yet implemented");
|
||||
return(0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int priority = 10;
|
||||
|
||||
is_nice = (strcmp(*argv+strlen(*argv)-6,"renice"));
|
||||
|
||||
if ((argc>1) && (argv[1][0] == '-'))
|
||||
{ priority = atoi(argv[1]+1);
|
||||
if ((priority>19) || (priority<-20))
|
||||
usage();
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (argc<2)
|
||||
usage();
|
||||
|
||||
if (!is_nice)
|
||||
if (renice(priority,atoi(argv[1])))
|
||||
usage();
|
||||
else
|
||||
return(0);
|
||||
|
||||
if (nice(priority))
|
||||
usage();
|
||||
|
||||
execvp(argv[1], argv+1);
|
||||
puts("can not execute");
|
||||
exit(-1);
|
||||
}
|
||||
481
Linux-0.11/sources/sbin/setroot.c
Normal file
481
Linux-0.11/sources/sbin/setroot.c
Normal file
@@ -0,0 +1,481 @@
|
||||
From: hns@regent.e-technik.tu-muenchen.dbp.de (Henning Spruth)
|
||||
Newsgroups: alt.os.linux
|
||||
Subject: DOS program to set root device
|
||||
Date: 25 Mar 92 09:06:28 GMT
|
||||
|
||||
Here is a small DOS program I hacked using Turbo C to be able to
|
||||
conveniently set the root partition. It is quite primitive, as it
|
||||
requires major/minor device numbers and can only access a boot disk in
|
||||
drive A:, but it works. Using it, installing Linux can be done in
|
||||
these steps:
|
||||
|
||||
1. boot the Linux boot disk
|
||||
2. make HD file system
|
||||
3. run install script
|
||||
4. sync
|
||||
5. boot DOS
|
||||
6. run setroot.exe to set root file system to HD
|
||||
7. boot the Linux boot disk again
|
||||
|
||||
Here's the source:
|
||||
|
||||
------------------------- begin setroot.c ------------------------------
|
||||
#include <stdio.h>
|
||||
#include <bios.h>
|
||||
#include <conio.h>
|
||||
|
||||
char buffer[512];
|
||||
|
||||
void check(int res)
|
||||
{
|
||||
if(res==0) return;
|
||||
printf("Disk error status: %x\n",res);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
int result,x;
|
||||
char in[80];
|
||||
unsigned int major, minor;
|
||||
printf("\n\nInsert Linux boot disk into drive A: and hit a key ...");
|
||||
getch();
|
||||
printf("\n");
|
||||
printf("Resetting controller ...\n");
|
||||
result=biosdisk(0,0,0,0,1,1,buffer);
|
||||
check(result);
|
||||
printf("Loading boot sector ...\n");
|
||||
result=biosdisk(2,0,0,0,1,1,buffer);
|
||||
if(result==6) result=biosdisk(2,0,0,0,1,1,buffer);
|
||||
check(result);
|
||||
printf("Current major boot device: %d\n",buffer[509]);
|
||||
printf("Current minor boot device: %d\n",buffer[508]);
|
||||
printf("\n");
|
||||
printf("New device values:\n");
|
||||
printf("Enter new major device: ");
|
||||
gets(in);
|
||||
sscanf(in,"%d",&major);
|
||||
printf("Enter new minor device: ");
|
||||
gets(in);
|
||||
sscanf(in,"%d",&minor);
|
||||
printf("\nCheck: changing root disk to major %d, minor %d\n",major,minor);
|
||||
printf("Is this OK (y/n)? ");
|
||||
x=getch(); printf("\n");
|
||||
if(x!='y')
|
||||
{ printf("Aborting ...\n");
|
||||
exit(0);
|
||||
}
|
||||
buffer[508]=minor;
|
||||
buffer[509]=major;
|
||||
printf("Writing boot sector ...\n");
|
||||
result=biosdisk(3,0,0,0,1,1,buffer);
|
||||
check(result);
|
||||
printf("Root device changed!\n");
|
||||
}
|
||||
------------------------- end setroot.c ------------------------------
|
||||
|
||||
|
||||
Here is the uuencoded executable:
|
||||
|
||||
------------------------- begin setroot.uue ----------------------------
|
||||
begin 664 setroot.exe
|
||||
M35KP 1D P @ ___W H /@ $ ^S!J<@
|
||||
M ! W@ ! !
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M "Z;0(NB18U K0PS2&++@( BQXL ([:HY C :.
|
||||
M (D>B@")+J8 Z#T!Q#Z( (O'B]BY_W_\\J[C84,F. 5U]H#-@/?9B0Z( +D!
|
||||
M -/C@\,(@^/XB1Z, (S:*^J+/K@$@?\ G,'OP "B3ZX!(''G@AR* ,^L 1R
|
||||
M(K$$T^]'.^]R&8,^N 0 = >#/K $ '4.OP 0.^]W!XO]ZP/IA &+WP/:B1Z>
|
||||
M (D>H@"AC@ KV([ M$I7S2%?T^?ZCM*+Y_LSP"Z.!C4"OUH&N9X(*\_\\ZJT
|
||||
M ,T:B1:4 (D.E@ S[;AL H[8O@ OPP Z.H +HX>-0+_-H8 _S:$ /\V@@#H
|
||||
M6P$NQ@;G 7(NQ@;6 0!0Z$8$N&P"CMB^# "_# #HN NCAXU O\60@/_%D0#
|
||||
M_Q9& RZ.'C4"Z'( ,\"+\+DM ($@-0 1N+X+:4,= FY&0"Z+0#HQ0"+[+1,
|
||||
MBD8"S2&Y#@"Z1@#IP0 >N US2&)'G( C 9T +@$-<TAB1YV (P&> "X!37-
|
||||
M(8D>>@",!GP N 8US2&)'GX C : +@ )8S*CMJZ7 '-(1_#'K@ )<46<@#-
|
||||
M(1\>N 0EQ19V ,TA'QZX!27%%GH S2$?'K@&)<46?@#-(1_#M/^+UXO>.]]T
|
||||
M%( __W0*.&<!=P6*9P&+TX/#!NOH.]=T((O:'@<&@#\ Q@?_+HX>-0)T!R;_
|
||||
M7P(?Z\4F_U<"'^N^P[1 NP( S2'#N1X NE0 +HX>-0+HZO^X P!0Z/G^ !
|
||||
M %6+[(-^! !U NL4_W8$N*@ 4.A_!EE9N $ 4.C^ EE=PU6+[(/L5%97N+\
|
||||
M4.AD!EGH"!.X^ !0Z%D&6;CZ %#H4099N%H&4+@! %"X 0!0,\!0,\!0,\!0
|
||||
M,\!0Z-L.@\0.B_!6Z)C_6;@4 5#H) 99N%H&4+@! %"X 0!0,\!0,\!0,\!0
|
||||
MN ( 4.BM#H/$#HOP@_X&=2&X6@90N $ 4+@! % SP% SP% SP%"X @!0Z(<.
|
||||
M@\0.B_!6Z$3_6:!7")A0N"T!4.C+!5E9H%8(F%"X3 %0Z+T%65FX:P%0Z+0%
|
||||
M6;AM 5#HK 59N($!4.BD!5F-1JQ0Z @$68U&_E"XF@%0C4:L4.BC#(/$!KB=
|
||||
M 5#H@@59C4:L4.CF UF-1OQ0N+8!4(U&K%#H@0R#Q ;_=OS_=OZXN0%0Z%H%
|
||||
M@\0&N.L!4.A0!5GH]!&+^+C^ 5#H0P59@_]Y= ^X )0Z#8%63/ 4.BW 5F*
|
||||
M1ORB5@B*1OZB5PBX#@)0Z!L%6;A:!E"X 0!0N $ 4#/ 4#/ 4#/ 4+@# %#H
|
||||
MI V#Q Z+\%;H8?Y9N"<"4.CM!%E?7HOE7<-5B^R#/CX"('4%N $ ZQ.+'CX"
|
||||
MT>.+1@2)AUH(_P8^ C/ 7<-5B^R#[ C&1OL Z!\,M ")1O[H%PRQ"-/HM ")
|
||||
M1OSIWP"+7@C_1@B*!XA&^[0 +0< B]B#^P9W+M'C+O^G, 6T#K 'Z .ZW:@
|
||||
MO 2T #M&_GUL_T[^ZV>@O 2T (E&_NM=_T;\ZUB@Q02T O =2Z#/LL$ '0G
|
||||
MBB; !(I&^XE&^(M&_D!0BT;\0%#HDAY24!:-1OA0N $ 4.BJ'NL>BE;^BG;\
|
||||
MM *W .B<#8H>P 2*1ONT";< N0$ Z(L-_T;^H+X$M [1OY]$J"\!+0 B4;^
|
||||
MBT;\ P:Z!(E&_*"_!+0 .T;\?1RP!E"@O 10H+T$4*"^!%"@OP10L %0Z!@(
|
||||
M_T[\BT8&_TX&"\!T ^D4_XI6_HIV_+0"MP#H+ V*1ONT (OE7<(& $H$4P1Q
|
||||
M!&P$<01Q!&($58OLN L$4#/ 4/]V!(U&!E#H%!E=P\-5B^SK"HL>/@+1X_^7
|
||||
M6@BA/@+_#CX""\!UZ_]V!.B:^UE=PU6+[%97BW8$"_9U!>AS .MK.70.= 6X
|
||||
M___K8X,\ 'PI]T0"" !U"HO&!04 .40*=1;'! B\8%!0 Y1 IU"(M$"(E$
|
||||
M"NLUZS.+1 8#!$"+^(L$*\>)!%>+1 B)1 I0BD0$F%#HA J#Q 8[QW0.]T0"
|
||||
M )U!X%, A ZYHSP%]>7<-5B^Q,3%97QT;^ "_% "^2 /K$O=$ @, = A6
|
||||
MZ%__6?]&_H/&$(O'3PO =>>+1OY?7HOE7<-5B^Q65XM>!(,_ 'T(BT<& P=
|
||||
MZPJ+7@2+!YDSPBO"B_"+R(M>!/=' D = +K+XM>!(M_"H,_ 'T=ZPE/B]^
|
||||
M/PIU 4&+QDX+P'7PZQ"+WT> /PIU 4&+QDX+P'7PB\%?7EW" @!5B^Q6BW8$
|
||||
M5NC7_ED+P'0%N/__ZTJ#?@H!=1"#/ !^"U;H=O^9*48&&58(@60"7_['!
|
||||
MBT0(B40*_W8*_W8(_W8&BD0$F%#H- ^#Q B#^O]U"CW__W4%N/__ZP(SP%Y=
|
||||
MPU6+[(/L!%:+=@2*1 284.@5"5F)1OR)5OZ#/ !]#5;H%O^9 4;\$5;^ZPM6
|
||||
MZ G_F2E&_!E6_HM6_HM&_%Z+Y5W#58OL3$Q65XM^!(OWZP:*1OZ(!$:A2 -(
|
||||
MHT@#"\!\#HL>4@/_!E(#B@>T .L(N$@#4.A(#5F)1OX]__]T!3T* '7,@W[^
|
||||
M_W4(._=U!#/ ZQ'&! #W!DH#$ !T!#/ ZP*+QU]>B^5=PU6+[%97_W8$_W8&
|
||||
M_W8(_W8*Z L%"\!U!#/ ZR^+1@@K1@1 B_B+=@;K&1[_=@S_=@16Z%4;4E!7
|
||||
MZ*<$B\?1X %&#$8[=@I^XK@! %]>7<-5B^Q65XM&""M&!$"+^(MV!NL9_W8$
|
||||
M5N@A&U)0'O]V#%?H;P2+Q]'@ 48,1CMV"G[BN $ 7UY=PU6+[(/L!E97BWX&
|
||||
M_W8$5_]V"/]V"NB ! O ="3_=@S_=@Z+1@@K1@2+5@P#T%*+1@HKQXM6#@/0
|
||||
M4NA<! O =00SP.M<B7[^BT8*B4;\QT;Z 0 [?@Y]#HM&"HE&_HE^_,=&^O__
|
||||
MBW;^ZRG_=@R+QBO'BU8. ]!2Z(D:4E#_=@16Z( :4E"+1@@K1@1 4.C+ P-V
|
||||
M^HM&_ -&^CO&=<VX 0!?7HOE7<-5B^RX% I0N%@#4/]V!(U&!E#HA!5=PU6+
|
||||
M[%:+=@:+!$B)!%:*1@284.@% %E97EW#58OL5HMV!HI&!**:"(,\_WTWBP1
|
||||
MB02+7 K_1 J@F@B(!_=$ @@ =!V /IH("G0'@#Z:" UU#U;H/_Q9"\!T!KC_
|
||||
M_^FY .FQ /=$ I =0?W1 (" '4'@4P"$ #KXH%, @ !@WP& '1$@SP = M6
|
||||
MZ C\60O = +KQXM$!O?8B02+7 K_1 J@F@B(!_=$ @@ =!F /IH("G0'@#Z:
|
||||
M" UU"U;HUOM9"\!T NN5ZTV /IH("G4?]T0"0 !U&+@! %"XL@10BD0$F%#H
|
||||
M !J#Q 8] 0!U&+@! %"XF@A0BD0$F%#HZ!F#Q 8] 0!T#_=$ @ "=0B!3 (0
|
||||
M .E&_Z":"+0 7EW#58OL5HMV!+A8 U!6Z._^65E>7<-5B^Q,3%97BWX&BW8$
|
||||
MB7[^]T0"" !T)NL:5HM>"/]&"(H'F%#HP_Y963W__W4%,\#I]P"+QT\+P'7?
|
||||
MZ>H ]T0"0 !U ^F# (-\!@!T93E\!G,H@SP = M6Z G[60O = +KS%?_=@B*
|
||||
M1 284.A'&8/$!CO'<P+KM^FM (L$ \=\&H,\ '4*N/__*T0&B03K"U;HT?I9
|
||||
M"\!T NN45_]V"/]T"NAI#(/$!HL$ \>)! %\"NMU5_]V"(I$!)A0Z/<8@\0&
|
||||
M.\=S ^EF_^M=@WP& '1!ZS:+!$")! O ?1:+7 K_1 I3BUX(_T8(B@=;B >T
|
||||
M .L/5HM>"/]&"(H'4.C2_5E9/?__=0/I)O^+QT\+P'7#ZQ97_W8(BD0$F%#H
|
||||
M,@6#Q 8[QW,#Z0?_BT;^7UZ+Y5W"!@!5B^R-1@10N $ 4#/ 4.BT^%W#58OL
|
||||
M3$R+1@31Z(O(H,0$M !0B\$STEOW\XA&_[0 BA;$!+8 ]^J*T2K0B%;^BF;_
|
||||
MBL*+Y5W"! !5B^Q65XM^!HMV!(L5.Q1T";< M +HJ :)%/[".A;$!'($_L:R
|
||||
M (D57UY=P@0 58OL@^P*5E?H;02)1OB)1OJ+1@P[!LD$=06X 0#K C/ B4;V
|
||||
M"\!T#/]V#/]V"NAI_XE&_HM&"#L&R01U!;@! .L",\"+^ O =%W_=@C_=@;H
|
||||
M1_^)1OSK3PO_=!:-1OQ0C4;Z4.AK_[< M CH) :+\.L*Q%X&)HLW@T8& H-^
|
||||
M]@!T&XU&_E"-1OI0Z$7_B\:*W+D! +< M GH]P7K"L1>"B:)-X-&"@*+1@3_
|
||||
M3@0+P'6GBU;XMP"T NC7!5]>B^5=P@H 58OLH,4$M +P'4;@S[+! !T%/]V
|
||||
M#/]V"O]V"/]V!O]V!.BI%NL2_W8,_W8*_W8(_W8&_W8$Z 3_7<(* %6+[*#$
|
||||
M!+0 B\B@PP2T (O0.4X*=R0Y3@9W'XM&"CM&!G\7.58(=Q(Y5@1W#8M&"#M&
|
||||
M!'\%N $ ZP(SP%W"" !5B^Q65XMV"(M^!HL,L2#K!8D,1D9'.WX$?O9?7EW"
|
||||
M!@!5B^R![* H,4$M +P'0#Z3@!@S[+! !U ^DN 8!^! %T ^DE ?Y&#/Y&
|
||||
M"OY&"/Y&!H!^#@9T ^F( (I&"K0 4(I&#+0 4(I&!K0 4(I&"+0 4(I&"K0
|
||||
M0%"*1@RT %#HI/J#Q R-AF#_4(I&!K0 4(I&#+0 4(I&!K0 4(I&#+0 4.CZ
|
||||
M^8/$"HV&8/]0BD8,M !0BD8(M !0Z$+_C89@_U"*1@:T %"*1@BT %"*1@:T
|
||||
M %"*1@RT %#H$OJ#Q KIH0"*1@JT $!0BD8,M !0BD8&M !(4(I&"+0 4(I&
|
||||
M"K0 4(I&#+0 4.@;^H/$#(V&8/]0BD8*M !0BD8,M !0BD8*M !0BD8,M !0
|
||||
MZ''Y@\0*C89@_U"*1@RT %"*1@BT %#HN?Z-AF#_4(I&"K0 4(I&"+0 4(I&
|
||||
M"K0 4(I&#+0 4.B)^8/$"NL9BC[ !(IF#HI&!(IN"HI.#(IV!HI6".C- XOE
|
||||
M7<(, *!, YA0Z'('60O =0:!)DH#__VX )0A09* W0%N $ ZP(SP% SP%"X
|
||||
M2 -0Z#8 @\0(H%P#F%#H0 =9"\!U!H$F6@/__;@ E"%!EH#= 6X @#K C/
|
||||
M4#/ 4+A8 U#H! "#Q C#58OL5E>+=@2+?@HY= YU#(-^" )_!H'__W]V!KC_
|
||||
M_^FF (,^M@0 =0Z!_E@#=0C'!K8$ 0#K$X,^M 0 =0R!_D@#=0;'!K0$ 0"#
|
||||
M/ !T$;@! % SP#/24%)6Z$KW@\0(]T0"! !T!_]T".CD%%F!9 +S_\=$!@
|
||||
MB\8%!0")1 B)1 J#?@@"=#T+_W8YQP9" U(1@WX& '465^B#%5F)1@8+P'0'
|
||||
M@4P"! #K ^EM_XM&!HE$"HE$"(E\!H-^" %U!8%, @@ ,\!?7EW#58OL5HM>
|
||||
M!(LW_P>*!(K0"L!U!;C__^L$BL*T %Y=PU6+[(M>!O\/7<-5B^R-1@A0_W8&
|
||||
MC48$4+C:#U"XNP]0Z!0(@\0*7<-5B^S_=@C_=@:-1@10N-H/4+B[#U#H]P>#
|
||||
MQ I=PU6+[+@! % SP#/24%+_=@3HXP6#Q A=P[0#MP#H$P*+PL/H\_^T (H6
|
||||
MO 2V "O"0,/HY/^Q"-/HM "*%KT$M@ KPD##58OL@>R* %97BT8(0#T" ',%
|
||||
M,\#IT@"+7@31X_>'B 0 @'02_W8(_W8&_W8$Z#83@\0&Z;, BUX$T>.!IX@$
|
||||
M__V+1@:)1OB+1@B)1OSK5?]._(M>^/]&^(H'B$;[/ IU!,8$#4:*1ON(!$:-
|
||||
MAG;_B]8KT('Z@ !\,8O6*]"+^E)0_W8$Z-\2@\0&B4;^.\=T$PO <P6X___K
|
||||
M2HM&""M&_.L]ZT"-AG;_B_"#?OP =9^-AG;_B]8KT(OZB\(+P'8F4HV&=O]0
|
||||
M_W8$Z)H2@\0&B4;^.\=T$ O <P+KN8M&" -&_BO'ZP.+1@A?7HOE7<-65[\$
|
||||
M +Y( ^L0]T0" P!T!5;H$?193X/&$ O_=>Q?7L-5B^P>!XIF!(I&#HM>$(M.
|
||||
M"M'IT>F X< "3@R*;@J*=@B*5@;-$X!^! AU!8D/B5<"BL2T %W#58OLBT8$
|
||||
MB]2!Z@ ".\)S!Z.: #/ ZPG'!I( " "X__]=PU6+[(M&!(M6!@,&F@"#T@"+
|
||||
MR O2=1"!P0 "<@H[S',&AP:: .L)QP:2 @ N/__7<-5B^S_=@3HI/]97<-5
|
||||
MB^R+1@294E#HM_]965W#58OL5HMV!.L4Q%X&_T8&)HH'B]Y&.@=T!#/ ZPB
|
||||
M/ !UY[@! %Y=P@8 M!*S$.@' (K#!/"T ,-5'E&Y0 ".V5F _ !T"8#\#W16
|
||||
MS1#K:CP#=1JX !K-$#P:= 6 )H< _K0!N0<&S1"X P#KWCQ ==JS$+02S1"
|
||||
M^Q!T/;@2$3+;S1"X !*S(,T0N :S1 \&G0F@ Z' &T ;D !LT0ZQC-$#P#
|
||||
M=1)0Z'__"L!8= F /H0 &'0"L$ ?7<.T#^AW_U#H%P!9M BW .AK_XK$)'^*
|
||||
MX(@FP02()L $PU6+[(I&!*+"!+0/Z$[_B";$!#H&P@1T+:#"!+0 Z#S_M _H
|
||||
M-_^BP@2()L0$@#["! -U$KA ([ )H ^A 8?@7&!L($0( ^P@0#=A. /L($
|
||||
M0',,@#["! =T!;@! .L",\"BQ02 /L($0'0$L!GK"[A ([ )J"$ /[ HL,$
|
||||
M@#["! =T'[@ \+KJ_U!2N,T$4.B1_@O =0SHM/X+P'4%N $ ZP(SP*+&!( ^
|
||||
MP@0'=06X +#K [@ N*/)!,<&QP0 + HKT$HKP$H,0$!/^BO@2@PP0$_Z*_
|
||||
M!%W#58OL@^P$BUX$T>/WAX@$ )T!;@! .M,N !$BUX$S2%R/O;"@'4UN %"
|
||||
M,\F+T<TA<BY24+@"0C/)B]'-(8E&_(E6_EI9<AFX $+-(7(2.U;^<@EW!3M&
|
||||
M_'("Z[<SP.L$4.B4 8OE7<-65[\4 +Y( ^L3BT0")0 #/0 #=056Z"CQ68/&
|
||||
M$(O'3PO =>9?7L-5B^Q6BW8$]T0" )T ^C(__]T!HM$"(E$"E"*1 284.C!
|
||||
M H/$!HD$"\!^"(-D M\SP.L>@SP =0Z+1 (E?_X-( ")1 +K",<$ "#3 (0
|
||||
MN/__7EW" @!5B^Q6BW8$BP1 B016Z 0 65Y=PU6+[%:+=@2#/ !^$(L$2(D$
|
||||
MBUP*_T0*B@?I@@"#/ !\!_=$ A != F#3 (0N/__ZV^!3 * (-\!@!T#%;H
|
||||
M5?\+P'0"Z^;KQ/=$ @ "= /H'/^X 0!0N)P(4(I$!)A0Z,P"@\0&"\!U((I$
|
||||
M!)A0Z)7^63T! '0"ZZ^+1 (E?_X-( ")1 +KI>NC@#Z<" UU!_=$ D =+&#
|
||||
M9 +?H)P(M !>7<.X2 -0Z%;_6<. /M0$ '0*Q@;4! "@U03K!;@ !\TAM ##
|
||||
M5H ^U 0 = ?HW/^+\.L*Z-7_B_!0Z*#U68O&7L-5B^R /M0$ '0%N/__ZPO&
|
||||
M!M0$ 8M&!*+5!%W#58OL5HMV! OV?!6#_EA^ [Y7 (DVU@2*A-@$F(OPZQ&+
|
||||
MQO?8B_ ](P!_Y<<&U@3__XDVD@"X__]>7<(" %6+[+@ 1(M>!,TADB6 %W#
|
||||
M58OLBUX$T>.!IX@$__VT0HI&"HM>!(M."(M6!LTA<@+K!5#HC/^97<-5B^R#
|
||||
M[")65P:+?@H>!XM>"(/[)'=8@/L"<E.+1@R+3@X+R7T1@'X& '0+Q@4M1_?9
|
||||
M]]B#V0"-=M[C#Y$KTO?SD??SB!1&XPGK\2O2]_.(%$8+P'7UC4[>]]D#SOQ.
|
||||
MB@0L"G,$!#KK P)&!*KB[[ J@>+1@I?7HOE7<(, %6+[(-^" IU!HM&!)GK
|
||||
M!8M&!#/24E#_=@;_=@BP 5"P85#H7O]=PU6+[/]V!O]V!/]V"/]V"K 4+!A
|
||||
M4.A$_UW#58OL_W8&_W8$_W8(_W8*@WX*"G4%N $ ZP(SP%"P85#H'_]=PU6+
|
||||
M[%97C-B.P(M^!(MV!HM."-'I_/.E<P&DBT8$7UY=PU6+[(/L!%97BT8(0#T"
|
||||
M '(-BUX$T>/WAX@$ )T!3/ Z8P _W8(_W8&_W8$Z(8 @\0&B4;^0#T" '(-
|
||||
MBUX$T>/WAX@$ (!T!8M&_NMBBT[^BW8&'@>+_HO>_*P\&G0M/ UT!:KB].L<
|
||||
MXO &4[@! %"-1OU0_W8$Z#L @\0&6P?\BD;]JCO[=0+KF>L@4[@! %#WV1O
|
||||
M4%'_=@3H-OZ#Q B+7@31XX&/B 0 ELK^Y=?7HOE7<-5B^RT/XM>!(M."(M6
|
||||
M!LTA<@+K!%#HN/U=PU6+[(/L*E97QT;\ #'1OH .L9BWX,]D;_('0'Q#V#
|
||||
M1@P$PXL]'@>#1@P"PP;\BW8*K K =%T\)71<F)?_1OK_=@C_5@19"\!\)0O_
|
||||
M>#* O3(% 74KDPK;>!B OS(% 741_T;Z_W8(_U8$60O ?^;I30/_=@A3_U8&
|
||||
M65G_3OKKL3O'=*W_=@A0_U8&65G_3OKI0 /I/0/'1O;__\9&_P"LF(EV"I<+
|
||||
M_WP9BITR!3+_@_L5=@/I" /1XR[_IW@<E^EX_^D. X!._P'KU(/O,(=^]@O_
|
||||
M?,JX"@#WYP%&]NO @$[_".NZ@$[_!.NT@$[_ NNN@&;_W^NH@$[_(.NBBT;Z
|
||||
M*]+V1O\!=$_KE;X( .L,O@H ZP>^$ #K C/V]\<@ '4(BD;_# 2(1O^-1OA0
|
||||
MC4;Z4(M&]B7_?U!6_W8(_W8&_W8$Z'@#@\0.@W[X 'X8]D;_ 74/_T;\Z+G^
|
||||
MJ_9&_P1T I*KZ<C^? /I: +I40+H #I9@+_=@A0_U8&65G_3OJ!9O;_?^@
|
||||
M .EU E(\.G05"\!^#/]V"%#_5@996?].^EJ,V^L;Z Z54"6PO ?A!24_]V
|
||||
M"%#_5@996?].^EM:]D;_ 740Z$K^_T;\DJOV1O\@= *3J^E5_NGC 8U&^%"-
|
||||
M1OI0N/]_(T;V4/]V"/]V!O]V!.@J"H/$#(-^^ !^.(I&_YBI 0!U*>@'_O]&
|
||||
M_/9&_P1T!;@$ .L-]D;_"'0%N @ ZP(SP%!7Z/D)@\0$Z?S]Z/0)Z?;]Z.X)
|
||||
M?)SIDP'H #IE 'V1O\!=0;HQ/W_1OR!9O;_?W0I]D;_ 74!JO]&^@;_=@C_
|
||||
M5@19!PO ?A(*P'@)DX"_,@4!DWX%_T[V?]<&_W8(4/]6!EE9!_].^O9&_P%U
|
||||
M [ JNF2_?9&_P%U ^AN_8MV]@OV?0.^ 0!T&O]&^@;_=@C_5@19!PO ?!;V
|
||||
M1O\!=0&J3G_F]D;_ 74#_T;\Z5?]Z>4 *\#\%@>-?M:Y$ #SJZR 9O_O/%YU
|
||||
M!8!._Q"LM "*T(OXL0/3[[D' 2+*TN4(:]:L/ !T)CQ=="4\+77A.A1WW8 \
|
||||
M7738K"K"=.4"T-#%@]< "&O6_LAU].O5Z9P B78*@6;V_W^+=O;V1O\!=0/H
|
||||
MR/Q.?%#_1OH&_W8(_U8$60<+P'Q/EHO>L0/3[KD' 2++TN6$:M:6DW0(]D;_
|
||||
M$'0(ZP_V1O\0= GV1O\!=<2JZ\$&_W8(4/]6!EE9!_].^D8[=O9]"?9&_P%U
|
||||
M!O]&_+ JNF!_$8[=O9]#/9&_P%U!K JO]&_/]V"+C__U#_5@9968-^_ &#
|
||||
M7OP !XM&_.F& /]&^O]V"/]6!%D+P'X3"L!X"9. OS(% 9-TY5F#P0/_X73X
|
||||
M6>N_*]*Y! #_3O9\15)1_T;Z_W8(_U8$65E:"\!^-?[)?#&*Z(#M,'(J@/T*
|
||||
M<A> [1%R((#]!G(*@.T@<A: _09S$8#%"M'BT>+1XM'B M7KMBO @/D$= 99
|
||||
M@\$#_^%9Z5__7UZ+Y5W#Y1OE&^4;T!C7&-T8KAHA&2$9*QGN&?$8_1CW&!P9
|
||||
M4AKL&@\9)AF &0,9"1E3@.LP<B* ^PEV$H#[*G<%@.L'ZP. ZR> ^PEV"SK9
|
||||
M<P=$1/BW .L"6_G#58OL@^P&5E?&1O\ QT;\ #'1OH! /]&_/]V"/]6!%D+
|
||||
MP'QHF)/VPX!U"+]! O8! 77CD_].#'Q:/"MT!SPM=1;^1O__3@Q\2O]&_/]V
|
||||
M"/]6!%D+P'PU*_:+_HM."N--@_DD=RZ ^0)R*3PP=6N ^1!U9/].#'PR_T;\
|
||||
M_W8(_U8$63QX=%$\6'1-ZW/'1OK__^L%QT;Z #_=@A0_U8&65G_3OPKP)GI
|
||||
MIP#IE \,,=&"@H =2/_3@Q\[_]&_/]V"/]6!%G'1@H( #QX= 0\6'4MQT8*
|
||||
M$ #K%XM."I/H]?Z3<K"6ZPJ6]V8* _ 3^G4L_TX,?$S_1OS_=@C_5@19BTX*
|
||||
MD^C/_I-SW>LJEO?AEX?*]^(#]Q/!EQ+6=4?_3@Q\(/]&_/]V"/]6!%F+3@J3
|
||||
MZ*/^DW/6_W8(4/]6!EE9_T[\B]>6@'[_ '0']]KWV(/: (M^#HM>_ $=BWX0
|
||||
MBU[ZB1WK%KC__[K_?P)&_X#4 (/2 ,=&^@( Z]A?7HOE7<.*QN@" (K"U!"&
|
||||
MX.@" (;@!) G%$ GJL-5B^R![)8 5E?'1NX ,=&[% QT;J #K1E>Y__\R
|
||||
MP/*N]]%)7\,VB 5'_D[L?B]345(&C89J_ROXC89J_U!7_W8(_U8*"\!U!<=&
|
||||
MZ@$ QT;L4 !?NZ-OFK_!UI96\,&_(V^:O^)?OR+?OR+=@:L"L!T$CPE=!$V
|
||||
MB 5'_D[L?^[HK/_KZ>GK XEV\*P\)73GB7[\,\F)3O*)3OZ(3O7'1OC__\=&
|
||||
M]O__ZP&L,N2+T(O8@.L@@/M@<Q.*G[D%@_L7=@/IG@/1XR[_I_HBZ90#@/T
|
||||
M=_B#3OX!Z]" _0!W[8-._@+KQ8#] '?B@'[U*W0#B%;UZ[6#9O[?ZP2#3OX@
|
||||
MM07KIX#] '=*]T;^ @!U*8-._@BU >N3Z4D#BWX$-HL%@T8$ H#] G,2"\!Y
|
||||
M!O?8@T[^ HE&^+4#Z6__@/T$==>)1O;^Q>EB_X#]!'/*M03I6/^2+#"8@/T"
|
||||
M=QFU H=&^ O ?-31X(O0T>#1X /" 4;XZ3;_@/T$=9Z'1O8+P'RXT>"+T-'@
|
||||
MT> #P@%&]ND:_X-._A#I:/^!3OX 8-F_N_I7/^W".L*MPKK"K<0L^D"VL9&
|
||||
M]0"(5OLSTHA6^HM^!#:+!>L0MPK&1OH!B%;[BWX$-HL%F4='B78&]T;^$ !T
|
||||
M!3:+%4='B7X$C7Z["\!U+PO2=2N#?O8 =2F+?OR+3OCC&H/Y_W05BT;^)0@
|
||||
M= 2R,.L"LB"*PN@,_N+YZ4S^@T[^!%)05XK'F%"*1OI04^BE]18'BU;V"])_
|
||||
M ^GQ .G\ (A6^XEV!HU^NHM>!#;_-T-#B5X$]T;^( !T$#:+%T-#B5X$%@?H
|
||||
M?OVP.JH6!UKH=?TVQ@4 QD;Z (-F_ON-3KHK^8?/BU;V.]%_ HO1Z9X B78&
|
||||
MB%;[BWX$-HL%@T8$ A8'C7Z[,N0VB06Y 0#IN0")=@:(5ON+?@3W1OX@ '4-
|
||||
M-HL]@T8$ AX'"__K"S;$/8-&! 2,P O'=04>![^R!>@V_3M.]G8#BT[VZWV)
|
||||
M=@:(5ON+?@2+3O8+R7T#N08 5U&-7KM34K@! "-&_E"+1OZI %T";@( (-&
|
||||
M! KK!X-&! BX!@!0Z)X"%@>-?KOW1OX( '08BU;X"])^$>C9_": /2UU 4DK
|
||||
MT7X#B5;RBD;U"L!T$B: /2UT#(-N\@O( 3R:(!>BO_(OWBW[\BU[XN 4
|
||||
M(T;^/04 =1.*9ON _&]U#8-^\@!_!<=&\@$ ZQN _'AT!8#\6'41@T[^0$M+
|
||||
M@V[R GT%QT;R #3O+W1OX" '4,ZP:P(.AH_$L[V7_V]T;^0 !T"[ PZ%?\
|
||||
MBD;[Z%'\BU;R"])^)RO**]HFB@0\+70(/"!T!#PK=0<FK.@R_$E+A\KC![ P
|
||||
MZ"?\XOF'RN,2*]DFK#:(!4?^3NQ_ ^@:_.+P"]M^"8O+L"#H!/SB^>E$_(EV
|
||||
M!HM^!/=&_B =0LVBSV#1@0"'@?K!S;$/8-&! 2X4 J1NP#1NXFB07W1OX0
|
||||
M '0'1T<FQP4 .D%_(MV\(M^_+ EZ+C[K K =?B ?NQ0?0/HL_L'@W[J '0%
|
||||
MN/__ZP.+1NY?7HOE7<(( $P?-A^!'T$?KQ^Y'_<?_A\#(&H?+" *( X@$B"H
|
||||
M(%0A^" 8(8XBRB+*(LHB7!]B'U6+[(M&!$B*%L0$M@#WZE"AQP1: \*+5@9*
|
||||
M \+1X(L6R01=P@0 58OL3$Q65Z#&!+0 B4;^'HM.!.-:Q'X*Q78&_#OW<PJ+
|
||||
MP4C1X /P _C]@W[^ '4$\Z7K.[K: XS C-L[PW01^NS0R'+[[-#(<_NE^^+Q
|
||||
MZQ_Z[-#(<OOLT,AS^ZW[B]CLT,AR^^S0R'/[B\.K^^+A_!]?7HOE7<(* %6+
|
||||
M[(M>!-'C]X>(! (=!.X @!0,\ STE!2_W8$Z"SR@\0(M$"+7@2+3@B+5@;-
|
||||
M(7(/4(M>!-'C@8^(! 06.L$4.BY\5W#NAH&ZP.Z'P:Y!0"T0+L" ,TAN2<
|
||||
MNB0&M$#-(>GQW?\F4@;_)E0&_R96!O\F6 8 5E>+](M<!H/K!'(..QY.!G0%
|
||||
MZ$( ZP/H P!?7L,Y'DP&=".+=P+V! %T!HDV3@;K(#LV3 9T#8O>Z%0 BT<"
|
||||
MHTX&ZPV+WC/ HTP&HTX&HU &4^@5[5O#_P\['DP&=!B+=P*+!*@!=0\#!XD$
|
||||
MBS\#^XEU HO>ZP/H,@"+/P/[BP6H 70!PP$'B_<#\(E< HO?BW\&.]]T#HD^
|
||||
M4 :+=P2)=02)? ;#QP90!@ PXLV4 8+]G00BWP&B5P&B5T$B7\&B7<$PXD>
|
||||
M4 :)7P2)7P;#5E>+](M$!@O =%(%!0!R-B7^_ST( ',#N @ @SY,!@!T'XL>
|
||||
M4 8+VW0-B],Y!W,:BU\&.]IU]>AF .LAZ(H ZQSH' #K%S/ ZQ.+\(/&"#DW
|
||||
M<^GH:___!XO#!00 7U[#4#/ 4%#H5>Q;6R4! '0),])24.A'[%M;6% SVU-0
|
||||
MZ#SL6UL]__]T%(O8B1Y,!HD>3@980(D'@\,$B\/#6S/ PU SVU-0Z!7L6UL]
|
||||
M__]T%HO8H4X&B4<"B1Y.!EA B0>#PP2+P\-8,\##*0>+\P,WB_X#^$")!(E<
|
||||
M HEU H/&!(O&PXOL4U!14.@5_UN+V O =!\>!_R+^(MV_HL,@\8$5H/I!='I
|
||||
M\Z6)1O[H)/Y;BU[^@\0&PXO"@\((.]%W-8O1.QY.!G4/B0?_!P/#4U#H:NM;
|
||||
M6^L>B_L#^(E= BO0*1>+]P/RB7P"0HD5B\N+W^@W_HO9@\,$PU9758OLBUX(
|
||||
MBT8*"\!T-PO;="V#ZP2+#TF+T(/"!8/B_H/Z"',#N@@ .\IR#'<%@\,$ZPCH
|
||||
MA__K ^A/_XO#ZPU0Z&7^ZP93Z)#],\!;75]>PP "B@X 0
|
||||
MU1( 5'5R8F\@0RLK("T@0V]P>7)I9VAT(#$Y.3 @0F]R;&%N
|
||||
M9"!);G1L+@!.=6QL('!O:6YT97(@87-S:6=N;65N= T*1&EV:61E(&5R<F]R
|
||||
M#0I!8FYO<FUA;"!P<F]G<F%M('1E<FUI;F%T:6]N#0H
|
||||
M )X(G@@ !$:7-K
|
||||
M(&5R<F]R('-T871U<SH@)7@* H*26YS97)T($QI;G5X(&)O;W0@9&ES:R!I
|
||||
M;G1O(&1R:79E($$Z(&%N9"!H:70@82!K97D@+BXN H 4F5S971T:6YG(&-O
|
||||
M;G1R;VQL97(@+BXN"@!,;V%D:6YG(&)O;W0@<V5C=&]R("XN+@H 0W5R<F5N
|
||||
M="!M86IO<B!B;V]T(&1E=FEC93H@)60* $-U<G)E;G0@;6EN;W(@8F]O="!D
|
||||
M979I8V4Z("5D"@ * $YE=R!D979I8V4@=F%L=65S.@H 16YT97(@;F5W(&UA
|
||||
M:F]R(&1E=FEC93H@ "5D $5N=&5R(&YE=R!M:6YO<B!D979I8V4Z( E9 *
|
||||
M0VAE8VLZ(&-H86YG:6YG(')O;W0@9&ES:R!T;R!M86IO<B E9"P@;6EN;W(@
|
||||
M)60* $ES('1H:7,@3TL@*'DO;BD_( * $%B;W)T:6YG("XN+@H 5W)I=&EN
|
||||
M9R!B;V]T('-E8W1O<B N+BX* %)O;W0@9&5V:6-E(&-H86YG960A"@
|
||||
M(" @(" @(" @(2$A(2$@(" @(" @(" @(" @(" @(" !0$! 0$! 0$! 0$!
|
||||
M0$! @(" @(" @(" D! 0$! 0$ 4%!04%!0$! 0$! 0$! 0$! 0$! 0$! 0$
|
||||
M!$! 0$! 0!@8&!@8& @(" @(" @(" @(" @(" @(" @(0$! 0"
|
||||
M
|
||||
M
|
||||
M !4!50%5 4 D"
|
||||
M $@# * @$ !8 P @(" : , $,"
|
||||
M P '@# !" @0 "( P #_ F ,
|
||||
M _P *@# /\ "X P #_
|
||||
MR , _P -@# /\ #H P #_
|
||||
M ^ , _P @$ /\ 8! #_
|
||||
M * 0 _P #@$ /\ !(! #_
|
||||
M 6 0 _P &@$ /\ !X! $@
|
||||
M B "( 2@ J#_______________________________________\ T
|
||||
M 0 0 ! $-/35!!40 !," @0%!@@("!05
|
||||
M!1/_%@41 O________________\%!?____________________\/_R,"_P__
|
||||
M____$___ @(%#P+___\3__________\C_____R/_$_\ (" @(" @(" 0$!
|
||||
M 0$" @(" @(" @(" @(" @(" @(! @(" @," @("! (" @("!04%!04%!04%
|
||||
M!0(" @(" @(" @('"A4*# D" @L"% X" @(" @@" A(" A "$ (" @("!@<*
|
||||
M"@H,"0("#0(1#A," @\"" ("$@(" @(" @(H;G5L;"D !04 105%!04% (
|
||||
M% ,$% D%!04%!04%!044%!04%!04%!04% \7#P@4%!0'%!84%!04%!04%!0-
|
||||
M%!04%!04%!04%! *#P\/" H4% 84$@L.%!01% P4% T4%!04%!04 '!R:6YT
|
||||
M('-C86YF(#H@9FQO871I;F<@<&]I;G0@9F]R;6%T<R!N;W0@;&EN:V5D#0H
|
||||
M $"05)!4D%20
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M
|
||||
M /M2"0(E!@ O B B !_ #, $ "< 0 ! $ \#$ !
|
||||
M $ / 0 ( N 0 , "H 0 0 @ @ 4
|
||||
M U @ 8 W @ < (@ Y @ & @ (0!: @ & D #G P H
|
||||
M +! L ^!0 P '@!5!0 T !X!0 X #Z!0 \
|
||||
M "6!@ ! #X!@ !$ &P Y!P !( "@!P !, #O!P !0
|
||||
M G" !4 &0#-" !8 #D" !< #^" !@ "@ !D
|
||||
M 4"@ !H !&"P !L ""# !P "_# !T @#0 !X
|
||||
M "*#@ !\ #O#@ " 'P#D#P "$ "$ "( ?$ ",
|
||||
M W$ "0 !!$ "4 !0$ "8 !C$ "< !2$0 "@
|
||||
M&@!S$0 "D "J$0 "H #,$0 "L #]$0 "P )$@ "T
|
||||
M !1$@ "X #5$@ "\ #U$@ # #/$P #$ "U% #(
|
||||
M #)% #, #)% #0 !L%0 #4 '0!U%0 #8 ".%0 #<
|
||||
M ".%0 #@ "K%0 #D "K%0 #H #'%0 #L $%@ #P
|
||||
M 5%@ #T ^%@ #X "[%@ #\ #B%@ $ #\%@ $$
|
||||
M A%P $( !"%P $, #W%P $0 1& $4 #/' $8
|
||||
M !F'@ $< J(P $@ !0(P $D #)(P $H O) $L
|
||||
M S) $P W) $T [) $X ! ) $\ /)0 %
|
||||
M !F)@ %$ &T" %( !R &T" %, !V &T" %0 !Z &T" %4
|
||||
M !^ &T" %8 "" &T" %< "$ &T" %@ "& &T" %D "( &T" %H
|
||||
M "* &T" %L ", &T" %P ". &T" %T "0 &T" %X "0 &T" %\
|
||||
M "1 &T" & "2 &T" &$ "4 &T" &( "8 &T" &, ": &T" &0
|
||||
M "< &T" &4 "@ &T" &8 "D &T" &< ^ FT" &@ ! FT" &D
|
||||
M !" VT" &H !$ VT" &L !& VT" &P !( VT" &T "(!&T" &X
|
||||
M "P!&T" &\ "X!&T" ' "Z!&T" '$ "\!&T" '( #+!&T" ',
|
||||
M #6!&T" '0 #8!&T" '4 !,!FT" '8 !.!FT" '< !0!FT" '@
|
||||
M !2!FT" 'D !4!FT" 'H ( !:!FT" 'L !:"&T" 'P !7T
|
||||
M !7X , !7\ $ !80 ! $ "H0 ! $ "H4
|
||||
M"@#\_P H8 "@#^_P H< & "L_P H@ ! ' !(D ! & !(H
|
||||
M"@ $ !HL !@ $ !H$ "# $)AP " $ 0 !
|
||||
M $ C (T ".
|
||||
M CP ) "1
|
||||
M D@ ), "4
|
||||
M E0 )8 "7
|
||||
M F )D
|
||||
M ": FP )P
|
||||
M "= G@ )\
|
||||
M "@ H0 *(
|
||||
M "C I *4
|
||||
M "F IP
|
||||
M *@ "I J@
|
||||
M *L "L K0
|
||||
M *X "O L
|
||||
M +$ "R LP
|
||||
M +0 "U
|
||||
MM@ +< "X
|
||||
M N0 +H "[
|
||||
M O (( JAIR& < .0() #P""@!$ @L 4 (,
|
||||
M %@"#@!: A, 8@(4 &H"%0!M A8 =0(7 'T"& "= AD H@(: *H"&P#+ AP
|
||||
M\0(= /8"'@ $ Q\ $@,@ !H#(0 B R( *@,C #(#) !$ R4 3 ,F %0#)P!F
|
||||
M R@ =@,I 'X#*@"+ RL D ,L )@#+@"? R\ I0,P *L#,0"S S( U ,S -D#
|
||||
M- #A X 0 .0(A ($ 0 ! / (> 6@*- 8( !0 #
|
||||
M 8@*% 0( Y JX! 0 $ $ 0 ! $ 0 G ! 0
|
||||
M @" ____?P 4 ( 0 (#___]_ & $ & (#___]_"
|
||||
M 0 " _P D ( H /__ * $ , #_____
|
||||
M#0 ! / ( ! H #@ !@ H ! P $
|
||||
M !, /\ ' ( L @ *P "@ : !0 " ",
|
||||
M @ 0 (P ! C < !4 ( ! ( (P ! C $
|
||||
M ", @ 0 &@ ( @ C $ ", $ 7U]E>&ET8VQE86X
|
||||
M7U]E>&ET %]?<F5S=&]R97IE<F\ 7V%B;W)T $1'4D]54$ 7U]-34]$14P
|
||||
M7V-H96-K %]M86EN %]A=&5X:70 7U]#4%543@!?8W!R:6YT9@!?97AI= !?
|
||||
M9F9L=7-H %]F;'5S:&%L; !?9G-E96L 7V9T96QL %]G971S %]G971T97AT
|
||||
M %]P=71T97AT %]M;W9E=&5X= !?<')I;G1F %]?9G!U=&, 7V9P=71C %]F
|
||||
M<'5T8VAA<@!?7T90551. %]P=71C: !?7U-#4D5%3DE/ %]?5D%,241!5$58
|
||||
M60!?7U-#4D],3 !?7W-E='5P:6\ 7W-E='9B=68 7W-S8V%N9@!?=G-S8V%N
|
||||
M9@!?=&5L; !?7W=H97)E>'D 7W=H97)E> !?=VAE<F5Y %]W<FET90!?7WAF
|
||||
M9FQU<V@ 7V)I;W-D:7-K %]?7V)R:P!?7U]S8G)K %]B<FL 7W-B<FL 7U]6
|
||||
M:61E;TEN= !?7V,P8W)T:6YI= !?7V-R=&EN:70 7V5O9@!?7V9G971C %]?
|
||||
M3F9G971C %]F9V5T8P!?9F=E=&-H87( 7V=E=&-H %]?3F=E=&-H90!?9V5T
|
||||
M8VAE %]?3G5N9V5T8V@ 7W5N9V5T8V@ 7U])3T524D]2 %]I<V%T='D 7VQS
|
||||
M965K %]?3$].1U1/00!?:71O80!?=6QT;V$ 7VQT;V$ 7VUE;6-P>0!?<F5A
|
||||
M9 !?7W)E860 7U]S8V%N;F5R %]?<V-A;G1O; !?7U904DE.5$52 %]?5E!4
|
||||
M4@!?7U9204T 7U]W<FET90!?7U)%04Q#5E0 7U]S8V%N=&]D %]?<V-A;G)S
|
||||
M;'0 7U]S8V%N<&]P %]F<F5E %]M86QL;V, 7W)E86QL;V, 1$%405-%1T
|
||||
M7U]);G0P5F5C=&]R %]?26YT-%9E8W1O<@!?7TEN=#5696-T;W( 7U]);G0V
|
||||
M5F5C=&]R %]?0S!A<F=C %]?0S!A<F=V %]?0S!E;G9I<F]N %]?96YV3&YG
|
||||
M %]?96YV<V5G %]?96YV4VEZ90!?7W!S< !?7V]S;6%J;W( 7U]V97)S:6]N
|
||||
M %]?;W-M:6YO<@!?97)R;F\ 7U]3=&%R=%1I;64 7U]?:&5A<&)A<V4 7U]?
|
||||
M8G)K;'9L %]?:&5A<&)A<V4 7U]B<FML=FP 7U]H96%P=&]P %]?871E>&ET
|
||||
M8VYT %]?8W1Y<&4 7U]E>&ET8G5F %]?97AI=&9O<&5N %]?97AI=&]P96X
|
||||
M7U]S=')E86US %]?;W!E;F9D %]?:&5A<&QE;@!?7W-T:VQE;@!?7W=S8W)O
|
||||
M;&P 7U]V:61E;P!?9&ER96-T=FED96\ 7U]D;W-E<G)N;P!?7V1O<T5R<F]R
|
||||
M5&]35@!?7V9I<G-T %]?;&%S= !?7W)O=F5R %]?4F5A;$-V=%9E8W1O<@!?
|
||||
M7U-C86Y4;V1696-T;W( 7V)U9F9E<@!?7V%T97AI='1B; !?7W1U<F)O0W)T
|
||||
M %]?8W9T9F%K %]?04A32$E&5 !?7T%(24Y#4@!#,"Y!4TT 0S!3 %-%5%)/
|
||||
M3U0N0P!315123T]4 ')E<P!M:6YO<@!M86IO<@!I;@!X ')E<W5L= !S:7IE
|
||||
M7W0 9G!O<U]T $%415A)5 !#4%))3E1& $-465!% $58250 1D9,55-( $9)
|
||||
M3$53 $9)3$53,@!&3%532$%,3 !&4T5%2P!'1513 $=05$585 !(14%03$5.
|
||||
M $U/5D5415A4 %!224Y41@!0551# %!55$-( %-#4D5%3@!30U)/3$P 4T54
|
||||
M55!)3P!315160E5& %-30T%.1@!35$M,14X 5$5,3 !72$5215A9 %=2251%
|
||||
M %=30U)/3$P 6$9&3%532 !"24]31$E32P!"4DL 0U)424Y)5 !%3T8 1T54
|
||||
M0P!'151#2 !)3T524D]2 $E3051460!,4T5%2P!,5$]! $U%34-060!214%$
|
||||
M %)%041! %-#04Y.15( 4T-!3E1/3 !64%))3E1%4@!64D%- %=2251%00!#
|
||||
?5E1&04L 4D5!3$-65 !30T%.5$]$ $Y%05)(14%0 !6
|
||||
|
||||
end
|
||||
------------------------- end setroot.uue ----------------------------
|
||||
|
||||
|
||||
If there is some demand, I can extend the program to use
|
||||
standard HD device names instead of major/minor device numbers.
|
||||
|
||||
Enjoy,
|
||||
|
||||
Henning
|
||||
|
||||
|
||||
------------------------------------------------------------------------
|
||||
Henning Spruth spruth@regent.e-technik.tu-muenchen.de
|
||||
Institute of Electronic Design Automation
|
||||
Technical University of Munich, Germany
|
||||
--
|
||||
------------------------------------------------------------------------
|
||||
Henning Spruth spruth@regent.e-technik.tu-muenchen.de
|
||||
Institute of Electronic Design Automation
|
||||
Technical University of Munich, Germany
|
||||
|
||||
BIN
Linux-0.11/sources/sbin/stty.tar.Z
Normal file
BIN
Linux-0.11/sources/sbin/stty.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/sbin/umount.c.Z
Normal file
BIN
Linux-0.11/sources/sbin/umount.c.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/bin16.tar.Z
Normal file
BIN
Linux-0.11/sources/system/bin16.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/include-0.11.tar.Z
Normal file
BIN
Linux-0.11/sources/system/include-0.11.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/linux-0.11-pre.tar.Z
Normal file
BIN
Linux-0.11/sources/system/linux-0.11-pre.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/linux-0.11.tar.Z
Normal file
BIN
Linux-0.11/sources/system/linux-0.11.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/linux-0.12.tar.Z
Normal file
BIN
Linux-0.11/sources/system/linux-0.12.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/lvc.tar.gz
Normal file
BIN
Linux-0.11/sources/system/lvc.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/system/unistd.tar.Z
Normal file
BIN
Linux-0.11/sources/system/unistd.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/blank.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/blank.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/emacs-18.57.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/emacs-18.57.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/less-177.src.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/less-177.src.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/man.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/man.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.1.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.1.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.2.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.2.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.3.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.3.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/mtools_sh.4.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/mtools_sh.4.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/su.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/su.tar.Z
Normal file
Binary file not shown.
BIN
Linux-0.11/sources/usr.bin/uniq.src.tar.Z
Normal file
BIN
Linux-0.11/sources/usr.bin/uniq.src.tar.Z
Normal file
Binary file not shown.
Reference in New Issue
Block a user