
As seen in some BSD operating systems, you can now push and pop foreground and background colors onto a stack to change the colors you see on the screen whenever kprintf/kputchar is used. This could become useful if one wants to see kernel space kprintfs in other colors than user space printfs or error messages in red and other debugging purposes. Beware: This is just a small and dirty hack which protects the colorstack with locks and so on. But on task switching the color will not be switched. That makes different colors for different colors persistent for all the time difficult/impossible. But I considered adding colors to the task structures a bit overdone for a small debugging-help. [Sorry for those commit-and-pull-back-mails. Forgot that I had this stuff on the master branch while pushing my own branch onto the server.]
120 lines
2.9 KiB
C
120 lines
2.9 KiB
C
/*
|
|
* Copyright 2010 Stefan Lankes, Chair for Operating Systems,
|
|
* RWTH Aachen University
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* This file is part of MetalSVM.
|
|
*/
|
|
|
|
/**
|
|
* @author Stefan Lankes
|
|
* @file include/metalsvm/stdio.h
|
|
* @brief Stringstream related functions. Mainly printf-stuff.
|
|
*/
|
|
|
|
#ifndef __STDIO_H__
|
|
#define __STDIO_H__
|
|
|
|
#include <metalsvm/config.h>
|
|
#include <metalsvm/stddef.h>
|
|
#include <metalsvm/stdarg.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Forces all write operations
|
|
*/
|
|
int kflush(void);
|
|
|
|
/**
|
|
* Works like the ANSI C function puts
|
|
*/
|
|
int kputs(const char *);
|
|
|
|
/**
|
|
* Works like the ANSI c function putchar
|
|
*/
|
|
int kputchar(int);
|
|
|
|
/**
|
|
* Works like the ANSI C function printf
|
|
*/
|
|
int kprintf(const char*, ...);
|
|
|
|
/**
|
|
* Works like the ANSI c function sprintf
|
|
*/
|
|
int ksprintf(char *str, const char *format, ...);
|
|
|
|
/**
|
|
* Works like the ANSI c function sprintf
|
|
*/
|
|
int ksnprintf(char *str, size_t size, const char *format, ...);
|
|
|
|
/**
|
|
* Initialize the I/O functions
|
|
*/
|
|
int koutput_init(void);
|
|
|
|
/**
|
|
* Scaled down version of printf(3)
|
|
*/
|
|
int kvprintf(char const *fmt, void (*func) (int, void *), void *arg, int radix, va_list ap);
|
|
|
|
/** @brief Set a new foreground color for kprintf and kputchar.
|
|
*
|
|
* The color change will affect any procedure using vga_putchar()/vga_puts().
|
|
* This procedure pushes the color onto a colorstack making you
|
|
* able to revert this change just with a popfg().
|
|
* */
|
|
void pushfg(unsigned char fgcol);
|
|
|
|
/** @brief Set a new background color for kprintf and kputchar.
|
|
*
|
|
* The color change will affect any procedure using vga_putchar()/vga_puts().
|
|
* This procedure pushes the color onto a colorstack making you
|
|
* able to revert this change just with a popbg().
|
|
* */
|
|
void pushbg(unsigned char bgcol);
|
|
|
|
#define COL_BLACK 0
|
|
#define COL_BLUE 1
|
|
#define COL_GREEN 2
|
|
#define COL_CYAN 3
|
|
#define COL_RED 4
|
|
#define COL_MAGENTA 5
|
|
#define COL_BROWN 6
|
|
#define COL_LGRAY 7
|
|
#define COL_DGRAY 8
|
|
#define COL_LBLUE 9
|
|
#define COL_LGREEN 10
|
|
#define COL_LCYAN 11
|
|
#define COL_LRED 12
|
|
#define COL_LMAGENTA 13
|
|
#define COL_LYELLOW 14
|
|
#define COL_WHITE 15
|
|
|
|
/** @brief Revert the last foreground color change introduced by pushfg() */
|
|
void popfg();
|
|
|
|
/** @brief Revert the last background color change introduced by pushfg() */
|
|
void popbg();
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|