void LCD::put_string(const char *str, char line){ set_command_mode(); if(line == LINE_1){ PORTD = 0b10000000; send_command(); PORTD = 0b00000000; send_command(); } else { PORTD = 0b11000000; send_command(); PORTD = 0b00000000; send_command(); } set_text_mode(); while(*str){ if(*str != '\r' && *str != '\n'){ put_char(*str++); //don't print \r\n to the LCD display } }; set_command_mode(); }
static void redraw_remark_lines(void) { int i=0,tls = line_space, j; Char *temptxt = text; if (!remark_is_open || !text) return; line_space = 3; set_output_window(&remark_win); set_margin(draw_pos); set_x_y(0,MARGIN); if (scrollbar) j = scrollbar_line(scrollbar,0); else j=0; while (i<j) { while (*temptxt && !IsNewline(*temptxt)) temptxt++; i++; if (!*temptxt) i=j; else temptxt++; } if (i==selected_line) set_text_mode(Reverse); while (*temptxt && i<j+nr_visible) { if (IsNewline(*temptxt)) { if (where_x() && where_x()<black_width) thinspace(black_width-where_x()); if (i==selected_line) set_text_mode(Normal); out_char(*temptxt); i++; if (i==selected_line) set_text_mode(Reverse); } else out_char(*temptxt); temptxt++; } if (where_x() && where_x()<black_width) thinspace(black_width-where_x()); out_char(Newline); clear_to_end_of_page(); unset_output_window(); line_space = tls; }
int endwin( void ) { // set_text_mode( TEXT_MODE_80x25); set_text_mode( default_mode_index); set_cursor_loc( initial_cursor_y, initial_cursor_x); if( stdscr) { free( stdscr); stdscr = NULL; } #ifdef DEFINE_CURSCR if( curscr) { free( curscr); curscr = NULL; } #endif if( backup_screen) { memcpy( DISPMEM, backup_screen, scr_xsize * scr_ysize * 2); free( backup_screen); } return( 0); }
/* Check if MAGIC is valid and print the Multiboot information structure pointed by ADDR. */ void entry(unsigned long magic, unsigned long addr) { multiboot_info_t *mbi; uint32_t filesys_start_addr; /* Clear the screen. */ vga_text_clear(); /* Am I booted by a Multiboot-compliant boot loader? */ if(magic != MULTIBOOT_BOOTLOADER_MAGIC) { printf("Invalid magic number: 0x%#x\n", (unsigned)magic); return; } /* Set MBI to the address of the Multiboot information structure. */ mbi = (multiboot_info_t *)addr; /* Print out the flags. */ printf("flags = 0x%#x\n", (unsigned)mbi->flags); /* Are mem_* valid? */ if(CHECK_FLAG(mbi->flags, 0)) printf("mem_lower = %uKB, mem_upper = %uKB\n", (unsigned)mbi->mem_lower, (unsigned)mbi->mem_upper); /* Is boot_device valid? */ if(CHECK_FLAG(mbi->flags, 1)) printf("boot_device = 0x%#x\n", (unsigned)mbi->boot_device); /* Is the command line passed? */ if(CHECK_FLAG(mbi->flags, 2)) printf("cmdline = %s\n", (char *)mbi->cmdline); if(CHECK_FLAG(mbi->flags, 3)) { int mod_count = 0; int i; module_t* mod = (module_t*)mbi->mods_addr; filesys_start_addr = (uint32_t)mod->mod_start; while(mod_count < mbi->mods_count) { printf("Module %d loaded at address: 0x%#x\n", mod_count, (unsigned int)mod->mod_start); printf("Module %d ends at address: 0x%#x\n", mod_count, (unsigned int)mod->mod_end); printf("First few bytes of module:\n"); for(i = 0; i < 16; i++) { printf("0x%x ", *((char*)(mod->mod_start+i))); } printf("\n"); mod_count++; } } /* Bits 4 and 5 are mutually exclusive! */ if(CHECK_FLAG(mbi->flags, 4) && CHECK_FLAG(mbi->flags, 5)) { printf("Both bits 4 and 5 are set.\n"); return; } /* Is the section header table of ELF valid? */ if(CHECK_FLAG(mbi->flags, 5)) { elf_section_header_table_t *elf_sec = &(mbi->elf_sec); printf("elf_sec: num = %u, size = 0x%#x," " addr = 0x%#x, shndx = 0x%#x\n", (unsigned)elf_sec->num, (unsigned)elf_sec->size, (unsigned)elf_sec->addr, (unsigned)elf_sec->shndx); } /* Are mmap_* valid? */ if(CHECK_FLAG(mbi->flags, 6)) { memory_map_t *mmap; printf("mmap_addr = 0x%#x, mmap_length = 0x%x\n", (unsigned)mbi->mmap_addr, (unsigned)mbi->mmap_length); for(mmap = (memory_map_t *)mbi->mmap_addr; (unsigned long)mmap < mbi->mmap_addr + mbi->mmap_length; mmap = (memory_map_t *)((unsigned long)mmap + mmap->size + sizeof(mmap->size))) printf(" size = 0x%x, base_addr = 0x%#x%#x\n" " type = 0x%x, length = 0x%#x%#x\n", (unsigned)mmap->size, (unsigned)mmap->base_addr_high, (unsigned)mmap->base_addr_low, (unsigned)mmap->type, (unsigned)mmap->length_high, (unsigned)mmap->length_low); } /* Construct an LDT entry in the GDT */ { seg_desc_t the_ldt_desc; the_ldt_desc.granularity = 0; the_ldt_desc.opsize = 1; the_ldt_desc.reserved = 0; the_ldt_desc.avail = 0; the_ldt_desc.present = 1; the_ldt_desc.dpl = 0x0; the_ldt_desc.sys = 0; the_ldt_desc.type = 0x2; SET_LDT_PARAMS(the_ldt_desc, &ldt, ldt_size); ldt_desc_ptr = the_ldt_desc; lldt(KERNEL_LDT); } /* Construct a TSS entry in the GDT */ { seg_desc_t the_tss_desc; the_tss_desc.granularity = 0; the_tss_desc.opsize = 0; the_tss_desc.reserved = 0; the_tss_desc.avail = 0; the_tss_desc.seg_lim_19_16 = TSS_SIZE & 0x000F0000; the_tss_desc.present = 1; the_tss_desc.dpl = 0x0; the_tss_desc.sys = 0; the_tss_desc.type = 0x9; the_tss_desc.seg_lim_15_00 = TSS_SIZE & 0x0000FFFF; SET_TSS_PARAMS(the_tss_desc, &tss, tss_size); tss_desc_ptr = the_tss_desc; tss.ldt_segment_selector = KERNEL_LDT; tss.ss0 = KERNEL_DS; tss.esp0 = 0x800000; ltr(KERNEL_TSS); } /* If kernel got to here, that means everything should be fine with the boot. * Now we should initialize IDT, PIC, Syscall, paging, devices, filesystem, * and any other initialization stuff... terminal_init() should be called at * the very end of the initializations (after sti). */ /* But first, let's clear the screen */ vga_text_clear(); /* Init the IDT */ idt_init(); /* Init the PIC */ i8259_init(); /* Init Syscall */ syscall_init(); /* Init Paging */ paging_init(); /* Init file system */ filesys_init(filesys_start_addr); /* Init the Keyboard */ keyboard_init(); /* Init the RTC */ rtc_init(); /* Enable interrupts */ sti(); /* booting screen in mode X */ start_up = 3; set_mode_x(); load_bmp((uint8_t*)"boot", LOAD_FLAG_BOOT); while(start_up == 3); set_text_mode(); /* Init the good looking terminal */ terminal_init(); /* wait for a key press to clear the start up screen */ while(start_up == 2); vga_text_clear(); welcome_and_credit(); while(start_up == 1); /* Init the status bar for that terminal */ terminal_stat_bar_init(); terminal_clear(); /* Init the PIT */ pit_init(); /* Execute the first program "shell" */ pid_now = 1; pid_running[0] = 1; root_shell_flag = 1; execute((uint8_t*)"shell"); /* Spin (nicely, so we don't chew up cycles) */ asm volatile(".1: hlt; jmp .1;"); }
void visitProgramImpl(ProgramImpl * p) { set_text_mode(); fprintf(m_outputfile, "\t.globl\tMain\n"); p->visit_children(this); }