ReWiA 2.0 html manual
--------------------------- Zasady pisania makr -----------------------------
Zasady pisania makr oraz definicji komend są jednakowe. Tam gdzie występują
różnice zostanie to zaznaczone. Makra są to pliki tekstowe zawierające spis
komend z argumentami które ReWiA po kolei wykona. Dodatkowo dostępne są
komendy GOTO i LABEL służące do realizacji pętli. Przykładowo, poniższe makro
poda numer punktu w bieżącym widmie o największej wartości współrzędnej Y :
INPUT "podaj numer widma" %nw
LET %mx=-1e300
LET %j=last(%nw)
LABEL petla
IF %j<0 GOTO koniec
LET %mx=max(%mx,y(%nw,%j))
LET %j=%j-1
GOTO petla
LABEL koniec
PRINT "wartosc max = " %mx
Makra najlepiej jest wpisywać pod dowolnym edytorem tekstu. W ostateczności,
gdy nie ma żadnego edytora pod ręką można utworzyć komendą CREAT widmo o 1
polu typu STRING*64 i komendą ED wpisać tekst makra, po czym komendą TSAVE
zapisać widmo w postaci tekstowej na dysk. Należy pamiętać, że długość linii
będzie w tym przypadku ograniczona do 64 znaków. Zakładając, że zapisano je na
plik MAKS.MAC makro należy wywołać pisząc :
M "MAKS.MAC"
Podane powyżej makro bardzo łatwo przerobić na definicję komendy. W tym
celu na początku należy umieścić linię CMD a na końcu linię ENDCMD. Dodatkowo,
ponieważ kompilowanym komendom można przekazywać argumenty, komenda może pytać
się o numer widma tylko wtedy gdy nie podano argumentów. Postać końcową po
wszystkich przeróbkach pokazano poniżej :
CMD maks
IF 0==argcnt INPUT "podaj numer widma" %nw
IF 1==argcnt LET %nw=arg(0)
LET %mx=-1e300
LET %j=last(%nw)
LABEL petla
IF %j<0 GOTO koniec
LET %mx=max(%mx,y(%nw,%j))
LET %j=%j-1
GOTO petla
LABEL koniec
PRINT "wartosc max = " %mx
ENDCMD
Nazwa nowej komendy podawana jest jako argument CMD. W przypadku gdy
komenda maks była już zdefiniowana poprzednia definicja jest kasowana. Aby móc
wykonać podaną powyżej komendę należy wprowadzić jej definicję linia po linii
z klawiatury w trybie bezpośrednim lub umieścić w dowolnym makrze i je
wykonać. Po wczytaniu linii zawierającej komendę CMD ReWiA wszystkie linie aż
do linii ropoczynającej się od ENDCMD będzie kompilować a nie wykonywać. Bez
znaczenia jest czy będzie to tryb bezpośredni czy wykonywanie makra. Jeżeli w
trakcie kompilacji wystąpi błąd, np. skok do nieistniejącej etykiety to
kompilacja zostanie przerwana i wyświetlony zostanie komunikat o błędzie. Po
zakończeniu kompilacji w oknie dialogu zostanie wyświetlona nazwa nowo
skompilowanej komendy. W jednym makrze może być podanych wiele definicji
komend, mogą też być przeplatane zwykłymi komendami.
Skompilowane komendy wywołuje się podając ich nazwę, ewentualnie parametry.
Dla przykładu powyżej sekwencja :
maks 5
spowoduje wyświetlenie największej wpółrzędnej Y w widmie o numerze 5,
natomiast sekwencja :
maks
spowoduje, że ReWiA zapyta się o numer widma z którego należy obliczyć
największą wartość Y a następnie wyświetli ją. Pisząc definicje komend należy
przestrzegać następujących zasad :
- funkcją argcnt sprawdzać ilość przekazywanych argumentów.
- funkcją type sprawdzać typ przekazywanych argumentów
- funkcją arg sprawdzać wartość przekazywanych argumentów
- jeżeli wymagane jest jakieś widmo na wyniki tymczasowe to należy wywołać
funkcję freesht, która zwróci numer wolnego widma. Można również użyć
funkcji memfree aby sprawdzić czy jest dostatecznie dużo wolnej pamięci.
- widma zawierające dane tymczasowe które nie są więcej potrzebne należy
natychmiast zwalniać komendą DELETE.
- wszystkie zmienne używane w komendzie powinny się rozpoczynać od stałej
sekwencji liter, np. %sr_i, %sr_alfa zamiast %i, %alfa. Zapobiegnie to
konfliktom nazw.
Wywoływanie komend z własnym menu w makrach
Zarówno w makrach jak i kompilowanych komendach można wywoływać komendy z
własnym menu. Wybór opcji z menu poprzedza się znakiem '/' i traktuje jako
zwykły parametr komendy. Sposób ten jest dozwolony tylko w makrach i
kompilowanych komendach. W trybie bezpośrednim jakiekolwiek parametry podane w
oknie dialogu są ignorowane. Należy pamiętać aby ostatnią opcją w każdej linii
było Quit. Należy również pamiętać, że ilość parametrów jest ograniczona w
linii do 31. Przykładowo, linia :
POLFIT /A 5:0:0 /D 2 /L * * /F /V /Q
najpierw wywołuje opcję Assoc (tworzy widmo o numerze 5 z jednym polem typu
REAL*8 o długości 20 punktów), potem Degree, Limits, Fit, View i na końcu
Quit. Należy zwrócić uwagę, że wybory opcji z menu nie są tekstami i nie są
zapisywane w cudzysłowie.
Istnieje również możliwość zapytania się w makrach o wybór opcji. W tym
celu zamiast np. /Q należy wpisać napis 'ASK'.