🇬🇧

Quelltext /~heha/mb-iwp/Kamera/esp32cam/cam-221216.zip/input.h

#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-80