ncurses_2.c

/*
 * plik ma na celu prezentację ciekawych zagadnień z programowania w języku C / C++
 * prezentuje metody związane z sterowaniem wyświetlaniem na terminalu tekstowym
 * plik ten wykorzystuje meodę opartą w całości na bibliotece terminfo
 * (z tej biblioteki korzysta też ncurses, czyli jest to taka bardziej niskopoziomowa metoda)
 *
 */

#include <termios.h>
#include <term.h>

#include <stdio.h>

#include <fcntl.h>
#include <unistd.h>
#include <string.h> /* for memset() */

/* Wymagane -lncurses przy linkowaniu */

struct termios old_termios, new_termios;
static  int max_x, max_y;
static  char *tig_cup;

/* inicjalizacja terminala */
void inicjalizacja_terminalu() {
/* oczywiscie wiekszosc tych funkcji moze nie zakonczyc sie powodzeniem co nalezaloby sprawdzac ... */
  /* otwarcie terminala */
  int t;
  /* otwieramy plik-urządzenie terminala i zastępujemy nim standardowe wyjście */
  t=open("/dev/tty",O_RDWR,0);  dup2(t,1);  close(t);
  
  setupterm(NULL,1,&t);

  /* zapis starych ustawien terminala */
  tcgetattr(1,&old_termios);

  /* wyczyszczenie ustawien terminala - nie bedzie widac wpisywanych znakow ... */
  memset(&new_termios,0,sizeof(new_termios));
  tcsetattr(1,TCSANOW,&new_termios);

  /* zczytanie parametrow terminala */
  max_x=tigetnum("cols");
  max_y=tigetnum("lines");

  tig_cup=tigetstr("cup"); /* pozycja kursora (patrz man 5 terminfo),
    inne to m.in. "bold" - przełącznik w tryb gruby, "setf" - ustawianie koloru tła ... */
}

/* wyczyszczenie terminala */
void wyczysc_terminal(void) {
  putp(tparm(tig_cup,0,0)); /* idz na sam poczatek */
  putp(tparm(tigetstr("ed")));
}

/* wypisanie w zadanym punkcie ekranu,
   warto zwrócić uwagę że jest to sposób tworzenia funkcji opartych na instrukcjach przeprocesora
   - przed kompilacją kod funkcji zostanie wstawiony w mijsca jej wywołań */
#define put_s(y,x,s) putp(tparm(tig_cup,y,x)); printf(s);

/* funkcja glowna */
int main(void) {
  inicjalizacja_terminalu();

  wyczysc_terminal();

  put_s(2,8,"@")

  /* oczekiwanie na nacisniecie q */
  while (getchar()!='q');

  /* przywrocenie ustawien terminala */
  tcsetattr(1,TCSAFLUSH,&old_termios);

  return 0;
}

XHTML generated by highlight (http://www.andre-simon.de/) from ncurses_2.c



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/c_cpp/ncurses_2.c) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:41 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).