Form Kütüphanesi ile derleme

Form kütüphanesi işlevlerini kullanmak için form.h başlık dosyasını programınıza eklemeniz ve kütüphane ile ilintileyerek derlemek için -lform -lncurses seçeneklerini kullanmanız gerekmektedir.

#include <form.h>
.
.
.

derleme ve ilintileme: gcc program dosyası -lform -lncurses

Örnek 5.30. Formların Temelleri

#include <form.h>

int main()
{ FIELD *field[3];
  FORM  *my_form;
  int ch;

  /* Curses kipini ilklendir*/
  initscr();
  cbreak();
  noecho();
  keypad(stdscr, TRUE);

  /* Alanları ilklendir */
  field[0] = new_field(1, 10, 4, 18, 0, 0);
  field[1] = new_field(1, 10, 6, 18, 0, 0);
  field[2] = NULL;

  /* alan seçeneklerini ayarla*/
  set_field_back(field[0], A_UNDERLINE);  /* Seçenek için bir satır yazın  */
  field_opts_off(field[0], O_AUTOSKIP);   /* Eğer alan dolduyda            */
                                          /* alan içerisinde ilerleme      */
  set_field_back(field[1], A_UNDERLINE);
  field_opts_off(field[1], O_AUTOSKIP);

  /* Form2u oluştur ve ekrana yaz */
  my_form = new_form(field);
  post_form(my_form);
  refresh();

  mvprintw(4, 10, "Değer 1:");
  mvprintw(6, 10, "Değer 2:");
  refresh();

  /* Kullanıcı isteklerinde hareket edin */
  while((ch = getch()) != KEY_F(1))
  { switch(ch)
    { case KEY_DOWN:
        /* Sonraki alana gidin */
        form_driver(my_form, REQ_NEXT_FIELD);
        /* O anki önbelleğin sonuna gidin */
        /* Son karakterde döngüden çık */
        form_driver(my_form, REQ_END_LINE);
        break;
      case KEY_UP:
        /* Bir önceki alana git */
        form_driver(my_form, REQ_PREV_FIELD);
        form_driver(my_form, REQ_END_LINE);
        break;
      default:
        /* Eğer normal bir karakterse */
        /* Ekrana yazılır             */
        form_driver(my_form, ch);
        break;
    }
  }

  /* Formu ekrandan sil ve ayrılan bellek alanını geri ver */
  unpost_form(my_form);
  free_form(my_form);
  free_field(field[0]);
  free_field(field[1]);

  endwin();
  return 0;
}

Yukarıdaki örnek oldukça açık şekildedir. new_field() ile iki alan oluşturur. new_field() parametre olarak yükseklik, genişlik, y başlangıç koordinatı, x başlangıç koordinatı, ekranda gözükmeyen satır sayısı ve ilave çalışma önbelleği sayısını almaktadır. Beşinci parametre, ekranda gözükmeyen satır sayısı alanın ne kadarının gözükeceğini belirtir. Eğer sıfırsa, tüm alan gösterilir, aksi halde kullanıcı alanın görüntülenmeyen alanlarına taştığında form kaydırılabilir olacaktır. Form kütüphanesi kullanıcının girdiği verilerin saklanması için her alan için bir önbellek tahsis eder. new_field()'in son parametresini kullanarak ilave ek bellekler tahsis etmesini sağlayabiliriz. İstediğiniz herhangi bir amaç için kullanılabilir.

Alanları oluşturduktan sonra, set_field_back() ile artalan özellikleri bir alt çizgi olarak ayarlanır. AUTOSKIP seçeneği field_opts_off() kullanılarak kapatılır. Eğer bu özellik açıksa, odak eğer üzerinde işlem yapılan alan tamamen dolduysa bir sonraki alana kayacaktır.

Alanlar forma ilintilendikten sonra ekrana yazılır. İşte şu while döngüsü içerisinde de kullanıcı girdileri form_driver'daki uygun karşılıkları ile işlenir. form_driver()'a yapılacak olan isteklerin ayrıntıları daha sonra açıklanacaktır.