Този файл е част от сбирката b-collect. Външните препратки в него „работят“ само когато той е сред другите файлове в сбирката

УВОД В DJGPP

Съдържание

Какво е djgpp?

djgpp е комплекс от програми, представляващ адаптация за MS DOS на част от проекта GNU. Главна съставка на djgpp е компилаторът gcc за C, C++, Objective-C и други езици, чрез който са произведени и всички останали програми в състава на djgpp.

Сайтът http://www.delorie.com/djgpp е основната точка за разпространение на djgpp, където своевременно се появяват нови версии на всяка от програмите.

Дискусионната група comp.os.msdos.djgpp е място за разискване на проблеми с djgpp. Както за повечето такива групи, http://groups.google.com е удобен начин за достъп чрез уеб – за дадената група идете на http://groups.google.com/group/comp.os.msdos.djgpp.

По принцип, за да си направите собствена инсталация, трябва или сами да изберете файловете с нужните пакети от посочения сайт, или да се доверите за това на една автоматична процедура (Zip Picker), която се предлага там, но която не е особено прецизна в избора.

Моят вариант беше „ръчно“ избиране, едно по едно. Смятам, че си струваше, макар да отнема доста време и внимание (и усилието отчасти се повтаря, когато обновявам инсталацията си). Разполагайки с настоящата сбирка, вие пък ще си спестите повтарянето на тези уморителни действия.

„Зеленият файл“ в тази сбирка съдържа подробна информация за включеното в раздела на сбирката, отнасящ се до djgpp.

Всички програми от djgpp изискват за работата си 32-разреден DOS в защитен режим (DPMI). Най-често това е DOSът на Windows 98/NT/2000/XP, но може да бъде и самостоятелен. Програмите, които произвежда компилаторът, са също с 32-разреден машинен код. Това позволява, в частност, да се програмира без съобразяване с досадната, характерна за 16-разредните компилатори, нелепа граница от 64 KB за всяка монолитна даннова структура.

Компилаторът gcc на djgpp е копие на компилатора gcc, използван в GNU/Linux и други о.с., който на свой ред е усъвършенстван вариант на традиционния компилатор за C (по-късно и C++) в по-старите операционни системи от тип Unix.

Това дава възможност за еднообразно програмиране в DOS и о.с. à la Unix, доколкото двете операционни системи имат общо помежду си. Във всеки случай, програми, написани за DOS и неизползващи специфични за DOS възможности като например пряк вход/изход от/към конзолата, се компилират и изпълняват по същия начин и в повечето варианти на Unix.

djgpp се разпространява свободно (безплатно), включително и изходните текстове на всички влизащи в продукта програми и цялата съпровождаща ги документация. По-точно, разпространението се извършва по правилата на т. нар. GNU лицензия, или GPL (копие от нея ще намерите на диска).

Програмите, произведени с използване на djgpp, могат да се разпространяват по всякакъв начин, включително да се продават, без ограничения, свързани с използването на компилатора.

Широко признато е, че gcc е най-добре отговарящият на стандартите на C и C++ компилатор за тези два езика и се отличава с изключително високо качество. Колкото до Objective-C, не само че gcc е най-добрият компилатор, но той е и сред много малкото на брой компилатори за този език изобщо. Нека отбележа, че Objective-C (наричан също ObjC) е още малко популярен у нас, но е основен език за програмиране за фирмата Apple и по-специално – за нейната най-популярна понастоящем развойна среда Cocoa за операционната система Mac OS X.

Наред с другите му приложения, именно компилаторът djgpp gcc, наред с оригинала gcc за GNU/Linux, се използва при провеждане на повечето ученически и доста студентски състезания по програмиране по света – национални и международни.

Интегрираната среда rhide не е част от djgpp, но се разпространява заедно с него. Тя е разработена по подобие на тези на Borland за компилаторите за Pascal и C/C++ за DOS на същата фирма. Заради леснотата да се дебъгва чрез нея, rhide се използва масово заедно с компилатора (например от ученици на състезанията по програмиране у нас и другаде), макар че има и сериозни недостатъци, например доста примитивен текстов редактор и пословично недобра устойчивост.

Измежду текущо предлаганите версии на rhide е най-добре да се използва (най-добра работна устойчивост има) 1.4.9. Всъщност още по-добър вариант е неофициалната версия 1.5.0.1, която може да се намери на уебстраницата http://rhide.sf.net/snapshots (по-точно тук). Същата версия е инсталирана и в настоящата сбирка (с една разлика: тук е добавен файлът с документация във формат HTML на rhide, версия 1.5, който кой знае защо липсва в 1.5.0.1).

