Makrosprache

Ein Makro hat grundsätzlich folgenden Aufbau:
makro Makroname
   Kommando_1
   .
   .
   .
   Kommando_n
endMakro
Dabei ist 'Makroname' ein Platzhalter für den Namen des Makros. 'Kommando_1', ..., 'Kommando_n' stehen für jeweils ein Kommando (Zuweisung, if-Kommando, ...). Eine Zeile darf nur ein Kommando enthalten, Einrückungen können beliebig vorgenommen werden.
 

Makros abbrechen

Das Wichtigste zuerst. Wärend der Ausführung eines Makros wird - es sein denn, man entscheidet sich explizit dagegen, s.u. - ein Button eingeblendet, der es ermöglicht, die Ausführung abzubrechen. Dies kann insbesonders während der Entwicklung vom Makros hilfreich sein. Das Einblenden des Buttons ist aber mit einem Overhead verbunden, der bei kurzen Makros nicht akzeptabel ist. Aus diesem Grund kann man die Anzeige des Buttons über den Befehl nonStop explizit unterbinden.
 

Variablen und Stacks

Zum Speichern von Zeichenketten und Zahlen bietet Ed42 Variablen an. Zusätzlich werden Stacks bereitgestellt, auf denen Zeichenketten oder Zahlen abgelegt werden können.

Variablen können nicht frei definiert werden. Stattdessen steht ein fester Satz an Variablen zu Verfügung:

  • Variablen für Zeichenketten: A$, B$, C$, ..., Z$.
  • Variablen für Zahlen: A, B, C, ..., Z.
  • Stacks zur Speicherung von Zeichenketten: A%, B%, C%, D%, E%.
  • Stacks zur Speicherung von Zahlen: A#, B#, C#, D#, E#.

  •  

Befehle

Befehle erlauben die Manipulation von Variablen und Stacks sowie die Modifikation von Texten und der Cursorposition. Darüberhinaus können Funkitonalitäten des Editors - beispielsweise das Suchen/Ersetzen - über Makrobefehle angesteuert werden.

Kontrollstrukturen


Beispiele

makro forSchleife
   A$ := inputStr('Schleifenvariable:')
   U := inputInt('Untere Grenze:')
   O := inputInt('Obere Grenze:')
   X := xKoord
   Y := yKoord
   B$ := con('for ', con(A$, con(' := ', intToStr(U))))
   if U < O
      B$ := con(B$, ' to ')
   else
      B$ := con(B$, ' downto ')
   endIf
   B$ := con(B$, con(intToStr(O), ' do begin'))
   text.insertLine(B$)
   text.insertLine('')
   cursor.goTo(X, add(Y,2))
   text.insert('end;')
   cursor.goTo(add(X,3), add(Y,1))
endMakro
 

makro repeat
   text.insertLine('')
   cursor.home
   I := 1
   repeat
      text.insertLine(intToStr(I))
      cursor.right
      I := add(I, 1)
   until I > 20
endMakro
 

makro nbo
   if block.marked
      B := block.startPos
      E := block.endPos

      A$ := text.getSlice(B,E)
      A$ := con('htons(', con(A$,')'))

      text.deleteSlice(B,E)
      cursor.goTo(B,yKoord)
      text.insert(A$)
      block.unmark
   endIf
endMakro


Last Change: 27.10.2001
© Copyright by Stefan Brüning. All rights reserved