コード例 #1
0
ファイル: u1.c プロジェクト: tymicruz/CuatroSeisZero
main()
{ 
  char name[64]; int pid, cmd;
  char c;

  while(1){
    
    color = 0x0C;
       
    printf("----------------------------------------------\n");
    pid = getpid();
    printf("I am proc %d in U mode: running segment=%x\n", pid, getcs());
    show_menu();
    printf("Command ? ");
    gets(name); 
    if (name[0]==0) 
        continue;

    cmd = find_cmd(name);
    switch(cmd){
           case 0 : getpid();   break;
           case 1 : ps();       break;
           case 2 : chname();   break;
           case 3 : kfork();    break;
           case 4 : kswitch();  break;
           case 5 : wait();     break;
           case 6 : exit();     break;
           case 7 : c = kgetc();  putc(c); putc('\n'); putc('\r'); break;
           case 8 : kputc();    break;

           default: invalid(name); break;
    }
  }
}
コード例 #2
0
ファイル: scanf.c プロジェクト: ShabbyX/kio
static int kio_skip_spaces(KFILE *stream)
{
	int read = 0;
	int c = kgetc(stream);
	while (c != EOKF)
	{
		++read;
		if (!kio_isspace((unsigned char)c))
		{
			kungetc(c, stream);
			--read;
			break;
		}
		c = kgetc(stream);
	}
	return read;
}
コード例 #3
0
ファイル: ubasic.c プロジェクト: mizuki-tohru/stm32f4-console
//static void inr_statement(void)
void inr_statement(void)
{
	long var;
	accept(TOKENIZER_INR);
	var = tokenizer_variable_num();
	accept(TOKENIZER_VARIABLE);
	ubasic_set_variable(var, kgetc());
	accept(TOKENIZER_CR);

}
コード例 #4
0
ファイル: main.cpp プロジェクト: capel/brazos
int update_input()
{
    int c = kgetc();
    switch(c) {
        case '\r':
            c = '\n';
            kputc(c);
            return c;
            break;
        case '\b':
        /*
            kputc('\b');
            kputc(' ');
            kputc('\b');
        */
            return '\b';
        case 27:
            c = kgetc();
            if (c == 91) {
                switch (kgetc()) {
                    case 'D': return ARROW_LEFT;
                    case 'C': return ARROW_RIGHT;
                    case 'A': return ARROW_UP;
                    case 'B': return ARROW_DOWN;
                    default : return BAD_CODE;
                }
            } else {
                return BAD_CODE;
            }
        default:
            break;
    }

    kputc(c);

    /*if (!isalpha(c) && !isdigit(c)) {
        printk("<%d>", c);
    }*/
    
    return c;

}
コード例 #5
0
ファイル: ubasic.c プロジェクト: mizuki-tohru/stm32f4-console
//static void input_statement(void)
void input_statement(void)
{
	long var;
	char c;
	accept(TOKENIZER_INPUT);
	var = tokenizer_variable_num();
	accept(TOKENIZER_VARIABLE);
	ubasic_clear_strig(var);
	while(c != '\n'){
		if((c = kgetc()) != 0){
			ubasic_set_string(var, c);
		}
	}
	accept(TOKENIZER_CR);
}
コード例 #6
0
ファイル: ubasic.c プロジェクト: mizuki-tohru/stm32f4-console
//static void inp_statement(void)
void inp_statement(void)
{
	long var;
	char c;
	int flg = 0;
	accept(TOKENIZER_INP);
	var = tokenizer_variable_num();
	accept(TOKENIZER_VARIABLE);
	while(flg == 0){
		if((c = kgetc()) != 0){
			ubasic_set_variable(var, c);
			flg = 1;
		}
	}
	accept(TOKENIZER_CR);
}
コード例 #7
0
ファイル: kprintf.c プロジェクト: 36Chambers/xinu-arm
/**
 * Create a debug terminal for testing Bluetooth.
 */
void ksimpleterminal( void )
{
    
int c;

    led_on();

    for( ;; )
    {	
	c = kgetc( (void *)0 );

	if( c != SYSERR )
	    kputc( (void *)0, c );
	led_off();
	if( c == 'q' )
	  break;


    }
  
}
コード例 #8
0
ファイル: tty.c プロジェクト: sng7ca/ygg
/*
 * terminal interrupt
 *
 * NB: this terrible crap is xv6's code, I use it temporary
 *     unless virtual consoles will be done, which
 *     will change all tty subsystem
 */
