Spis treści
GOLDED I ŚRODOWISKO PROGRAMISTY

      Każdy programista potrzebuje sprawnych i wydajnych narzędzi, by podczas pisania programu skupić się na problemie do zrealizowania, a nie walce z edytorem tekstu. Różni programiści preferują różne edytory, a na amigowych rynku króluje CygnusED i GoldED. Niniejszy artykuł poświęcę temu drugiemu, jako że ma on dużo większe możliwości niż CED, a przy okazji jest dostępny za darmo. GED posiada wiele opcji, które nie są powszechnie wykorzystywane, a znacznie ułatwiają pracę, dlatego też skupię się na opisie najciekawszych z nich. Większość tekstu będzie dotyczyła konfiguracji środowiska do pracy z C/C++ (zarówno gcc, jak i SasC), choć bez większych problemów można dostosować całość do innych języków, np. AmigaE. Przedstawię przy okazji propozycje wygodnego przyporządkowania kombinacji klawiszy (podanych w nawiasach) do poszczególnych opcji.
      Komenda HUNTER najczęściej używana jest z parametrem CURRENT (Amiga+E). Pobiera ona od użytkownika ciąg znaków, traktuje go jako ścieżkę dostępu i próbuje otworzyć plik o podanej nazwie. Katalogi w których prowadzone są poszukiwania można ustawić w preferencjach (Options-local-Hunter), przeszukiwany jest też katalog aktualny. Parametr CURRENT sprawia, że GED nie wyświetla requestera z pytaniem o ciąg znaków, lecz próbuje go pobrać z tekstu znajdującego się w sąsiedztwie kursora. Jeśli więc w źródłówce będziemy mieć linię:

#include

to wskazując kursorem tekst 'stdio.h' i wywołując HUNTER CURRENT - GED spróbuje otworzyć w osobnym oknie plik o tej nazwie.
      Podczas pracy z większymi projektami często się zapomina, w której części pliku została zdefiniowana jakaś funkcja, której definicję szybko chcielibyśmy zmienić. GED dysponuje komendą FUNC, używaną przeze mnie z parametrami: SMART (Amiga+z) oraz SMART CURRENT (Amiga+a). Komenda ta skanuje aktualną źródłówkę pod kątem występowania funkcji (obsługuje wiele najpopularniejszych języków) i przesuwa kursor na początek definicji poszukiwanej funkcji. Wywołana z parametrem SMART wyświetla listę wszystkich znalezionych funkcji i pozwala wybrać jedną z nich, natomiast po podaniu SMART CURRENT sprawdza, czy kursor znajduje się na nazwie jakiejś funkcji i jeśli tak, to przesuwa go na początek jej definicji. Jeśli więc mamy w źródłówce następującą linię:

Rysuj(x,y);

