#pragma once
extern struct Termcap{
byte width,height; // (80, 24)
union{
byte flags; // alle Flags
struct{byte // Einzelbits
fWidthOK:1, // width ist gültig (zz. unbenutzt)
fHeightOK:1, // height ist gültig (zz. unbenutzt)
fAutoNL:1, // automatisch neue Zeile bei Überlauf (zz. unbenutzt)
fColor:1, // Der Arduino „Serieller Monitor“ ist allenfalls ein „Dumb Terminal“
fBgWhite:1; // Hintergrund weiß/hell (Standard: schwarz/dunkel)
};
};
void init();
inline void setattr() const {_setattr(0);}
inline void setattr(unsigned p1) const {_setattr(1,p1);}
inline void setattr(unsigned p1, unsigned p2) const {_setattr(2,p1,p2);}
inline void setattr(unsigned p1, unsigned p2, unsigned p3) const {_setattr(3,p1,p2,p3);}
inline void setattr(unsigned p1, unsigned p2, unsigned p3, unsigned p4) const {_setattr(4,p1,p2,p3,p4);}
inline void setattr_bold() const{setattr(1);}
private:
// Da C/C++ nicht die Anzahl der übergebenen Argumente bei ... mitbekommt, muss die Anzahl (der unsigned-Argumente) vorangestellt werden
// Sicherheitshalber direkten Aufruf verbieten und mit überladenem setattr abgezählte unsigned-Argumente erzwingen
void _setattr(unsigned n,...) const; // "\e[a;b;cm"
}termcap;
enum KeyCbRet{
not_handled,
string_replaced,
clear_call_again,
};
typedef KeyCbRet(*KeyCb)(int,void*); // kein Lambda
int input(const char*,char*,int,KeyCb=0,void* =0); // mit Prompt
int input(char*,int,KeyCb=0,void* =0); // ohne Prompt, mit Callback-Funktion für vertikale Kursortasten
Vorgefundene Kodierung: UTF-8 | 0
|