Настройване за работа

За да имате работоспособен djgpp, на първо място е нужно да разполагате със съответните програми, поставени на избрано от вас място. Обичайно е цялата система да се разполага в директория с име djgpp, както в настоящата сбирка. Самата тази директория може да се намира на произволен диск и не непременно в главната му директория. По-надолу ще предполагаме, че избраното място е c:\djgpp.

Следващото, което е нужно да се направи, е да се даде стойност на системната променлива (на DOS или Windows) DJGPP. Трябва също да се осигури намирането в DOS на програмите от djgpp, което става, като се зададе или допълни съдържанието на променливата PATH. Тези две действия могат да се извършат (предполагайки, че djgpp е поставен в c:\djgpp), като в DOS напишете:

set DJGPP=c:\djgpp\djgpp.env
set PATH=c:\djgpp;c:\djgpp\bin;%PATH%

или изпълните файла runme.bat, намиращ се в директорията djgpp на диска с тази сбирка. (Преди това, разбира се, може да трябва да промените съдържанието на този файл, ако вашият djgpp се намира другаде.)

Ако ползвате DOS под Windows 95/98/ME, напишете също следното:

set LFN=y

(което го има и в runme.bat).

Описаният начин за настройване върши работа само в рамките на текущо стартирания DOS; посочените действия трябва да се повтарят след всяко зареждане на системата и всеки път след отваряне на конзолен (DOS) прозорец. За трайно настройване трябва да постъпите по следния начин, в зависимост от вида Windows, който ползвате:

След като сте извършили настройването, всички програми в djgpp стават достъпни откъдето и да се намирате (текуща директория в DOS).

Компилиране и свързване на програми на C, C++ и Objective-C

За създаване на програми на C/C++/Objective-C е най-добре да образувате работна директория, където да попадат всичките ви програмни файлове. В никакъв случай не ползвайте за работна директория тази, в която се намира djgpp или нейна поддиректория!

Програмите на езика C трябва да се записват във файлове с разширение на името .c, тези на C++ – с разширение .cpp или .cxx, а програмите на Objective-C – с разширение .m.

За да компилирате и свържете програма на C, напр. prog.c, може да напишете:

gcc -o prog.exe prog.c

За програма на C++, напр. prog.cpp, аналогично:

gxx -o prog.exe prog.cpp

И накрая, за програма на Objective-C, напр. prog.m, може да напишете:

gcc -o prog.exe prog.m -lobjc

И в трите случая компилаторът ще произведе изпълним файл с име prog.exe.

По-удобно е да компилирате и свързвате, като ползвате предварително подготвените и поставени в директорията на djgpp командни файлове. За целта вместо горното изпълнете една от следните три команди, според езика, който ще компилирате:

cl prog    (за програми на C)
clp prog   (за програми на C++)
clo prog   (за програми на Objective-C)

Освен че съкращават писането, горните два файла включват и режима на подробно съобщаване на грешки (-Wall) на компилатора.

Да отбележим, че в един ход могат да се компилират и свързват повече от един файлове. По разширението на името компилаторът разпознава с кой файл как да постъпи; например, ако файлът е обектен (вече компилиран, с разширение .o) или библиотечен (архив от обектни файлове, с разширение .a), той се използва само при свързането на програмата. Може също да се изпълняват само отделни фази от процеса компилиране-свързване: предпроцесорна обработка, компилиране, асемблерна макрообработка, асемблиране и свързване. За всички тези възможности и за много други подробно може да се информирате от документацията.

Алтернативен начин да използвате компилатора е косвеният – посредством интегрираната среда за разработване rhide. И в този случай обаче, за да правите някои по-сложни от превръщане на единствен текстов файл в изпълнима програма неща, ще трябва да познавате някои от ключовете за управление на компилатора.

Някои пакети в djgpp съдържат (наред с други части или самите те са) библиотеки от функции за програмиране в различни приложни области: числови и комбинаторни пресмятания, графика, уплътняване на файлове и др. Като правило, за да използвате дадена библиотека, трябва да направите следното: да поставите съответния файл с описания – с разширение на името .h – в C-файла с програмата си, за да може компилаторът да обработи правилно повикванията на библиотечните функции в нея; да свържете компилираната програма с библиотечния файл – този с разширение .a (вж. по-горе).

Документация

