os-k/src/kaleid/kernel/io/terminal.h

70 lines
2.2 KiB
C

//----------------------------------------------------------------------------//
// GNU GPL OS/K //
// //
// Authors: spectral` //
// NeoX //
// //
// Desc: Early terminal functions //
//----------------------------------------------------------------------------//
#ifndef _KALKERN_IO_KTERM_H
#define _KALKERN_IO_KTERM_H
#include <kalkern/ke/lock.h>
// all available colors
enum terminal_colors {
KTERM_COLOR_BLACK, KTERM_COLOR_BLUE,
KTERM_COLOR_GREEN, KTERM_COLOR_CYAN,
KTERM_COLOR_RED, KTERM_COLOR_MAGENTA,
KTERM_COLOR_BROWN, KTERM_COLOR_LGREY,
KTERM_COLOR_DARK_GREY, KTERM_COLOR_LBLUE,
KTERM_COLOR_LGREEN, KTERM_COLOR_LCYAN,
KTERM_COLOR_LRED, KTERM_COLOR_LMAGENTA,
KTERM_COLOR_LBROWN, KTERM_COLOR_WHITE
};
typedef struct {
lock_t kt_lock;
ushort *kt_buffer;
uchar kt_color;
size_t kt_width;
size_t kt_height;
off_t kt_curr_x;
off_t kt_curr_y;
uint kt_init;
// XXX flags
} terminal_t;
// current "standard" terminal
extern terminal_t *stdout;
// current debugging terminal
extern terminal_t *stddbg;
void InitTerms(void);
status_t ClearTerm(terminal_t *);
status_t PutOnTerm(terminal_t *, char);
status_t PrintOnTerm(terminal_t *, const char *);
status_t ChTermColor(terminal_t *, uchar);
#if defined(_UNLOCKED_IO)
void ClearTermUnlocked(terminal_t *);
void PutOnTermUnlocked(terminal_t *, char);
void PrintOnTermUnlocked(terminal_t *, const char *);
#define ChTermColorUnlocked(kt, col) ((kt)->kt_color = (col))
#endif
#ifndef _NO_DEBUG
# define DebugLog(...) PrintOnTerm(stddbg, __VA_ARGS__)
#else
# define DebugLog(...)
#endif
#define LockTerm(kt) AquireLock(&(kt)->kt_lock)
#define UnlockTerm(kt) ReleaseLock(&(kt)->kt_lock)
#define TryLockTerm(kt) AttemptLock(&(kt)->kt_lock)
#endif