to po wskazaniu kursorem słowa 'Rysuj' i wywołaniu FUNC SMART CURRENT - GoldED poszuka ciała tej funkcji i jeśli je znajdzie, przesunie tam kursor.
      GoldED jest jednym z niewielu amigowych edytorów, które posiadają funkcję zwijania tekstu. Służy do tego komenda FOLD, wywoływana u mnie parametrami TOGGLE (Help) oraz TOGGLE ALL (Ctrl+Help). Możemy również definiować ciągi znaków, które będą wskazywały początek i koniec folda.
      Dość przydatną cechą GoldED-a są bufory. Oprócz tego że edytor potrafi obsłużyć i wyświetlić na ekranie wiele okienek jednocześnie, aby uniknąć niepotrzebnego bałaganu na ekranie oferuje nam możliwość schowania niektórych z nich oraz dowolnie przełączać się między nimi. Używane przeze mnie komendy to: WINDOW NEXT (F1), WINDOW PREV (F2), FREEZE CURRENT (F3) oraz FREEZE ASK (F4). Komenda WINDOW przełącza aktualne okno w przód lub tył (w zależności od podawanych parametrów) i działa tylko na okna otwarte. FREEZE CURRENT ukrywa okno, które znika z ekranu, lecz cały czas jego zawartość pozostaje w pamięci. Listę wszystkich okien (ukrytych lub nie) możemy zobaczyć w menu po zaznaczeniu gadżetu 'File list' dla którejś pozycji. FREEZE ASK wyświetla listę ukrytych okien i pozwala na aktywację dowolnego z nich.
      Aby ułatwić sobie pracę z większymi projektami i nie otwierać wszystkich potrzebnych okien oraz plików po każdym uruchomieniu edytora, mamy do dyspozycji tzw. sesje. GoldED potrafi zapamiętać pozycję każdego okna które jest aktualnie w użyciu (oprócz pozycji pamięta np. czy dane okno jest ukryte, czy nie) i zapisać wszystkie dane o oknach do pliku (zwykle z rozszerzeniem '.session'). Uruchomienie edytora z podaniem nazwy tego pliku spowoduje odtworzenie naszego środowiska pracy.
      Podczas pracy ze źródłówkami często wykonuje się operacje typu zdublowanie wskazanej linii, zamiana dwóch wierszy miejscami, dodanie lub usunięcie wcięcia na początku wiersza czy przesunięcie linii w inne miejsce pliku. Oczywiście można tę oprację wykonać przy pomocy standardowych opcji copy i paste, lecz często jest to czynność obarczona koniecznością wciskania dużej ilości klawiszy, a nawet udziału myszki. Dzięki możliwościom konfiguracyjnym GoldED-a zdefiniowałem sobie kilka kombinacji klawiszy. Pod (Amiga+7) wywoływane są kolejno dwie komendy: LINES DOUBLE i DOWN. Po jej użyciu aktualna linia zostanie podwojona, a sam kursor przesunięty do skopiowanego wiersza. Pod kombinacjami (Alt+Shift+CrsrDown), (Alt+Shift+CrsrUp), (Alt+Shift+CrsrLeft) i (Alt+Shift+CrsrRight) znajdują się odpowiednio sekwencje komend:

