Temel bilgiler

Hayat renkler olmadan çok donuk gözükürdü. Curses kütüphanesi renkler üzerinde işlem yapmak için hoş bir mekanizmaya sahiptir. Basit bir program ile işlerin ayrıntılarına inelim.

Örnek 5.14. Basit Bir Renk Örneği

#include <ncurses.h>

void print_in_middle(WINDOW *win, int starty, int startx,
                     int width, char *string);
int main(int argc, char *argv[])
{ initscr();                      /* curses kipi ilklendirmesi */
  if(has_colors() == FALSE)
  { endwin();
    printf("Uçbiriminiz renkleri desteklemiyor\n");
    exit(1);
  }
  start_color();                  /* Renk başlat */
  init_pair(1, COLOR_RED, COLOR_BLACK);

  attron(COLOR_PAIR(1));
  print_in_middle(stdscr, LINES / 2, 0, 0, "Keman !!! Renkli ...");
  attroff(COLOR_PAIR(1));
  getch();
  endwin();
}
void print_in_middle(WINDOW *win, int starty, int startx,
                     int width, char *string)
{ int length, x, y;
  float temp;

  if(win == NULL)
    win = stdscr;
  getyx(win, y, x);
  if(startx != 0)
    x = startx;
  if(starty != 0)
    y = starty;
  if(width == 0)
    width = 80;

  length = strlen(string);
  temp = (width - length)/ 2;
  x = startx + (int)temp;
  mvwprintw(win, y, x, "%s", string);
  refresh();
}

Görüdüğünüz üzere renkleri kullanabilmeniz için öncelikle start_color() işlevini çağırmalısınız. Bundan sonra değişik işlevler kullanarak uçbiriminizin renk yeteneklerini kullanabilirsiniz. Bir uçbirimin renk özniteliklerinin olup olmadığını anlamak için has_colors() işlevini kullanabilirsiniz. Eğer FALSE dönerse, uçbirimin renk desteği yoktur.

start_color() işlevi çağrıldığı anda Curses uçbirim tarafından desteklenen tüm renkleri ilklendirir. Bu renklere COLOR_BLACK v.b. gibi tanımlanmış sabitlerle erişilebilir. Aslında renkleri tam olarak kullanabilmek için çiftleri tanımlamalısınız. Renkler daima çiftler halinde kullanılır. Bunun anlamı init_pair() işlevini kullanarak artalan ve karakter rengi için bir renk çifti belirtmeniz demektir. Bundan sonra bu renk çifti COLOR_PAIR() ile normal bir öznitelik olarak kullanılabilir. İlk başta karmaşık gelebilir. Fakat bu zeki yaklaşım renk çiftleri üzerinde rahatça işlem yapabilmemizi sağlar. Kullanımına hayran olmak için, kabuk betiklerinden etkileşimli iletiler çıkaran "dialog" uygulamasının kaynak koduna bakmalısınız. Geliştiriciler ihtiyaç olabilecek her renk için artalan ve karakter rengi türevlerini tanımlamışlar ve başlangıçta ilklendirmişlerdir. Bu da halihazırda sabit olarak tanımlanmış çiftlere erişip görünüm özelliklerini ayarlamada kolaylık sağlamaktadır.

Aşağıdaki renkler curses.h başlık dosyasında tanımlanmıştır. Bunları pekçok renk işlevi için parametre olarak kullanabilirsiniz.

      COLOR_BLACK   0
      COLOR_RED     1
      COLOR_GREEN   2
      COLOR_YELLOW  3
      COLOR_BLUE    4
      COLOR_MAGENTA 5
      COLOR_CYAN    6
      COLOR_WHITE   7