Много от програмите в djgpp (така както в GNU) дават кратки справки за начина на използване чрез задаване на ключ -? (стар стил) или --help (нов стил). Често малкият обем информация е достатъчен. Когато случаят не е такъв, потърсете подробна информация.

djgpp, подобно на проекта GNU, поддържа няколко форми на документация за включените в него програми. Една от тях – традиционна за Unix – са така наречените man pages (съкр. от manual pages, т.е. „страници от ръководството“). Почти всички програми имат документация в такава форма.

Четенето на man page става като се стартира програмата man, напр. за да четете документацията на gzip напишете man gzip. (Познайте как да прочетете man page за самата man.)

Скрито от потребителя програмата man върши няколко неща: намира съответния документационен файл, ако е нужно го разкомпресира с подходящата за целта програма, ако не е компилиран за четене – компилира го (чрез програмата groff) и накрая показва резултата на екрана чрез избрана програма. В ролята на последната по подразбиране е less, затова, ако искате да се научите да си служите добре с нея, прочетете нейната собствена документация. За целта използвайте man less или less --help. Ако искате да си направите справка за less, докато четете man page на друга програма, напишете h.

Less може да се стартира и самостоятелно за четене на какъв да е текст, напр. less love-letter.txt. Тя е подобна на текстов редактор без възможност за действително редактиране. Позволява търсене по регулярен шаблон, извличане (и филтриране през други програми) на части от текста и някои други полезни действия.

Едно от свойствата на less е, че показва man-страниците синтактично оцветени. Всъщност, less може да показва само обикновен текст, но в случая с man-страниците той е леко изменен: белязан. Това, от една страна, позволява на less да знае къде да „вижда цветно“, а от друга – същият текст, отпечатан на принтер без никакви изменения, ще се окаже с получер шрифт и подчертано на местата, които за less са цветни.

Друга форма на документиране е форматът info. Файловете в този формат, макар и, общо взето, също съдържащи само обикновен текст, могат да имат и наистина са снабдени с вътрешни и външни (между файлове) хипервръзки.

Четенето на такива файлове става с програмата info. Ако, да речем, искате да видите документацията на програмата xargs, на командния ред трябва да напишете info xargs. Програмата info търси в съответната директория файл с име xargs.info и ако намери такъв, показва го. Ако не – търси man page за същата програма и при намиране го показва. Следователно info изпълнява в известен смисъл по-обща роля от man, но трябва да се има предвид и че показването на man pages в info е различно.

Info може да бъде стартирана и без аргумент, като в този случай тя показва списък от теми, по които съществува документация.

Справочната програма info дава добре организиран достъп до значителна по обем информация по следните теми:

Потребителският интерфейс на програмата info е прост и сравнително удобен, но за мнозина непривичен. За да добиете поне минимално нужните знания за използване на тази програма, на командния ред стартирайте info info. С помощта на клавишите-стрелки закарайте курсора до реда, на който пише Getting Started, там натиснете Enter и четете. За начало знайте, че заглавие на подраздел за четене се разпознава по наличието на знака * в началото на реда (както при Getting Started), а от програмата се излиза с q.

Част от информацията, отнасяща се до компилатора и библиотечните функции, се предоставя и чрез интегрираната среда rhide, а за самата rhide, както и отделно за текстовия редактор на rhide има подробна документация във формат HTML.

Да отбележим, че файловете info обикновено се получават чрез автоматично преобразуване от един друг документен формат – texinfo, който е избран за основен при изготвянето на документи в рамките на проекта GNU. Този формат не е непосредствено удобен за четене, но от него, също автоматично, се получават и формати, предназначени за висококачествен печат, както и файлове HTML.

В настоящата сбирка за много от включените програми ще намерите и документация във формати HTML и dvi. И двата вида файлове са получени от източник texinfo и значи съдържат същото, което има в съответните им файлове info. Трябва да отбележа обаче, че по принцип намирането на тези файлове в съответните поддиректории се налага да правите вие (докато man и info се справят сами с намирането на своите файлове). Освен това, dvi има високо качество и може да бъде четен на екрана и превръщан в PostScript и в PDF за печат, но за да стане това, трябва да имате инсталиран TeX (а ако не знаете какво е TeX, значи го нямате).

За достигане на документацията в HTML може да ползвате „зеления файл“, за който беше споменато по-горе: в него за всяка програма, за която има налична документация HTML, има препратки към съответния файл. Колкото до възможността да ползвате dvi, PostScript и PDF, или се снабдете с инсталация на TeX (където има четец за dvi), или потърсете файлове в PDF и PostScript в съответните архиви за отделните програми на сайта на djgpp. (Да, оригиналните архиви с програми имат най-често и PostScript, и PDF, но в моята сбирка аз съм ги отстранил (защото имам TeX), а тук вие разполагате с моята сбирка.)

