PIP 5.6.1
Platform-Independent Primitives
Простые начала

Многие начинающие программисты решают общие задачи взаимодействия с операционной системой: вывод в консоль, определение нажатия клавиш, работа с последовательными портами, сетью или файлами, и многое другое. Эти задачи решены в библиотеке, и код, основанный на PIP будет компилироваться и работать одинаково на многих системах: Windows, любой Linux, Red Hat, FreeBSD, MacOS X и QNX. Типовое приложение на PIP выглядит примерно так:

#include <pip.h>
// declare key press handler
void key_event(char key, void * );
PIConsole console(false, key_event); // don`t start now, key handler is "key_event"
// some vars
int i = 2, j = 3;
// implicit key press handler
void key_event(char key, void * ) {
switch (key) {
case '-':
i--;
break;
case '+':
i++;
break;
case '(':
j--;
break;
case ')':
j++;
break;
};
};
class MainClass: public PITimer {
PIOBJECT(MainClass)
public:
MainClass() {}
protected:
void tick(int delimiter) {
piCout << "timer tick";
// timer tick
}
};
MainClass main_class;
int main(int argc, char * argv[]) {
// enabling auto-detection of exit button press, by default 'Q' (shift+q)
console.enableExitCapture();
// if we want to parse command-line arguments
PICLI cli(argc, argv);
cli.addArgument("console"); // "-c" or "--console"
cli.addArgument("debug"); // "-d" or "--debug"
// enabling or disabling global debug flag
piDebug = cli.hasArgument("debug");
// configure console
console.addTab("first tab", '1');
console.addString("PIP console", 1, PIConsole::Bold);
console.addVariable("int var (i)", &i, 1);
console.addVariable("int green var (j)", &j, 1, PIConsole::Green);
console.addString("'-' - i--", 2);
console.addString("'+' - i++", 2);
console.addString("'(' - j--", 2);
console.addString("')' - j++", 2);
console.addTab("second tab", '2');
console.addString("col 1", 1);
console.addString("col 2", 2);
console.addString("col 3", 3);
console.setTab("first tab");
// start output to console if "console" argument exists
if (cli.hasArgument("console"))
console.start();
// start main class, e.g. 40 Hz
main_class.start(25.);
// wait for 'Q' press, independently if console is started or not
console.waitForFinish();
return 0;
};
Класс парсера аргументов командной строки
Definition: picli.h:40
#define PIOBJECT(name)
Поместите этот макрос внутрь объявления прямого наследника PIObject, чтобы включить регистрацию событ...
Definition: piobject_macros.h:46
Периодический таймер, который выдает тики из внутреннего рабочего потока.
Definition: pitimer.h:60
virtual void tick(int delimiter)
Виртуальный метод тика. Основной цикл передает делитель 1, дополнительные делители передают свое знач...
Definition: pitimer.h:241
@ Green
Definition: piscreentypes.h:48
bool piDebug
Глобальная переменная, включающая вывод в piCout, при старте true.
Definition: piincludes.cpp:37
#define piCout
Definition: picout.h:36
Зонтичный include для публичного API PIP.

Этот код демонстрирует простую конфигурируемую программу, которая может быть запущена с консолью или без неё, с отладочным выводом или без. MainClass — центральный класс, который также может быть унаследован от PIThread с переопределением run().
У многих классов PIP есть события и обработчики, которые можно связывать между собой. Подробности — на странице PIObject (События и Обработчики событий).
Для настройки приложения из файла используйте PIConfig (см. Конфигурация из файла).
Дополнительные темы — на странице Дополнительные темы.