Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

  • Hallo Forumsbewohner, Linux-Freaks und Himbeer-Fans,

    zu meinem 100. Forumsbeitrag habe ich mir was Besonderes reserviert. Ein Tutorial der Programmiersprache Icon. Ich habe von Icon zum ersten Mal um 1990 herum gehört (und nicht sonderlich viel damit programmiert). 2003 wollte ich wieder programmieren und habe dieser Sprache eine Chance gegeben.

    Da Icon ursprünglich für relativ speicherarme Umgebungen entwickelt wurde, habe ich als erstes Projekt auf meinem Raspberry im Januar 2013 den Compiler auf den Raspberry übertragen - und er läuft genauso zuverlässig und flott, wie er es unter Windows, Ubuntu und etlichen anderen Betriebssystemen auch tut.

    Das Tutorial richtet sich zunächst an Anfänger. Aber spätestens bei Kapiteln zur Parallelprogrammierung von Prozessen hole ich dann auch die Profis ab.

    Mittlerweile sind 29 Teile fertig, die ich - sollten die ersten beiden Teile "ankommen" und Gefallen finden, so nach und nach hier einstreue. Diese Tutorialreihe ist so konzipiert, dass sie "offen", das heißt, dass nach Vermittlung der Grundlagen eigentlich alles möglich ist.

    Viel Spaß und Gutes Gelingen!

    Andreas

    RPI_Forum_Icon_Teil1.pdf



    P.S.: Haltet Euch bitte an den in #7 beschriebenen Ablauf

    Inhaltsangabe:

    1 Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

    Teil 1 #7: Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

    2 Programmiersprache Icon, Teil 2: Installation und Konfiguration von Geany

    3 Icon-Tutorial - Teil 3: Eingabe und Ausgabe

    4 Icon-Tutorial, Teil 4: Programmierer-definierte Konstrukte: Schleifen & Falluntersche

    5 Icon-Tutorial Teil 5: Numerische Datentypen, Operatoren und Funktionen

    6 Icon-Tutorial, Teil 6: Zeichenbasierte Datentypen, ihre Funtionen und Operatoren

    7 Icon-Tutorial, Teil 7: Strukturierte Datentypen einschl. Funktionen und Operatoren

    8 Icon-Tutorial Teil 8: Datentypen procedure und co-expression

    9 Icon-Tutorial, Teil 9: Konzept des Zeichenketten-Scannens

    10 Icon-Tutorial, Teil 10: Ausdrucks-Auswertung, Typ-Umwandlung, Sortier-Techniken

    11 Icon-Tutorial, Teil 11: Sammelsurium

    12 Icon-Tutorial, Teil 12: Bibliotheken

    13 Icon-Tutorial, Teil 13: Der Präprozessor

    14 Icon-Tutorial, Teil 14: Fehler & Fehlerbeseitigung

    15 Icon-Tutorial, Teil 15: Graphik I: Windows-Datentyp

    16 Icon-Tutorial, Teil 16: Graphik II: Zeichnen und Füllen

    17 Icon-Tutorial, Teil 17: Graphik III: Turtle-Graphik

    18 Icon-Tutorial, Teil 18: Graphik IV Text

    19 Icon-Tutorial, Teil 19: Graphik V: Farben & Bilder

    20 Icon-Tutorial, Teil 20: Graphik VI: Fenster

    21 Icon-Tutorial, Teil 21: Interaktion

    22 Icon-Tutorial, Teil 22: Standard-Dialoge

    23 ICON: Tutorial Teil 23: Vidgets und GUI-Entwicklungen mit VIB

    24 Icon: Tutorial 24: Hardware-Basteleien, Vervollständigen der GPIO-Kommandozentrale

    25 Icon: Tuorial 25: Ereignisbehandlungen bei Anwendungen mit mehr als einem Fenster

    26 Icon-Tutorial Teil 26: Individuelle Dialoge mit VIB

    27 Icon-Tutorial Teil 27: Entwicklung eines Spiels: Mastermind - Entwurf und GUI-Layout

    28 Icon-Tutorial Teil 28: Entwicklung eines Spiels: MM-Ereignisbehandlung/Auswertelogik

    29 Icon-Tutorial Teil 29: Entwicklung eines Spiels: MasterMind - der Code

    30 Icon-Tutorial Teil 30: Von Icon auf C-Bibliotheken zugreifen

    31 Icon Tutorial Teil 31: Von Iconauf C++-Bibliotheken zugreifen
    32. Icon-Tutorial Teil 32: Von Icon auf Bibliotheken anderer Programmiersprachen zugreifen

    .......Cobol, D, Lazarus/FreePascal, Ada/Gnat, Assembler (Vorstellung des Codes einer in Assembler geschriebenen sehr schnellen GPIO-Library zur Vorbereitung eines Tutorials zu BareMetal), ... - Kommunikation mit Prolog-Code

    Ideen, Block II (Software läuft!)
    33: Text-to-Speech - Speech-to-Text: Sprachsynthese und Sprachanalyse auf dem Raspberry Pi in Icon

    Ideen, Block III (Software für #35 läuft!)
    34: GUI mit dem Event-Multiplexor (EVMUX) gestalten inkl. Programmierung der Ereignisbehandlung
    35: Symbolizer für Bi-Level-Graphiken
    36: Symbolizer für Grafiken mit Icon-Farbpaletten

    Ideen, Block IV (Software läuft!)
    37: Pseudo-Code-Compiler

    Ideen, Block V (Software läuft)
    38: Dia-Shower

    Ideen, Block VI (Ideensammlung)
    39: Hardware-Basteleien: A/D-Wandler und dessen Programmierung in Icon

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited 3 times, last by Andreas (October 28, 2018 at 1:27 PM).

  • Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation? Schau mal ob du hier fündig wirst!

  • Da steckt auf jedenfall ein Haufen arbeit drin. Icon sagt mir erstmal gar nichts ;) aber es schadet ja nichts einen Blick über den Tellerrand zu werden. Ich freu mich auf Teil 2.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo Arteck,

    die letzte Revision stammt vom Juni 2013 - so alter Schinken ist's auch wieder nicht ;).

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Bei der Vielzahl an Programmiersprachen nochmal eine - die müsste im Vergleich schon Bahnbrechendes bieten und trotzdem halbwegs effizienten Code erzeugen.
    Sorry, aber sehr skeptisch guck. :bussi2:

    Gruß, mmi

  • Hallo Mmi & andere Interessierte,

    Du erwartest Bahnbrechendes.

    - Die Programmiersprache ist relativ leicht und schnell zu lernen.

    - Man erhält bereits nach kurzer Entwicklungszeit Ergebnisse (RAD - Rapid Application Development)

    - Der Code, um eine Anwendung in Icon zu programmieren, ist etwa um 1/3 kürzer, als wenn Du die gleiche Anwendung in einer anderen Sprache schreiben würdest.

    - Nervige Semikolons am Zeilenende werden nicht erwartet.

    - Variablen brauchen nicht deklariert zu werden - sie werden nach Bedarf eingesetzt.

    - Es gibt keine Pointer - keine Abstürze weil ein Pointer auf NIL zeigt.

    - Programme können als Skript-Datei ausgeführt werden oder als compilierte Anwendung

    - Speichermanagement läuft im Hintergrund ab - Du brauchst für irgendwelche Strukturen, Arrays etc. keinen Speicher explizit anzufordern.

    - Icon verfügt über LIA (LArge Integer Arithmetik, wodurch Du mit beliebig großen Zahlen rechnen kannst Berechne mal !5000 mit einer anderen Programmiersprache. Die Icon-Anwendung berechnet Dir die Zahl und gibt alle Stellen aus. Auf die gleiche Weise kannst Du Wurzelziehen und eine beliebige Stellenanzahl ausgeben lassen.Die Kreiszahl Pi habe ich auch mal auf 5000 Stellen berechnet. Auf diese Weise erhält man einen ganz anderen Zugang zur Mathematik.

    - Funktionen und Prozeduren verfügen über eine variable Anzahl an Parametern; am Datentyp erkennt die Prozedur, welcher der Parameter gesetzt ist, die nicht gesetzten Parameter werden (ohne Zutun des Programmierers) auf voreingestellte Werte gesetzt. Um z.B. ein Fenster zu öffnen genügt ein

    Code
    W := WOpen()

    oder

    Code
    W := WOpen("size=800,600")

    oder

    Code
    W := WOpen("size=800,600", "label=Anwendung")

    um nur zwei von etlichen Fensterparametern zu definieren.

    Die Zuweisung

    Code
    W :=

    kann man auch gleich ganz weglassen, wenn es in der ganzen Anwendung nur ein einiziges Fenster gibt.

    - Ein Gedanke zu GPIOs: Zur Ansteuerung eines GPIO-Ports reicht ein

    Code
    GPIO(17,1)

    um den GPIO-Port 17 einzuschalten oder ein

    Code
    status := GPIO(17)

    um den GPIO-Port auszulesen. Hierzu habe ich eine GPIO-Library geschrieben und optimiert: Taktzeit liegt bei ca. 10 ms.

    - Mit Icon ist z.B. die Programmierung von Paralellelprozessen möglich, was wohl mit nur ganz wenigen Programmiersprachen möglich ist. Für den Raspberry Pi ist mir keine andere bekannt.

    - Letztes Jahr habe ich einen Auftrag für eine Industrieentwicklung erhalten. Die Wahl der Mittel blieb mir vollkommen frei überlassen. Nach Entwicklung der Hardware und Zusammenbau der Hardware-Komponenten habe ich diese mit einem Raspberry Pi versehen, ein Icon-Entwicklungssystem aufgesetzt und optimiert und schließlich die Anwendung in Icon programmiert. Mit dem Teil werden Medizintechnikprodukte für den US-amerikanischen Markt hergestellt. Um dort Medizintechnikprodukte anbieten zu können erwartet die US-amerikanische Lebensmittelbehörde FDA umfangreiche Dokumentationen zum Nachweis der Sicherheit, der Zuverlässigkeit und zur Erfüllung der Qualitätsanforderungen. Diese Computersystemvalidierung hat das Gesamttsystem (Hardware, RaspberryPi, Icon-Entwicklungssystem, Icon-Anwendung) beim ersten Anlauf bestanden. In der Firma wurden mit diesem System innovative Technologien eingeführt, das wohl die Grundlagen für ganz andere Entwicklungsprojekte bilden wird.


    - Auch wenn Icon relativ unbekannt ist, mit dem Entwicklungssystem, das ich aufgesetzt habe, ist eine professionelle Software-Entwicklung auch auf dem Raspberry Pi möglich.

    - Da Icon schon immer auf Systemen mit geringen Ressourcen ausgelegt war, läuft es auch auf dem Raspberry angenehm schnell.

    Und zum Schluss ein kleiner Reim:

    Ich weiß, wer Icon ignoriert,
    und keine Chance gibt, verliert.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (March 22, 2014 at 8:14 PM).

  • Hallo zusammen,

    nachdem einige Interessierte Probleme hatten, Icon zum Laufen zu bekommen und immer wieder andere Wege zum Ziel führten (weil irgendwelche essentiellen Schritte ausgelassen wurden - oder von mir nicht vollständig in Erwägung gezogen wurden), habe ich gestern die Gelegenheit genutzt, an einem neuen Raspberry das Icon-Programmiersystem neu aufzusetzen. Dabei ist mir aufgefallen, dass einige Schritte der Anleitung aus Beitrag #1 in einer nicht optimalen Reihenfolge angeordnet sind. Wenn man sich stur daran hält, funktioniert es zwar am Ende - ein paar Tests zwischendrin enden aber mit einem Ergebnis, dass man die Installation am Liebsten in die Tonne treten würde.

    OK. Hier die aktuellen Erkenntnisse:

    EDIT 05-JAN-2019:

    Aus aktuellem Anlass (jemand versuchte, Icon als User root im Home-Verzeichnis des Users pi zu installieren, wobei zwar die Installation funktionierte, aber für den User root die Programmiersprachen und seine Komponenten nicht aufrufbar waren):

    Strategie:

    A) Es wird versucht, die Programmiersprache Icon aus deren Quellen im Quellcode in ein Dowlnload-Verzeichnis herunterzuladen, zu entpacken, die Programmiersprache Icon aus dem Quellcode zu einem auf dem Zielsystem lauffähigen System zu compilieren.

    Dies setzt voraus, dass das Arbeitsverzeichnis in dem Verzeichnis errichtet wird, in dem der (vorgesehene) User arbeitet. Bei mir ist das der User pi. Wenn Ihr einen anderen User, z.B. HAMPELAMPEL verwenden wollt, dann muss überall, wo /home/pi/... steht, /home/HAMPELPAMPEL/... verwendet werden.

    B) Der Systempfad PATH, der die Auflistung aller Verzeichnisse enthält, in denen nach ausführbaren Programmen gesucht wird, wird um Icon und den Pfad auf das eingerichtete Arbeitsverzeichnis ergänzt. Dies erfolgt in der Datei .bashrc des Users. Diese Datei wird beim Booten nur dann aufgerufen, wenn denn auch tatsächlich der User verwendet wird. Alle anderen User bemerken sonst von "Icon" gar nichts. Woher auch!

    C) Die Umgebungsvariablen, auf die Icon angewiesen ist, werden analog gesetzt.

    D) Alles Nachfolgende gilt für den User pi und funktioniert seit 2013 unverändert zuverlässig - alle anderen User müssen vorher entsprechend eingerichtet worden sein, Gruppenzugehörigkeiten und Rechte gesetzt sein etc. Wie dies für andere User als pi funktionieren könnte, ist nicht Gegenstand dieses Threads. Fühlt Euch aber frei, dass selber auszuprobieren.

    E) Ob alles funktioniert hat, stellt Ihr nach einem Reboot fest, wenn die Testprogramme und Benchmarks fehlerfrei durchlaufen und die beiden kleinen Testprogramme ausgeführt werden und damit die Lauffähigkeit von Editor, Icon-System und Laufzeitumgebung nahelegen.

    [/EDIT 05-JAN-2019]


    Schritt-für-Schritt-Anleitung zum Installieren / Konfigurieren der Programmiersprache Icon (https://forum-raspberrypi.de/forum/thread/8…rizona.edu/icon)

    EDIT 11.03.2017:
    Die Icon-Homepage wurde umbenannt: Sie ist jetzt zu erreichen unter:
    https://www2.cs.arizona.edu/icon
    Bitte alle nachfolgenden URL-Adressen entsprechend berücksichtigen!
    [/EDIT]


    1. Download-Verzeichnis einrichten
    Dieser Schritt ging bisher vollkommen unter. Dieses Verzeichnis habe ich mir immer als Erstes erzeugt - unabhängig von der tatsächlichen Anwendung - und habe dies allerdings irgendwann "vergessen" zu erwähnen. Leider sind hier einige dran gescheitert. SORRY =( :blush:

    Code
    mkdir /home/pi/Downloads

    2. Ins Download-Verzeichnis wechseln
    ... damit die Datei auch dorthin gespeichert wird

    Code
    cd /home/pi/Downloads

    3. Herstellen einer Verbindung zum Internet (LAN oder WLAN)

    4. Quellcode-Paket herunterladen
    Vielen Dank an Dreamshader! Der Punkt vor src war in der Tat falsch. :danke_ATDE:

    Code
    wget www.cs.arizona.edu/icon/ftp/packages/unix/icon-v951src.tgz

    5. Entpacken

    Code
    tar -x -v -f icon-v951src.tgz

    6. Icon-Verzeichnis erstellen

    Code
    mkdir /home/pi/icon9_51

    7. Quelldateien verschieben

    Code
    cp -v -r icon-v951src/* /home/pi/icon9_51

    8. Entwicklungsdateien nachinstallieren
    Für die Compilierung des Icon-Compiler-Quellcodes unter Linux-Betriebssystemen erforderlichen Entwicklungs-Dateien nachinstallieren

    Code
    sudo apt-get install build-essential libx11-dev libxt-dev libxaw7-dev

    9. Ins Icon-Konfigurationsverzeichnis wechseln

    Code
    cd /home/pi/icon9_51/config

    10. Konfigurationsverzeichnis für RaspberryPi erstellen
    Nicht mehr "posix" sondern "linux" als Vorlage auswählen - auch das ging unter, ich habe 2012 verschiedenes ausprobiert. Im Kopf blieb "posix" hängen, Im Tutorial Teil 1 stand "posix", die Konfigurationsdateien stammen von der Konfiguration "linux". Totale Verwirrung war angesagt.

    Code
    cp -v -r linux RaspberryPi

    11. Ins Konfigurationsverzeichnis für RaspberryPi wechseln

    Code
    cd RaspberryPi

    12. Anpassen der Konfigurationsdateien
    Flossen weg von Makedefs: Die Datei wird nicht verändert! Hier ist mir aufgefallen, dass die im Teil 1 des Tutorials zum Erlernen der Programmiersprache Icon enthaltenen Vorlagen bzw. angegebene Änderungen nicht zu den Vorlagen selber passten. Vermutlich ist hier heftiger Wildwuchs entstanden, der zu den verblüffendsten - aber leider wenig brauchbaren - Ergebnissen führte. Siehe auch Schritt 10.

    define.h

    Code
    /*
    * Icon configuration file for RaspberryPi system with X windows
    */
    
    
    #define UNIX 1
    #define RaspberryPi 1
    #define LoadFunc

    status


    [EDIT: 10-Feb-2020]

    Mittlerweile hat sich innerhalb der GLIB.c etwas geändert, was Änderungen innerhalb des Quellcodes erforderlich macht.

    Dies betrifft die Datei /home/pi/icon9_51/ipl/cfuncs/fpoll.c.

    fpoll_new.cfpoll_new.c

    Hier bitte die Datei fpoll_new.c herunterladen und an die gleiche Stelle kopieren.

    Dann:

    Code
    cd /home/pi/icon9_51/ipl/cfuncs
    rm fpoll.c
    mv fpoll_new.c fpoll.c

    löscht die infolge Änderungen von GLIB.c fehlerhafte Datei und benennt die neue Datei so um, wie die Datei früher hieß.

    Da vorher zwei ebenen und mit dieser Ergänzung auch zwei ebenen unterhalb /home/pi/icon9_51 gearbeitet wurde, kann es direkt mit Schritt 13 weitergehen.

    Vielen Dank an Cheyenne Wills für die Code-Änderungen in fpoll.c!

    In früheren Versionen von GNU c ist diese Anpassung nicht erforderlich. Beispielsweise lief die Portierung auf nein ASUS Tinker Board ohne jede Änderung von fpoll.c fehlerfrei durch...

    [/EDIT]


    13. Erstellen des Icon-Systems
    Compilieren des Compiler-Quellcode für den Raspberry Pi

    Die folgenden Zeilen brauchen einiges an Zeit.
    Bitte um Geduld und Nachsicht. :cool: Der kleine Raspberry Pi ist nicht der schnellste.

    Code
    cd ../..
    make Status name=RaspberryPi
    make X-Configure name=RaspberryPi
    make X-Configure=RaspberryPi
    make status=RaspberryPi
    make Icont
    make Samples
    make Test
    make Benchmark

    Gelegentliche Fehlermeldungen ignorieren - mir sind allerdings gestern keine mehr aufgefallen.

    14. Ins Icon-Arbeitsverzeichnis wechseln

    Code
    cd /home/pi/icon9_51/bin


    Hier fehlte im Tutorial Teil 1 das cd - ohne macht's keinen Sinn.

    15. Arbeitsverzeichnis anzeigen

    Code
    ls -all

    Hier sollte ungefähr Folgendes stehen:

    Entscheidend sind die Dateien icont (der Compiler) und iconx (der Interpreter).
    Ergänzung [17.05.2015]:
    Die Programme colrbook, colrpick, fontpick, palette sind Anwendungen, die die Graphik-Fähigkeiten zeigen.

    Die Datei libcfunc.so ist eine Library, die in der Programmiersprache C geschrieben wurde und im Icon-Tutorial Teil 30 genutzt werden wird.

    vib ist eine Anwendung, mit der man graphische Benutzeroberflächen erstellen kann. vib erzeugt aus den vom Anwender angelegten Bedienelementen dann lauffähigen Quellcode in der Programmiersprache Icon. OK ... jede andere Programmiersprache wäre jetzt ein wenig unvorteilhaft.

    wevents zeigt Ereignisse an. Dies ist dann sinnvoll, wenn man mal schnell testen will, welches Ereignis von irgendwelchen Tasten der Tastatur oder von Mäusen erzeugt werden kann. Auch wenn man die hier angezeigten Ereignisse nutzen kann, ist es immer besser (im Sinne von Übertragbarkeit auf andere Betriebssysteme), wenn die entsprechende Datei keysyms.icn eingebunden wird.


    16. Umgebungsvariablen setzen
    PATH, IPATH, LPATH nach Anleitung in /home/pi/.bashrc setzen

    Code
    sudo nano /home/pi/.bashrc

    Da .bashrc bereits existiert, einfach Folgendes anhängen (dies entspricht meinem aktuellen Entwicklungssatz - und scheint recht brauchbar zu sein). Wichtig sind hier die Zeilen xPATH= und export. Die Zeilen echo zeigen nur etwas an.

    Auf Wunsch von Dreamshader eine kurze Erläuterung der einzelnen Umgebungsvariablen:

    - PATH: Ist der Pfad, der nach ausführbaren Kommandos durchsucht wird. In diesem Fall wird an den bestehenden Pfad das Icon-Arbeitsverzeichnis angehängt. Alles, was vorher gefunden wird, wird auch nach der Installation von Icon gefunden.

    - IPATH: Enthält den Pfad, in dessen Elementen nach Libraries gesucht wird. Solche Dateien werden im Icon-Programm mit link ... angegeben. Durch Anwendung dieser oftmals für gängige Betriebssysteme angepassten Prozeduren wird Icon-Quellcode auf die wildesten Betriebssysteme übertragbar und kann eigentlich mit der gleichen Vorgehensweise auf andere Betriebssysteme übertragen werden - solange eine Bedingung erfüllt ist (s. Schritt 13)

    - LPATH: Enthält den Pfad, in dessen Elementen nach einfügbarem Quellcode (in C nennt man diese Header-Dateien oder Include-Dateien) gesucht wird. Solche Dateien werden im Icon-Programm mit $include ... eingebunden. Hierbei handelt es sich in der Regel um Quellcode von Prozedur-Sammlungen, also Quellcode von Libraries. Durch Anwendung dieser oftmals für gängige Betriebssysteme angepassten Prozeduren wird Icon-Quellcode ebenfalls auf die wildesten Betriebssystem übertragbar.

    Hm, LPATH für Include-Dateien., IPATH für Libraries. Bestimmt verschrieben, oder? Ja, bestimmt - aber vor ganz langer Zeit. So isses im Compiler hinterlegt, so wird's seit langem gemacht. Ein Beispiel für etwas Verwirrendes, das seinen Ursprung in der grauen Vorgeschichte hat - aber bis heute beibehalten wurde. Bitte einfach zur Kenntnis nehmen. Wenn die Umgebungsvariablen einmal angelegt sind, ist dieses Wissen nicht mehr von Bedeutung.

    - FPATH: Enthält den Pfad, in dessen Elementen spezieller Code in C/C++/Cobol/D/Prolog enthalten ist. Es ist möglich, von Icon aus auf Routinen zuzugreifen, die in diesen Programmiersprachen geschrieben sind.
    Näheres dazu habe ich für das Icon-Tutorial, Teile 30 ( C ), Teil 31 (C++), Teil 32 (andere Programmiersprachen) vorgesehen (Änderungen vorbehalten).

    [EDIT 31-OKT-2017]:

    Jetzt ist es ja so, dass jedes mal, wenn man ein Terminal-Programm startet, dieses die .bashrc lädt. Jedes Mal sind dann für dieses Terminal die Icon-Pfade, Umgebungsvariablen etc. gesetzt. Selbst für jemanden, der nicht ständig programmiert, kann das mal nervig sein, wenn er nur mal ein paar Linux-Kommandos loswerden möchte.

    Daher habe ich mir folgendes einfallen lassen:

    • Anzeigen einer Liste (von zur Zeit Programmiersprachen)
    • Auswahl der angebotenen Optionen
    • Setzen nur der Pfade und Umgebungsvariable, die mit der Option korrespondieren

    Wer das auch mal machen möchte, hängt dann stattdessen folgende Zeilen an:

    Schlüssel des Ganzen ist das Linux-Kommando dialog. Wer mehr wissen willen, kann ja mal danach suchen. Im obigen Quellcode ist schon mal eine sinnvolle Anwendung.

    [EDIT 09-FEB-2019]

    Zur Installation von dialog:

    Code
    sudo apt-get install dialog

    [/EDIT]

    Ergebnis:

    [/EDIT]

    17. Neustart und Fortsetzung
    Im Toutorial Teil 1 habe ich sofort den Compiler aufgerufen. Je nach Vorgeschichte und Wissen der Anwender kamen hier entweder keine Fehlermeldungen (bei mir) oder Hinweise, die der erfahrene Anwender durch Erfahrung und Eingabe von Linux-Kommandos beseitigen konnte. Der Neuling dagegen ... na ja, ... der kam der Verzweiflung nahe.

    Code
    sudo reboot


    Bei jedem Hinweis, dass der Compiler nur durch ./icont aufzurufen wäre und das erzeugte Programm wie ein Bash-Skript ./name aufzurufen sein, bääh, nee, ist mir zuwider, so arbeiten zu müssen.
    Also, um es nochmals klar zu stellen: Der Icon-Compiler wird durch icont, der Interpreter durch iconx aufgerufen. Das erzeugte Programm wird einfach durch dessen Namen aufgerufen. chmod oder Ähnliches ist nicht erforderlich, um direkt ausführbare Dateien zu erhalten - weder für den Compiler noch für die erzeugten Programme.

    Ergänzung 08.09.2014:
    Zu diesem Schritt gehört auch, dass wir im gleichen Verzeichnis weiter machen, in dem wir vor dem Reboot gewesen sind.

    Code
    cd /home/pi/icon9_51/bin

    18. Testprogramm 1 zum Testen der Installation: hallo.icn
    Nach Aufruf des Editors (in Teil 2 des Tutorial wird die Einrichtung einer IDE beschrieben)

    Code
    sudo nano /home/pi/icon9_51/bin/hallo.icn

    diesen Quellcode eingeben:

    Code
    procedure main()
           write("Hallo, Ihr da draussen!")
    end

    und speichern (Strg-X, J, Enter).

    19. hallo.icn Compilieren und starten
    - Compilieren:

    Code
    icont hallo


    - Starten:

    Code
    hallo


    - Compilieren und Starten:

    Code
    icont hallo -x


    - Mit dem Interpreter starten:

    Code
    iconx hallo


    Letzteres geht, der Grund dazu liegt wohl auch in der Geschichte. Übrigens kann man Icon-Quellcode auch wie ein bash-Skript laufen lassen - vielleicht findet das dann noch mehr Akzeptanz in der RaspberryPi-Szene.

    Anmerkung (26.12.2014):
    Kommt hier eine Fehlermeldung

    Code
    bash: icont: Kommando nicht gefunden.

    dann liegt ein Fehler in der Pfad-Zuweisung zu PATH vor - bitte Schritt 16 SORGFÄLTIG prüfen und korrigieren.

    20. Testprogramm 2 zum Testen Erzeugen eines Fensters: hello_window.icn
    Nach Aufruf des Editors (in Teil 2 des Tutorial wird die Einrichtung einer IDE beschrieben)

    Code
    sudo nano /home/pi/icon9_51/bin/hello_window.icn

    diesen Quellcode eingeben:

    Code
    link graphics
    
    
    procedure main()
           WOpen("label=Mein 1. Icon-Fenster","font=sans,20")
          
           Notice("Hallo, Ihr da draußen!")
           WDelay(5000)
           WClose()
    end

    21. hello_window.icn Compilieren und starten
    - Compilieren:

    Code
    icont hello_window


    - Starten:

    Code
    hello_window


    - Compilieren und Starten:

    Code
    icont hello_window -x


    - Mit dem Interpreter starten:

    Code
    iconx hello_window


    Letzteres geht, der Grund dazu liegt wohl auch in der Geschichte. Übrigens kann man Icon-Quellcode auch wie ein bash-Skript laufen lassen - vielleicht findet das dann noch mehr Akzeptanz in der RaspberryPi-Szene.

    Abschließende Tipps
    Tipp 1: Eigenen Quellcode (*.icn) zunächst in /home/pi/icon9_51/bin speichern

    Tipp 2. Compilieren eigener Programme immer aus dem Arbeitsverzeichnis heraus

    Code
    cd /home/pi/icon9_51/bin


    oder ein in Geany definierter Pfad (s. Teil 2 dieses Tutorials)

    Tipp 3: Compilieren eigener Quellcodes

    Code
    icont programmname


    erzeugt ausführbares Programm

    Code
    icont programmname -x


    und startet es danach

    Code
    iconx programmname


    startet das Programm

    Code
    programmname


    startet das Programm

    Bei Programmen, die eine graphische Oberfläche erzeugen, muss startx oder startxfce4 gestartet sein. Andere Programme laufen auf der Konsole.


    Tipp 4: starten von in Icon geschriebenen Anwendungen
    Icon-Programme können wie jedes andere Programm auch gestartet werden durch
    - beim Bootvorgang
    - Eingabe des Programmnamens im Terminal
    - aus einem Skript heraus
    - aus einem anderen Icon-Programm heraus
    - Anklicken eines Piktogramms
    - Anklicken eines Eintrages aus dem Anwendungsmenü
    - Anklicken eines Eintrages der Panel-Leiste

    Tipp 5: Literatur zu Icon:

    Wem die Freigabe meines Icon-Tutorials zu langsam geht, kann sich gern in die Original-Literatur vertiefen und dort eingraben.

    Code
    cd /home/pi/Downloads
    wget http://www.cs.arizona.edu/icon/ftp/doc/lb1up.pdf
    wget http://www.cs.arizona.edu/icon/ftp/doc/lb2up.pdf
    wget http://www.cs.arizona.edu/icon/ftp/doc/gb1up.pdf
    wget http://www.cs.arizona.edu/icon/ftp/doc/gb2up.pdf
    wget http://www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf
    wget http://www.cs.arizona.edu/icon/ftp/doc/ib2up.pdf
    wget http://www2.cs.uidaho.edu/~jeffery/icon/humanists/humanist.pdf
    wget http://www.tools-of-computing.com/tc/CS/iconprog.pdf

    [EDIT: 15.05.2016]
    Und nach langer Recherche sind sie wieder zu haben, Präsentationen / Slides, die mal von Beratungsfirmen (MSE) eingesetzt wurden bzw. der legendäre CSc 451-Kurs der Uni Arizona...

    Code
    wget http://www.mitchellsoftwareengineering.com/icon/icon.sli.pdf
    wget http://www.cs.arizona.edu/classes/cs451/icon.pdf
    wget http://www.cs.arizona.edu/classes/cs451/graphics.pdf


    [/EDIT]


    Wenn Fragen bestehen oder noch immer etwas unklar ist, dann bitte einfach rückfragen. Ich werde dann diese Vorgehensweise anpassen. Es wäre doch gelacht, wenn das nicht irgendwann mal perfekt läuft...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited 10 times, last by Andreas (February 11, 2020 at 10:20 PM).

  • Hallöle Andreas,

    also ich muss sagen, ich finde Dein Durchhaltevermögen beeindruckend.
    Und irgendwie (blödes Wort) bringst Du das imho auch gut rüber ( obwohl ich mir das auf meine alten Tage nicht mehr antun werde ... dann eher PIC-Assembler ;) )
    cheers,
    -ds-

  • Hi Andreas,

    ich finds auch Klasse was Du hier machst, aber leider gehen die ganzen Teile hier im Tut Bereich unter.

    Besser wäre es wenn das alles Richtung Programmiersprachen umverlagert wird mit nem eigenen Abschnitt.

    @Mods, was würdet Ihr davon halten?

    cu C-3po

  • Hallo Dreamshader,

    Quote

    also ich muss sagen, ich finde Dein Durchhaltevermögen beeindruckend.

    tja, da steckt viel Arbeit drin, das ist wohl wahr - aber irgendwie soll es nicht auf meinen Rechenknechten versauern. Die Programmiersprache Icon hat die gröbsten Stolpersteine anderer Sprachen vermieden - und läuft insbesondere auf kleinen Systemen überraschend flott.

    Einen Gag bereite ich gerade vor... Icon so umstricken, dass die resultierende Sprache wie deutscher Pseudo-Code aussieht - aber sich compilieren lässt. Was noch ein reiner Gag ist, könnte auch was Grösseres werden. [Wo haben die Schweizer das "sz" versteckt?] - ohne allerdings eine besondere Herausforderung zu werden.

    Quote


    Und irgendwie (blödes Wort) bringst Du das imho auch gut rüber ( obwohl ich mir das auf meine alten Tage nicht mehr antun werde ... dann eher PIC-Assembler )

    Äh ... Altersweisheit? Oder Nachwirkungen meiner Tätigkeit in einem Institut mit wöchentlichen (mehreren) Lehrveranstaltungen? So in Richtung "sich in Geduld üben"... :s



    Hallo C3PO,

    Du begegnest mir hier zum ersten Mal. :cool: Schön, dass Dir Icon gefällt...

    Quote

    Besser wäre es wenn das alles Richtung Programmiersprachen umverlagert wird mit nem eigenen Abschnitt.


    In dem Bereich hatte ich zuerst auch geschaut - fand aber wenig Ansatzpunkte. Bei der Fahrt, die Icon mittlerweile aufgenommen hat, wäre da eine eigene Rubrik nicht schlecht.

    Gute Idee!

    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo AliceDeh,

    das PDF-Dokument habe ich leider noch nicht aktualisiert.

    Im Beitrag 7 gibt es allerdings eine mittlerweile idiotensichere Installationsanleitung.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (October 12, 2017 at 8:52 PM).

  • Hi,

    ich bekomme bei den make Befehlen sowas hier:

    Code
    collect2: ld returned 1 exit status
    Makefile:32: recipe for target 'iconx' failed
    make[1]: *** [iconx] Error 1
    make[1]: Leaving directory '/home/pi/icon9_51/src/runtime'
    Makefile:63: recipe for target 'Icont' failed
    make: *** [Icont] Error 2

    und kann dann entsprechend auch keine compilierten Dateien ausführen, weil iconx nicht da ist. Hast du eine Idee?

    Hier mal das bin Verzeichnis:

    Code
    pi@BeeHive ~/icon9_51/bin $ dir
    hallo             hello_window.u1  host-repair.u1  icont      
    hallo.icn         hello_window.u2  host-repair.u2  libIgpx.a
    hello_window.icn  host-repair.icn  icon


    und:

    Code
    pi@BeeHive ~/icon9_51 $ ls
    bin  config  doc  ipl  lib  Makedefs  Makefile  man  README  src  tests

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

  • Hallo Dionysios,

    ich vermute, dass Du Dich im falschen Verzeichnis befunden hast, als Du make aufgerufen hast.

    Mache folgendes:

    Code
    cd ~/icon9_51


    und wiederhole Schritt 13. Wenn dann wieder Fehlermeldungen kommen, dann hast Du einen Schritt vorher ausgelassen oder Dich dort verschrieben. In dem Fall wiederhole alles ab Schritt 8.

    Was mich wundert ist die Anwesenheit der .u1 und .u2-Dateien. Diese werden nur erzeugt wenn der Compiler icont aufgerufen wird - aber mit Argumenten, die nicht bis zur ausführbaren Datei gehen. Also hast Du Dich dort (Schritte 19 und 21) auch verschrieben.

    Und das macht mich stutzig: :s Wenn Du im Schritt 13 Fehlermeldungen erhältst - warum machst Du dann bis Schritt 21 weiter?


    Poste bitte auch mal den Inhalt der Datei

    Code
    ~/icon9_51/Makefile

    Compilierte Dateien kannst Du unabhängig von der Anwesenheit von iconx ausführen. Der Compiler icont ist bei Dir vorhanden.

    Poste bitte auch mal die Ausgabe von

    Code
    echo $PATH
    echo $LPATH
    echo $IPATH
    
    
    ls -R ~/icon9_51/src
    pwd

    Äh ... irgendwas musst Du anders gemacht haben. Der User AliceDeh hat Icon letzte oder vorletzte Woche problemlos zum Laufen gebracht. Und das inklusive GPIO etc.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (May 3, 2015 at 9:43 AM).

  • Jap, mein Fehler, ... hab ich in dem anderen Thread schon geschrieben :) Sorry dafür. Deine Anleitung ist echt 1:1 so durchzuführen, dann klappts ;-)) Mitdenken ist nicht erlaubt und wird mit Verachtung bestraft (Berechtigungsprobleme). Shame on me.

    Nun noch eine Frage: Ich habe jetzt erfolgreich dein host-repair Script kompiliert. Ich konnte es unter X auch starten :bravo2: (über ssh gibt es natürlich die Fehlermeldung - cant open window).

    Schließe ich den Terminal unter X, ist auch das Fenster futsch. Läuft das Script weiter?

    Wie erreiche ich es, dass dein Programm bei Pi start jedes Mal automatisch mit der Option "auto repair" gestartet wird? Ich möchte ja den Pi auch eigentlich ohne startx starten und ohne Monitor dran betreiben.

    VG, Dio

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

  • Hallo Dio,

    na, welch ein Erfolgserlebnis am frühen Morgen!

    Das Tool Host-Repair habe ich für mich persönlich geschrieben, weil mir die lästigen Netzwerkausfälle mit damals unbekannter Ursache auf den Nerrv gegangen sind. Ich wollte einfach nur ein Gefühl dafür bekommen, wie oft das Problem auftritt und ob es irgendwelche Möglichkeiten gibt, das Problem bewusst hervorzurufen.

    Die beste Möglichkeit ist, ein Programm in einer graphischen Benutzeroberfläche laufen zu lassen.

    Ob das Programm läuft, kannst Du im Terminal mit

    Code
    pidof iconx

    feststellen. Ich würde mal erwarten, dass es ohne X nicht laufen wird.

    Du kannst aber gern die beiden Prozeduren, die für das Erkennen und Beseitigen der Netzwerkthematik zuständig sind, in ein eigenes "fensterloses" Programm stecken... Du müsstest Dir dann nur überlegen, wie das Programm Dich benachrichtigen kann. Ich persönliche halte die Benachrichtigung durch das Programm sinnvoller als die eigentliche Aktion.

    Denn eigentlich dürfte das Programm in einem stabilen Umfeld gar keine Ausfälle registrieren, insbesondere dann, wenn
    - die Stromversorgung stabil läuft
    - über den Raspberry Pi betriebene Verbraucher diesem mehr als ausreichend Strom übrig lassen
    - die Netzwerkkonfiguration sinnvoll im Einsatz ist

    Wenn Du das Programm automatisch beim Start des Raspberry Pi laufen lassen möchtest, dann musst Du dies über eine der zahlreichen Autostart-Optionen erledigen.

    Autostart macht Dir Vorschläge dazu.

    Wenn Du das Programm mit voreingestellten Optionen betreiben möchtest, dann musst Du diese beim Programmstart als Argument übergeben - und im Programm mögliche Argumente abfragen.

    Oder Deine favorisierte Option im Programmcode hinterlegen und neu compilieren.

    Wenn Du Deinen Raspberry Pi ohne Monitor, nur per SSH betreiben möchtest, wie soll Dir ein Programm, das auf dem Raspberry Pi läuft, denn Mitteilungen machen, wenn das Netzwerk nicht mehr vorhanden ist? :s :huh:

    Irgendeine Ausgabe-Möglichkeit sollte schon da sein. Oder möchtest Du eine 7Segment-Anzeige an den GPIOs des Raspberry Pi betreiben, die dann jeweils hochzählt... und über den Dezimalpunkt anzeigt, ob die Verbindung steht oder nicht?

    Möglich ist alles.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (June 5, 2015 at 10:22 PM).

  • Was ist mit deiner anfänglichen Version "ohne GUI" ? Ist das lauffähig und aktuell?

    Es darf ja ruhig loggen, z.B. einen Zähler in einer Datei, oder bei jedem Crash kurz den Zeitstempel in eine Log schreiben. Dann könnte ich selbst über SSH die LOG Datei aufrufen und nachsehen.

    Starten würde ich dein Skript gern bei @reboot über die Crontab.

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

  • Hallo Dio,

    was bringt Dir eine Logdatei auf der SD-Karte, wenn die Verbindung auch trotz intensivster Bemühungen durch das Programm nicht mehr hergestellt werden kann? Ganz viele Einträge in kurzer Zeit. Der erste Eintrag wurde dann wieder gelöscht, um die Log-Datei auf eine bestimmte Anzahl an Einträgen zu halten.

    Mein Tip an Dich: Schließe einen Bildschirm an Deinen Raspberry Pi an, lasse das Programm Host-Repair eine zeitlang unter X auf Deinem Raspberry Pi laufen. Und wenn Du ein Gefühl dafür bekommst, unter welchen Umständen die Netzwerkverbindung besonders häufig (und vor allem wie häufig) ausfällt, dann kümmerst Du Dich Schritt für Schritt um die Beseitigung der Ursachen. Und wenn dann alles zuverlässig läuft, dann kannst Du den Raspberry Pi immer noch "kopflos" betreiben.

    Übrigens: Wenn der der Raspberry Pi die Netzwerkverbindung verloren hat, dann ist auch nichts mehr mit SSH...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (March 18, 2015 at 10:11 AM).

  • Ja, so werde ich es tun. Ich dachte nur, dein Script sorgt dafür, dass im Ernstfall der Pi wieder erreichbar wird! Somit käme ich ja per SSH auch wieder drauf.

    Ich lasse es nun mal unter X laufen.

    Die meisten hier sagen ja, es läge an der Stromversorgung. Ich kann mir das zwar beim besten Willen nicht vorstellen, aber: Mit was für einer Stromquelle wäre das denn ausgeschlossen? Mein einziger USB Verbraucher "kopflos" ist ja ein kleiner WLAN Stick und mein Netzteil hat 2000mA.

    ---------------
    Aktuelles Projekt: Steuerung einer Heizungsanlage und eines Reifeschranks für Salami und Schinken mit dem Raspberry Pi, diversen Sensoren und Relais Boards.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!