70 lines
2.2 KiB
C
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
|
|
|