Neues aus der Icon-Welt

  • Hallo zusammen,


    seit 2 Wochen schreibe ich wieder sehr intentensiv am Icon-Tutorial Teil 32. Zur Vorwarnung: Umfang und Komplexität toppen alles vorherige.


    Als Ausgleich zum aktuell lausigen Berater-Job und auch als Ausgleich zum Tutorial-Schreiben stolpere ich beim Suchen immer wieder über Dinge, die ich so noch nicht kannte. Heute entdeckte ich verschiedene Sachen:


    So steht hier:

    Quote
    6 Nov 2017: Icon 9.5.1 has been revalidated on MacOS 10.13 (High Sierra) and Ubuntu 17.10 (Artful Aardvark).

    Da sage noch jemand, mit der Programmiersprache Icon werde nichts mehr gemacht.



    Dann fand ich hier etwas, was entweder auch ganz neu ist - oder ich in der Form noch nicht beachtet habe.



    Das zum Arbeiten mit der Programmiersprache Icon eigentlich nicht genutzte Linux-Kommando icon hat einen Parameter -P, der an mir vollkommen vorbei gegangen ist. Wer diese Programmiersprache einsetzt, weiß ja, dass man eigentlich nur icont und iconx benötigt.


    Usage: icon –P 'program' [arg...Without –P, a single source file is read and executed with the given arguments. With –P, the program is given as a multi-line quoted string. Environment variables of icont and iconx (see below) are used if present.



    Hierzu gleich ein paar Ideen:

    1. Klappt das überhaupt?

    Code
    icon -P 'procedure main();write("Hallo");end'


    Ausgabe:

    Hallo


    OK. Das heißt, man kann kurzen Icon-Code direkt dem Linux-Kommando icon übergeben - der Quellcode wird direkt ausgeführt, ohne "Spuren" zu hinterlassen.



    2. Mehr Ausgaben - Schleife


    Code
    icon -P 'procedure main();every write(i := 1 to 10,": ", sqrt(i));end'


    Ausgabe:

    OK. Funktioniert - aber die Meldung nervt.


    Mal i als lokale Variable deklarieren:


    Code
    icon -P 'procedure main();local i; every write(i := 1 to 10,": ", sqrt(i));end'


    Ausgabe:


    Code
    1: 1.0
    2: 1.414213562
    3: 1.732050808
    4: 2.0
    5: 2.236067977
    6: 2.449489743
    7: 2.645751311
    8: 2.828427125
    9: 3.0
    10: 3.16227766

    Uiii... schon besser.



    3. Parameter für main() möglich?

    Code
    icon -P 'procedure main(args);local i;every write(i := args[1] to args[2],": ", sqrt(i));end' 1 10


    Ausgabe:

    Code
    1: 1.0
    2: 1.414213562
    3: 1.732050808
    4: 2.0
    5: 2.236067977
    6: 2.449489743
    7: 2.645751311
    8: 2.828427125
    9: 3.0
    10: 3.16227766


    OK. Funktioniert...


    4. Übrigens - und das zeige ich jetzt mal nicht - kann man mit dieser Technik auch einen einfachen Funktionsplotter erhalten.


    Ein banaler f(x) = cos(x)


    oder was Spannenderes:

    zeigt die Funktion f(x) = cos(x*sin(x*x)) mit einer Schrittweite von 0.0001. Der "Einzeiler" erzeugt außerdem noch einen Screnshot. Hm -... hätte ich das vor 35 Jahren gehabt, wäre der Mathe-Leistungskurs einfacher gewesen.



    Wir haben jetzt also folgende Möglichkeiten, in Icon geschriebenen Code ablaufen zu lassen:

    1. Ausführen über icont program -x
    2. Ausführen über iconx program
    3. Ausführen über system("Pfad/zu/program parameterliste") innerhalb eines anderen in Icon geschriebenen Programms
    4. Ausführen eines in Icon geschriebenen Programms, das den Aufruf eines externen Programmes unterstützt - vorausgesetzt der Systempfad enthält mindestens iconx.
    5. Ausführen über Terminal program parameterliste oder /Pfad/zu/program parameterliste
    6. Autostart
    7. Als Parameter beim Start eines LXTerminals
    8. Klick auf ein Piktogramm und Definition von .desktop - warum bezeichne ich es nicht als Icon? :shy:
    9. Auswahl aus dem Anwendungsmenü (s. Icon-Tutorial Teil 29)
    10. Auswahl aus der LxPanel-Leiste (s. Icon-Tutorial Teil 29)
    11. beim Testen aus der IDE heraus - wie das mit Geany und Textadept funktioniert, habe ich schon gezeigt...
    12. über einen geeigneten Shebang #!/usr/bin/env icon in Zeile 1 im Quellcode (des Hauptprogramms)
    13. durch eines über chmod +x program ausführbar gemachten Skriptes, das dann u.a. dann ein Icon-Programm startet
    14. durch Generierung eines Icon-Codes aus einem laufenden Programm heraus, der dann compiliert und aufgerufen wird
    15. Start eines kurzen Icon-Codes über icon -P 'programmcode' parameterliste


    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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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 6 times, last by Andreas ().

  • Zu 4.:


    Code
    icon -P 'link graphics procedure main(args);local x;WOpen("label=PLOTTER","size=800,600");x := 0.0;while x < 10 * &pi do {DrawPoint(20 * x, 300 - 200 * cos(x));x +:= 0.0001; write(x)};delay(2000); system("scrot");end'
    Code
    icon -P 'link graphics procedure main(args);local x;WOpen("label=PLOTTER","size=800,600");x := 0.0;while x < 10 * &pi do {DrawPoint(20 * x, 300 - 200 * cos(x*sin(x*x)));x +:= 0.0001; write(x)};delay(2000); system("scrot");end'

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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.