void ttyint(void)
{
	register int c;
	register struct tty *tty1;

	for (tty1 = tty + 1; (c = (kgetc() & 0xff)) > 0; ) {
		switch (c) {
		case c('U'):
			while (tty1->ed != tty1->wr &&
			      tty1->bf[(tty1->ed - 1) % TTYBC] != '\n') {
				tty1->ed--;
				kputc('\x7f');
			}
			break;
		case c('L'):
			cls();
			break;
		case c('H'):
		case '\x7f':
			if (tty1->ed != tty1->wr) {
				tty1->ed--;
				kputc('\x7f');
			}
			break;
		default:
			if (c != 0 && tty1->ed - tty1->rd < TTYBC) {
				c = (c == '\r') ? '\n' : c;
				tty1->bf[tty1->ed++ % TTYBC] = c;
				if (c != c('D'))
					kputc(c);
				if (c == '\n' || c == c('D') ||
				   tty1->ed == tty1->rd + TTYBC) {
					tty1->wr = tty1->ed;
					wakeup(&tty1->rd);
				}
			}
			break;
		}
	}
}
コード例 #9
0
ファイル: testcases.c プロジェクト: Str8AWay/os
/**
 * testcases - called after initialization completes to test things.
 */
void testcases(void)
{
	int c, pid;

	kprintf("0) Test creation of one process\r\n");
	kprintf("1) Test passing of many args\r\n");
	kprintf("2) Create three processes and run them\r\n");
	kprintf("3) Create 2 testbigargs processes, one maintest and a printfib\r\n");

	kprintf("===TEST BEGIN===");

	// TODO: Test your operating system!

	c = kgetc();
	switch(c)
	{
	case	'0':
		pid = create((void *)testmain, INITSTK, "MAIN1", 2, 0, NULL);
		printpcb(pid);
		break;

	case	'1':
		pid = create((void *)testbigargs, INITSTK, "MAIN1", 8, 
				0x11111111, 0x22222222, 0x33333333, 0x44444444,
				0x55555555, 0x66666666, 0x77777777, 0x88888888);
		printpcb(pid);
		// TODO: print out stack with extra args
		kprintf("\r\nStack:\r\n");
		pcb *ppcb = &proctab[pid];
		ulong *saddr = ppcb->stkptr;
		ulong stkhi = ((ulong)ppcb->stkbase) + ppcb->stklen;
		int i;
		for (i=0; i < (stkhi - ((ulong)ppcb->stkptr))/sizeof(ulong); i++)
		{
			kprintf("0x%08X:\t0x%08X\r\n", saddr, *saddr);
			saddr++;
		}
		// TODO: 
		ready(pid, 0);
		break;

	case	'2':
		// Create three copies of a process, and let them play.
		ready(create((void *)main, INITSTK, "MAIN1", 2, 0, NULL), 0);
		ready(create((void *)main, INITSTK, "MAIN2", 2, 0, NULL), 0);
		ready(create((void *)main, INITSTK, "MAIN3", 2, 0, NULL), 0);
		while (numproc > 1) resched();
		break;
		
	default:
		// Create different processes
		ready(create((void *)main, INITSTK, "MAIN", 2, 0, NULL), 0);
		ready(create((void *)testbigargs, INITSTK, "Big args1", 8,
					0x11111111, 0x22222222, 0x33333333, 0x44444444,
					0x55555555, 0x66666666, 0x77777777, 0x88888888), 0);
		ready(create((void *)testbigargs, INITSTK, "Big args2", 10,
					0x12345678, 0xABCDEF12, 0x11223344, 0x99999999, 
					0x98765432, 0xFEDCBABC, 0xFF00FF00, 0xAAAAAAAA), 0);
		ready(create((void *)printfib, INITSTK, "fib", 1, 10), 0);
	}

	kprintf("\r\n===TEST END===\r\n");
	return;
}
コード例 #10
0
ファイル: xsh_kexec.c プロジェクト: davidxyz/xinuPi
static void kexec_from_uart(int uartdev)
{
#ifdef _XINU_PLATFORM_ARM_RPI_
    irqmask im;
    device *uart;
    ulong size;
    void *kernel;
    uchar *p;
    ulong n;

    im = disable();

    uart = (device*)&devtab[uartdev];

    /* Tell raspbootcom to send the new kernel.  */
    kputc('\x03', uart);
    kputc('\x03', uart);
    kputc('\x03', uart);

    /* Receive size of the new kernel.  */
    for (;;)
    {
        size = (ulong)kgetc(uart);
        size |= (ulong)kgetc(uart) << 8;
        size |= (ulong)kgetc(uart) << 16;
        size |= (ulong)kgetc(uart) << 24;
        if (size <= 99999999 && size != 0)
        {
            break;
        }

        /* Tell raspbootcom to re-send the size.  */
        kputc('S', uart);
        kputc('E', uart);
    }

    /* Tell raspbootcom the size was successfully received.  */
    kputc('O', uart);
    kputc('K', uart);

    /* Allocate buffer for new kernel.  */
    kernel = memget(size);
    if (kernel == (void*)SYSERR)
    {
        return;
    }

    /* Load new kernel over the UART, placing it into the buffer.  */
    p = kernel;
    n = size;
    while (n--)
    {
        *p++ = kgetc(uart);
    }

    /* Execute the new kernel.  */
    kexec(kernel, size);

    /* The following code should never actually be reached.  */
    memfree(kernel, size);
    restore(im);
#else /* _XINU_PLATFORM_ARM_RPI_ */
    fprintf(stderr, "ERROR: kexec from UART not supported on this platform.\n");
#endif /* !_XINU_PLATFORM_ARM_RPI_ */
}
コード例 #11
0
static void
next_line(void)
{
	bool abortCommand = false;

#if USE_SCROLLING
	// TODO: scrolling is usually too slow; we could probably just remove it
	if (sScreen.y == sScreen.rows - 1)
 		scroll_up();
 	else
 		sScreen.y++;
#else
	if (in_command_invocation())
		sScreen.in_command_rows++;
	else
		sScreen.in_command_rows = 0;

	if (sScreen.paging && ((sScreen.in_command_rows > 0
			&& ((sScreen.in_command_rows + 3) % sScreen.rows) == 0)
		|| (sScreen.boot_debug_output && sScreen.y == sScreen.rows - 1))) {
		if (sScreen.paging_timeout)
			spin(1000 * 1000 * 3);
		else {
			// Use the paging mechanism: either, we're in the debugger, and a
			// command is being executed, or we're currently showing boot debug
			// output
			const char *text = in_command_invocation()
				? "Press key to continue, Q to quit, S to skip output"
				: "Press key to continue, S to skip output, P to disable paging";
			int32 length = strlen(text);
			if (sScreen.x + length > sScreen.columns) {
				// make sure we don't overwrite too much
				text = "P";
				length = 1;
			}

			for (int32 i = 0; i < length; i++) {
				// yellow on black (or reverse, during boot)
				sModule->put_glyph(sScreen.columns - length + i, sScreen.y,
					text[i], sScreen.boot_debug_output ? 0x6f : 0xf6);
			}

			char c = kgetc();
			if (c == 's') {
				sScreen.ignore_output = true;
			} else if (c == 'q' && in_command_invocation()) {
				abortCommand = true;
				sScreen.ignore_output = true;
			} else if (c == 'p' && !in_command_invocation())
				sScreen.paging = false;
			else if (c == 't' && !in_command_invocation())
				sScreen.paging_timeout = true;

			// remove on screen text again
			sModule->fill_glyph(sScreen.columns - length, sScreen.y, length,
				1, ' ', sScreen.attr);
		}

		if (sScreen.in_command_rows > 0)
			sScreen.in_command_rows += 2;
	}
	if (sScreen.y == sScreen.rows - 1) {
		sScreen.y = 0;
		sModule->fill_glyph(0, 0, sScreen.columns, 2, ' ', sScreen.attr);
	} else
		sScreen.y++;
#endif

#if NO_CLEAR
	if (sScreen.y + 2 < sScreen.rows) {
		sModule->fill_glyph(0, (sScreen.y + 2) % sScreen.rows, sScreen.columns,
			1, ' ', sScreen.attr);
	}
#endif
	sScreen.x = 0;

	if (abortCommand) {
		abort_debugger_command();
			// should not return
	}
}