Sto costruendo un editor di testo incorporato costituito da una tastiera, un display LCD e un microcontrollore PIC32, da programmare in C. L'applicazione dovrebbe apparire, ad esempio, come l'editor di nano
di GNU. Il display ha una dimensione di 40x16 caratteri.
Attualmente mi sto chiedendo quale sarebbe una buona astrazione dal display. Potremmo concettualizzare un terminale semplice come segue:
typedef struct {
char* content; // Current and past content
void (*update)(Terminal); // Update function
} Terminal;
void append(Terminal, char*); // Append to content & execute update function
void discard(Terminal, int); // Discard last n characters & execute update f.
Aggiungendo un puntatore a funzione al tipo Terminal
, abbiamo fondamentalmente un modello e una vista. Il Terminal
può essere controllato dalle funzioni append()
e discard()
. Con questo Terminal
potremmo creare un terminale semplice con stdin
e stdout
.
Tuttavia, ciò non è sufficiente per un editor nano
-like, in cui il testo può essere inserito e rimosso ovunque sullo schermo, non solo alla fine dei dati correnti.
Ora ho creato il seguente tipo:
typedef struct {
unsigned short rows, columns, // Screen size
first_visible_row, first_visible_column, // Left-top coordinates
cursor_x, cursor_y; // Cursor coordinates
char* content; // Current and off-screen content
void (*update)(Screen); // Update function
} Screen;
Questo Screen
tiene anche i contenuti fuori schermo, e la sua sezione visibile è determinata dalle sue coordinate in alto a sinistra. Ciò facilita lo scorrimento. Ma le funzioni per scrivere su questo schermo in una certa posizione sarebbero complicate, perché non esiste una relazione diretta tra una posizione in content
e le sue coordinate nella visualizzazione effettiva.
Più facile lavorare con il tipo terrebbe una matrice di rows
char array, per linee diverse sullo schermo. Quindi, content
sarebbe un array di array di caratteri, ovvero char** content
.
In sostanza, sto chiedendo se ci sono problemi con il mio approccio suggerito e se esiste un approccio più semplice .
Per riassumere, ecco alcuni dei requisiti per lo schermo:
- Dovrebbe essere facile scorrere
- Dovrebbe essere possibile aggiungere e rimuovere del testo in qualsiasi punto dello schermo