コード例 #1
0
ファイル: _video.c プロジェクト: Earlz/ancientstuff
void cls(){
    if(ProcessConsole->buffering==NO_BUFFER){
        _memsetw(ProcessConsole->video_memory,(ProcessConsole->color<<8)|' ',ProcessConsole->size/2+1);
    }else{
        _memsetw(ProcessConsole->buffer,(ProcessConsole->color<<8)|' ',ProcessConsole->size/2+1); //use 'space' so the color is printed
        if(ProcessConsole==CurrentConsole && ProcessConsole->buffering==BUFFER_REFRESH){
        RefreshConsole();
        }
    }
}
コード例 #2
0
ファイル: _video.c プロジェクト: Earlz/ancientstuff
void scrolldowna(unsigned int lines){ //this is improperly named


     memcpy(ProcessConsole->buffer,
     ProcessConsole->buffer+((ProcessConsole->width*2)*lines),
     ProcessConsole->size);
     if(ProcessConsole->buffering!=BUFFER_REFRESH){
     _memsetw(ProcessConsole->buffer+((ProcessConsole->width*2)*(ProcessConsole->height-1)),(ProcessConsole->color<<8)+' ',ProcessConsole->width*2);
     }else{
          _memsetw(ProcessConsole->buffer+((ProcessConsole->width*2)*(ProcessConsole->height-1)),(ProcessConsole->color<<8)+' ',ProcessConsole->width*2);
       //   _memsetw(ProcessConsole->video_memory+((ProcessConsole->width*2)*(ProcessConsole->height-1)),(ProcessConsole->color<<8)+' ',ProcessConsole->width*2);
     }
    // memset(ProcessConsole->buffer+ProcessConsole->size-(ProcessConsole->width*2*2),(ProcessConsole->color<<8)|' ',ProcessConsole->width*2*2); //sets
     ProcessConsole->curx=0;
     ProcessConsole->cury-=lines;
    // RefreshConsole();
}
コード例 #3
0
ファイル: putchar.c プロジェクト: kyle-johnson/RippleKernel
void putc(unsigned char c)
{
	u_short vid_mem_spot;

	//lock_mutex_block(&putc_mutex);

	switch(c)
	{
		case '\n':			// new line
			_csr_y++;
			_csr_x = 0;
			break;

		case '\r':			// carrige return
			_csr_y++;
			_csr_x = 0;
			break;

		case '\b':
			_csr_x--;
			break;

		default:			// normal charactor
			vid_mem_spot = ((_csr_y  * 80) + _csr_x);
			vid_mem_spot = vid_mem_spot << 1;	// multiply by 2

			vidmem2[vid_mem_spot] = c;
			vidmem2[vid_mem_spot + 1] = 0x07;	// white on black text
			_csr_x++;
			break;
	};

	if(_csr_x > 79)		// last charactor was at the end of the line
	{
		_csr_y++;	// next line down
		_csr_x = 0;
	};
	if(_csr_y > 24)		// we are at the bottom visable line
	{
		_memcpy(0xB8000, 0xB8000+(80*2), 24*80*2);	// scroll the video memory up a line
		_memsetw(0xB8000+(24*80*2), 0x0720, 80);	// clear the bottom line
		_csr_y=24;
	};

	update_cursor(_csr_y, _csr_x);

	//unlock_mutex(&putc_mutex);
};
コード例 #4
0
ファイル: _video.c プロジェクト: Earlz/ancientstuff
CONSOLE *CreateConsole(unsigned char type,unsigned int owner, char *name,unsigned char video_mode){
    CONSOLE *new_console;

    __asm("cli"); //disable ints so no drawing crap going on
    new_console=malloc(sizeof(CONSOLE));
    if(new_console==0){return 0;}
    LastConsole->next=new_console;
    new_console->prev=LastConsole;
    LastConsole=new_console;
    new_console->next=FirstConsole;
    //copy the name
    new_console->name=malloc(strlen(name));
    memcpy(new_console->name,name,strlen(name));
    //set video mode info
    new_console->video_mode=video_mode;
    new_console->vga_registers=video_modes[video_mode];
    memset(&new_console->ConsoleEvents,0,sizeof(CONSOLE_EVENTS)); //zero the events
    //must resolve the font for each video mode
    switch(video_mode){ //set appropriate fonts, and sizes
        case 0:
        new_console->font=g_8x8_font;
        new_console->text_height=8;
        new_console->width=90;
        new_console->height=60;
        new_console->size=90*60*2;
        break;
        case 1:
        new_console->font=g_8x16_font;
        new_console->text_height=16;
        new_console->width=80;
        new_console->height=25;
        new_console->size=80*25*2;
        break;
        case 2:
        new_console->font=g_8x16_font;
        new_console->text_height=16;
        new_console->width=90;
        new_console->height=30;
        new_console->size=90*30*2;
        break;
        case 3:
        new_console->font=g_8x8_font;
        new_console->text_height=8;
        new_console->width=80;
        new_console->height=50;
        new_console->size=80*50*2;
        break;
        case 4:
        new_console->font=g_8x8_font;
        new_console->text_height=8;
        new_console->width=40;
        new_console->height=50;
        new_console->size=40*50*2;
        break;
        case 5:
        new_console->font=g_8x16_font;
        new_console->text_height=16;
        new_console->width=40;
        new_console->height=25;
        new_console->size=40*25*2;
        break;
    }

    //allocate buffer, even if buffering is disabled
    new_console->buffer=malloc(new_console->size+(new_console->width*2*2)); //provides room for 2 extra lines to avoid memory overwriting
    new_console->video_memory=0xB8000;
    //set owner process
    //only the owner process can kill a console(anyone can request..)
    //unless of course it is a system process(ring0 drivers or kernel services)
    new_console->owner_process=owner;
    switch(type){
        case SYSTEM_CONSOLE: //same as virtual console
        new_console->buffering=NO_BUFFER;
        break;
        case USER_CONSOLE:
        default: //also the default
        new_console->buffering=NORMAL_BUFFER;
        break;
        case REALTIME_CONSOLE:
        new_console->buffering=BUFFER_REFRESH; //puets instantly refreshed
        break;
    }

    //zero out the cursor
    new_console->curx=0;
    new_console->cury=0;
    //set color to white on black
    new_console->color=0x0F;
    new_console->text=TRUE;

    CurrentConsole=new_console; //replace this with SwitchConsole..
    ProcessConsole=new_console;
    SwitchConsole(CurrentConsole);
    _memsetw(ProcessConsole->buffer,(ProcessConsole->color<<8)|' ',ProcessConsole->size/2+1); //cls...
    _memsetw(ProcessConsole->video_memory,(ProcessConsole->color<<8)|' ',ProcessConsole->size/2+1); //and the actual video memory
    __asm("sti"); //renabled interrupts
    return new_console;
}