Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[C source] Editor di linea.

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

7
voti

[1] [C source] Editor di linea.

Messaggioda Foto UtenteTardoFreak » 2 nov 2013, 3:20

Per i miei lavori faccio spesso uso della seriale per implementare interpreti di comandi. Questi mi servono per il monitoraggio di variabili e per potere testare i sistemi.
Dopo aver scritto innumerevoli volte un editor di linea ne ho scritto uno che si adatta praticamente a tutti i compilatori che uso.
Spero quindi di fare cosa gradita nel postare il sorgente di questo semplice editor che oramai fa parte della mia libreria personale di uso generale.
Codice: Seleziona tutto
//------------------------------------------------------------------------------
// Editor di linea.
//  Funzione per l' editing di linea mediante STDIO.
//  La stringa d' ingresso viene visualizzata sul terminale e si può editare
//  utilizzando solo il tasto BS o DEL che hanno la stessa funzione.
//  L' editing finisce con la pressione del CR oppure premendo ESC.
//  La funzione ritorna il codice del tasto con cui si è usciti dall' editing
// 
//  Parametri:
//    s:    stringa da editare
//    lMax: lunghezza massima della stringa
//
//  Uscita: carattere di uscita.
//
//  Dipendenze:
//    char getchar(void) per la lettura del carattere da terminale
//    void putchar(char c) per la scrittura di un carattere su terminale
//
//  Note: I caratteri sono scritti con il codice ASCII per fare in modo che questa
//        funzione non   dipenda da defines.
//        Per l' ingresso del carattere è stata utilizzata la funzione getchar e per
//        la stampa del carattere la funzione putchat. E' opportuno definire queste
//        funzioni se non supportate dal compilatore.

static char lineEdit(char *s, unsigned short lMax)
{
  unsigned short posStr; // Lunghezza inziale della stringa
  char ch, fine = 0;
  char *p;
     
  // Calcola la lunghezza attuale della stringa e la posizione del cursore
  posStr = strlen(s);
 
  // Scrive la stringa da editare
  p = s; while(*p) putchar(*p++);
 
  // Ciclo di editing
  do
  {
    if (ch = getchar())
    {
      switch(ch)
      {
        // Caratteri di editing
        case 0x08:  // Carattere BS
        case 0x7f:  // Carattere DEL
          if (posStr)
          {
            *(s + posStr--) = 0;
            putchar(0x08);
            putchar(' ');
            putchar(0x08);
          }
          break;
       
        // Caratteri che determinano la fine dell' editing
        case 0x0D:  // Carattere CR
        case 0x1B:  // Carattere ESC
          // inserisce il terminatore
          fine = !(*(s + posStr) = 0);
          break;
         
        // Inserimento dei caratteri 
        default:
          if ((posStr < (lMax-1)) && (ch >= ' ' ) && (ch <= 126))
            putchar(*(s + posStr++) = ch);
          break;
      }
    }
  } while(!fine);
 
  // toglie gli spazi al fondo
  for(posStr = lMax - 1; posStr >= 0; posStr--)
    if ((*(s+posStr) == ' ') || (!*(s+posStr))) *(s+posStr) = 0; else break;
   
  // Ritorna il carattere di uscita
  return ch;
}


Buona sperimentazione. O_/
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[2] Re: [C source] Editor di linea.

Messaggioda Foto UtentePaolino » 2 nov 2013, 11:52

Ottimo :ok:

Ciao

Paolo
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: [C source] Editor di linea.

Messaggioda Foto Utentec1b8 » 2 nov 2013, 13:50

Grazie, fanno sempre comodo funzioni generiche!
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti