Mi è saltato tra le mani un sorgente C di moooooolti anni fa dentro al quale ho ritrovato vecchie procedure che non ho mai dimenticato e che costituivano, al quel tempo (1988), i miei trucchi del mestiere…

Ormai sono inutili sequenze di stringhe di caratteri…. ma oggi mi sentivo particolarmente nostalgico e quindi ho voluto condividerne una con voi.

In c per mandare un output allo schermo si usava la cprintf che scriveva alla posizione del cursore. Lenta, anzi lentissima. Inoltre dovevi prima mandare un comando che posizionasse il cursore nella posizione in cui volevi comparisse la tua stringa di testo, indicando X e Y (80×25 posizioni nello schermo in modalità testo, valido sia per CGA che EGA e VGA).

Il trucco per rendere tutto veloce, velocissimo, anzi… istantaneo era quello di saltare a piè pari la questione e posizionare direttamente il proprio testo all’indirizzo di memoria appropriato. L’indirizzo base per la modalità testo era il “0xB800”. A coppie di bytes si andava a definire il carattere (nel primo) e il suo attributo di colore (nel secondo). Ed ecco quindi due procedurine che facevano parte delle “luca’s” per scrivere direttamente nella memoria della scheda video con la velocità di un fulmine… e per impostare l’opportuno colore alla zona dello schermo.

void scrividiretto (char x,char y, char *s, char c)
   {
      char *punta;
      unsigned char co,co1;
      if (x==0)
         x = 40-strlen(s)/2;
         punta = MK_FP (0xB800,160*(y-1)+2*(x-1));
         co1 = strlen (s);
         for (co=0;co<co1*2;co+=2)
            {
               *(punta+co) = *(s++);
               if (c != 0)
                  *(punta+co+1) = c;
            }
   }

void attributizonavideo (char x1,char y1,char x2,char y2,char att,char sfondo)
   {
      char *punta = MK_FP (0xB800,160*(y1-1)+2*(x1-1)+sfondo);
      int co1;
      unsigned char co2;

      for (co1=0;co1<=(y2-y1)*160;co1+=160)
         for (co2=0;co2<=(x2-x1)*2;co2+=2)
            *(punta+co1+co2) = att;
   }

Di luca de gregorio

Luca de Gregorio, classe 1966, è cresciuto (ma senza esagerare) in quel di Sesto San Giovanni, alle porte di Milano. Ha fatto le elementari alle XXV Aprile, le medie dai salesiani di Sesto, e il liceo scientifico al Parco Nord (”G.Casiraghi” di Cinisello) dove si è diplomato con un pessimo 42/60 nel 1985. Nello stesso anno si è iscritto alla facoltà di Scienze dell’Informazione dell’Università degli studi di Milano, corso di laurea del quale ha dato solo 15 esami su 18 (studente-lavoratore già dal 1987). E' il fondatore di diverse BBS (Castello dei McGregor, Blu Hotel, Inferno, Galactica, Pandemonium), autore di software (DL Viewer), musicista compositore (non prof.)... attualmente impiegato in RCS Libri spa, dove si occupa di multimedia.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *