/////////////////////////////////////////////////////////// // TConsUtilServiceClass // // Базовый класс для "интерфейса" консольной утилиты // // Copyright (C) 2007 Sagrer // // Распространяется на условиях // // LGPL v2.1 // // // // версия модуля 0.2 // // // // sagrer@yandex.ru // /////////////////////////////////////////////////////////// //К работе над данным файлом приложили руки, ноги.... короче аффтары: // 1) Sagrer (sagrer@yandex.ru) //////////////////////////////////////////////////////////////////////// unit ConsUtilServiceClass; {$mode objfpc}{$H+} interface uses Classes, SysUtils, forms, TranslManager; type TConsUtilServiceClass = class //Базовый класс для "интерфейса" консольной утилиты private //Закрытые переменные. protected //Защищенные переменные. ProcessFurther : boolean; //Продолжать ли выполнение команд. //Защищенные методы. public //Переменные DoShowHelp : boolean; //Показывать ли справку. DoShowVersion : boolean; //Выводить ли инфу о версии. DoSilent : boolean; //Работать ли в тихом режиме. DoPause : boolean; //Ждать ли нажатия любой клавиши после завершения всех действий. //Конструкторы-деструкторы... constructor Create; virtual; destructor Destroy; override; //Другие методы... procedure ProcessParameters; virtual; //Проверить параметры командной строки. procedure DoWork; virtual; //Выполнить боевую задачу %). procedure ShowHelp; virtual; //Вывести справку. procedure ShowVersion; virtual; //Вывести версию. procedure ShowOptions; virtual; //Перегружается в наследнике, если нужно вывести дополнительные опции в хелпе procedure ShowDescription; virtual; //Перегружается в наследнике если нужно вывести дополнительное описание утилиты. end; implementation ///////////////////////////////////////////// // TConsUtilServiceClass // ///////////////////////////////////////////// //-----------------------------------------// // Конструкторы-деструкторы... // //-----------------------------------------// constructor TConsUtilServiceClass.Create; begin //Проставить дефолтные значения... //Закрытые //Защищенные ProcessFurther := true; //Открытые DoShowHelp := false; DoShowVersion := false; DoSilent := false; DoPause := false; //Создать вложенные объекты классов... end; destructor TConsUtilServiceClass.Destroy; begin //Выкидываем мусор //Выполнить унаследованный деструктор inherited; end; //------------------------------------------// // Другие методы... // //------------------------------------------// procedure TConsUtilServiceClass.ProcessParameters; //Проверить параметры командной строки. begin //Проверим опции командной строки... if Application.HasOption('h') or Application.HasOption('help') or Application.HasOption('?') then begin //Вывести справку. DoShowHelp := true; end; if Application.HasOption('v') or Application.HasOption('version') then begin //Выводить инфу о номере версии. DoShowVersion := true; end; if Application.HasOption('s') or Application.HasOption('silent') then begin //Работать в тихом режиме. DoSilent := true; end; if Application.HasOption('p') or Application.HasOption('pause') then begin //Паузить ли перед завершением работы DoPause := true; end; end; procedure TConsUtilServiceClass.DoWork; //Выполнить боевую задачу %). begin //Выполнить нужно одну из задач - по её завершении ProcessFurther := false //и дальше нифига не выполняется. //Справка. if (DoShowHelp = true) and (ProcessFurther = true) then begin //Блокировка других веток ProcessFurther := false; //Выводим инфу... ShowHelp; end; //Номер версии. if (DoShowVersion = true) and (ProcessFurther = true) then begin //Блокировка других веток ProcessFurther := false; //Выводим инфу... ShowVersion; end; //Если ничего до сих пор не выполнилось - то выполняем боевую задачу.... //Тут экзампл. По идее вы должны это через override сделать в своем классе. //if ProcessFurther = true then begin ////Блокировка других веток //ProcessFurther := false; ////Работаем.... //end; end; procedure TConsUtilServiceClass.ShowHelp; //Вывести справку. begin //Отделяющая строка. Writeln(); //Выводим сначала версию... ShowVersion(); //Отделяющая строка. Writeln(); //Описание ShowDescription(); //Отделяющая строка. Writeln(); //Теперь выводим собсно справку... Writeln(_('Usage: ')+ExtractFileName(Application.ExeName)+_(' [options]')); Writeln(); // Показать доступные опции... ShowOptions; //Отделяющая строка. Writeln(); end; procedure TConsUtilServiceClass.ShowVersion; //Вывести версию. begin //Пусто. Оверрайдте. end; procedure TConsUtilServiceClass.ShowOptions; //Перегружается в наследнике, если нужно вывести дополнительные опции в хелпе begin Writeln(_('Options:')); Writeln(_(' -h, --help, -? : shows this help message.')); Writeln(_(' -v, --version : shows utility''s version number and copyright.')); Writeln(_(' -s, --silent : works in silent mode (without any questions).')); Writeln(_(' By default works in interactive mode and can ')); Writeln(_(' ask anything.')); Writeln(_(' -p, --pause : waits until User press Enter after finishing all work.')); end; procedure TConsUtilServiceClass.ShowDescription; //Перегружается в наследнике если нужно вывести дополнительное описание утилиты. begin //Пусто. Оверрайдте. end; end.