Mittwoch, 13. August 2014

Editoren für REXX, Teil 1: jEdit

Ein nicht zu vernachlässigender Faktor im »Ökosystem« einer Programmiersprache ist die Unterstützung durch Editoren – ist es doch diese Komponente, in der die meiste Arbeit erledigt wird. Für REXX ist die Situation da leider nicht optimal, zumindest soweit ich sie bisher erkundet habe. Es soll zunächst eine kurze Information zu jEdit (http://www.jedit.org) geben.

jEdit kennt einen Dateityp »objectrexx«. Dieser leistet Syntaxhervorhebung für REXX-Dateien, allerdings recht unvollständig. Zum Beispiel wird bei Kommentaren die Schachtelung nicht beachtet; viele Schlüsselwörter werden nicht hervorgehoben (anscheinend die abhängigen Schlüsselwörter, die nur dann als Schlüsselwörter gelten, wenn ein anderes Schlüsselwort vorausgeht). Kleine Probleme gibt es auch, wenn es darum geht, das Ende einer Zeichenkette zu bestimmen.

Automatische Einrückungen werden im Modus »objectrexx« zum Großteil sinnvoll vorgenommen. Das ist sehr angenehm.

Mit Hilfe der jEdit-Erweiterung CtagsSideKick gelingt eine rudimentäre Auf‌listung der Unterprogramme, sodass man per Mausklick dorthin navigieren kann. Diese Lösung basiert auf ctags, das zurzeit wohl noch keine mit ::routine definierten Unterprogramme listen kann. Das ist schade. Dazu kommt, dass bei komplexeren Programmen die Unterprogrammliste einfach nicht mehr angezeigt wird. Ich vermute, dass das ein Problem in CtagsSideKick ist, denn vim kann die Liste basierend auf dem gleichen ctags durchaus anzeigen.

Trotz der genannten Probleme ist jEdit trotzdem eine brauchbare Lösung zur Erstellung von REXX-Programmen.

Mittwoch, 6. August 2014

REXX-Befehle direkt in der Kommandozeile

Wie viele andere Skriptsprachen auch unterstützt OORexx die Übergabe von REXX-Befehlen direkt auf der Kommandozeile. Der zuständige Schalter ist -e. Es lässt sich also folgendermaßen eine Berechnung durchführen:

rexx -e "say 12 * 12"

Schnell mal eine Zahl nach hexadezimal konvertieren:

rexx -e "say d2x(153)"

(Die Funktion d2x wandelt eine Dezimalzahl in ihre hexadezimale Darstellung um.)

Oder die ersten drei Zeichen einer Datei hexadezimal ausgeben:

rexx -e "say c2x(charin('maqaf.odt', , 3))"

(charin liest Zeichen aus einer Datei. Der erste Parameter ist der Dateiname, der zweite, der hier ausgelassen ist, gibt die Position an, ab der gelesen werden soll; hier vom Anfang der Datei an. Der dritte Parameter ist die Zahl der zu lesenden Zeichen. c2x wandelt diese drei Zeichen dann in ihre Hexadezimaldarstellung um.)

Montag, 4. August 2014

REXX und der Shebang

Unter Linux ist es üblich, Skripte mit einer Shebang-Zeile beginnen zu lassen. In dieser Shebang-Zeile wird dem Betriebssystem mitgeteilt, mit welchem Interpreter das Skript zu starten ist. Eine solche Zeile könnte so aussehen:

#!/usr/bin/env ruby

Die Zeichenfolge #! nennt man Shebang. Danach schaut das Betriebssystem. In den meisten Skriptsprachen ist das Doppelkreuz wohl nicht ganz zufällig das Kommentarzeichen, sodass diese Zeile vom Interpreter nicht als eine reguläre Programmzeile gelesen wird.

REXX verwendet allerdings nicht das Doppelkreuz als Kommentarzeichen, sondern -- für einzeilige und /* … */ für mehrzeilige Kommentare. Zumindest in Open Object Rexx (nennen wir es ab heute OORexx) funktioniert der Shebang aber trotzdem. Ein Skript darf also so beginnen:

#!/usr/bin/env rexx

Linux findet dann den richtigen Interpreter und dieser beschwert sich nicht über die eigentlich ungültige Syntax der ersten Zeile. Man kann diese Zeile auch drinlassen, wenn das Skript unter Windows ausgeführt wird. Auch die Windows-Version von OORexx ignoriert sie.

Freitag, 1. August 2014

Neue Ufer: REXX

Beruflich habe ich mittlerweile mit REXX zu tun bekommen. Dabei handelt es sich um eine Skriptsprache, die schon einiges älter ist als die, die heute weit verbreitet sind. Dennoch (oder: deshalb?) gibt es einige interessante Ansätze darin.

Die Variante von REXX, mit der ich arbeite ist Open Object Rexx (www.oorexx.org), wie der Name vermuten lässt, eine quelloffene, objektorientierte Fassung von REXX.

Heute werde ich noch nicht viel dazu schreiben; nur »Hello, world!« wollte ich kurz zum Besten geben. Es handelt sich um das kürzeste Hello-world-Programm, das mir bekannt ist:

say 'Hello, world!'

Montag, 5. März 2012

Zurücksetzen einer Textdatei in Free Pascal

Die normale Prozedur zum Verändern der Schreib-/Leseposition in Free Pascal ist Seek. Diese Prozedur kann allerdings nicht auf Textdateien angewendet werden. Über einen Unweg kann aber auch die Schreib-/Leseposition in Textdateien gesetzt werden. Zum Beispiel auf den Anfang der Datei:

FileSeek(GetFileHandle(f), 0, fsFromBeginning);

Dabei ist f natürlich die geöffnete Datei. Alle Symbole finden sich in SysUtils.

Mittwoch, 1. Februar 2012

Lazarus 0.9.30.2

Das habe ich eine Zeit lang nicht mitbekommen: Mittlerweile gibt es Lazarus in der Version 0.9.30.2. Die wesentliche Neuerung scheint zu sein, dass Lazarus jetzt auf der Version 2.4.4 von FPC aufbaut.

Donnerstag, 20. Oktober 2011

Ubuntu 11.10 kann nicht heruntergefahren werden

Nach der Aktualisierung von Ubuntu 11.04 auf 11.10 gab es einige Unstimmigkeiten auf meinem System. Zwei besonders auffallende Dinge waren, dass erstens das Menü zum Herunterfahren des Systems nicht mehr zur Verfügung stand (der Startknopf in der Systemleiste war verschwunden) und zweitens zahlreiche Piktogramme fehlten. Die Lösung war aber einfach:
  1. In der Systemleiste den Benutzer anklicken.
  2. »Benutzerkonten …« auswählen.
  3. »Alle Einstellungen« anklicken. Diese ersten drei Schritte waren nur ein Umweg, um an das Einstellungsmenü zu kommen, das ja fehlt, wenn der Startknopf nicht vorhanden ist.
  4. »Darstellung« anwählen.
  5. Das Thema einmal wechseln, zum Beispiel von Ambiance auf Radiance. Und wieder zurück. Jetzt sollte schon der Startknopf erscheinen, einige der fehlenden Piktogramme sind nach dieser Operation auch vorhanden.
  6. Neustart des Rechners. Nun finden auch die restlichen Piktogramme den Weg auf die Oberfläche. Eventuell reicht auch ein Neuanmelden.
Der Trick ist also im Wesentlichen der, dass man einmal das Oberflächenthema zum Neuladen zwingt.