예제 #1
0
/* program entry point
 */
int main(int argc, char **argv) {
        unsigned int  nlines, nwords, wordcount;
        unsigned long totalcharacters;

        nlines = 0;
	nwords = 0;
	totalcharacters = 0;
        showargs(argc, argv);
        while (readaline() != 0) {
                wordcount = makeintowords(buffer);
                nwords += wordcount;
                totalcharacters += analyzewords(buffer);
                nlines++;
        }
        printstatistics(nlines, nwords, totalcharacters);
        return(0);
}
예제 #2
0
system_trap()
{
    int o0, o1, o2;		/* user out register values */
    int syscallno;
    extern long lseek();

    if  ( Traptrace )
    {
        printf("**System call %d\n", Reg[2]);
        dump_reg();
    }

    /*	if (Reg[1] == 0)
    /*	{			/* SYS_indir */
    /*		syscallno = Reg[8];	/* out reg 0 */
    /*		o0 = Reg[9];
    /*		o1 = Reg[10];
    /*		o2 = Reg[11];
    /*	}
    /*	else	/* */
    {
        syscallno = Reg[2];
        o0 = Reg[4];
        o1 = Reg[5];
        o2 = Reg[6];
    }

    switch (syscallno)
    {
    case SYS_exit:	/*1*/
        printstatistics();
        fflush(stdout);
        exit(0);
        break;
    case SYS_read:	/*3*/
        Reg[1] =
            read(u_to_int_fd(o0), u_to_int_addr(o1), o2);
        break;
    case SYS_write:	/*4*/
        Reg[1] =
            write(u_to_int_fd(o0), u_to_int_addr(o1), o2);
        break;

    case SYS_open:	/*5*/
        Reg[1] = open(u_to_int_addr(o0), o1, o2); /* */
        break;

    case SYS_close:	/*6*/
        Reg[1] = 0;	/* hack */
        break;

    case 17:	/* 17 */
        /* old sbreak. where did it go? */
        Reg[1] = ((o0 / 8192) + 1) * 8192;
        break;

    case SYS_lseek:	/*19*/
        Reg[1] = (int) lseek(u_to_int_fd(o0), (long) o1, o2);
        break;

    case SYS_ioctl:/* 54 */
    {   /* copied from sas -- I don't understand yet. */
        /* see dave weaver */
#define	IOCPARM_MASK	0x7f	/* parameters must be < 128 bytes */
        int size = (o1 >> 16) & IOCPARM_MASK;
        char ioctl_group = (o1 >> 8) & 0x00ff;
        if ((ioctl_group == 't') && (size == 8))
        {
            size = 6;
            o1 = (o1 & ~((IOCPARM_MASK << 16)))
                 | (size << 16);
        }
    }
    Reg[1] = ioctl(u_to_int_fd(o0),o1,u_to_int_addr(o2));
    Reg[1] = 0;	/* hack */
    break;

    case SYS_fstat:		/* 62 */
        Reg[1] = fstat(o1, o2);
        break;

    case SYS_getpagesize:	/* 64 */
        Reg[1] = getpagesize();
        break;

    default:
        printf("Unknown System call %d\n", syscallno);
        if  ( ! Traptrace )
            dump_reg();
        exit(2);
        break;
    }
    if  ( Traptrace )
    {
        printf("**Afterwards:\n");
        dump_reg();
    }
}