//----------------------------------------------------------------------------// // GNU GPL OS/K // // // // Authors: spectral` // // NeoX // // // // Desc: Early terminal functions // //----------------------------------------------------------------------------// #include extern void VGA_Init(void); extern Terminal_t VGA_Terminal; // // Initialize standard output // void InitTerms(void) { KalAssert(!GetStdOut() && !GetStdDbg()); VGA_Init(); // vgaTerm.initDone = INITOK; SetStdDbg(&VGA_Terminal); SetStdOut(&VGA_Terminal); ClearTerm(GetStdOut()); } // // Fill terminal with spaces // error_t ClearTerm(Terminal_t *term) { error_t retcode; if (term == NULL) return EINVAL; KalAssert(term->initDone == INITOK); AquireLock(&term->lock); retcode = term->ClearTermUnlocked(term); ReleaseLock(&term->lock); return retcode; } // // Change the color code // error_t ChTermColor(Terminal_t *term, TermColor_t fgColor, TermColor_t bgColor) { if (fgColor > KTERM_COLOR_WHITE || bgColor > KTERM_COLOR_WHITE) return EINVAL; if (term == NULL) return EINVAL; AquireLock(&term->lock); term->fgColor = fgColor; term->bgColor = bgColor; ReleaseLock(&term->lock); return EOK; } // // Write a single character on the terminal // error_t PutOnTerm(Terminal_t *term, char ch) { error_t retcode; if (term == NULL) return EINVAL; KalAssert(term->initDone == INITOK); AquireLock(&term->lock); retcode = term->PutOnTermUnlocked(term, ch); ReleaseLock(&term->lock); return retcode; } // // Print string on terminal // error_t PrintOnTerm(Terminal_t *term, const char *str) { error_t retcode = EOK; if (term == NULL) return EINVAL; KalAssert(term->initDone == INITOK); AquireLock(&term->lock); while (*str && retcode == EOK) { retcode = term->PutOnTermUnlocked(term, *str++); } ReleaseLock(&term->lock); return retcode; }