Директорна структура

За потребителя е добре да има представа какво съдържат поддиректориите на djgpp. Ето кратка справка за това.

manifest
За всеки инсталиран „пакет“ тук се съдържат файлове с разширения на имената .ver и .mft. Файловете от първия вид служат за идентификация на пакета (вкл. номер на версия и име на архивния файл), а тези от втория вид са списъци от файловете на съответния пакет заедно с местата им – поддиректории в DJGPP.
bin
Изпълними файлове (.exe и програми на bash и perl).
libexec
Помощни програми на компилатора gcc.
lib
Библиотечни файлове в компилиран вид.
include
Файлове с описания (за вмъкване в програми с #include).
share
Различни файлове, които програмите от djgpp използват. Също тук се намира и част от документацията на rhide.
man
Документация във вид на man pages (но има и изключения).
info
Документация във формат info.
gnudocs, doc и docs
Документация в допълнителни формати на повечето програми (за тази сбирка – HTML и dvi, както обясних по-горе). По-голямата част е в gnudocs и по принцип това е мястото, предвидено за целта.
faq
Отговори на т. нар. „често задавани въпроси“ за gcc и донякъде – изобщо за djgpp.
gnu и contrib
Файлове README и подобни на тях за повечето програми. Намират се предимно в gnu.
tmp
Работна директория на gcc за съхраняване на временно съществуващи файлове.

Промени в съдържанието на djgpp

На всеки потребител може да се наложи да прави промени в съдържанието на своя вариант на djgpp. Промените се правят най-вече на равнище „пакет“ и биват три основни вида: добавяне, премахване и заменяне на пакет, като последното всъщност се свежда до първите две: изтриване на една версия и поставяне на нейно място на друга. Разбира се, възможно е да се работи и с отделни файлове.

„Пакетите“ на djgpp са просто архивни файлове. За да се добави пакет, трябва съответният файл да се разархивира в основната директория на djgpp, с което всички файлове отиват по местата си в съответните поддиректории.

djgpp се разпространява чрез три вида архиви: източници (source) за програмите и документацията, т. нар. „двоични“ архиви, т.е. самите програми, и архиви с документация. За повечето потребители на дадена програма необходими са архивите от втория и третия вид за нея. Както ще забележите, ако поразгледате посочения по-горе сайт на DJ Delorie, тези архиви се отличават съответно по буквите b и d, а източниците – по буквата s.

И така, за да добавите пакет, намерете нужния архивен файл или файлове по името му, вида на архива и номера на предпочитаната версия и го разархивирайте. За това дали вече имате версия на същия пакет и коя именно може да се информирате от съдържанието на директорията manifest: потърсете съответен файл с разширение .ver.

Изтриване на пакет се налага, ако е нужно да пестите място на харддиска или когато ще го заменяте с негова по-нова версия. В последния случай е добре изтриването да стане преди поставянето на новата версия.

За да изтриете пакет, преди всичко бъдете сигурни дали това няма да навреди на системата ви. (Някои пакети в никакъв случай не бива да се изтриват, освен ако веднага не бъдат заменени, като тогава трябва да имате предвид, че djgpp става временно неработоспособна.)

За самото изтриване постъпете по следния начин. Направете текуща в DOS основната директория на djgpp. Копирайте там съответния на пакета файл .mft от директорията manifest. След това изпълнете командата rm (изтриване на файлове), като на командния ред на rm зададете направеното копие, предшествано от знака @. Всички файлове, чиито имена са изброени във файла .mft, биват унищожени (вкл. оригиналът на този файл). След това можете да унищожите и направеното копие.

Например, за да изтриете документационния пакет на програмата unrtf копирайте файла urtf181d.mft на посоченото място и изпълнете rm @urtf181d.mft.

Ако ще бъде изтриван пакетът file utilities (вж. напр. fil41b.ver и fil41b.mft в поддиректория manifest), добре е предварително да се копира (от поддиректорията bin) и самата програма rm.exe, тъй като тя се намира тъкмо в този пакет и също ще бъде изтрита.

След изтриване на пакет е възможно да останат празни, но неизтрити поддиректории, които могат да бъдат премахнати „ръчно“. За това къде могат да бъдат те, разбира се, гледайте съдържанието на файла .mft.

Бойко Банчев
София, януари 2006