LINES SWAP i DOWN
UP i LINES SWAP
SHIFT LINE LEFT TAB
SHIFT LINE RIGHT TAB

      Takie ustawienie ma tą zaletę, że po wciśnięciu Alt+Shift możemy "manipulować" linią, tj. kursory lewo/prawo pozwalają na regulację wcięcia linii, a kierunki góra/dół zmieniają położenie danej linii względem innych. Opisane rozwiązanie można zdefiniować w ustawieniach Options-local-Keyboard.
      Pracując z tekstem (niekoniecznie źródłówką) często okazuje się, że wykonujemy wielokrotnie serie tych samych operacji (np. "znajdź następny", kursor dwa znaki w lewo i wpisz "0x0"). Za pomocą GoldED-a można łatwo zautomatyzować takie czynności. Po wywołaniu MACRO RECORD (Shift+10) edytor uruchamia zapamiętywanie wykonywanych przez nasz czynności aż do momentu ponownego wywołania tej samej komendy. Zapamiętane w ten sposób makro można wywołać komendą MACRO PLAY (F10). Jeśli komendę wywołamy z parametrem ASK, będziemy mogli podać ilość powtórzeń makra. Przykład: chcemy wstawić do tekstu ciąg dziesięciu takich samych wyrazów, np. "Amiga". Możemy to zrobić na dwa sposoby. Sposób pierwszy: wciskamy Shift+F10, wpisujemy "Amiga", ponownie Shift+F10, a następnie dziewięć razy F10. Sposób drugi: wciskamy Shift+F10, wpisujemy "Amiga", ponownie Shift+10 i wywołujemy MACRO PLAY ASK, podając w requesterze liczbę 9.
      Programiści używający kompilatora SasC mogą go zintegrować przy pomocy programu Scmsg dostarczanego wraz z Sasem. Jego konfiguracja jest dość kłopotliwa, jednak jego możliwości są ogromne. Ja mam w nim ustawione następujące preferencje: NoHidden, NoRexxOnly, NoAutoEdit, PortName='GOLDED.1', EditCommand='request status="Test"', GotoFile='window use="%f"', GoToLine='goto line %l' oraz PubScreen jako pusty ciąg znaków. Jak widać, większość jego ustawień to komendy ARexxa przekazywane na odpowiedni port (tu GOLDED.1), tak więc łatwo dostosować go również do innych edytorów. Jeśli dodatkowo w opcjach projektu Sasa ustawimy "ErrorRexx", to po każdej kompilacji Scmsg będzie pamiętał listę błędów i ostrzeżeń wyprodukowanych przez kompilator oraz będzie potrafił przekazać je do GoldED-a. Ja mam w GoldED-zie zdefiniowane następujące komendy: uruchomienie programu AmigaDOS: "scmsg nohidden norexxonly" (Amiga+B), co pozwala na dostęp do Scmsg w dowolnej chwili oraz wykonanie następującego skryptu ARexxa (zgranego pod nazwą "nexterr.ged"):



      W powyższym przykładzie 'GoldEd:Arexx/nexterr.ged TRUE' pod kombinacją Amiga+F powoduje przeskok kursora do linii, w której wystąpił pierwszy błąd (oraz zmianę aktywnego okna, jeśli to potrzebne), z jednoczesnym wyświetleniem komunikatu o błędzie (wyprodukowanego przez kompilator) na belce statusowej GoldED-a. Natomiast 'GoldEd:Arexx/nexterr.ged FALSE' pod kombinacją Amiga+E będzie miał efekt identyczny jak poprzednia komenda, z tą różnicą, że nie będzie pokazany pierwszy błąd, lecz następny w kolejności (wywołując kilkakrotnie tą komendę możemy zobaczyć i zlokalizować wszystkie błędy wychwycone przez kompilator).
      W samych preferencjach GoldED-a możemy również ustawić ciekawą opcję jaką są wzorce (ang. templates). Ja zdefiniowałem je w ten sposób, że po wpisaniu ciągu znaków '#i' powinna być wywołana komenda TEXT T="#include", przez co przy dopisywaniu nowych inkludów do źródłówki nie muszę wpisywać wszystkich znaków, a wystarczy że wpiszę '#i", a ciąg '#include' pojawi się automatycznie. Podobnie zdefiniowałem #if, #endif, #define oraz #undef.
      Kolejną ciekawą opcją jest automatyczna poprawa wielkości liter (ang. auto case correction) czy automatyczne wcięcia (ang. autoident). Można dokonać takich ustawień, by po wpisaniu '{' i wciśnięciu enter edytor sam wstawiał tabulator na początek następnej linii (innymi słowy zwiększał wcięcie), a po '}' i enterze usuwał tabulator sprzed klamry.
      Ostatnią opcją GoldED-a którą przedstawię jest mechanizm referencji - jedna z najbardziej użytecznych i uprzyjemniających pracę cech edytora. Otóż pisząc program bardzo często zaglądamy do dokumentacji poszczególnych funkcji, jednym razem w celu znalezienia jakiegoś tzw. taga, innym razem celem sprawdzenia typów argumentów. Aby efektywnie wykorzystać mechanizm referencji, potrzebne jest małe przygotowanie. W opcjach GoldED-a (Options-lokal-References) tworzymy jakąś bazę danych i przekazujemy jej miejsce, w którym znajdują się pliki do których chcemy się odwoływać. Następnie wybieramy 'Create' i czekamy, aż GoldED zbuduje bazę danych o wskazanych plikach. Ja zdefiniowałem kilka baz: Inkludy (GG:os-include), SasC (sc:include), Rave3D (tu podałem wszystkie pliki .h i .doc które dostarczone są z Rave3D oraz Warp3D), Autodocs (podałem ścieżkę dostępu do katalogu, w którym znajdują się wszystkie pliki typu .doc z RKM), OpenGL (GG:Inlcude/GL) i jeszcze kilka innych. Do tego wszystkiego zdefiniowałem komendę XREF CURRENT PROTECT (Alt+Help). Teraz pisząc jakiś program, np. pod Warp3D, wskazuję kursorem tekst 'w3d_DrawTriangle', wciskam Alt+Help i w nowym okienku (dla bezpieczeństwa ustawionym jako 'read only') pojawia się dokumentacja do tej funkcji. Jeśli wskażę tekst 'W3D_SUCCESS' (jeden z tagów definiowanych przez Warp3D) i wywołam dokumentację, otrzymam w nowym oknie plik Warp3D.h z kursorem ustawionym na linii '#define W3D_SUCCESS 0'.
      W tym artykule zaprezentowałem tylko cząstkę możliwości GoldED-a, nie wspominając o takich rzeczach jak konfigurowalne pop-up menu, typy plików, toolbary, listy projektów, uzupełnianie wpisywanych słów (komenda PHRASE) czy ogromnej liczbie komend i zmiennych wewnętrznych.
      Na zakończenie życzę wygodnej pracy i napisania wielu wspaniałych programów.

Kamil Burzyński
Spis treści