{{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Autor: Reinhard Zielinski │ │ Copyright (c) 2013 Reinhard Zielinski │ │ See end of file for terms of use. │ │ Die Nutzungsbedingungen befinden sich am Ende der Datei │ └──────────────────────────────────────────────────────────────────────────────────────────────────────┘ Informationen : hive-project.de Kontakt : zille09@gmail.com System : TriOS Name : PLEXUS - Zentrale Kommunikationseinheit der Borg Chip : Regnatix Typ : Programm Version : 02 Subversion : 00 Funktion : "Erste TRIOS-Shell für den Hive Logbuch : ################################################### Version 1.00 ################################################################################################################ 04-06-2013 : -Erster Fensteraufbau mit allgemeinen Funktionen 05-06-2013 : -Utilities-Fenster hinzugefügt, Anzeige der belegten Cogs ist möglich 06-06-2013 : -Farbänderung der Oberfläche mit Speicherung der eingestellten Werte auf SD-Card, Farben werden beim Start geladen 07-06-2013 : -Dateifenster erstellt -> mit Mausbedienung wird die Sache etwas komplizierter 10-06-2013 : -Statusleiste mit Uhranzeige, Startknopf und Anzeige der ausgewählten Datei 11-06-2013 : -Navigation in Dateifenster teilweise realisiert (Scrolling fehlt noch) -Starten von BIN-Dateien möglich, Anzeigen von Text-und Basic-Dateien möglich, Abspielen von Sid-und DMP-Dateien möglich -Starten von Bel und ADM-Dateien möglich 14-06-2013 : -Terminalfenster (Baudselektion fehlt noch) und Datum/Zeit-Einstellungen funktioniert -E-Ram-Monitor funktioniert nur die Eingabe der Startadresse fehlt noch -Dateiliste wird mit Attributen im E-Ram gespeichert, dadurch kann man im Dateifenster scrollen wärend Sid-File abgespielt wird -Startmenue hinzugefügt 16-06-2013 : -Baudselektion funktioniert, Popupmenues integriert -> Maus-Rechtsklick '################################################### Version 1.01 ################################################################################################################ 21-06-2013 : -E-Ram-Monitor erweitert, jetzt kann man direkt in den Speicher schreiben -E-Ram-Monitor Eingabe der Startadresse realisiert -SD-Card - Format Befehl hinzugefügt, funktioniert noch nicht zuverlässig (keine Ahnung warum), außerdem wird der Vol-Name nicht immer richtig gelesen -Datei-Info hinzugefügt -Datei-LöschBefehl hinzugefügt (Rename fehlt noch) -Programm hängt sich nach doppelklick auf ???? 22-06-2013 -Fehler gefunden ->waitcnt hat den Programmhänger verursacht ->ersetzt durch repeat-Schleife ->jetzt funktioniert alles wieder -ändern von Dateiattributen eingefügt und funktioniert -Datei-Icons hinzugefügt ->sieht cool aus :-) -SID-DMP-Player realisiert -Datei-Hex-Display hinzugefügt -> erreichbar über popupmenü (rechtsklick im Dateifenster) 24-06-2013 -Fehler in der Dateinamen-Anzeige in der Statuszeile bei Playerbetrieb korrigiert '################################################### Version 1.02 ################################################################################################################ 01-07-2013 -Datei-Kopierfunktion jetzt vorhanden -Datei-Attribute ändern korrigiert (bisher konnte man nur ein attribut ändern, jetzt können mehrere Attribute gleichzeitig geändert werden) -Dateilösch-Funktion korrigiert (hat bisher auch schreibgeschützte Dateien gelöscht, jetzt nicht mehr) -Datei-Kopierfunktion beschleunigt (durch Read und WriteData-Funktion in adm-fat) 03-07-2013 -Mülleimerfunktion hinzugefügt, ist noch ausbaufähig :-( -Möglichkeit, alle Dateien eines Verzeichnisses auf einmal zu kopieren oder zu löschen -Aufräumarbeiten, Programmteile etwas sortiert -Ram-Nutzung geändert (Bereich 0-$20000 bleibt frei ->Basic Reclaim-Funktion funktioniert sonst nicht) -Korrektur der Pfadabfrage beim Start, jetzt wird nach Wiederkehr aus einer Bin-Datei in das Verzeichnis zurückgekehrt aus dem die Bin-Datei gestartet wurde -E-Ram-Monitor Anzeige der geänderten Ram-Zeile nach Eingabe korrigiert 08-07-2013 -Versuch, Verknüpfungen für Verzeichnisse oder Bin-Dateien auf dem Desktop zu erstellen, mal sehen ,was daraus wird ? -Fenster für externe Programme erstellt, hier sollen kleine externe Programme rein (Taschenrechner, Kalender usw.) 10-07-2013 -Desktopverknüpfungen sind jetzt startbar und werden in ini-Datei gesichert und beim Start auch wieder geladen -Fehler noch in DMP-Player bei Aufruf von verknüpften DMP-Files (Anzeige im Player falsch) '################################################### Version 1.03 ################################################################################################################ 14-07-2013 -Korrektur der Playerroutine bei Start von Dmp-Datei-Desktop-Verknüpfungen -Löschen von Desktop-Verknüpfungen möglich -Fehler im Explorer beim Datei-Scrolling behoben -Version 1.03 ist nun die erste offizielle Version für das Hive-Forum 17-07-2013 -Aufräumarbeiten -Fehler in Reboot-Routine behoben (beim Reboot wurde die Ini-Datei mit falschen Werten für die Links überschrieben) -Pfadanzeige in der Statusleiste stimmt noch nicht (springt man aus einem Unterverzeichnis eine Ebene höher, stimmt die Pfadanzeige nicht mehr) 18-07-2013 -Im Mülleimer keine Links möglich (ist ja der Mülleimer :) -Ein Wechsel des Verzeichnisses im Mülleimer wird verhindert, da sonst die Pfadanzeige durcheinander kommt -Pfadanzeige zeigt zumindest immer das richtige aktuelle Verzeichnis an (nicht den kompletten Pfad-> daran arbeite ich noch) -Start von Links, wenn SD-Karte nicht gemounted war, führte zum Absturz -> behoben 23-07-2013 -System-Setting-Fenster erstellt, hier ist es möglich zu wählen, ob versteckte Dateien angezeigt werden und ob der Mülleimer verwendet wird 29-07-2013 -Abgespeckte DLL_Version erstellt um eingebettete Programme zu starten, diese Version wird nur von eingebetteten Programmen verwendet, da grundlegende Startfunktionen fehlen, diese werden beim ersten Start der Shell geladen (Systemfont,Grafikinitialisierung usw.) So sieht es zumindest optisch so aus, als würden die externen Programme in der Shell integriert sein -Copymarker wird beim Schließen des Dateifensters gelöscht, sonst wird man ihn nicht mehr los (nur noch Paste im Popupmenue verfügbar) -kleinere Korrekturen bei der Maus-Abfrage, etwas Code-Optimierung -noch 2480 Longs frei 31-07-2013 -kleinere Aenderungen in der Fenster-Verwaltung -ESC-Taste für Fensterlöschung eingefügt (löscht alle Fenster auf einmal) -DMP-Player Steuerung jetzt auch mit den Tasten + =nächster Titel - =Titel zurück und Space =Play/Stop möglich -Fehler in E-Ram-Poke im Ram-Monitor behoben (es wurde nach dem 8.Byte weiter geschrieben,jetzt wird immer an der achten Position beendet) -noch 2412 Longs frei '################################################### Version 1.04 ################################################################################################################ 04-08-2013 -Erste Versuche eine allgemeine Startdatei zu erstellen, in der alle Parameter in den Ram geladen werden, danach wird die eigentliche Shell gestartet, das spart Platz und es müssen nicht 2 Programme (die eigentliche Shell und die Dll gepflegt werden) -Programmteil-Infofenster in Programmteil-Window zum größten Teil integriert -> Longs gespart -Programm-Start-Logo hinzugefügt -> cooool -Kalender integriert, über Doppelklick auf Datum erreichbar -2220 Longs frei 05-08-2013 -kleinere Änderungen im seriellen Terminal, jetzt wird auch Backspace gesendet und im Terminal optisch korrekt auch bei Backspace geschrieben -serielles Terminal-Eingabefenster um eine Zeile erweitert (jetzt 20 Zeilen) -allgemeines Fensterhandling angepasst (kleinere Darstellungsfehler behoben) -Code optimiert -2231 Longs frei 15-08-2013 -Diverse Darstellungsfehler behoben -SID Dateiendung und Verarbeitung entfernt, ist ja keine Endung, die zum DMP-File gehört -Fehler in der Farbverwaltung behoben (beim Druck auf Cancel im Farbeinstellfenster wurden die Farben nicht zurückgesetzt) -START_FLAG eingebaut, Start-LOGO wird nur beim ersten Start von Plexus angezeigt -Code weiter massiv optimiert (213 Longs gespart) -2444 Longs frei 16-08-2013 -weitere Codeoptimierung -> 2505 Longs frei (274 Longs gespart) -im Color-Setting-Fenster wird jetzt der Farbwert auch dezimal dargestellt, kann manchmal hilfreich sein -Ini-Load und -Save optimiert -Fehler bei Color-Settings beseitigt(wurden Farben geändert und das Color-Setting-Fenster geschlossen, wurden die Farben nicht zurückgesetzt) -loadtile und LoadTileToRam-Routinen entfernt - werden nicht mehr benötigt, da die Tile Dateien in der Reg.sys geladen werden -2499 Longs frei '################################################### Version 1.05 ################################################################################################################# 17-08-2013 -automatische Link-Aktualisierung (wird eine neue SD-Karte eingelegt, werden die, in der Ini gespeicherten Links auf dem Desktop aktualisiert, ist keine Ini-Datei vorhanden, werden die Links auf dem Desktop gelöscht) -Farb und Systemeinstellungen werden ebenfalls aktualisiert -Fehler in der Anzeige der Dateianzahl behoben -2456 Longs frei 18-08-2013 -Fehler in der Format-Routine von adm-fat.spin behoben (Hive hängte sich beim Format Befehl auf) -Nach dem Formatieren wurde der Verzeichnisinhalt nicht korrekt dargestellt(nur Müll),Karte wurde aber korrekt formatiert -ohne Einträge kommt die entspr.Routine aus dem Tritt, deshalb wird nach dem formatieren der Trash-Ordner und die Ini-Datei auf die SD-Karte geschrieben -2454 Longs frei 19-08-2013 -noch etwas Codeoptimierung -Fehler in der Darstellung des Dateinamens bei CLR-Dateien behoben -optimiert,optimiert und wieder optimiert -2613 Longs frei 21-08-2013 -noch etwas Codeoptimierung -Korrektur Popup-Menue-X-Abfrage im Dateifenster (war zu groß) -Abfrage beim Kopieren und Einfügen schon existierender Dateien eingebaut -einige Änderungen in den Farbzuweisungen der Hilfsfenster (Kopier,Lösch,Playerfenster) -Icon für CLR-Dateien eingepflegt -2606 Longs frei 23-08-2013 -Änderung im Verzeichniswechsel, ein Doppelklick auf .. geht ein Verzeichnis höher und ein Doppelklick auf . wechselt ins Root-Verzeichnis -User-Mauspfeil eingebaut, wird in der reg.ini gespeichert -2550 Longs frei 24-08-2013 -Hex-Monitor um die Anzeige des HUB-Ram erweitert, Auswahl über Checkboxen -Editierung aber nur im E-Ram möglich -2501 longs frei 25-08-2013 -Dateifenster jetzt so gross wie Speichermonitor, Infofenster hat jetzt feste Position,da die gesamte Dateizeile als Rechtsklickbereich gilt -und wieder ein paar longs eingespart -2533 Longs frei 26-08-2013 -Fenster zusammengefasst, es gibt nur noch 2 Fenstertypen 1=Arbeitsfenster 2=Infofenster -Hauptschleifen-Struktur umgebaut -Strings zusammengefasst -> wieder Platz gespart -2619 Longs frei 27-08-2013 -wieder Code geschrumpft -Adresseingabe im Ram-Monitor korrigiert (5 Stellen sind möglich) -Adressraum-Eingrenzung bei der Auswahl des Hub-Ram (hier nur 4-stellig), E-Ram 5-stellig -2642 Longs frei '################################################### Version 1.06 ################################################################################################################# 29-08-2013 -wieder einige Optimierungen durchgeführt (Icon-Darstellung) -2667 Longs frei 30-08-2013 -Fehler in der Checkboxen-Funktion behoben (falsche x-Koordinaten durch die Fensterzusammenfassung) -2664 Longs frei 31-08-2013 -einige Texte in den Ram ausgelagert, spart massiv Platz -Codeoptimierung -2758 Longs frei 07-09-2013 -Fehler in Kopierfunktion behoben (bei der Meldung File exist wurde das Kopierfenster gelöscht und es war nur noch der Fortschrittsbalken sichtbar) -Fehler in der Routine Mülleimer erstellen behoben (existierte das Verzeichnis nicht, wurde nach dem Erstellen der Verzeichnismarker falsch gelesen) -Beim Wechsel der SD-Card wurde der Mauszeiger nicht aktualisiert ->behoben -durch Optimierungen wieder etwas Code gespart -2770 Longs frei 15-09-2013 -Hervorhebungsbalken für Dateinamen im Explorer hinzugefügt->noch nicht perfekt, da andersfarbige Dateinamen in der falschen Farbe zurückgeschrieben werden -Fehler in der Playerroutine behoben (wurde nach dem Playerfenster ein anderes Fenster aufgerufen, löschte der Player nach Titelende eine Zeile im aktiven Fenster-->Balkenleer-Routine) -Buttonweg-Routine beim Start hinzugefügt, um die Buttonwerte zu resetten(sonst erschien beim Klick in die Titelzeile ein ungewollter Button) -playerstop-Funktion bei diversen Dateioperationen eingefügt um Fehlfunktionen abzufangen -erste Codesegmente für Venatrix-Erweiterungskarte in reg-ios-64 eingebaut -2686 Longs frei 17-09-2013 -Fehldarstellung Aboutbox, wenn Player lief behoben -noch etwas Code geschrumfpt -der Versuch, vollständiger Tastenbedienung von Plexus stellte sich als zu umfangreich heraus.->wird zurückgestellt,wegen Speichermangel -2719 longs frei 22-09-2013 -Fehler Verzeichniswechsel im Trash-Ordner behoben -Darstellung Trash in der Statusleiste hinzugefügt -Venatrix-Dateien mit der Endung VNX sind nun startbar, entsprechende Routinen in reg-ios hinzugefügt -2691 Longs frei 23-09-2013 -Abbruch-Möglichkeit beim Kopieren oder Löschen von Dateien eingebaut -diverse Fehler in der Darstellung des Hervorhebungsbalkens behoben, hoffentlich funktioniert er jetzt richtig!? -Venatrix-Platine eingetroffen, die Tests gehen in die nächste Runde nach Aufbau der Testplatine -2648 Longs frei '################################################################################################################################################################################# '####################################### PLEXUS 2.0 mit VENATRIX und SEPIA-Unterstützung ######################################################################################## '################################################################################################################################################################################# '***************************** Einbindung der Sepia-Karte, Einbindung der Bus-Erweiterungs-Platine Venatrix*********************************************************************** 29-09-2013 -Venatrix-Karte eingebunden, wählbar über Settings -Venatrix-Dateien startbar gemacht, noch hakt es manchmal !? -erste Venatrix-Testdatei erstellt -in Venatrix befindet sich ein Loader, der über den Start einer mit VNX endenden Venatrix-Datei mit User-Code gefüllt werden kann -Basic,Climber,Boing neu kompiliert ->durch Venatrix-CS-Signal nötig -fehlt noch die Sepia-Karten-Unterstützung -2602 Longs frei 10-10-2013 -im Datei-Popupmenue den Befehl Delete mit Separator versehen -Backup und Restore durch variablen Popupyy Merker erweitert um auf die verschiedenen Popupmenue-Längen richtig zu reagieren -Dateihervorhebung merkt sich jetzt auch die Farbe von Verzeichnissen und schreibt die Namen in der richtigen Farbe zurück -Start-Logo-Datei reg.sys für Version 2.0 farblich verändert -2592 Longs frei 28-10-2013 -Anzeige der Anzahl der Verzeichnisse in der Titelzeile des Dateifensters und Korrektur der Datei und Verzeichniszählung -2503 Longs frei 02-11-2013 -Sepia-Testprogramm entworfen, Digital-Port- und Joystickabfragen funktionieren schon -startbar über das Programms-Fenster durch klick auf das IO-Card-Symbol ganz links -2482 Longs frei 08-11-2013 -Sicherheitsabfrage für zu ladende Dateien und Links hinzugefügt -Neues Datei-Icon für externe Programme hinzugefügt -externe Programme haben die Dateiendung DLL -2450 Longs frei 11-11-2013 -Sepia-Card-Scanner eingebaut, jetzt wird automatisch auf eine Sepia-Karte gescannt und im Settingmenue angezeigt -Für die Venatrix-Karte hab ich noch keine Idee für den Scanner, Bus_putchar und Bus_getchar scheiden aus, da sie auf Signale warten und so -bei nicht angeschlossener Karte das System einfrieren (waitpeq-Befehl) -2442 Longs frei 13-11-2013 -Venatrix-Card-Erkennung über Register 7 des Plx-Pollers realisiert, Pin 22 vom ADM-Port wird auf High abgefragt. Mittels Pullup-Widerstand auf -der Venatrix-Bus-Platine am Port 22 des ADM-Ports wird das Vorhandensein der Venatrix-Karte abgefragt -2429 Longs frei 15-11-2013 -Der Puffer für Bildschirmbereiche wurde von Bellatrix in den E-Ram verschoben, dadurch wurden in Bella ca.600Longs frei und es ist nun möglich, große -Bildschirmbereiche zu puffern und wieder herzustellen -somit wird das Überlappen und Wiederherstellen von mehreren Fenstern möglich, ob ich das mache, weis ich noch nicht -Menueroutinen entfernt (durch die Pufferverlagerung nicht mehr nötig)->umgestellt auf popup -noch etwas Code geschrumpft -2433 Longs frei 20-11-2013 -Venatrix-Karten-Erkennung erfolgt über den EEPROM von Venatrix am Sepia-I2C-Bus (Adresse $50), keine Ahnung, ob das sauber ist, funktioniert aber -Entsprechende Routinen für Cog-Anzeige und Setting-Anzeige angepasst und zusammengefasst, dadurch wieder etwas Code gespart -Venatrix hat jetzt einen eigenen I2C-Slave Treiber und wird über Adresse 5 erkannt -2434 Longs frei 24-11-2013 -Durch diverse Versuche hat sich herausgestellt, das die Ping-Funktion allein nicht ausreicht um -das Vorhandensein der Sepia oder Venatrix-Karte zu detektieren, da eine nicht angeschlossene Karte -eine Null zurückgibt, genauso wie ein angeschlossener I2C-Teilnehmer. Deshalb wird beim Scan die -Anzahl Nullen mit der Gesamtanzahl der Adressen verglichen. Ist die Anzahl zurückgegebener Nullen -mit der Anzahl Adressen identisch, so ist offensichtlich keine Karte vorhanden. Diese Methode -verhindert Fehldetektionen und gerade in Verbindung mit der Venatrixkarte ein Festfahren des HIVE -zum Beispiel bei Aufruf der Cog-Anzeige. -2440 Longs frei '################################################### Version 2.01 ################################################################################################################# 21-12-2013 -Venatrix-Karten-Erkennung umgebaut, da sie nicht richtig funktionierte -2432 Longs frei '################################################### Version 2.02 ################################################################################################################# 27-01-2014 -es geht weiter -Window-Routine wird von Bellatrix übernommen, entsprechend in Plexus gekürzt -Fehler in der Popup_Info_weg Routine behoben, der rechte Schließen Button konnte auch nach dem Löschen des Fensters angeklickt werden -Close_Klick und Double_Klick zusammengefasst -2478 Longs frei 30-01-2014 -Close_klick entfernt und durch ios.get_window ersetzt, dadurch Code gespart -Routine Hauptschirm entfernt -werde versuchen einen Scheduler einzubauen, mal sehen, was draus wird -Icon's für Scheduler erstellt und erste Anzeigetests für die Bimmel -> sieht cool aus -2468 Longs frei 12-02-2014 -Änderungen in der admsid.spin, die Abfrage der Sepia-Karte muss vor dem Starten eines neuen Administra-Codes beendet werden, sonst funktionieren -Programme, die eigenen Administra-Code mitbringen nicht korrekt -> in diesem Fall der IRC-Client von Joerg -Jetzt ist das Starten des IRC-Clienten aus Plexus möglich :-) -sollte jetzt auch das Problem mit Basic 2.1 und älteren Plexus-Varianten behoben sein? '################################################### Version 2.03 ################################################################################################################# 14-02-2014 -Beginn des Einbau's der Tastaturbedienung von Plexus -Regal-Aufrufe auf die F-Tasten gelegt -Mülleimer anzeigen, leeren auf Taste T und E -Mount/Unmount auf Taste M -SD-Card-Info auf Taste I -Enter-Taste als OK-Tastenabfrage -hoch und runter scrollt durch das Datei- und Ram-Monitor-Fenster -Links sind startbar über Taste L und Nummerntaste 1..3 -im Programms-Fenster per Nummerntaste DLL-Programm starten (momentan nur 1 und 2) -System-Info-Fenster F6 und Nummerntasten 1-3 -2314 Longs frei 15-02-2014 -durch die Tastenbedienung wird eine Hilfe nötig, in der die Tastenbelegung erklärt wird -Hilfefenster über Taste F1 erreichbar (eigentlich nur das Textdisplay, funktioniert auch so), ruft die Datei Hilfe.txt auf -2311 Longs frei 18-02-2014 -Tastatureinbindung fortgesetzt, Dateihandling im Explorer realisiert, noch nicht hundertprozentig perfekt ->Copy und Paste fehlt noch -Handling im Color-Settings-Fenster und Baud-Settings fehlt noch -2220 Longs frei 19-02-2014 -Baud-Einstellung funktioniert mit Tastenbedienung -Pfeilnavigation im Color-Fenster funktioniert -Fehler in Dir-Speicher-Lösch-Routine behoben (ein Eintrag zuviel übrig geblieben) -Korrektur der Explorer-Tastenbedienung (Scrollroutine hat nicht richtig funktioniert) -2161 Longs frei 20-02-2014 -ganz nebenbei wird noch eine DOS-Shell als DLL integriert (abgewandelte Regime-Version) -diese ist im Programms-Fenster startbar -2139 Longs frei 22-02-2014 -Farbwerte im Color-Setting-Fenster können jetzt durch Eingabe des Dezimal-Farbwertes über die Tastatur geändert werden -Auswahl über Pfeiltasten, Eingabe startet nach drücken der Tab-Taste -Kalendernavigation über Tasten bedienbar (Pfeiltasten für Monats-und Jahr-Wechsel) -Datum- und Uhrzeiteinstellung jetzt über die Tastatur möglich (mit Tab auswählen und mit Pfeiltasten hoch/runter einstellen) -etwas Code zusammengefasst -Hilfedisplay mit Playerstop-Abfrage ergänzt -Copy und Paste jetzt auch über Tastatur erreichbar (C=Copy, P=Paste) -Format-Befehl auf Taste F, wenn kein anderes Fenster angezeigt wird -jetzt fehlt nur noch der RAM-Monitor und das Systemsetting-Fenster -1939 Longs frei 24-02-2014 -Systemsetting-Fenster über Tasten bedienbar (Tasten S und U) -Auswahl der Ram-Bereiche im Ram-Monitor über die Tasten H und E änderbar -1916 Longs frei 25-02-2014 -RAM-Monitor jetzt über Tasten bedienbar -das Löschen von Links ist über Taste Entf+1..3 möglich -somit ist die komplette Tastenbedienung von Plexus realisiert !!! '################################################### Version 2.04 ################################################################################################################# 25-02-2014 -Fehler in der Dateiselektion behoben (nach dem Löschen des Dateifensters und Neuaufruf wurde der Scrollmarker falsch gelesen) -Aktualisierung des Dateifensters beim Sprung des Dmp-Titel-Zählers zurück auf 1 (nach dem letzten Titel) -1862 Longs frei 26-02-2014 -Dateiliste wird jetzt nur von SD-geladen,wenn sich das Verzeichnis ändert -bleibt man also im Verzeichnis , kann das Dateifenster beliebig oft geöffnet und geschlossen werden, ohne das ein Song unterbrochen werden muss -Fehler im Aufruf der Dateiliste behoben, nach dem Mülleimer wurde das SD-Card Verzeichnis nicht mehr eingelesen, kam durch den neuen Change_marker -1822 Longs frei 27-02-2014 -einige Darstellungsfehler beim wiederherstellen des Infofenster-Hintergrundes behoben -Parameterfenster für Start-Parameter von Links angefangen -Handling der Links verbessert, jetzt können nur vorhandene Links zum starten,löschen oder parametrieren angewählt werden (Link_counter) -Parameter-Fenster-Handling soweit fertig, jetzt muss nur noch die Eingabe (und das Ändern) funktionieren. -1756 Longs frei 28-02-2014 -Parametereingabe funktioniert soweit, zwar noch nicht perfekt, aber es geht. -nun muss der entsprechende Parameter beim Start übergeben werden -Texteingabe beim Terminal verbessert -1639 Longs frei 01-03-2014 -die Übergabe von Parametern scheint zu funktionieren -neue Funktion in reg-ios eingefügt, paracopy (da die Parameter im Link-Speicher stehen wird mit paracopy direkt in den Parameter-Ram von Trios kopiert) -Basic mit der Start-Parameter-Übernahme erweitert ->coole Sache, gleich beim Start Basic-Befehle ausführen zu lassen -die Parameterfunktion müsste man jetzt mit anderen Programmen ausprobieren -diverse Fehler in der Tastenabfrage, beim Attribut-Handling und dem Explorer-Aufrufen behoben, hat gekostet :-( -DCF-Routinen zum Betrieb eines DCF-Empfängers in Administra und der Reg-Ios eingebaut -Im Plexus Hauptbildschirm wird die Synchronisation in der oberen Titelleiste als Antennensymbol dargestellt -synchronisiert wird die RTC dann jede Stunde, noch ist kein Empfänger dran aber morgen wirds ausprobiert :-) -1573 Longs frei 02-03-2014 -DCF-Modul an den Hive gehängt, noch gibt es Probleme mit der Synchronisation, diese funktioniert nur außerhalb des Gehäuses -Prinzipiell funktioniert das Ganze .Vielleicht konstruiere ich das DCF-Modul als Steckmodul für den Erweiterungsbus -nach diversen Versuchen ist klar, ein Einbau ins Hive-Gehäuse scheidet definitiv aus, da der Empfang zu stark gestört wird -also werde ich den DCF-Empfänger extern betreiben, wie, weis ich noch nicht (Modul für Venatrix oder per Kabel an den Hive) -zunächst folgt die Einbindung der Möglichkeit, den DCF-Empfänger unter Plexus auszuwählen (als externe DLL) -und ein Testprogramm für den Empfänger wäre auch hilfreich (warscheinlich extern als DLL). -1569 Longs frei 03-03-2014 -einige Texte in den E-Ram ausgelagert, ram_txt-Routine gekürzt, dadurch einige Longs gespart -1594 Longs frei 04-03-2014 -damit im Root-Verzeichnis nicht zuviel Chaos durch diverse Dateien entsteht, werde ich ein Plexus-System-Verzeichnis erstellen, wo alle zu -Plexus gehörenden Hilfsdateien enthalten sind. Das Verzeichnis heisst PLEXUS -Plexus-Systemverzeichnis eingerichtet und entsprechende Änderungen im Code vorgenommen -Plexus-DLL-Dateien entsprechend angepasst -1570 Longs frei 05-03-2014 -Grundgerüst DCF-Testprogramm erstellt -kleine Korrekturen in der Icon-Darstellung vorgenommen -überflüssige Variablen gelöscht -Routine iconpress gekürzt -1566 Longs frei '############################################################### Version 2.05 #################################################################################################### 09-03-2014 -Fehler in der Mount-Routine behoben, es wurde nicht ins Systemverzeichnis zum Lesen der Ini-Datei gesprungen -dadurch wurden die Links nicht gefunden und nicht angezeigt -DCF-Testprogramm weitergemacht, zeigt jetzt den aktuellen Status der Verbindung an mit diversen Parametern -Bluetooth und WLAN-Symbol erstellt und in reg.fnt eingebunden -die Symbole werden testhalber in der Titelleiste angezeigt, ein Bluetooth-Modul bei ebay erstanden, mal sehen wie es funktioniert -als WLAN-Modul kommt warscheinlich ein Flyport zum Einsatz, erst mal bluetooth dann sehen wir weiter -beide Module werden für Venatrix als Steckmodul ausgeführt -Fehler in INI-Load-Routine behoben, Mauszeiger wurde nicht zurückgesetzt -1548 Longs frei 12-03-2014 -DCF-Empfang fest in Plexus integriert, Empfänger wird an ADM-Port 22 angeschlossen und in Administra abgefragt -DCF-Empfänger wird im Setting-Menue aktiviert -Synchronität wird in der Titelzeile durch ein Antennensymbol dargestellt (grau=nicht synchron, farbig=synchron) -Fehler in Iniload behoben, DCF-Marker wurde nicht geladen -reg.sys entsprechend angepasst, hier werden alle Ini-Werte als erstes geladen -Abfrage des DCF-Empfängerstatus eingebaut um Mehrfachstart der DCF-Cog zu verhindern -erste Versuche mit einem Bluetooth-Empfänger in Venatrix ->vielversprechend -1513 Longs frei 13-03-2014 -etwas Codeoptimierung -1523 Longs frei 14-03-2014 -Bluetooth-Settings über Programms-Fenster (Programm 5=bltooth.dll) aufrufbar, zum Konfigurieren des HC05 Bluetooth-Moduls -noch etwas Codeoptimierung -kleine Korrekturen in der Abfrage der DCF-Synchronität -1515 Longs frei 15-03-2014 -kleinere Anpassungen im Programmteil Input_Text (Scrollbereich wird aus den x-y-Übergabeparametern gebildet und ist nicht mehr fest) -Tests mit dem Bluetooth-Modul sind erfolgreich, nur der PIN-LED will nicht funktionieren, lt.Datenblatt erst nach dem Pairing aktiv??? -AT-Kommandos zum Konfigurieren sind einfach im Terminal einzugeben, vielleicht kann ich dadurch die DLL einsparen, mal sehen -wird gepairt, müsste noch das Bluetooth-Symbol in der Titelleiste auftauchen. -dazu muss der KEY-Pin aber an einen freien Port-Pin (Statusabfrage nur im AT-Modus möglich), ADM-Port 21? -ADM-Port-Belegung 19+20=I2C (Sepia+Joystickkarte), 22=DCF-Modul, 21=Bluetooth-Key-Pin? -timerzeahler-Schleife eingebaut um den BUS-Datenverkehr zu entlasten (nur jede 150zigste Schleife wird die Zeit abgefragt) -DLL-Dateien mit DCF-Indikator ausgerüstet und ebenfalls timerzaehler-Schleifen eingebaut -playerstop-Routine zentraler eingebaut (dadurch ein Long gespart) -1499 Longs frei 18-03-2014 -der Versuch, eine aktive Bluetooth-Connect-Anzeige in der Titelzeile zu implementieren, ist gescheitert -der Hive reagiert mit Fehlfunktionen und festhängen -die Bluetoothanzeige wird jetzt blau, wenn das Terminal (und damit der serielle Port) geöffnet wird -1478 Longs frei 19-03-2014 -System-Setting-Fenster umgebaut und mit der Bluetooth-Option erweitert -Bluetooth_ON-Merker wird jetzt in der Ini-Datei gespeichert und geladen -Laden der Error-und Systemtexte durch andere Laderoutine jetzt schneller,da jeder Text jetzt direkt im Speicher angesprungen wird -dadurch eine viel schnellere Ausgabe, egal wieviele Texte sich im Ram befinden -Bluetooth-Connect-Anzeige erfolgt jetzt über den LED-Ausgang des Moduls, wird an Port 16 von Venatrix abgefragt und entsprechend -in der Titelleiste angezeigt -> das funktioniert jetzt perfekt -Existiert Venatrix nicht, erfolgt die Connect-Anzeige sobald das Terminal-Fenster geöffnet wird (nicht real aber besser als nichts) -das Scannen der Expansions-Karten erfolgt jetzt gleich beim Start von Plexus - somit braucht der venatrix und sepia Marker nicht in der Ini gespeichert werden -und die Bluetooth-Connect-Anzeige funktioniert entsprechend -1420 Longs frei 20-03-2014 -Routine:Texteingabe in Text_Input integriert, dadurch ein paar Longs gespart -1446 Longs frei 21-03-2014 -Serial-Treiber ausgetauscht, dadurch weniger Datenverluste durch größeren Puffer ->hat aber gekostet :-( -Versuch der Einbindung eines YModem-Treibers für die Datenübertragung von Plexus zum PC und zurück, mal sehen, obs funktioniert -1218 Longs Frei 22-03-2014 -Der YMODEM-Treiber funktioniert teilweise, die Übertragung zum PC funktioniert, umgekehrt leider noch nicht -allerdings verschlingt der Treiber sehr viel Platz,deshalb wird er warscheinlich als Dll ausgelagert -kleiner Vorgeschmack ->435 Longs frei :-( -in Routine Popup ->ios.backup_area integriert -1411 Longs frei 23-03-2014 -YModem-Treiber als Dll erstellt -Aufruf erfolgt im Explorer-Popupmenue (Send und Receive) -Korrektur in der Regalabfrage, überdeckte ein Popup das Regal, konnte man den entsprechenden Menuepunkt nicht anwählen -stattdessen wurde das darunterliegende Regalsymbol aktiviert -Textdisplay-Routine in der Breite geändert, jetzt wird bis Position 34 geschrieben -Standard-Puffergröße im seriellen Treiber auf 128 Bytes eingestellt -1345 Longs frei 25-03-2014 -Doppelten Seriell-Treiber wieder entfernt, da YMODEM als Dll ausgeführt wird, wieder etwas Platz -Schaffung eines Return_Merkers, hier kann die Aktion (Als Tastencode) hinterlegt werden, die nach Rückkehr aus einer DLL ausgeführt werden soll. -Dadurch entsteht eine noch bessere Illusion, das DLL's in Plexus integriert sind -playerstop-routine beim Mülleimer entleeren hinzugefügt -1392 Longs frei 29-03-2014 -Sanduhr-Anzeige beim Beenden von DLL's hinzugefügt, damit entfällt die Rückkehrmeldung -Fehler im Rückkehrmarker behoben, der entsprechende Rambereich wurde beim Erststart nicht gelöscht, dadurch wurde der Rückkehr-Verzeichnismarker -mit unsinnigen Daten gefüllt -1375 Longs frei Notizen : Window 0 = Hauptbildschirm, darf nicht anderweitig genutzt werden !!! Window 1 = Utilitie-Fenster (serielles Terminal, Uhr-Einstellung,Color-Settings, Ram-Monitor,Player,Systemsettings,Baud-Einstellung) Window 2 = Infofenster (SD-Card-Info,Kopierfenster,Messagebox,Datei-Info) }} OBJ ios: "reg-ios-64" CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 '-------- Speicher für diverse Texte ------------ TXT_RAM = $20000 vidnfo = $21000 sndnfo = $21200 prgnfo = $21400 Verz_RAM = $21800 '-------- Speicher für Titelliste --------------- DMP_RAM = $40000 '-------- Overlay-Puffer ------------------------ BRAM = $50000 '-------- Speicher für Systemfont --------------- SYS_FONT = $66800 '....$693FF ' ab hier liegt der System-Font 11kb Hour_Glass= $66800+(167*16*4) MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte '-------- Speicher für Dateiliste --------------- DIR_RAM = $69440 '....$7DFFF '-------- YMODEM Temp-Speicher ------------------ YMODEM_RAM = $7E400 '... $7E417 Name, der zu sendenden Datei, Was soll gemacht werden(0Empfang,1Senden)+Dirmarker MARKER_RAM = $7E410 '... $7E414 Dirmarker-Speicher RETURN_POINT= $7E420' Aktion nach Rückkehr aus YModem (zBsp.Explorer öffnen) '-------- Speicher der Fenster-Tiles ------------ WTILE_RAM= $7E500 '.... $7E5FF ' Win-Tile Puffer hier können die Tiles, aus denen die Fenster gebaut werden geändert werden '-------- Speicher für Verknüpfungen ------------ LINK_RAM = $7FE00 PARA_RAM = $7FE40 SETTING_RAM = $7FF00 'Hier stehen die System-Settings START_FLAG = $7FFFF 'Flag das Plexus schonmal gestartet wurde ->Logo unterdrücken RETURN_FLAG = $7FFFE 'Rückkehr-Flag aus gestarteter Bin-Datei ADM_SPEC = %00000000_00000000_00000000_01010011 BEL_COLORS =64 BEL_X =640 BEL_Y =480 BEL_ZEILEN =30 BEL_SPALTEN =40 'INTERPRETER = $f004 'interpreteradresse (rom) Adressraum =4 'Adressbereich für Speicher-Monitor, Standardwert 4-stellig (plus 1 für ext.Ram) '******************Farben ******************************************************** #$FC, Light_Grey, #$A8, Grey, #$54, Dark_Grey #$C0, Light_Red, #$80, Red, #$40, Dark_Red #$30, Light_Green, #$20, Green, #$10, Dark_Green #$1F, Light_Blue, #$09, Blue, #$04, Dark_Blue #$F0, Light_Orange, #$E6, Orange, #$92, Dark_Orange #$CC, Light_Purple, #$88, Purple, #$44, Dark_Purple #$3C, Light_Teal, #$28, Teal, #$14, Dark_Teal #$FF, White, #$00, Black len = 80 'länge der Eingabezeile im Terminal '------------- TASTENCODES ------------------------------------------------------- Backspace = $C8 ' PS/2 keyboard backspace key ESC_KEY = 27 RETURN_KEY = 13 Plus_Key = 43 Minus_Key = 45 Space_Key = 32 TAB_KEY = 9 ENTF_KEY = 186 EINF_KEY = 187 '------------- F-Tasten für Zusatzfunktionen ------------------------------------- F1_Key = 208 F2_Key = 209 F3_Key = 210 F4_Key = 211 F5_Key = 212 F6_Key = 213 F7_Key = 214 F8_Key = 215 F9_Key = 216 F10_Key = 217 F11_Key = 218 F12_Key = 219 '------------- ALTGR+F ---------------------------------------------------------- ALT_F1 = 159 ALT_F2 = 158 ALT_F3 = 157 ALT_F4 = 156 ALT_F5 = 144 ALT_F6 = 145 ALT_F7 = 146 ALT_F8 = 147 ALT_F9 = 151 ALT_F10 = 150 ALT_F11 = 149 ALT_F12 = 148 '----Icon-Nummern---------------------------------------------------------------- BEL_PIC =14 ADM_PIC =15 BIN_PIC =9 BAS_PIC =107 DIR_PIC =7 ALL_PIC =8 DMP_PIC =120 TXT_PIC =121 SYS_PIC =122 COG_PIC =75 BACK_PIC =124 VOR_PIC =123 PLAY_PIC =125 STOP_PIC =141 CLR_PIC =155 EXT_PIC =156 '-------------------------------------------------------------------------------- VAR 'systemvariablen byte mountmarker,tmptime 'Marker für Mountbefehl, Vergleichsvariable für Time-Funktion byte buttonx[8] 'Knöpfe byte buttony[8] byte windownum[3] 'Arbeits-Windows byte windowx[3] byte windowy[3] byte windowxx[3] byte windowyy[3] byte messagex 'x-Position der Messagebox '---------------- Farben ------------------------------------------- byte act_color 'Speicher für gewählte zeichenfarbe byte hcolstatus 'statusleiste hintergrundfarbe byte winhcol 'Fensterhintergrundfarbe byte winframecol 'Fensterrandfarbe byte shellhcol 'Hauptfensterfarbe byte Titelhcol 'Titelleistenfarbe byte titeltextcol 'Titelleistentextfarbe byte statustextcol 'Statustextfarbe byte buttonhcol 'Buttonhintergrundfarbe byte buttontextcol 'Buttontextfarbe byte messagehcol 'Messagebox-Hintergrundfarbe byte messagetextcol 'Messagebox-Textfarbe byte selectcol 'selektionsfarbe byte mousecol 'Mauszeigerfarbe byte panelcol 'Farbe des Utilitie-Panels '------------------------------------------------------------------ byte iconnr[30] 'Tilenummer des Icons byte iconx[30] 'Icon Koordinaten byte icony[30] byte iconf1[30],iconf2[30],iconf3[30] 'Iconfarben byte buff[8] 'Dir-Befehl-variablen byte filestring[13] 'selektierte Datei byte dumpstring[13] 'dmp-datei byte copystring[13] 'kopier-string word filenumber,dirnumber 'Anzahl Dateien und Verzeichnisse im aktuellen Verzeichnis byte infomarker 'Marker für Info-Fenster-Anzeige byte ma,mb,mz 'Maus-Taste und Scrollrad byte play 'Player läuft oder nicht byte dirname[20] 'Directoryname long scrollende,scrollanfang,zeilenanfang, zeilenende 'Variablen für Scrollfunktion byte zeile,spalte 'Zeilen und spalten für terminalfenster byte inputline[len] 'Eingabezeile Terminal byte baud 'Baud-Parameter byte tag,monat,stunde,minute sekunde 'Datum -und Zeit word jahr long startadresse,endadresse 'E-Ram-Monitor Variablen byte menuemarker 'Marker für Startmenue long filelen 'Dateigröße byte filedir 'Marker ob Datei oder Verzeichnis byte filehidden 'Datei versteckt Attribut byte filesystem 'Datei System Attribut byte filearchiv 'Datei Archiv Attribut byte filerdonly 'Datei nur lesen Attribut byte fileday 'Datei Erstellungstag byte filemonth 'Datei Erstellungsmonat byte selection 'selektierte Datei word fileyear 'Datei Erstellungsjahr byte popupx 'x und byte popupy 'y-Koordinaten des Popupmenues byte popupyy '2te y-koordinate byte popupxx '2te x-koordinate byte popupmarker 'Marker für Popupmenue byte menue_nr 'nr des gerade angezeigten Menues byte textline[12] 'Texteingabestring long tp 'Texteingabe-übernahmestring byte platz 'Platzhalter für Verzeichnisname in der Statusleiste byte mc 'Mouse z-Koordinate byte lines 'Zeilen im Dateifenster byte attrmarker[4] 'Datei-Attribute-Marker byte tabx[3],taby[3],tabl[3] 'Tab-Parameter byte playerposition 'Position im Dmp-File word dmpfiles 'Anzahl Dmp-Files im Verzeichnis long dmplen 'Länge des Dmp-Files word dumpnummer 'aktuelle Dmp-Nummer word tmpplay 'temporäre Dmp-Nummer byte buttontext[50] 'String mit allen Button-Texten (8*6 Zeichen) byte attribute[4] 'Attribute-Set byte font[25] 'Hilfsstring für Strings aus dem Ram long rootdir 'root-Dirmarker long systemdir 'system-Dirmarker long trashdir 'Muelleimer-Dirmarker long userdir 'user-Dirmarker long targetdir 'Ziel-Dirmarker long HEX_ADRESSE 'Adresse E-Ram-Monitor word trashcounter 'Muellzähler byte dump_ram 'Anzeige externer oder interner speicher byte pfeil,pfeil_old 'Positionspfeil im Color-Fenster byte change_marker 'Merker, das Verzeichnis geändert wurde byte do_restore 'merker, ob Displayhintergrund wieder hergestellt wird byte link_merker 'merker, ob bei geöffnetem Explorer ein Link angeklickt wird byte attribut_fenster 'merker für Datei-Info-Fenster '---------- Variablen für Programmverknüpfungen --------------- long Link_marker[3] 'Dir_marker der 3 Links byte link_string[40] 'String für die drei Links byte link_pointer 'Linkposition byte link_counter 'Linkzaehler byte Verzeichnis_counter 'Verzeichnis-Tiefenzähler byte muelleimer 'Marker für Muelleimerfenster byte Show_Hid_Files 'Versteckte Dateien anzeigen Marker byte Use_Trash 'Mülleimer Verwenden Marker byte util 'Utilitie-Marker '----------- Kalender-Variablen ------------------------------- byte today byte tag_zahl 'Anzahl Tage im Monat und Schaltjahrerkenner byte Wert_Monat word Wert_Jahr '----------- Hervorhebungsbalken im Explorer ------------------ byte y_old 'alte y-Koordinate byte highlight 'Hervorhebungsmarker des Dateinamens byte filestring_old[13] 'alter Dateiname byte break 'Abbruch-Marker Kopier und Löschfunktion byte old_color 'alte Farbe des Dateieintrages merken '----------- Venatrix Variablen ------------------------------- byte venatrix 'Venatrix-Marker '----------- Sepia Variablen ---------------------------------- byte sepia 'Sepia-Marker byte tab_taste 'Tab-Tasten-Zähler byte kz 'Position im Scrollfenster Pfeiltasten byte scr 'scrollmerker für Pfeiltasten '___________ Kopier-Variablen --------------------------------- long dmpaste,dmcopy 'Quell,Zielpfad-Merker byte copy_all 'gesamten Verzeichnisinhalt kopieren byte copy_marker 'Kopier-Marker '----------- RAM-Monitor Variablen ---------------------------- long pokeram,tmp_poke '----------- DCF-Indikator ------------------------------------ byte dcf_on byte timezaehler '----------- Bluetooth-Variablen ------------------------------ byte Bluetooth_on,bl_connect byte serial byte return_merker 'Rückkehraktion aus DLL dat ini byte "reg.ini",0 'Ini-Datei für Farbwerte, Dateiverknüpfungen und Systemeinstellungen errortxt byte "reg.err",0 sepia_card byte "sepia.dll",0 'Sepia-Card-Testdatei Venatrix_card byte "venatrix.dll",0 'Venatrix-Card-Testdatei DOS_SHELL byte "dos.dll",0 'Dos-Shell DCF77 byte "dcf.dll",0 'DCF77-Empfänger-Test BLUETOOTH byte "bltooth.dll",0 'Bluetooth-Settings Ymodem byte "ymodem.dll",0 'Ymodem-Funktion root byte ".. ",0 dirhoch byte ". ",0 Trash byte "TRASH ",0 SYSTEM Byte "PLEXUS ",0 'Plexus-Systemverzeichnis binfile byte "BIN",0 extfile byte "DLL",0 'externe-Plexus-Programme txtfile byte "TXT",0 dmpfile byte "DMP",0 basfile byte "BAS",0 admfile byte "ADM",0 belfile byte "BEL",0 venfile byte "VNX",0 'Venatrix-Treiber sysfile byte "SYS",0 colorfile byte "CLR",0 'Farb-Schemen-Dateien maus byte "MAU",0 'Mauszeiger-Dateien video_inf byte "VIDEO.NFO",0 prg_inf byte "prg.nfo",0 sound_nfo byte "sound.nfo",0 butOK byte " OK ",0 Abbr byte "Cancel",0 sysfont byte "reg.fnt",0 promt byte "OK>",0 Version byte "2.05",0 New_dir byte "NEWDIR",0 '------------ Tage ------------------------------------ DAY1 byte "MO",0 DAY2 byte "TU",0 DAY3 byte "WE",0 DAY4 byte "TH",0 DAY5 byte "FR",0 DAY6 byte "SA",0 DAY7 byte "SO",0 DAYS word @DAY1,@DAY2,@DAY3,@DAY4,@DAY5,@DAY6,@DAY7 '------------ Monate ---------------------------------- MON1 byte "JAN",0 MON2 byte "FEB",0 MON3 byte "MAR",0 MON4 byte "APR",0 MON5 byte "MAY",0 MON6 byte "JUN",0 MON7 byte "JUL",0 MON8 byte "AUG",0 MON9 byte "SEP",0 MON10 byte "OKT",0 MON11 byte "NOV",0 MON12 byte "DEC",0 MONS word @MON1,@MON2,@MON3,@MON4,@MON5,@MON6,@MON7,@MON8,@MON9,@MON10,@MON11,@MON12 '------------- Menueeinträge --------------------------- info byte "Info ",0 show byte "Show ",0 link byte "Link ",0 paste byte "Paste ",0 copy byte "Copy ",0 rename byte "Rename ",0 send byte "Send ",0 receive byte "Receive",0 newdir byte "New Dir",0 delete byte "Delete ",0 parameter byte "Param. ",0 starts byte "Start ",0 unmount byte "Unmount",0 mounts byte "Mount ",0 format byte "Format ",0 empty byte "Empty ",0 Files byte "Files ",0 Help byte "Help ",0 Dirs byte "Dirs ",0 settings byte "Settings ",0 Programs byte "Programs ",0 reboots byte " -REBOOT- ",0 baud_set byte "Baud ",0 on byte "on ",0 off byte "off",0 windowtile byte 146,148,147,114,116,6,4,2,0,129,1,5,77,3,124,124,124 'Fenster-Tiles für WIN-Funktion PUB main | i ios.start ios.sdmount 'sd-card mounten mountmarker:=1 'mount-marker activate_dirmarker(0) 'Root Verzeichnis '-------------------------------------------------------------------------------------- rootdir:=get_dirmarker 'Dir-Marker für root Verzeichnis lesen userdir:=rootdir 'User-Dir-Marker erst mal mit root vorbelegen 'Systemverzeichnis-marker lesen ios.sdchdir(@system) 'System-Verzeichnis lesen systemdir:=get_dirmarker 'Dir-Marker lesen activate_dirmarker(rootdir) 'wieder zurüeck ins root-Verzeichnis iniload 'Ini-Datei mit Farbwerten laden win_set_tiles 'Fenster-Tiles in den Speicher laden repeat i from 0 to 2 windownum[i]:=windowx[i]:=windowxx[i]:=windowy[i]:=windowyy[i]:=-1 'Windowwerte initialisieren buttonx[i]:=buttony[i]:=-1 '****************** Hauptbildschirm ****************************************** ios.printBoxColor(7,act_color, shellhcol,winhcol) ios.printchar(12) 'cls ios.loadtilebuffer(SYS_FONT,2816) 'Systemfont aus E-Ram nach Bella laden Bildschirmaufbau Muelleimer_erstellen dmpfiles:=0 'Dmp-File-Zähler auf null tmpplay:=1 'Titelnummer auf eins tab_taste:=0 'Tab_Tasten-Zähler auf null setzen Verzeichnis_counter:=0 'Verzeichnis-Tiefenzähler auf null play:=0 'Player aus activate_dirmarker(userdir) 'Usermarker setzen ios.ram_wrbyte(235,START_FLAG) 'Warm-Start-Flag buttonweg 'button-Werte resetten change_marker:=0 'Dateiverzeichnis muss eingelesen werden do_restore:=1 'Hintergrund wieder herstellen Scan_Expansion_Card 'Erweiterungskarten scannen return_merker:=ios.ram_rdbyte(RETURN_POINT) if return_merker>0 ios.ram_wrbyte(0,RETURN_POINT) 'Rückkehraktion löschen userdir:=ios.ram_rdlong(MARKER_RAM) Verzeichnis_counter:=ios.ram_rdbyte(RETURN_POINT+1) ios.ram_wrbyte(0,RETURN_POINT+1) 'Verzeichnis_counter lesen und RAM-Platz danach löschen 'num.init repeat os_cmdinput 'Hauptprogrammschleife PRI Win_Set_Tiles|i,a 'Tiles, aus denen die Fenster bestehen, in den Ram schreiben i:=WTILE_RAM a:=0 repeat 17 ios.ram_wrbyte(windowtile[a++],i++) 'Standard-Wintiles in den Ram schreiben ios.windel(9) 'alle Fensterparameter löschen und Win Tiles senden CON '################################################### Hauptprogrammschleife #################################################################################################### '############################################################################################################################################################################## PRI os_cmdinput | x,y ,i,col,dk,kb,b,kl,fst,term_aus,kn,bd,tmp lines:=21 'Zeilen im Dateifenster zeilenanfang:=1 'erste Zeile im Dateifenster playerstop 'Player stoppen, wenn läuft term_aus:=0 'Terminal aus copy_marker:=0 'Kopiermarker löschen copy_all:=0 'Marker für alle Dateien-Operation löschen muelleimer:=0 'Mülleimer-Marker y_old:=3 'Initialwert für Hervorhebungsbalken highlight:=0 'keine Hervorhebung scr:=0 pfeil:=baud+6 if return_merker keyboardscan(return_merker) '##################################### Hier gehts los ############################################################################################################################# repeat time 'Zeit und Datum anzeigen 'Bluetooth_Abfrage ma:=ios.mouse_button(0) 'linke Maustaste mb:=ios.mouse_button(1) 'rechte Maustaste mz:=ios.mousez 'scrollrad kb:=ios.key 'Tastenabfrage (für Zusatzfunktionen) 'if kb 'printdec_win(verzeichnis_counter,1,1) 'nur Test, um die Tastencodes zu erfahren '********************** Dmp_Player-Automatik -> spielt alle im Verzeichnis befindlichen Dmp-Dateien ab ****************************************************** if play==1 if ios.sid_dmppos<1 'Playerposition abfragen, Player stoppen, wenn Titel abgespielt wurde playerstop tmpplay++ 'und zum nächsten Titel springen, wenn vorhanden if tmpplay>dmpfiles tmpplay:=1 'wenn letzter Titel abgespielt wurde, zum ersten springen selection:=1 'Selection zurücksetzen scr:=0 'Scrollmarker löschen if util==11 'Dateifenster sichtbar? show_always 'Dateiliste neu aufbauen selection:=2 if util==11 and infomarker==0 and highlight==1 'Dateifenster nur scrollen, wenn kein Infofenster angezeigt wird kb:=5 'nächsten Titel im Dateifenster hervorheben getdmpname(tmpplay-1) 'Titelnamen holen Player_sichtbar 'wenn Player sichtbar, dann Titel im Playerfenster anzeigen abspielen(Windownum[1]) 'Player starten (wenn Fenster da ist, balken löschen) print_status(@dumpstring,7+platz,29) 'Titel in der Statusleiste anzeigen '**************************************** Globale Tasten-Abfrage ******************************************************************************************** if kb keyboardscan(kb) 'Tastatur auf Befehls-Tasten abfragen case util 2:i:=kb-"0" 'System-Info-Fenster if i>0 and i<4 show_tab(i) 7:i:=kb-"0" 'im Programms-Fenster per Nummerntaste Programm auswählen do_restore~ popup_info_weg 'Popup-Menues löschen case i 1:RUN_SYS(@sepia_card,F3_KEY) 2:RUN_SYS(@Venatrix_card,F3_KEY) 3:RUN_SYS(@DOS_SHELL,F3_KEY) 4:RUN_SYS(@DCF77,F3_KEY) 5:RUN_SYS(@BLUETOOTH,F3_KEY) '************** DMP-Player-Fenster ******* Steuerung durch Mausbedienung ************************************************************************************ if util==6 and windownum[1]==1 'Fenster sichtbar? if ios.sid_dmppos>0 and play>0 tmp:=dmplen/19 'anzahl Samples pro block printdec_win(dmplen-ios.sid_dmppos,8,9) 'aktuelle Sampleposition anzeigen playerposition:=(dmplen-ios.sid_dmppos)/tmp 'balkenposition positionsbalken(playerposition,8,11) 'Fortschrittsbalken aktualisieren printdec_titel(dmpfiles,6,25) 'Anzahl der gefundenen DMP-Files in der Titelleiste anzeigen if ma==255 'Mouse-Taste gedrückt x:=ios.mousex 'x und y-Position der Maus beim drücken y:=ios.mousey repeat i from 10 to 12 if x==iconx[i] and y==icony[i] and dmpfiles>0 'Playertasten gedrückt und mindestens eine Dmp-Datei im Verzeichnis if i==11 and play==1 'icon stop, wenn Player läuft iconnr[11]:=PLAY_PIC else iconnr[11]:=STOP_PIC 'icon Play anzeigen iconpress(i,0) 'icon-drücken-Effekt case i 10:tmpplay:=wert_plusminus(2,tmpplay,1,dmpfiles) 'titel zurück 11:if play==1 'play/stop play:=0 balkenleer 'Positionszähler auf Null setzen else play:=1 12:tmpplay:=wert_plusminus(1,tmpplay,1,dmpfiles) 'titel vor playsong(tmpplay,1) print_status(@dumpstring,7+platz,29) 'Titel in der Statusleiste anzeigen dmp_name 'Titel und Samples im Playerfenster anzeigen '********************************************************************************************************************************************************************************* '**************************************** rechte Maustaste *********************************************************************************************************************** if mb==255 do_restore:=1 'bei Maus-Bedienung Hintergrund wieder herstellen popup_info_weg repeat while ios.mouse_button(1)>0 x:=ios.mousex y:=ios.mousey '--------------------------------------------- SD-Card-Symbol ----------------------------------------------------------------------------------- if ((x=>36) and (x=<37) and (y=>4) and (y=<5)) 'SD-Card-Symbol mit der rechten Maustaste anklicken ( Mount/Unmount) popup(33,6,39,9) 'feste Position, sonst sind Fehldarstellungen möglich popup_entry(0,@info,0) if mountmarker==1 'wenn SD-Card gemounted, unmount anzeigen popup_entry(1,@unmount,0) else popup_entry(1,@mounts,0) 'Mount anzeigen, wenn SD-Card nicht gemounted ist popup_entry(2,@format,1) menue_nr:=2 'Marker SD-Card-Popupmenue '-------------------------------------------- Mülleimer-Symbol ---------------------------------------------------------------------------------- if ((x=>36) and (x=<37) and (y=>23) and (y=<24)) 'Mülleimer-Symbol mit der rechten Maustaste anklicken ( Mount/Unmount) popup(33,25,39,27) 'feste Position, sonst sind Fehldarstellungen möglich popup_entry(0,@empty,0) popup_entry(1,@show,1) menue_nr:=3 'Marker Mülleimer-Popupmenue '-------------------------------------------- Link-Symbole --------------------------------------------------------------------------------------- if ((x==37) and ((y==8) or (y==13) or (y==18))) 'Link-Symbol mit der rechten Maustaste anklicken i:=linkpos(y-8) 'erster Eintrag bei popupy=8+2 (da das Popupmenue 2 Zeilen unter dem Symbol angezeigt wird) get_link(LINK_RAM,i) 'Link-Name holen if strsize(@filestring)>1 'Link-Name gültig? 'sonst wird im zweifelsfall zuwenig wieder hergestellt popup(33,y+2,39,y+5) 'feste Position, sonst sind Fehldarstellungen möglich popup_entry(0,@starts,0) 'Link starten popup_entry(1,@parameter,0) 'Startparameter für Link popup_entry(2,@delete,1) 'Link löschen menue_nr:=4 'Marker Link-Popupmenue '---------------------------------------- Dateifenster rechtsklick ------------------------------------------------------------------------------- if ((x=>4) and (x=<16) and (y=>3) and (y=< 24)) if util==11 selection:=y-3 'selektierte Datei nr getfilename(selection+scrollanfang) if y<>y_old and selection=0 and not ( strcomp(@filestring,@dirhoch)) 'Popupfenster soll nur im gültigen bereich auftauchen if y>19 'popupmenue passt nicht, wenn y>23 ist popup(x,19,x+6,30) else popup(x,y,x+6,y+10) popup_entry(0,@info,0) popup_entry(1,@show,0) popup_entry(2,@link,0) if copy_marker==1 popup_entry(3,@paste,1) else popup_entry(3,@copy,1) popup_entry(5,@rename,0) popup_entry(6,@newdir,0) popup_entry(7,@send,0) popup_entry(8,@receive,0) popup_entry(9,@delete,1) menue_nr:=1 'Marker-Dateifenster-Popupmenu '******************************************** linke Maustaste ******************************************************************************************************************** if ma==255 dk:=0 x:=ios.mousex y:=ios.mousey kl:=ios.get_window//10 'Icon-Button-Nummer des Fensters fst:=kl/10 'Nummer des Fensters do_restore:=1 'bei Maus-Bedienung Hintergrund wieder herstellen '------------------------------------------------- Fenster-Schließen ------------------------------------------------------------------------------------------------------------- if kl==1 'Abfrage auf Fensterloeschen if doppelklick Close_Window(fst) if attribut_fenster 'beim Schließen des Attribut-Fensters SD-Card neu einlese mc:=SD_CARD attribut_fenster:=0 if kl==2 Close_Window(fst) if attribut_fenster mc:=SD_CARD attribut_fenster:=0 '----------- SD-Card-Symbol ------------------- if (x==36 or x==37) 'SD-Card-Symbol druecken if (y==4 or y==5) keyboardscan(F2_KEY) 'Dateifenster anzeigen '----------- Mülleimer-Symbol ----------------- elseif (y==23 or y==24) and (not popupmarker) 'Mülleimer-Symbol druecken, wenn kein Menue angezeigt wird keyboardscan("T") 'Mülleimerfenster anzeigen '********************** Desktopverknüpfungen starten ******************************************************** if (x==37) and (y==8 or y==13 or y==18) if doppelklick i:=(y/5)-1 'Linknummer errechnen LINK_START(i) '########################################################### Globale Funktionstasten ############################################################################################ '*********************** Mausklick in Titelleiste ******************************************************* if y==0 'Beenden-Knopf if x==39 cmd_reboot elseif x==0 'Beenden bei Doppelklick auf linke obere Ecke if doppelklick cmd_reboot '------------ Kalender aufrufen ----------------------------------- elseif (x=>29) and (x=<38) if doppelklick keyboardscan(F11_Key) '------------ About-Box aufrufen ---------------------------------- elseif x=>1 and x=<16 if doppelklick about '*********************** Mausklick in Statusleiste ****************************************************** '------------ Zeit/Datum-Einstellungen ---------------------------- if y==29 if(x=>34) and (x=<38) if doppelklick keyboardscan(F7_Key) '------------ Start-Menue ----------------------------------------- elseif (x=>0) and (x=<4) 'Start-Knopf buttonpress(3) do_restore:=1 if menuemarker==1 popup_info_weg else popup_info_weg startmenue '****************************** Globale Abfrage OK und Cancel-Button ***************************** if(x=>buttonx[4]) and (x=buttonx[1]) and (x=buttonx[2]) and (x=<(buttonx[2]+6)) and (y==buttony[2]) 'cancel buttonpress(2) keyboardscan(27) '*************************************************************************************************************** '################################################################################################################################################################################## '############################################### Popup-Menues ##################################################################################################################### '********************** Popup-Menue-SD-Card abfragen ******************************************************** if popupmarker==1 and menue_nr==2 if x=>popupx and x=popupx) and (x=popupx) and (x=0 and x=<9 case y 18:popupselect(@Help,0,y) keyboardscan(F1_Key) 20:popupselect(@baud_set,0,y) keyboardscan(ALT_F5) 22:popupselect(@settings,0,y) keyboardscan(ALT_F2) 24:popupselect(@programs,0,y) keyboardscan(F3_Key) 27:popupselect(@reboots,0,y) keyboardscan(F12_Key) else do_restore:=1 popup_info_weg 'Menue loeschen, wenn man woanders hinklickt '***************************************************************************************************************** '########################################################################################################################################## '****************************** ICON-Regal-Funktionsaufruf ******************************************************** ifnot popupmarker repeat i from 0 to 6 if (x=>iconx[i] and x=tabx[i] and x=7) and (x=<22) and (y=>4) and (y=<7) 'angeklickte farbe ermitteln col:=((x-7)*4)+(((y-4)*16)*4) print_win(string(" "),19,9) printdec_win(col,9,19) 'Farbwert dezimal anzeigen farbe(pfeil-9,col) refreshpaint if (x=>7) and (x=<16) and (y=>9) and (y=<23) 'Auswahl Eintrag pfeil:=y WIN_TILE(16,pfeil_old,6) WIN_TILE(46,pfeil,6) print_win(string(" "),19,9) printdec_win(get_farbe(pfeil-9),9,19) pfeil_old:=pfeil '************** Ram-Monitor ************************************************** 5: if y==4 if (x=>8) and (x=<13) keyboardscan(TAB_KEY) 'Adresseingabe if x==23 'Auswahl Hub-Ram keyboardscan("H") if x==31 'Auswahl E-Ram keyboardscan("E") if (x=>8) and (x=<23) and (y=>6) and (y=<24) and dump_ram==1 'Werte poken nur im eram erlaubt pokeram:=tmp_poke:=Poke_Ram(x,y) 'Adresse aus x/y-Koordinaten errechnen bd:=x-8 kn:=lookupz(bd:0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7) 'kn vorbelegen, damit nur bis zum 8.Byte in einer Zeile geschrieben wird bd:=lookupz(bd:8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22) 'ungeraden x-wert korrigieren, damit immer an die richtige Byteposition geschrieben wird x:=bd printhex(ios.ram_rdbyte(pokeram),2,x,y,act_color,winhcol) 'Erste Adresse hervorheben ram_input(bd,kn,x,y) 'Eingabe Daten 7: '****************** Programms-Fenster, noch nicht fertig ******************* repeat i from 13 to 21 if (x==iconx[i] or x==iconx[i]+1) and (icony[i]==y) if i<13 or i>14 iconpress(i,1) 'Icon-drücken-Effekt Zweitile-Icon anzeigen else iconpress(i,0) 'icon-drücken-Effekt Eintile-ICON do_restore:=1 popup_info_weg 'Popup-Menues löschen case i 13:RUN_SYS(@DCF77,F3_KEY) 14:RUN_SYS(@BLUETOOTH,F3_KEY) 19:RUN_SYS(@sepia_card,F3_KEY) 20:RUN_SYS(@Venatrix_card,F3_KEY) 21:RUN_SYS(@DOS_SHELL,F3_KEY) '********************************************************************************* '************** System-Settings ************************************************** 8:if x==18 if y==8 'Settings tooglen keyboardscan("S") 'Versteckte Dateien anzeigen oder nicht elseif y==10 Keyboardscan("U") 'Mülleimer benutzen oder nicht if x==32 if y==8 keyboardscan("D") 'DCF-Empfang on/off elseif y==10 keyboardscan("B") 'HC05-Bluetooth-Module ja/nein '*************** Kalender ******************************************************** 9:if y==5 repeat i from 15 to 18 if iconx[i]==x iconpress(i,0) case i 15:Wert_Monat:=wert_plusminus(2,Wert_Monat,1,12) 16:Wert_Monat:=wert_plusminus(1,Wert_Monat,1,12) 17:Wert_Jahr:=wert_plusminus(2,Wert_Jahr,1600,2500) 18:Wert_Jahr:=wert_plusminus(1,Wert_Jahr,1600,2500) Zeichne_Kal(Wert_Monat,Wert_Jahr) '------------ Baud-Einstellung ____________________ 10:pfeil_old:=baud+6 if x=>13 and x=<18 and y=>6 and y=<14 pfeil:=y WIN_TILE(16,pfeil_old,12) WIN_TILE(46,pfeil,12) pfeil_old:=pfeil baud:=pfeil-6 '******************************* Aktionen im Dateifenster ************************************************************************************************************************ 11: '************************ Info-Fenster ****Dateiattribute setzen********************* if infomarker==1 Mouse_Release repeat i from 11 to 23 step 4 if (x==i) and (y==windowy[2]+6) case i 11:keyboardscan("R") 15:keyboardscan("H") 19:keyboardscan("S") 23:keyboardscan("A") '************************ Popupmenue ************************************************ if popupmarker==1 and menue_nr==1 if(x=>popupx) and x=2) and (x=<14) and (y=>3) and (y=< 24) and infomarker==0 popup_info_weg selection:=y-3 kz:=selection getfilename(selection+scrollanfang) 'selektierte Datei nr if y<>y_old 'nur einmal hervorheben highlight++ 'angeklickter Dateiname wird hervorgehoben if highlight>0 'erster Klick hebt hervor, Popupmenueklick wird ignoriert da -1 highlight_selection(y) if doppelklick and mountmarker==1 keyboardscan(Return_Key) '############################################################################################################################# '**************************** Maus Scrollrad **************************************** if mc>mz or (x==34 and y==3 and ma==255) 'hochscrollen if util==11 and infomarker==0 'Dateifenster nur scrollen, wenn kein Infofenster angezeigt wird (byte kann keine -1 sein also 255) if filenumber>21 'Dateianzahl höher als Zeilen im Dateifenster? scrollrunter 'Bildschirm scrollen if scr>0 scr-- Highlight_balken 'auf Gültigkeit der Balkenposition prüfen mc:=mz if util==5 'E-Ram-Monitor adresseminus scrolldown(startadresse) mc:=mz if mc21 scrollhoch 'Bildschirm scrollen if scr9 'Farbeinstell-Fenster pfeil-- WIN_TILE(16,pfeil_old,6) WIN_TILE(46,pfeil,6) print_win(string(" "),19,9) printdec_win(get_farbe(pfeil-9),9,19) pfeil_old:=pfeil 5: 'E-Ram-Monitor adresseminus scrolldown(startadresse) mc:=mz 9: 'Kalender-Jahr zurückblättern Wert_Jahr:=wert_plusminus(1,Wert_Jahr,1600,2500) Zeichne_Kal(Wert_Monat,Wert_Jahr) 10:pfeil_old:=baud+6 'Baud-Setting-Fenster if pfeil-6>0 pfeil-- WIN_TILE(16,pfeil_old,12) WIN_TILE(46,pfeil,12) pfeil_old:=pfeil baud:=pfeil-6 11:if infomarker==0 'Dateifenster nur scrollen, wenn kein Infofenster angezeigt wird (byte kann keine -1 sein also 255) highlight:=1 IF selection>1 selection-- getfilename(selection+scr) if selection==1 and scr>0 scrollrunter scr-- highlight_selection(selection+3) if kb==5 'runterscrollen case util 3: Date_Time(tab_taste,2) 'Datum-Zeit-Einstellung 4: 'Farbfenster if pfeil<23 pfeil++ WIN_TILE(16,pfeil_old,6) WIN_TILE(46,pfeil,6) print_win(string(" "),19,9) printdec_win(get_farbe(pfeil-9),9,19) pfeil_old:=pfeil 5: 'E-Ram-Monitor adresseplus scrollup(endadresse) mc:=mz 9: 'Kalender-Jahr weiterblättern Wert_Jahr:=wert_plusminus(2,Wert_Jahr,1600,2500) Zeichne_Kal(Wert_Monat,Wert_Jahr) 10:pfeil_old:=baud+6 if (pfeil-6)<8 pfeil++ WIN_TILE(16,pfeil_old,12) WIN_TILE(46,pfeil,12) pfeil_old:=pfeil baud:=pfeil-6 11:if infomarker==0 'Dateifenster nur scrollen, wenn kein Infofenster angezeigt wird highlight:=1 if selection21 if scr"0" and c=<"9" c-="0" m:=1 until m==1 pri input_zahl(y,x,old_farbe)|k,sp,i,ok ,ad 'Eingabe von Zahlenwerten sp:=x-1 i:=0 ad:=3 'anzahl Zeichen repeat k:=ios.key ma:=ios.mouse_button(0) if k==13 'Return? dann neue Zeile ok:=1 textline[i++]:=0 quit if k==27 'Abbruch ok:=0 quit if k==ios#CHAR_BS 'Backspace if i>0 WIN_TILE(16,y,sp+i) i-- if k=>"0" and k =< "9" 'Nur Zahlen 0-9 textline[i++]:=k WIN_TILE(k-16,y,sp+i) if i==ad textline[i++]:=0 ok:=1 quit if ok==1 tp:= @textline result:=getnumber else result:=old_farbe pri ram_input(bdn,knn,x,y)|i,k,zahl 'Eingabe in den RAM-Monitor i:=0 repeat 'Tasteneingabe k:=ios.key if i==2 'ein Byte geschrieben textline[i++]:=0 'String abschliessen tp:= @textline zahl:=getHexnumber 'Hex-String in Zahl umwandeln ios.ram_wrbyte(zahl,pokeram++) 'in ERam schreiben i:=0 'Zeichen-Zähler auf null knn++ 'Spaltenzähler erhöhen if (k=>"0" and k =< "9") or (k=>"A"or k=>"a") and (k=<"F"or k=<"f") 'Nur Zahlen und A-F WIN_TILE(k-16,y,x++) 'Zeichen ausgeben textline[i++]:=k 'Zeichen in String schreiben if k==27 or k==13 or knn==8 'ende bei esc oder enter oder Zeile voll dump(tmp_poke-((bdn-8)/2),2,y,Dump_ram) 'geänderte Zeile anzeigen quit con'***************************************** Tastatur-Abfragen ****************************************************************************************************************** pri keyboardscan(k)|i,err,a,c,d,e,formatok 'Tastatur-Befehlsabfrage do_restore~ 'bei Tastenbedienung, Hintergrund nicht herstellen case k 9:'Tab-Taste case util 3: 'Datum-Uhrzeit-Einstellung c:=0 d:=0 e:=1 print_win(string(" "),21,9+5) 'untere letzte Position löschen print_win(string(" "),21,9) 'obere letzte Position löschen tab_taste++ if tab_taste>6 tab_taste:=1 if tab_taste>3 c:=5 'Y-Position für Zeit-Einstellung d:=3 a:=((tab_taste-d-1)*6)+9 'X-Position errechnen für ausgewählten Wert print_win(string("*"),a,9+c) 'Auswahl markieren mit Stern if tab_taste>1 if tab_taste<>4 print_win(string(" "),((tab_taste-d-e-1)*6)+9,9+c) 'alte Position Stern löschen (untere Reihe) 4: 'Color-Setting-Fenster a:=get_farbe(pfeil-9) 'Farbwert des der Auswahl holen printdec_win_revers(a,9,19) 'Zahleneingabefeld hervorheben c:=Input_Zahl(9,19,a) 'neue Zahl eingeben farbe(pfeil-9,c) 'geänderte Farbe setzen refreshpaint 'Ansicht aktualisieren print_win(string(" "),19,9) 'Zahlenfeld löschen printdec_win(c,9,19) 'Zahlenwert normal darstellen 5:Dumpadresse 'Adresseingabe RAM-Monitpr 13:'Enter bzw.OK case util 'Utilfenster, bei dem bei Druck auf OK etwas gespeichert werden muss 0,2:close_all_win 'Cogs-Fenster, Systeminfo 3:tab_taste:=0 ios.setdate(tag) 'Systemuhr setzen ios.setmonth(monat) ios.setyear(jahr) ios.sethours(stunde) ios.setminutes(minute) ios.setseconds(sekunde) displaytime close_all_win 4:inisave 'Farbwerte saven Bildschirmaufbau util:=0 'neue Farbwerte für Windowloesch Routine 5:if dump_ram==1 'Werte poken nur im E-Ram pokeram:=tmp_poke:=HEX_ADRESSE printhex(ios.ram_rdbyte(pokeram),2,8,6,act_color,winhcol) 'Erste Adresse hervorheben ram_input(8,0,8,6) 8,10:inisave 'Baudrate saven,Systemsettings saven Bildschirmaufbau 11:scanstr(@filestring,1) '******************************Dateien starten oder Verzeichnis wechseln************* if selection=0 'ist was im Mülleimer drin? if display_error(31) 'fragen, ob endgültig löschen? 'Abfrage auf OK SCAN_Trash(1) 'Inhalt löschen "F","f":if util==0 'kein anderes Fenster offen if display_error(28) 'Frage Format? anzeigen und abfragen formatok:=ios.sdformat(string("PLEXUS")) 'SD-Card-Name if formatok display_error(formatok) 'Fehlerausgabe wenn erfolglos else Display_error(27) 'wenn geklappt -> Fertigstellungs-Fenster mount 'sicherheitshalber unmounten wait(80000) 'etwas warten mount 'und wieder mounten LINK_LOAD(0) Bildschirmaufbau inisave Muelleimer_erstellen 'Trash-Verzeichnismarker aktualisieren "H","h":if util==5 dump_ram:=0 toogle_value(dump_ram,21,4,1) toogle_value(1,29,4,1) ramdump(hex_adresse) if util==11 and infomarker==1 attrmarker[1]:=toogle_value(attrmarker[1],7,14,2) write_attrib "I","i":if util==11 'Nur im Dateifenster infofenster(8,10,28,14,ram_txt(33),0) 'Infofenster hat jetzt feste Position FILE_INFO_FENSTER attribut_fenster:=1 else infofenster(12,10,27,20,ram_txt(32),1) 'SD-Card-Info-Fenster anzeigen SD_CARD_INFO 'Fenster mit Info's füllen "L","l":if util==11 'Link erstellen playerstop getfilename(selection+scrollanfang) if muelleimer==0 'Links aus dem Muelleimer sind nicht zulässig Make_link(get_dirmarker) else i:=scan_number_key if i=>0 and i=0 and i=0 and i=0 case k plus_key:tmpplay:=wert_plusminus(1,tmpplay,1,dmpfiles) 'titel vor minus_key:tmpplay:=wert_plusminus(2,tmpplay,1,dmpfiles) 'titel zurück Space_Key:if play==1 'play/stop play:=0 else play:=1 playsong(tmpplay,Windownum[1]) 'Player starten (wenn Fenster da ist, balken löschen) print_status(@dumpstring,7+platz,29) 'Titel in der Statusleiste anzeigen Player_sichtbar 'Titel und Samples im Playerfenster anzeigen 159:about 'ALT_F1 About-Box 158:util:=8 setting_window 'ALT_F2 Setting-Window 157:'ALT_F3 156:'ALT_F4 144:util:=10 'ALT_F5 Baud-Einstellfenster baudselect(baud) 145:'ALT_F6 146:'ALT_F7 147:'ALT_F8 151:'ALT_F9 150:'ALT_F10 149:'ALT_F11 148:'ALT_F12 208:Show_Help 'F1 Hilfe 209:activate_dirmarker(userdir) 'Verzeichnismarker setzen util:=11 mc:=SD_Card 'F2 datei-fenster if Verzeichnis_counter>0 Get_Verz_Name 210:util:=7 Programms 'F3 Programms-Fenster 211:util:=0 CoreAnzeige 'F4 Belegung der Cogs anzeigen 212:util:=1 Terminal 'F5 serielles Terminal bytefill(@inputline,0,80) Text_Input(1,2,33,4,23,1,0,0) 213:util:=2 Sysinfo 'F6 Systeminformationen anzeigen print_info(vidnfo,6,8) 214:util:=3 Clock 'F7 Uhr-und Datums-Einstellfenster 215:util:=4 Color 'F8 Farb-Einstell-Fenster pfeil:=9 pfeil_old:=9 216:util:=5 RamDump(HEX_ADRESSE) 'F9 Speichermonitor anzeigen scrollanfang:=HEX_ADRESSE startadresse:=HEX_ADRESSE endadresse:=HEX_ADRESSE+144 217:util:=6 Player(tmpplay-1) 'Sid-Dmp-Player anzeigen 218:util:=9 Kalender 219:cmd_reboot pri YMODEM_Tool(mode)|a,i 'Aufruf der YMODEM-Routine a:=YMODEM_RAM i:=0 if mode repeat strsize(@filestring) ios.ram_wrbyte(filestring[i++],a++) 'Dateiname merken ios.ram_wrbyte(mode,YMODEM_RAM+15) 'was soll gemacht werden (senden/empfangen) run_sys(@ymodem,F2_KEY) 'Rückkehraktion pri abfrage_Link_del(n) 'Abfrage, ob link gelöscht werden soll error(29) 'Messagebox-Link-löschen? get_link(LINK_RAM,n) 'Link-Name holen print_message(@filestring,15,13) 'Link-Name in Messagebox anzeigen if abfrage 'OK-Taste abfragen Delete_Link(n,(n*5)+8) 'Link löschen pri run_sys(str,mark) 'starten der eingebetteten Programme playerstop ios.ram_wrlong(userdir,MARKER_RAM) 'aktuellen Verzeichnismarker merken ios.ram_wrbyte(mark,RETURN_POINT) 'Aktion nach Rückkehr setzen ios.ram_wrbyte(verzeichnis_counter,RETURN_POINT+1) 'Verzeichnis-Tiefenzähler muss auch gemerkt werden activate_dirmarker(systemdir) ifnot OPEN_FILE(str) ios.ldbin(str) pri Highlight_balken 'ist der Hevorhebungsbalken außerhalb des Scrollbereiches, dann gemerkte Werte löschen if y_old<4 or y_old>24 'außerhalb Scrollbereich? reset_Highlight 'Parameter für die Hervorhebung löschen pri reset_Highlight 'Hervorhebungsparameter löschen (z.Bsp.bei Aufruf eines Unterverzeichnisses) highlight:=0 'Hervorhebungsmarker löschen bytefill(@filestring_old,0,12) 'Dateinamen-Puffer löschen PRI highlight_selection(position) 'Dateiname mit einem farbigen Balken hervorheben if util==11 and position>3 'nur im Dateifenster ab position y==4 hervorheben if highlight 'erstes mal Datei angeklickt(keine Old-Parameter) display_line(@filestring,position,winhcol,act_color) 'Dateiname mit Balken anzeigen if highlight and strsize(@filestring_old)>0 'Hervorhebung aktiv und String im Puffer? display_line(@filestring_old,y_old,old_color,winhcol) 'alter Dateiname an alter Position ohne Balken anzeigen bytemove(@filestring_old,@filestring,12) 'neuen Dateinamen in den Puffer schreiben y_old:=position 'y-Koordinate merken scanstr(@filestring,1) 'Datei auf Endung scannen old_color:=act_color 'Farbe zurücksetzen (Standardschriftfarbe) if strsize(@buff)<1 'Wenn Verzeichnis old_color:=selectcol 'Select-Farbe verwenden con '*********************************** Datei-Handling ************************************************************************************************************************** PRI OPEN_FILE(str):err err:=ios.sdopen("R",str) if err error(err) ios.sdclose pri start_file(mode) ifnot OPEN_FILE(@filestring) case mode 1:ios.ldbin(@filestring) 2:ios.belload(@filestring) 3:ios.admload(@filestring) 4:if venatrix ios.venload(@filestring) PRI FILE_START|a,c,dirmark if mountmarker==1 playerstop dirmark:=get_dirmarker '*****************Dateiname in der Statusleiste anzeigen****************************** print_status(@filestring,7+platz,29) 'Dateiname in der Statusleiste anzeigen '***************************** BIN-Dateien starten *********************************** if strcomp(@buff,@binfile) 'BIN-Datei, Ext-Datei starten start_file(1) if strcomp(@buff,@belfile) 'BEL-Datei starten start_file(2) if strcomp(@buff,@admfile) 'ADM-Datei starten start_file(3) if strcomp(@buff,@venfile) start_file(4) '****************************** Maus-Pfeil laden ************************************** if strcomp(@buff,@maus) loadMouse(@filestring) '****************************** SID-DMP-Dateien abspielen ***************************** if strcomp(@buff,@dmpfile) 'Sid-Dmp-Dateien abspielen 'playerstop bytemove(@dumpstring,@filestring,12) tmpplay:=dumpnummer 'Positionszähler aktualisieren ifnot OPEN_FILE(@dumpstring) ios.sid_sdmpplay(@dumpstring) play:=1 '***************************** Text-oder Basic-Dateien anzeigen ********************** if strcomp(@buff,@txtfile) or strcomp(@buff,@basfile) 'Txt oder Bas Dateien anzeigen windowloesch 'Dateifenster löschen textfenster 'Textfenster öffnen 'playerstop Textdisplay(0) '************************************************************************************* '***************************** Color-Schemen-Dateien laden *************************** if strcomp(@buff,@colorfile) 'Farb-Einstellungs-Dateien laden ifnot OPEN_FILE(@filestring) '---- Farb-SETTINGS IN DEN RAM LADEN ------------- repeat a from 0 to 14 c:=ios.sdgetc farbe(a,c) ios.sdseek(69) lmouse bytemove(@textline,@filestring,12) 'Backup von @filestring Bildschirmaufbau 'Bildschirm mit den neuen Farben darstellen mc:=SD_Card bytemove(@filestring,@textline,12) 'restore von @filestring '****************************** Verzeichnis öffnen *********************************** if filedir==255 or strcomp(@filestring,@dirhoch) or strcomp(@filestring,@root) or strsize(@buff)<1 'Verzeichnis? dann öffnen highlight:=0 'Hervorhebung zurücksetzen bytefill(@filestring_old,0,12) 'Dateinamepuffer löschen ifnot(strcomp(@filestring,@trash)) if dirmark<>trashdir 'Im Trashordner kann das Verzeichnis nicht gewechselt werden dmpfiles:=0 'Dmp-List-Zähler zurücksetzen change_marker:=0 'Merker, das Verzeichnis geändert wurde if strcomp(@filestring,@dirhoch) 'Ins Root-Verzeichnis activate_dirmarker(rootdir) Verzeichnis_counter:=0 userdir:=rootdir else ios.sdchdir(@filestring) userdir:=get_dirmarker 'User-Marker lesen if strcomp(@filestring,@root) 'Verzeichnis-tiefenzähler aktualisieren Verzeichnis_counter-- if Verzeichnis_counter>0 Get_Verz_Name else Verzeichnis_counter++ Put_Verz_Name Leerstellenweg(@filestring) 'Leerstellen im String entfernen für Pfadanzeige scrollanfang:=0 'Scrollparameter setzen kz:=1 scr:=0 mc:=SD_Card if filenumber>lines zeilenende:=lines scrollende:=lines else zeilenende:=filenumber scrollende:=filenumber Pri Get_Verz_Name GET_LINK(Verz_Ram,Verzeichnis_counter) Pri Put_Verz_Name WriteDmpToRam(Verz_RAM,@filestring,12,Verzeichnis_counter) pri Bildschirmaufbau ios.printBoxSize(0,1, 0, 28, 39) ios.printBoxColor(0,0,shellhcol,black) ios.printchar(12) 'cls ios.printcursorrate(0) if mountmarker==1 icon(1,1) 'sd-card-symbol else icon(1,0) icon(2,1) 'mülleimer Show_Trash 'Mülleimer anzeigen Shell statusleiste 'Statusleiste anzeigen panel 'Utilitiepanel ios.printwindow(0) 'Hauptfenster 0 setzen ios.Mousepointer(MOUSE_RAM) 'Maus-Pointer einlesen ios.displaymouse(1,mousecol) 'Mousezeiger sichtbar FILL_LINK 'Desktopverknüpfungen wiederherstellen displaytime 'Zeit+Datum anzeigen con'****************************************************** Datum und Zeitanzeige ************************************************************************************************* PRI time|s 'Zeitanzeige in der Statusleiste timezaehler++ if timezaehler>150 timezaehler:=0 s:=ios.getminutes Status_extern(ios.dcf_sync,dcf_on,170,27,0,titeltextcol,black) 'Anzeige des aktuellen Status in der Titelzeile if venatrix==1 ios.bus_putchar3(50) bl_connect:=ios.bus_getchar3 Status_extern(bl_connect,Bluetooth_on,169,25,0,blue,white) 'Anzeige des aktuellen Status in der Titelzeile else Status_extern(serial,Bluetooth_on,169,25,0,blue,white) 'Anzeige des aktuellen Status in der Titelzeile if s<>tmptime displaytime 'printdec_win(bluetooth_on,1,1) PRI displaytime|h,m h:=ios.gethours m:=ios.getminutes print_zehner(h,29,34,statustextcol,hcolstatus) ios.displaytile(42,hcolstatus,0,statustextcol,29,36) 'doppelpunkt print_zehner(m,29,37,statustextcol,hcolstatus) tmptime:=m date pri Status_extern(wert1,wert2,tnr_act,x,y,col,f3) if wert2==1 'Externe Komponente in Settingmenue ausgewählt? if wert1==1 ios.displaytile(tnr_act,Titelhcol,col,f3,y,x) 'Status ok-anzeigen else ios.displaytile(tnr_act,titelhcol,grey,0,y,x) 'Symbol grau else ios.displaytile(16,Titelhcol,titeltextcol,0,y,x) 'Ohne externe Komponente arbeiten (kein Symbol) PRI date|t,m,j t:=ios.getdate m:=ios.getmonth j:=ios.getyear print_zehner(t,0,29,titeltextcol,titelhcol) TITEL_TILE(30,0,31) 'Punkt print_zehner(m,0,32,titeltextcol,titelhcol) TITEL_TILE(30,0,34) 'Punkt printdec_titel(j,0,35) 'Jahr con'************************************ Kalender-Funktion ******************************************************************************************************************** pri Kalender|i,day,x,y,f,tok','mo,tg Wert_Monat:=ios.getmonth Wert_Jahr:=ios.getyear today:=ios.getdate window(1,4,5,5,19,26,ram_txt(34)) Frame_Tile(133,4,4) Frame_Tile(117,4,27) Frame_Tile(133,6,4) Frame_Tile(117,6,27) iconbutton(15,124,6,5) iconbutton(16,123,10,5) iconbutton(17,124,20,5) iconbutton(18,123,25,5) repeat i from 5 to 26 Frame_Tile(130,4,i) Frame_Tile(130,6,i) day:=0 x:=3 y:=9 i:=0 f:=act_color repeat 7 tok:=@@DAYS[i++] 'Tage anzeigen if i==7 f:=$80 'Sonntag rot printfont(tok,winhcol,0,f,x+=3,y-2) Win_Tile(130,y-1,x) Win_Tile(130,y-1,x+1) if i<7 Win_Tile(130,y-1,x+2) Zeichne_Kal(ios.getmonth,ios.getyear) pri Zeichne_Kal(mo,jr)|x,y,day,i,tag_anfang,tok,farb day:=0 x:=3 y:=9 i:=0 tok:=@@MONS[mo-1] print_win(tok,7,y-4) 'Monat anzeigen printdec_win(Wert_Jahr,5,21) 'Jahr anzeigen tag_anfang:=wochentag(1,mo,jr) tag_zahl:=anzahl_tage(mo,jr) x:=((tag_anfang)*3) ios.display2dbox(winhcol,9,6,19,25,0) repeat 6 repeat 7 day++ farb:=act_color if wochentag(day,mo,jr)//7==0 'Sonntage sind rot farb:=$80 if day==today and mo==ios.getmonth and jr==ios.getyear print_zehner(day,y,x+=3,winhcol,act_color ) 'Heute hervorheben else print_zehner(day,y,x+=3,farb,winhcol) 'restliche Tage if day==tag_zahl quit if x>22 quit y+=2 x:=3 if day==tag_zahl quit pri anzahl_tage(mon,jhr):anz '------------------ Anzahl Tage im Monat --------------------------- anz:=lookupz(mon:0,31,28,31,30,31,30,31,31,30,31,30,31) if mon==2 and (jhr//4)==0 'Schaltjahr anz:=29 pri wochentag(tg,mon,jr)|a,b,c,d,e,f a:= tg // 7 '------------- Merkziffern für die Monate --------------------------- b:=lookupz(mon:0,0,3,3,6,1,4,6,2,5,0,3,5) c:=jr/100 'Jahrhundert d:=jr-(c*100) 'Jahr case c 'Jahrhundertziffer 19, 23, 27:e:=0 18, 22, 26:e:=2 17, 21, 25:e:=4 16, 20, 24:e:=6 c:=(d + (d / 4)) // 7 'Jahresziffer '-------- Schaltjahrkorrektur -------------- f:=0 if (jr//4==0) and (mon<3) 'im Schaltjahr muss bei einem Datum vor dem 1.März eine 6 addiert werden f:=6 result:=(a + b + c + e + f) // 7 if result==0 result:=7 'Ergebnis ist der Wochentag con '***************************************************** Dateiattribute setzen ************************************************************************************************* PRI FILE_INFO_FENSTER print_win(ram_txt(35),windowx[2]+1,windowy[2]+1) print_win(@filestring,windowx[2]+1+9,windowy[2]+1) print_win(ram_txt(36),windowx[2]+1,windowy[2]+2) if filedir print_win(ram_txt(37),windowx[2]+1+9,windowy[2]+2) else print_win(ram_txt(38),windowx[2]+1+9,windowy[2]+2) print_win(ram_txt(39),windowx[2]+1+3,windowy[2]+4) print_win(ram_txt(40),windowx[2]+3,windowy[2]+5) get_attrib(filerdonly,0,3,2) get_attrib(filehidden,1,7,2) get_attrib(filesystem,2,11,2) get_attrib(filearchiv,3,15,2) PRI get_attrib(atr,n,x,win) if atr==255 attrmarker[n]:=1 Win_Tile(139,windowy[win]+6,windowx[win]+1+x) else attrmarker[n]:=0 Win_Tile(140,windowy[win]+6,windowx[win]+1+x) PRI toogle_value(at,x,y,win) Mouse_Release if at==1 Win_Tile(140,y,windowx[win]+1+x) at:=0 else at:=1 Win_Tile(139,y,windowx[win]+1+x) return at PRI write_attrib|i,e i:=0 playerstop bytefill(@attribute,0,4) 'Dateiattribute ändern if attrmarker[0]==1 attribute[i++]:="R" if attrmarker[1]==1 attribute[i++]:="H" if attrmarker[2]==1 attribute[i++]:="S" if attrmarker[3]==1 attribute[i++]:="A" attribute[i]:=0 e:=ios.sdchattrib(@filestring,@attribute) if e display_error(e) change_marker:=0 'Verzeichnis neu in den Ram laden con '***************************************************** Diverse Texte in den E-Ram laden ************************************************************************************** PRI fileload(adr): cont cont:=ios.sdfattrib(0) ios.sdxgetblk(adr,cont) ios.sdclose PRI ram_txt(nummer)|c,i,ad i:=0 ad:=TXT_RAM+((nummer-1)*25) repeat while c:=ios.ram_rdbyte(ad++) if c>13 byte[@font][i++]:=c byte[@font][i]:=0 return @font con '***************************************************** Die einzelnen Fenster ************************************************************************************************* PRI SD_CARD_INFO|fr,us,pr,str ifnot Checkmount 'test ob medium gemounted ist fr:=ios.sdcheckfree/1024*512 us:=ios.sdcheckused/1024*512 print_win(string("Vol.:"),12,10) str:=ios.sdvolname printfont(str,winhcol,0,act_color,17,10) print_win(string("Free Kb:"),12,13) printdec(fr,13,20,winhcol,act_color) print_win(string("Used Kb:"),12,14) printdec(us,14,20,winhcol,act_color) pr:=fr+us print_win(string("All Kb:"),12,12) printdec(pr,12,20,winhcol,act_color) pr:=100*fr/pr print_win(string("Free % :"),12,16) printdec(pr,16,20,winhcol,act_color) PRI SD_Card:msz|b b:=0 ifnot Checkmount reset_Highlight 'Hervorhebungsparameter löschen fensterweg Programmfenster(6,ios.sdvolname) ifnot change_marker 'Dir neu einlesen, wenn das Verzeichnis geändert wurde playerstop 'Player stoppen tmpplay:=0 'Song-Zähler auf null cmd_dir change_marker:=1 'Verzeichnis wurde geändert print_titel(@files,22,2) print_titel(@dirs,13,2) printdec_titel(filenumber-dirnumber,2,28) if (verzeichnis_counter>0) or (get_dirmarker==trashdir) 'im Unterverzeichnis oder Mülleimer wird 2 abgezogen da . und .. mitgezählt wurden b:=2 printdec_titel(dirnumber-b,2,18) msz:=show_always 'Dateiliste aus dem E-Ram anzeigen else windowloesch return pri show_always:msz scrollanfang:=0 msz:=ios.mousez selection:=3 if filenumber>21 zeilenende:=21 scrollende:=21 else zeilenende:=filenumber scrollende:=filenumber display_list(zeilenanfang,zeilenende) ios.display2dbox(hcolstatus,29,8,29,32,0) platz:=status_show util:=11 scr:=0 PRI status_show:p print_status(@dirname,7,29) p:=strsize(@dirname) PRI textfenster Programmfenster(4,ram_txt(41)) PRI Startmenue 'ios.backup_area(0,16,9,28,BRAM) popup(0,16,9,28) print_titel(ram_txt(42),0,16) separator(0,17,9) print_message(@Help,0,18) separator(0,19,9) print_message(@baud_set,0,20) separator(0,21,9) print_message(@settings,0,22) separator(0,23,9) print_message(@programs,0,24) separator(0,25,9) print_message(@reboots,0,27) menuemarker:=1 PRI Coreanzeige|c[4],i,cogs,loops window(1,4,8,8,16,27,ram_txt(62)) print_win(ram_txt(43),8,8) print_win(ram_txt(44),8,10) print_win(ram_txt(45),8,12) c[0]:=ios.admgetcogs c[1]:=ios.belgetcogs c[2]:=ios.reggetcogs loops:=3 Scan_Expansion_Card 'nach Venatrix-Karte scannen if venatrix c[3]:=ios.VEN_GETCOGS print_win(ram_txt(58),8,14) loops:=4 i:=0 cogs:=1 repeat loops repeat 8 if (cogs=<(8-c[i])) 'freie cogs = belegte cogs -8 ios.displaytile(COG_PIC,winhcol,red,0,8+i+i,19+cogs-1) else ios.displaytile(COG_PIC,winhcol,green,0,8+i+i,19+cogs-1) cogs++ cogs:=1 i++ button(1,@butOK,10,16) button(2,@Abbr,20,16) PRI Setting_window window(1,4,6,2,20,33,ram_txt(46)) rahmen(2,6,19,11) print_win(ram_txt(47),3,8) 'Show-Hidden Files print_win(ram_txt(48),3,10) 'Use Trash print_win_rev(ram_txt(71),3,6) 'Explorer WIN_TILE(140-Show_Hid_files,8,18) WIN_TILE(140-Use_trash,10,18) rahmen(21,6,33,11) print_win_rev(ram_txt(72),22,6) 'Option print_win(ram_txt(69),22,8) 'Use DCF-Receiver print_win(ram_txt(70),22,10) 'Use HC05-Bluetooth WIN_TILE(140-dcf_on,8,32) WIN_TILE(140-bluetooth_on,10,32) WIN_TILE(170,8,30) 'DCF-Symbol WIN_TILE(169,10,30) 'Bluetooth-Symbol rahmen(2,13,19,18) print_win_rev(ram_txt(73),3,13) 'Detect-Hardware print_win(ram_txt(60),3,15) 'Venatrix-BUS print_win(ram_txt(61),3,17) 'Sepia-Card Scan_Expansion_Card 'nach Sepia-und Venatrix-Karte scannen Show_Card_ON_OFF 'anzeigen, ob die Karten da sind rahmen(21,13,33,18) 'noch leerer Rahmen button(1,@butOK,10,20) button(2,@Abbr,20,20) PRI Scan_Expansion_Card|ackn,adr,counter_s,counter_V '###################################################################################################### '# Durch diverse Versuche hat sich herausgestellt, das die Ping-Funktion allein nicht ausreicht um # '# das Vorhandensein der Sepia oder Venatrix-Karte zu detektieren, da eine nicht angeschlossene # '# eine Null zurückgibt, genauso wie ein angeschlossener I2C-Teilnehmer. Deshalb wird beim Scan die # '# Anzahl Nullen mit der Gesamtanzahl der Adressen verglichen. Ist die Anzahl zurückgegebener Nullen# '# mit der Anzahl Adressen identisch, so ist offensichtlich keine Karte vorhanden. Diese Methode # '# verhindert Fehldetektionen und gerade in Verbindung mit der Venatrixkarte ein Festfahren des HIVE# '# zum Beispiel bei Aufruf der Cog-Anzeige. # '###################################################################################################### ios.plxHalt Sepia:=0 venatrix:=0 counter_s:=0 counter_v:=0 repeat adr from 32 to 79 'standard-Sepia-Adressbereich $20-$4f ackn := ios.plxping(adr) ifnot ackn counter_s++ 'Anzahl der vorhandenen I2C-Teilnehmer repeat adr from 0 to 5 if ios.plxping(adr) counter_v++ ios.plxRun if counter_s<48 sepia:=1 if counter_v==5 Venatrix:=1 PRI Show_Card_ON_OFF if sepia==0 print_win(@off,16,17) else print_win(@on,16,17) if venatrix==0 print_win(@off,16,15) else print_win(@on,16,15) con '********************************************** Verwaltung der Desktopverknüpfungen ****************************************************************************************** PRI Make_link(dm)|i,n 'Desktopverknüpfung erzeugen bytemove(@textline,@filestring,12) '@filestring merken repeat i from 0 to 2 'Test auf freie Position get_link(LINK_RAM,i) 'Link holen if strsize(@filestring)<1 'Position frei? link_pointer:=i 'dann diese Position verwenden quit bytemove(@filestring,@textline,12) 'Kopie von @filestring zurückschreiben n:=link_pointer*13 'Stringposition in @link_string SHOW_LINK(n) 'Link auf dem Desktop anzeigen WriteDmpToRam(LINK_RAM,@filestring,dm,link_pointer) 'im Link_ram merken link_marker[link_pointer]:=dm 'Verzeichnismarker speichern inisave 'Link in Ini-Datei speichern link_pointer++ 'Link-Zähler erhöhen link_counter++ if link_counter>3 link_counter:=3 if link_pointer>2 'nur 3 Links sind gestattet (0-2) link_pointer:=0 PRI LINK_START(numm)|nu ifnot Checkmount nu:=0 activate_dirmarker(link_marker[numm]) 'Verzeichnis öffnen cmd_dir 'Verzeichnis einlesen GET_LINK(LINK_RAM,numm) 'Link holen ios.paracopy(PARA_RAM+(numm*64)) 'Parameter in den System-Parameter-Ram kopieren scanstr(@filestring,1) 'Dateiendung scannen repeat dmpfiles 'Wenn Song, dann Songnummer ermitteln getdmpname(nu++) if strcomp(@dumpstring,@filestring) 'Dateiname mit Dumpfiles vergleichen dumpnummer:=nu 'Nummer des Songs an dumpnummer übergeben quit if strsize(@filestring)>0 FILE_START 'Link starten PRI LINK_PARAMETERS(i) infofenster(2,10,31,15,ram_txt(59),1) 'Infofenster mit OK-Knopf anzeigen printfont(@filestring,Titelhcol,0,Titeltextcol,20,8) 'verlinkte Datei in Titelleiste anzeigen rahmen(2,9,31,13) util:=13 Display_Param(3,10,i) PRI DISPLAY_PARAM(tx,ty,n)|c,txtmp,a txtmp:=tx a:=PARA_RAM+(n*64) repeat while c:=ios.ram_rdbyte(a++) if tx==30 or c==10 'zeilenumbruch bei spalte 30 oder bei linefeed tx:=txtmp ty+=1 if c==10 or c==13 'return oder linefeed nicht als zeichen anzeigen next win_tile(c-16,ty,tx++) PRI FILL_LINK 'Link-Parameter füllen link_marker[0]:=ios.ram_rdlong(LINK_RAM+$0C) link_marker[1]:=ios.ram_rdlong(LINK_RAM+$1D) link_marker[2]:=ios.ram_rdlong(LINK_RAM+$2E) Plot_Link PRI DISPLAY_LINK(numm) GET_LINK(LINK_RAM,numm) 'string holen if strsize(@filestring)>0 'Link gültig? SHOW_LINK(numm*13) 'an entsprechender Position anzeigen link_counter++ PRI PLOT_LINK|i repeat i from 0 to 2 DISPLAY_LINK(i) PRI GET_LINK(basis,numm)|n,c,adr,i 'Link-String aus e-ram holen n:=numm*17 link_pointer:=numm adr:=basis+n repeat i from 0 to 11 c:=ios.ram_rdbyte(adr++) filestring[i]:=c PRI SHOW_LINK(n)|p 'Link auf dem Desktop anzeigen scanstr(@filestring,1) bytemove(@link_string[n],@filestring,5) p:=get_pic(@buff) ios.displaytile(p,Shellhcol,0,act_color,8+(link_pointer*5),37) printfont(@link_string[n],shellhcol,0,act_color,35,9+(link_pointer*5)) PRI Delete_Link(n,y)|i,a bytefill(@link_string[n*13],0,12) 'Link-String löschen link_marker[n]:=-1 'Link-Verzeichnismarker löschen ios.displaytile(16,shellhcol,0,0,y,37) 'Linksymbol auf dem Desktop löschen printfont(string(" "),shellhcol,0,0,35,y+1) 'Linkname auf dem Desktop löschen link_pointer:=n a:=LINK_RAM+(n*17) 'Adresse im eRam repeat i from a to a+16 ios.ram_wrbyte(0,i) 'im Link_ram löschen a:=PARA_RAM+(n*64) repeat i from a to a+63 ios.ram_wrbyte(0,i) inisave 'in Ini-Datei speichern link_counter-- if link_counter<1 link_counter:=0 pri LinkPos(p) 'Position des angeklickten Links ermitteln if p>2 'ist i>2 dann ist entweder das 2. oder 3. Symbol angeklickt worden p-=4 '4 abziehen if p>2 'ist i jetzt immer noch grösser 2, dann wurde das 3.Symbol angeklickt p-=4 '4 abziehen so ergibt sich eine Zahl von 0-2 für Link 0-2 return p con '**************************************** Serielles Terminal ***************************************************************************************************************** PRI Terminal Programmfenster(4,ram_txt(49)) ios.seropen(bdselect(baud))'(31, 30, 0, bdselect(baud)) serial:=1 PRI baudselect(rate)|bd,i window(1,4,5,10,17,22,ram_txt(50)) button(1,@butOK,10,17) button(2,@Abbr,17,17) repeat i from 6 to 14 bd:=bdselect(i-6) printdec_win(bd,i,13) WIN_TILE(46,6+rate,12) PRI bdselect(bauds):bd bd:=lookupz(bauds:300,600,1200,4800,9600,19200,38400,57600,115200) PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,inp,adr_tmp,w,kl,tmp {{####################################################### ser=serielle Schnittstelle verwenden mode=1 - Terminal mode=0 - Texteingabefeld adr=Adresse Parameter-Ram adr=0 normales Textfeld ch=maximale Anzahl Zeichen ####################################################### }} ii:=0 blck:=0 adr_tmp:=adr+1 'Adresse merken tmp:=adr inp:=0 'Eingabe Merker, wird aktiviert, wenn was verändert wurde zeile:=min_y spalte:=min_x do_restore:=1 'Hintergrund muss wieder hergestellt werden 'if mode ' WIN_TILE(46,zeile,2) 'print_win(@promt,spalte-3,zeile) 'Terminal-Promt WIN_TILE(6,zeile,spalte) 'Eingabe-Cursor repeat time 'Zeitaktualisierung k:=ios.key ma:=ios.mouse_button(0) if ser serchar:=ios.serread'com.rxcheck 'Zeichen von der com. Schnittstelle lesen if k==27 'Abbruch mit ESC ios.serclose'com.stop serial:=0 Fensterweg return if mode 'Terminal-Modus if k==13 or serchar==13 'Return? dann neue Zeile zeile++ 'WIN_TILE(46,zeile,2)'print_win(@promt,2,zeile) spalte:=min_x WIN_TILE(6,zeile,spalte) if ser if k==13 'Return von Tastatur? -> zur Schnittstelle senden ios.sertx($0D)'com.tx($0D) ios.sertx($0A)'com.tx($0A) 'manche Terminalprogramme brauchen das else if k==13 quit if k==ios#CHAR_BS or serchar==ios#CHAR_BS 'Backspace if ii>0 if spaltemin_x or (spalte==min_x and zeile==min_y) WIN_TILE(6,zeile,spalte) 'Cursor einen Schritt zurück else WIN_TILE(16,zeile,spalte) 'Leerzeichen ifnot mode 'Bei Texteingabefeld Zeichenanzahl verringern adr-- inp:=1 'Text wurde verändert ii-- if k>13 or (serchar>13 and ser==1) 'Alle Zeichen außer Return ii++ ifnot mode 'maximale Zeichenanzahl erreicht if ii>ch-1 ii:=ch 'Zeichenanzahl nicht mehr erhöhen blck:=1 'feste Zeichenanzahl-merker if k 'Zeichen von Tastatur WIN_TILE(k-16,zeile,spalte) if spalte+10 'Zeichen in den Ram schreiben ios.ram_wrbyte(k,adr) else textline[adr-1]:=k 'Text in String schreiben if ser ios.sertx(k)'com.tx(k) elseif serchar 'Zeichen von der com. Schnittstelle WIN_TILE(serchar-16,zeile,spalte++) 'Zeichen ausgeben if spalte>max_x 'Zeilenumbruch bei Spalte max x if tmp==0 and ser==0 'normale Texteingabe in String (Rename) spalte:=max_x 'an letzter Position bleiben else spalte:=min_x 'Text in Ram schreiben (Parameter) zeile++ 'neue Zeile 'if mode ' WIN_TILE(46,zeile,2)'print_win(@promt,2,zeile) 'Eingabepromt in neuer Zeile (Terminal) if zeile==max_y+1 'letzte Zeile erreicht, dann eine Zeile hochscrollen if mode ios.scrollup(1,winhcol, min_y, min_x, max_y, max_x,1) zeile:=max_y 'Zeilennummer wieder auf max_y setzen if ma 'Maustaste x:=ios.mousex y:=ios.mousey kl:=ios.get_window//10 'Icon-Button-Nummer des Fensters if kl==1 'Abfrage auf Fensterloeschen if doppelklick Close_Window(2) return if kl==2 Close_Window(2) return if(x=>buttonx[4]) and (x=0 'Parameter-Modus w:=64-ii ios.ram_fill(adr_tmp+ii,w,0) 'rest löschen else textline[adr]:=0 'normaler Text-Modus, String abschliessen return 13 con '************************************** Systeminfo-Programms-Fenster ******************************************************************************************************************* PRI Sysinfo window(1,4,5,5,24,31,ram_txt(51)) tab(1,5,6,6) 'tabnummer,textlänge,x-pos,y-pos) bytemove(@buttontext[5*6],string("Video"),5) button(5,@buttontext[5*6],7,6) tab(2,5,13,6) bytemove(@buttontext[6*6],string("Sound"),5) button(6,@buttontext[6*6],14,6) tab(3,4,20,6) bytemove(@buttontext[7*6],string("Font"),4) button(7,@buttontext[7*6],21,6) tabframe(1,5,31,24) button(1,@butOK,10,24) button(2,@Abbr,20,24) PRI print_info(adr,x,y)|a,c 'Info-Texte aus dem Ram lesen und anzeigen a:=x repeat while (c:=ios.ram_rdbyte(adr++)) if c==13 y++ x:=a next if c==10 next WIN_TILE(c-16,y,x++) PRI Programms 'Fenster für Zusatzprogramme Programmfenster(4,@programs) '####################################### 1.Zeile ############################# printdec_win(1,4,3) display_icon(19,162,winhcol,panelcol,4,4) print_win(string("Sepia"),2,5) print_win(string("I/O"),3,6) printdec_win(2,4,10) display_icon(20,162,winhcol,panelcol,4,11) print_win(string("Venatrix"),8,5) print_win(string("Test"),10,6) printdec_win(3,4,17) display_icon(21,160,winhcol,panelcol,4,18) print_win(string("Shell"),17,5) printdec_win(4,4,24) iconbutton(13,170,25,4) print_win(string("DCF77"),23,5) '######################################## 2.Zeile ############################ printdec_win(5,8,3) iconbutton(14,169,4,8) print_win(string("Blue-"),2,9) print_win(string("tooth"),2,10) pri Show_Help 'Hilfefenster anzeigen Programmfenster(4,@Help) util:=12 bytemove(@filestring,string("help.txt"),8) 'Dateiname für Textdisplay übergeben playerstop 'eventuell laufenden Player stoppen activate_dirmarker(systemdir) textdisplay(0) PRI Programmfenster(mode,strg) window(1,mode,4,2,24,33,strg) PRI tab(numm,l,x,y) 'Registerzunge anzeigen L ist die Textlänge tabx[numm]:=x taby[numm]:=y tabl[numm]:=x+1+l ios.displaytile(144,winhcol,buttonhcol,0,y,x) ios.displaytile(145,winhcol,buttonhcol,0,y,x+1+l) PRI tabframe(numm,wx,xx,yy)|i 'Rahmen für Tabulatorfenster erstellen repeat i from taby[numm]+2 to yy-2 'rechter und linker Rand FRAME_TILE(2,i,wx) FRAME_TILE(114,i,xx) FRAME_TILE(136,yy-1,wx) FRAME_TILE(119,yy-1,xx) repeat i from wx+1 to xx-1 'oberer Rand bis Tab und ab Tab if i=>tabx[numm] and i=< tabl[numm] FRAME_TILE(16,taby[numm]+1,i) else FRAME_TILE(148,taby[numm]+1,i) FRAME_TILE(130,yy-1,i) FRAME_TILE(146,taby[numm]+1,wx) FRAME_TILE(147,taby[numm]+1,xx) PRI clear_tabframe ios.display2dbox(winhcol,windowy[1]+5,windowx[1]+2,windowyy[1]-3,windowxx[1]-2,0) con '************************************************ About-Box ****************************************************************************************************************** PRI about window(1,4,8,6,18,31,string("About")) print_info(prgnfo,6,8) button(1,@butOK,16,18) util:=0 con '************************************************ Clock-Settings ****************************************************************************************************************** PRI Clock|i window(1,4,8,8,18,28,ram_txt(52)) print_win(ram_txt(64),16,7) tag:=ios.getdate monat:=ios.getmonth Jahr:=ios.getyear stunde:=ios.gethours minute:=ios.getminutes sekunde:=ios.getseconds i:=10 repeat 3 FRAME_TILE(5,9,i) FRAME_TILE(5,14,i) i+=3 FRAME_TILE(3,9,i) FRAME_TILE(3,14,i) i+=3 FRAME_TILE(3,9,27) print_win(ram_txt(65),16,12) button(1,@butOK,10,18) button(2,@Abbr,20,18) Date_refresh Clock_refresh PRI clock_refresh print_zehner(Stunde,14,11,act_color,winhcol) print_zehner(Minute,14,17,act_color,winhcol) print_zehner(Sekunde,14,23,act_color,winhcol) wait(20000) 'etwas warten, sonst ändern sich die Werte zu schnell PRI date_refresh print_zehner(Tag,9,11,act_color,winhcol) print_zehner(Monat,9,17,act_color,winhcol) printdec_win(Jahr,9,23) wait(20000) 'etwas warten, sonst ändern sich die Werte zu schnell pri print_zehner(wert,y,x,vor,hin)|a a:=0 if wert<10 printdec(0,y,x,hin,vor) a:=1 printdec(wert,y,x+a,hin,vor) PRI wait(ms) repeat ms con '************************************************ Color-Einstell-Box ****************************************************************************************************************** PRI Color window(1,4,4,6,24,23,ram_txt(53)) ios.Displaypalette(7,4) rahmen(18,8,22,10) print_win(ram_txt(66),14,9) printdec_win(shellhcol,9,19) refreshpaint WIN_TILE(46,9,6) button(1,@butOK,8,24) button(2,@Abbr,16,24) PRI farbe(i,c) case i 0:shellhcol:=c 1:act_color:=c 2:winhcol:=c 3:winframecol:=c 4:titelhcol:=c 5:titeltextcol:=c 6:hcolstatus:=c 7:statustextcol:=c 8:buttonhcol:=c 9:buttontextcol:=c 10:messagehcol:=c 11:messagetextcol:=c 12:selectcol:=c 13:mousecol:=c 14:panelcol:=c pri get_farbe(n):c c:=lookupz(n:shellhcol,act_color,winhcol,winframecol,titelhcol,titeltextcol,hcolstatus,statustextcol{ },buttonhcol,buttontextcol,messagehcol,messagetextcol,selectcol,mousecol,panelcol) PRI refreshpaint printfont(string("Back"),shellhcol,0,act_color,7,9) print_win(string("Text"),7,10) print_win(string("Window"),7,11) printfont(string("Winframe"),winhcol,0,winframecol,7,12) print_titel(string("Title"),7,13) print_titel(string("Titletext"),7,14) print_status(string("Statusback"),7,15) print_status(string("Statustext"),7,16) Print_button(string("Button"),7,17) Print_button(string("Buttontext"),7,18) print_message(string("Message"),7,19) print_message(string("Messagetext"),7,20) printfont(string("Select"),winhcol,0,selectcol,7,21) printfont(string("Mouse"),winhcol,0,mousecol,7,22) printfont(string("Panel"),shellhcol,0,panelcol,7,23) ios.DisplayMouse(1,mousecol) con '************************************************ E-Ram-Monitor ****************************************************************************************************************** PRI RamDump(start)|i,a Programmfenster(6,ram_txt(54)) a:=start print_win(@starts,2,4) printhex(start,5,8,4,winhcol,act_color) print_win(ram_txt(67),17,4) print_win(ram_txt(68),25,4) WIN_TILE(140,4,23) WIN_TILE(140,4,31) if dump_ram==1 WIN_TILE(139,4,31) else WIN_TILE(139,4,23) repeat i from 6 to 24 dump(a,2,i,dump_ram) a+=8 PRI Dump(adr,x,y,mode) |c[8],a,i 'adresse, anzahl zeilen,ram oder xram a:=25 printhex(adr,adressraum+dump_ram,x,y,winhcol,act_color) x+=5 WIN_TILE(42,y,x) x++ repeat i from 0 to 7 if mode c[i]:=ios.ram_rdbyte(adr++) else c[i]:=byte[adr++] printhex(c[i],2,x++,y,winhcol,act_color) if c[i]>175 or c[i]<16 c[i]:=46 WIN_TILE(c[i]-16,y,a++) x++ PRI Dumpadresse|k,sp,i,ok ,ad '***********Adresseingabe im E-Ram-Monitor**************** sp:=8 i:=0 ad:=adressraum+dump_ram printhex(HEX_ADRESSE, ad,8,4,act_color,winhcol) 'Eingabe revers darstellen 'WIN_TILE(26,4,8) 'Eingabestern repeat k:=ios.key ma:=ios.mouse_button(0) sp:=i+8 if k==13 'Return? dann neue Zeile ok:=1 textline[i++]:=0 quit if k==27 'Abbruch ok:=0 quit if k==ios#CHAR_BS 'Backspace if i>0 'WIN_TILE(26,4,sp) WIN_TILE(16,4,sp+1) i-- if k=>"0" and k =< "9" or k=>"A" and k=<"F" or k=>"a" and k=<"f" 'Nur Zahlen 0-9 und A-F WIN_TILE(k-16,4,sp)'sp++) textline[i++]:=k if i>ad 'Adressraum-Eingrenzung Hubram 4-stellig, E-Ram 5-stellig i:=ad 'WIN_TILE(26,4,i+8) if ok==1 tp:= @textline HEX_ADRESSE:=gethexnumber ramdump(HEX_ADRESSE) startadresse:=HEX_ADRESSE endadresse:=HEX_ADRESSE+144 scrollanfang:=startadresse/8 scrollende:=endadresse/8 con '************************************************ Sid-Dmp-Player ************************************************************************************************************* PRI Player(n)|a window(1,4,8,8,13,27,ram_txt(55)) iconbutton(10,BACK_PIC,8,13) a:=PLAY_PIC if play==1 a:=STOP_PIC iconbutton(11,a,10,13) iconbutton(12,VOR_PIC,12,13) rahmen(8,7,16,9) rahmen(19,7,27,9) line(8,10,27) if ios.sid_dmppos>0 dmp_name if dmpfiles>0 getdmpname(n) dmp_name pri Player_sichtbar if util==6 and windownum[1]==1 'Player sichtbar? dmp_name 'Titelname anzeigen PRI rahmen(x,y,xx,yy)|i win_tile(137,y,x) win_tile(136,yy,x) win_tile(157,y,xx) win_tile(119,yy,xx) repeat i from y+1 to yy-1 win_tile(2,i,x) win_tile(114,i,xx) line(x+1,y,xx-1) line(x+1,yy,xx-1) PRI line(x,y,xx)|i repeat i from x to xx win_tile(130,y,i) PRI positionsbalken(pos,x,y) ios.display2dbox(act_color,y,x,y,x+pos,0) PRI balkenleer ios.display2dbox(winhcol,11,9,11,27,0) print_win(string("0 "),9,8) PRI abspielen(mode) ios.sdopen("R",@dumpstring) ios.sid_sdmpplay(@dumpstring) play:=1 if mode==1 and util==6 'Playerfenster sichtbar balkenleer PRI playsong(nu,mode) getdmpname(nu-1) if play==1 playerstop abspielen(mode) elseif play==0 playerstop PRI playerstop ios.sid_dmpstop play:=0 ios.sdclose PRI getdmpname(nummer)|adress,position,c,z 'Dmp Datei-Name aus dem E-Ram holen position:=(nummer)*17 adress:=DMP_RAM+position 'Adresse Dateiname im eRam z:=0 bytefill(@dumpstring,12,0) repeat 12 c:=ios.ram_rdbyte(adress++) 'Dateiname aus Dir-Ram lesen dumpstring[z++]:=c dumpstring[z]:=0 dmplen:=ios.ram_rdlong(adress++)/25 PRI dmp_name print_win(@dumpstring,15,13) print_win(string(" "),20,8) printdec_win(dmplen,8,20) con '***************************************************** Unterprogramme für die Fensterverwaltung ****************************************************************************** PRI icon(numm,mode)|a if mode==1 a:=panelcol else a:=grey case numm 1: icon_tile(10,a,4,36) 'SD-Card 'f1-30,f2-255,f3-0 icon_tile(11,a,4,37) icon_tile(12,a,5,36) icon_tile(13,a,5,37) 2: icon_tile(153,a,23,36) 'Mülleimer leer 'f1-30,f2-255,f3-0 icon_tile(154,a,23,37) icon_tile(151,a,24,36) 'Mülleimerunterteil icon_tile(152,a,24,37) 3: icon_tile(149,a,23,36) 'Mülleimer voll 'f1-30,f2-255,f3-0 icon_tile(150,a,23,37) PRI icon_tile(numm,mode_farbe,y,x) ios.displaytile(numm,shellhcol,mode_farbe,0,y,x) PRI statusleiste ios.display2dbox(hcolstatus,29,0,29,39,0) print_status(@starts,0,29) PRI panel regal(shellhcol,panelcol,26,11) PRI shell ios.display2dbox(titelhcol,0,0,0,39,0) FRAME_TILE(0,0,0) print_titel(string(" PLEXUS Ver."),1,0) print_titel(@Version,13,0) FRAME_TILE(1,0,39) PRI Regal(f1,f2,y,x)|i,c c:=x x:=display_icon(9,112,f1,f2,y,x) x:=display_icon(0,78,f1,f2,y,x) x:=display_icon(1,108,f1,f2,y,x) x:=display_icon(2,110,f1,f2,y,x) x:=display_icon(3,126,f1,f2,y,x) x:=display_icon(4,142,f1,f2,y,x) x:=display_icon(5,158,f1,f2,y,x) x:=display_icon(6,174,f1,f2,y,x) ios.displaytile(113,f1,f2,0,y,x) ios.displaytile(115,f1,f2,0,y,x+1) x:=display_icon(9,128,f1,f2,y+1,c) repeat i from c+1 to c+16 ios.displaytile(132,f1,f2,0,y+1,i) ios.displaytile(131,f1,f2,0,y+1,c+17) PRI display_icon(ic,inr,f1,f2,y,x):xx ios.displaytile(inr,f1,f2,0,y,x) ios.displaytile(inr+1,f1,f2,0,y,x+1) if ic<9 or ic>18 'Icon-Nr <9 und >18 werden die Koordinaten gemerkt iconx[ic]:=x icony[ic]:=y iconnr[ic]:=inr iconf1[ic]:=f1 iconf2[ic]:=f2 xx:=x+2 PRI window(numm,cntrl,y,x,yy,xx,strg) 'ein Fenster erstellen windowx[numm]:=x-1 windowy[numm]:=y-2 windowxx[numm]:=xx+1 windowyy[numm]:=yy+1 'Nr,Vord,hint,curs,framecol ios.window(numm,0,winhcol,0,winframecol,titelhcol,titeltextcol,hcolstatus,statustextcol,y-2,x-1,yy+1,xx+1,cntrl,0) ios.printcursorrate(0) ios.printchar(12) 'cls windownum[numm]:=1 print_titel(strg,x+1,y-2) PRI infofenster(x,y,xx,yy,strg,knopf)'|i ios.backup_area(x-1,y-2,xx+1,yy+1,bram) 'Hintergrund sichern window(2,4,y,x,yy,xx,strg) 'Fenster erstellen if knopf==1 button(4,@butOK,((xx-x)/2)+x-2,yy) 'Button 4 gibt es nur im SD-Card-Info-Fenster und im LINK-Parameter-Fenster if knopf==2 button(2,@Abbr,((xx-x)/2)+x-2,yy) infomarker:=1 con '*************************************************** Start- und Popup-Menue ************************************************************************************************************* PRI popup(x,y,xx,yy) ios.backup_area(x,y,xx,yy,BRAM) ios.display2dbox(messagehcol,y,x,yy,xx,0) popupx:=x popupy:=y popupyy:=yy popupxx:=xx popupmarker:=1 PRI popup_entry(numm,strg,sep) if sep==1 separator(popupx,popupy+numm,popupx+6) numm+=1 print_message(strg,popupx,popupy+numm) print_message(strg,popupx,popupy+numm) PRI Popup_Info_weg if infomarker==1 'Infofenster sichtbar? if do_restore 'Infofensterhintergrund wieder herstellen? ios.restore_area(windowx[2],windowy[2],windowxx[2],windowyy[2],bram) 'Hintergrund wiederherstellen infomarker:=0 'Marker loeschen windownum[2]:=windowx[2]:=windowy[2]:=windowxx[2]:=windowyy[2]:=-1 'Windowwerte loeschen ios.windel(2) if popupmarker==1 'Popupmenue sichtbar? ios.restore_area(popupx,popupy,popupxx,popupyy,bram) 'Hintergrund wiederherstellen popupmarker:=0 'Popupmarker loeschen menuemarker:=0 link_merker:=0 PRI popupselect(stri,x,y) printfont(stri,messagetextcol,0,messagehcol,x,y) Mouse_Release print_message(stri,x,y) popup_info_weg PRI separator(x,y,xx)|i repeat i from x to xx ios.displaytile(6,Messagehcol,0,winframecol,y,i) con '************************************************** Button-Funktionen ******************************************************************************************************** PRI button(n,btext,x,y) print_button(btext,x,y) buttonx[n]:=x buttony[n]:=y PRI buttonpress(n)|s s:=0 case n 1: printfont(@butOK,250,0,0,buttonx[n],buttony[n]) 2: printfont(@Abbr,250,0,0,buttonx[n],buttony[n]) 3: printfont(@starts,250,0,0,0,29) s:=1 4: printfont(@butOK,250,0,0,buttonx[n],buttony[n]) 5,6,7,8:ios.displaytile(144,winhcol,250,0,taby[n-4],tabx[n-4]) printfont(@buttontext[n*6],250,0,0,buttonx[n],buttony[n]) ios.displaytile(145,winhcol,250,0,taby[n-4],tabl[n-4]) s:=2 Mouse_Release case s 1:print_status(@starts,0,29) 2:ios.displaytile(144,winhcol,buttonhcol,0,taby[n-4],tabx[n-4]) 'tab wiederherstellen print_button(@buttontext[n*6],buttonx[n],buttony[n]) ios.displaytile(145,winhcol,buttonhcol,0,taby[n-4],tabl[n-4]) PRI abfrage:taste|a,x,y,k repeat a:=ios.mouse_button(0) k:=ios.key if a==255 or k==27 or k==13 x:=ios.mousex y:=ios.mousey if((x=>buttonx[1]) and (x=buttonx[2]) and (x=<(buttonx[2]+6)) and (y==buttony[2]))or k==27 'cancel buttonpress(2) taste:=0 quit fensterweg ios.display2dbox(shellhcol, 10, 7, 17, messagex,0) con '*********************************************** Fenster-Lösch-Funktionen **************************************************************************************************** PRI windowloesch 'einzelnes Fenster löschen popup_info_weg 'Popup-oder Infofenster loeschen ios.display2dbox(shellhcol, 1, 1, 25, 34,0) 'Fenster loeschen windownum[1]:=windowx[1]:=windowy[1]:=windowxx[1]:=windowyy[1]:=-1 'Windowwerte loeschen ios.windel(1) 'printdec_win(util,1,1) if util==4 Load_ini_in_ram 'iniload 'eventuell geänderte Farben wiederherstellen bildschirmaufbau muelleimer:=0 util:=0 'Utilitie-Marker löschen buttonweg 'Button-löschen PRI Close_window(win) if win==2 or infomarker==1 popup_info_weg else windowloesch copy_marker:=0 'Kopier-Marker beim Schließen löschen ios.serclose'com.stop 'serielle Schnittstelle schliessen serial:=0 PRI fensterweg 'alle gesetzten Fenster loeschen windowloesch Buttonweg pri Buttonweg|i repeat i from 0 to 7 buttonx[i]:=-1 buttony[i]:=-1 con '************************************************* Textaus-und Eingabe *************************************************************************************************************** PRI textdisplay(mode)|tx,tt,c,x,adr,b '********* Text-oder Hex-Ausgabe ios.sdopen("R",@filestring) tx:=2 tt:=4 adr:=0 repeat if mode==0 'Mode 0= Textausgabe c:=ios.sdgetc if tx==34 or c==10 'zeilenumbruch bei spalte 30 oder bei linefeed tx:=2 tt+=1 if c==10 or c==13 'return oder linefeed nicht als zeichen anzeigen next if tt>24 'bis Zeile 24 repeat ma:=ios.mouse_button(0) b:=ios.key if ios.get_window//10==2 or b==27 windowloesch 'Textfenster löschen ios.sdclose return until ma==255 or b==32 'warten bis maustaste oder Space gedrückt ios.printchar(12) tt:=4 tx:=2 if mode==1 'Mode=1 Ausgabe im Hexformat printhex(adr,5,tx,tt,winhcol,act_color) tx+=5 WIN_TILE(42,tt,tx) tx++ x:=tx+17 repeat 8 c:=ios.sdgetc printhex(c,2,tx++,tt,winhcol,act_color) if c>175 or c<16 c:=46 WIN_TILE(c-16,tt,x++) tx++ adr++ tx:=2 tt+=1 else WIN_TILE(c-16,tt,tx) tx++ until ios.sdeof 'ausgabe bis eof ios.sdclose {PRI texteingabe(y):ok|k,sp,i '************** Texteingabe im Dateifenster ****************** sp:=3 i:=0 WIN_TILE(26,y,sp) bytefill(@textline,12,0) 'Stringpuffer löschen repeat k:=ios.key ma:=ios.mouse_button(0) if k==13 'Return? dann neue Zeile ok:=1 textline[i++]:=0 quit if k==27 'Abbruch ok:=0 quit if k==ios#CHAR_BS 'Backspace if i>0 WIN_TILE(16,y,sp--) WIN_TILE(26,y,sp) i-- if k=>32 and k=<122 'Buchstaben und Zahlen WIN_TILE(k-16,y,sp++) textline[i++]:=k if i>12 i:=12 'Zeichen von Tastatur WIN_TILE(26,y,sp) if sp>14 sp:=14 } PRI printfont(str1,a,b,c,d,e)|f repeat strsize(str1) f:= byte[str1++]-16 if d>39 'wenn Bildschirmrand erreicht, neue Zeile d:=0 e++ ios.displayTile(f,a,b,c,e,d) 'einzelnes Tile anzeigen ('displayTile(tnr,pcol,scol,tcol, row, column)) d++ PRI printdec(value,y,xx,hint,vor) | i ,c ,x 'screen: dezimalen zahlenwert auf bildschirm ausgeben i := 1_000_000_000 repeat 10 'zahl zerlegen if value => i x:=value / i + "0" ios.displayTile(x-16,hint,0,vor,y,xx) xx++ c:=value / i + "0" value //= i result~~ elseif result or i == 1 printfont(string("0"),hint,0,vor,xx,y) xx++ i /= 10 'nächste stelle PRI getHEXNumber | c, t c := byte[tp] if (t := hexDigit(c)) < 0 return '("invalid hex character") result := t c := byte[++tp] repeat until (t := hexDigit(c)) < 0 result := result << 4 | t c := byte[++tp] pri getnumber |c c := byte[tp] result := c - "0" c := byte[++tp] repeat while c => "0" and c =< "9" result := result * 10 + c - "0" c := byte[++tp] PRI hexDigit(c) 'Convert hexadecimal character to the corresponding value or -1 if invalid. if c => "0" and c =< "9" return c - "0" if c => "A" and c =< "F" return c - "A" + 10 if c => "a" and c =< "f" return c - "a" + 10 return -1 PRI printhex(value, digits,x,y,back,vor)|wert 'screen: hexadezimalen zahlenwert auf bildschirm ausgeben value <<= (8 - digits) << 2 repeat digits wert:=lookupz((value <-= 4) & $F : "0".."9", "A".."F") ios.displaytile(wert-16,back,0,vor,y,x++) con '---------------------------------------------- Ausgaberoutinen --------------------------------------------------------------------------------------------------------------- PRI Win_Tile(nu,ty,tx) ios.displaytile(nu,winhcol,0,act_color,ty,tx) PRI FRAME_TILE(nu,ty,tx) ios.displaytile(nu,winhcol,0,winframecol,ty,tx) PRI TITEL_TILE(nu,ty,tx) ios.displaytile(nu,titelhcol,0,titeltextcol,ty,tx) PRI print_win(stradr,x,y) printfont(stradr,winhcol,0,act_color,x,y) PRI print_win_rev(stradr,x,y) 'reverse Darstellung printfont(stradr,act_color,0,winhcol,x,y) PRI print_titel(stradr,x,y) printfont(stradr,titelhcol,0,titeltextcol,x,y) PRI Print_button(stradr,x,y) printfont(stradr,buttonhcol,0,buttontextcol,x,y) PRI print_status(stradr,x,y) printfont(stradr,hcolstatus,0,statustextcol,x,y) PRI print_message(stradr,x,y) printfont(stradr,messagehcol,0,messagetextcol,x,y) PRI printdec_win(n,y,x) printdec(n,y,x,winhcol,act_color) PRI printdec_win_revers(n,y,x) printdec(n,y,x,act_color,winhcol) PRI printdec_titel(n,y,x) printdec(n,y,x,titelhcol,titeltextcol) con '**************************************************** diverse Hilfsunterprogramme ******************************************************************************************** PRI wert_plusminus(op,wertx,minwert,maxwert) 'op=operation +/- 1/2 ,aktueller wert, mindestwert,maxwert case op 1:wertx++ if wertx>maxwert wertx:=minwert 2:wertx-- if wertx0 scrollanfang-- ios.scrolldown(1, winhcol, 6, 2, 24, 32,1) dump(adresse,2,6,dump_ram) PRI scrollrunter if scrollanfang<0 scrollanfang:=0 if scrollanfang>0 ios.scrolldown(1, winhcol, 4, 2, 24, 32,1) getfilename(scrollanfang) Scan_File(4) scrollanfang-- scrollende-- y_old++ PRI scrollhoch if scrollendefilenumber scrollende:=filenumber scrollanfang:=filenumber-21 PRI doppelklick|click 'pseudo-doppelklick click:=0 popup_info_weg Mouse_Release repeat 500 if ios.mouse_button(0)==255 click++ if click>1 return 1 PRI Leerstellenweg(f)|i,c 'entfernt die Leerstellen im String i:=0 dirname[i++]:="\" repeat while strsize(f) c:=byte[f++] if c==32 quit dirname[i++]:=c dirname[i++]:="\" dirname[i++]:=0 PRI Scan_File(y)|col 'scannt den Dateinamen nach erweiterung ->keine Erweiterung=Verzeichnis=andere Farbe col:=act_color if filedir==255 'verzeichnis col:=selectcol if filehidden==255 'versteckte Dateien werden grau dargestellt col:=grey display_filename(@filestring,y,col) PRI display_list(a,b)|n,tt 'Dateiliste aus dem Speicher lesen und anzeigen tt:=4 'playerstop repeat n from a to b getfilename(n) Scan_File(tt) tt++ con '********************************************* Ausgabe von Fehlermeldungen *************************************************************************************************** PRI error(err) messagebox(ram_txt(err),1) '********************** Fehlermeldungen in Messageboxen ********************************************** { case err 0: no error 1: Filesys unmounted 2: Filesys corrupted 3: Filesys unsupported 4: not found 5: File not found 6: Dir not found 7: File read only 8: End of File 9: End of Directory 10: End of Root 11: Directory is full 12: Directory is not empty 13: Checksum Error 14: Reboot Error 15: bpb corrupt 16: Filesys corrupt 17: Dir already exist 18: File already exist 19: Out of Disk free Space 20: Disk I/O Error 21: Command not found 22: Timeout 23: Out of Memory Error 24: Delete selected File? 25: Reboot Hive-Computer? 26: NO FILE SELECTED 27: SD-CARD Format Ready 28: Format SD-CARD ? 29: Delete selected Link? 30: Delete all Files? 31: Trash to empty ? '****************** ab hier werden die Texte mit -> ram_txt(nummer,TXT_RAM) aufgerufen ************** 32: SD-Card-Info 33: File-Info 34: Calendar 35: Filename: 36: Filetype: 37: Directory 38: File 39: - Attribute - 40: R/O HID SYS ARC 41: Textdisplay 42: Startmenue 43: Administra: 44: Bellatrix : 45: Regnatix : 46: System-Settings 47: Show hidden Files: 48: Use Trash : 49: Serial-Terminal 50: Set Baudrate 51: Systeminfo 52: Clock-Settings 53: Color-Settings 54: Ram-Monitor 55: Sid-Dmp-Player 56: Copy : 57: Delete: 58: Venatrix : 59: Start-Parameter (für Links) 60: Venatrix-BUS: 61: Sepia-Card : 62: Cogs 63: About 64: Date 65: Time 66: Col: 67: H-RAM: 68: E-RAM: } PRI display_error(er):r if er error(er) r:=abfrage ios.sdclose PRI messagebox(st,ok)|laenge,mindest laenge:=strsize(st)+2 mindest:= 20 messagex:=10+laenge ios.display3DBox(white, messagehcol, black, 10, 7, 17, messagex) print_message(st,8,11) if ok==1 button(1,@butOK,10,15) button(2,@Abbr,1+laenge,15) con '************************************************** Dateioperationen ********************************************************************************************************* PRI mount if mountmarker==1 ifnot cmd_unmount trashcounter:=0 'bei unmount, Mülleimer schliessen util:=0 'Utils auf null tmpplay:=0 'Song-Zähler auf null Verzeichnis_counter:=0 elseif mountmarker==0 ifnot cmd_mount userdir:=rootdir 'Neu geöffnete SD-Karte beginnt immer im Root-Verzeichnis PRI cmd_mount :err 'repeat 16 err:=ios.sdmount ifnot err mountmarker:=1 icon(1,1) ' quit else display_error(err) 'quit pri Checkmount:err err:=0 if mountmarker<1 display_error(1) err:=1 icon(1,0) PRI cmd_unmount|err ios.sdclose err:=ios.sdunmount ifnot err mountmarker:=0 icon(1,0) else display_error(err) PRI cmd_mkdir|e 'cmd: verzeichnis erstellen e:=ios.sdnewdir(@New_Dir) if e display_error(e) PRI activate_dirmarker(mark) 'USER-Marker setzen ios.sddmput(ios#DM_USER,mark) 'usermarker wieder in administra setzen ios.sddmact(ios#DM_USER) 'u-marker aktivieren PRI get_dirmarker:dm 'USER-Marker lesen ios.sddmset(ios#DM_USER) dm:=ios.sddmget(ios#DM_USER) PRI File_All(mode)|n,stradr,dcopy n:=1 ios.sddir 'kommando: verzeichnis öffnen break:=0 dcopy := get_dirmarker 'usermarker von administra holen case mode '---------------------------- Alle Dateien ins Zielverzeichnis kopieren ---------------------------------------------- 0:repeat while (stradr<>0) if break 'abbruch quit activate_dirmarker(userdir) 'Quellverzeichnis öffnen '###### diese 2.schleife ist nötig um die nächste Datei auszuwählen, da durch den Wechsel des Dirmarkers ############ '###### jedes mal das Verzeichnis zurückgesetzt wird und der ios.sdnext-Befehl bei 1 anfängt ###################### repeat n stradr:=ios.sdnext if stradr<>0 'gültiger eintrag? ifnot ios.sdfattrib(19) 'Verzeichnis? copy_function(userdir,targetdir,stradr,0) 'Datei in den Zielordner kopieren n++ 'Dateizähler erhöhen activate_dirmarker(targetdir) 'Zielverzeichnis öffnen '--------------------------- Alle Dateien in den Mülleimer verschieben ----------------------------------------------- 1:repeat while (stradr <> 0) 'ist eintrag gültig? if break 'abbruch quit stradr:=ios.sdnext 'einen eintrag holen if stradr <> 0 'eintrag gültig? if ios.sdfattrib(19) 'Verzeichnis?,dann ignorieren next if Use_Trash and dcopy<>trashdir 'wird der Mülleimer benutzt?,und nur kopieren, wenn nicht im Mülleimerverzeichnis copy_function(dcopy,trashdir,stradr,1) 'Datei in den Muelleimer kopieren activate_dirmarker(dcopy) 'Quellmarker setzen ifnot break 'Abfrage Abbruchmarker ios.sddel(stradr) 'Quelldatei loeschen scan_trash(0) 'Mülleimer scannen if Use_Trash activate_dirmarker(dcopy) 'Quellverzeichnis öffnen PRI cmd_del(strg)|e,dcopy 'cmd: datei auf sdcard löschen {{sddel - datei auf sdcard löschen}} break:=0 error(24) 'Datei löschen? print_message(@filestring,8,13) e:=0 ios.sdopen("R",@filestring) e:=ios.sdfattrib(16) 'Datei schreibgeschützt ios.sdclose if abfrage 'OK gedrückt, Datei löschen if e display_error(7) 'schreibgeschützte Datei kann nicht gelöscht werden return ifnot filedir if Use_Trash dcopy := get_dirmarker 'usermarker von administra holen copy_function(dcopy,trashdir,strg,1) 'Datei in den Muelleimer kopieren scan_trash(0) activate_dirmarker(dcopy) 'Quellmarker setzen ifnot break 'wenn nicht Abbruch gedrückt wurde, ios.sddel(strg) 'ursprüngliche Datei löschen PRI Copy_fenster(source,mode) if mode==0 infofenster(8,6,30,10,ram_txt(56),2) 'Kopierfenster oeffnen else infofenster(8,6,30,10,ram_txt(57),2) 'Delete-Fenster oeffnen print_titel(source,16,4) printdec_win(0,6,9) 'Null und printdec_win(100,6,27) 'einhundert anzeigen rahmen(9,7,29,9) 'Rahmen um den Fortschrittsbalken PRI copy_function(cm,pm,source,mode)|laenge,i,d,n,e,x,y copy_fenster(source,mode) 'Kopier- oder Delete-Fenster anzeigen activate_dirmarker(pm) 'Zielmarker setzen break:=0 e:=ios.sdnewfile(source) 'neue Datei erstellen if e 'Fehler? if e==18 'Datei existiert schon if mode==0 'im Kopiermodus wird gefragt, ob eine existierende Datei überschrieben werden soll if display_error(18) 'Anzeige-> Datei existiert schon 'OK angeklickt copy_fenster(source,mode) 'Kopier- oder Delete-Fenster anzeigen ios.sddel(source) 'dann löschen ios.sdnewfile(source) 'neue Datei erstellen else ios.sdclose 'Cancel angeklickt return 'ohne Aktion zurück else 'im Delete-Modus wird überschrieben ohne zu fragen (Mülleimer) ios.sddel(source) 'dann löschen ios.sdnewfile(source) 'neue Datei erstellen else display_error(e) 'Fehlerausgabe, wenn erfolglos ios.sdclose return 'zurück ios.sdclose activate_dirmarker(cm) 'wieder quellmarker setzen ios.sdopen("R",source) 'zu kopierende Datei oeffnen laenge:=ios.sdfattrib(0) 'um Dateilänge zu lesen (für Fortschrittsbalken) ios.sdclose ios.sdcopy(cm,pm,source) 'Datei kopieren repeat 'Fortschritt im Fortschrittsfenster anzeigen ma:=ios.Mouse_Button(0) 'Maustastenabfrage if ma==255 x:=ios.mousex 'x und y-Position der Maus beim drücken y:=ios.mousey if(x=>buttonx[2]) and (x=<(buttonx[2]+6)) and (y==buttony[2]) 'Abbruch gedrückt? buttonpress(2) ios.bus_putchar1(1) 'Abbruchsignal an Administra senden break:=1 'Abbruchmarker setzen quit 'und raus else ios.bus_putchar1(0) 'Administra sagen, das nicht Abbruch gedrückt wurde i:=ios.bus_getlong1 'Kopierfortschritt von Administra empfangen d:=laenge/19 'Kopierbalken-Länge berechnen n:=i/d if n>-1 'bei Abbruch wird -1 von Administra gesendet ios.display2dbox(act_color,8,10,8,10+n,0) 'Kopierbalken aktualisieren until i<0 Popup_info_Weg 'Nach erfolgreicher Operation, Info-Fenster schliessen infomarker:=0 'Info-Marker loeschen con '************************************************* Mülleimer ***************************************************************************************************************** PRI Muelleimer_erstellen if ios.sdchdir(@trash) 'Trash-Verzeichnis nicht vorhanden ios.sdnewdir(@TRASH) 'Trash-Verzeichnis erstellen ios.sdchattrib(@TRASH,string("RHS")) 'Attribute setzen (R/O, Hidden,System) ios.sdchdir(@trash) 'ins Trash-Verzeichnis wechseln trashdir:=get_dirmarker 'Dir-Marker lesen scan_trash(0) 'gucken, ob was im Mülleimer ist, wenn ja Icon Voll anzeigen activate_dirmarker(rootdir) 'wieder zurüeck ins root-Verzeichnis PRI scan_trash(mode)|n,stradr 'Mülleimer auf Anzahl Einträge scannen if mountmarker<1 return playerstop activate_dirmarker(trashdir) n:=0 if mode==1 'löschen? n:=trashcounter ios.sddir 'kommando: verzeichnis öffnen repeat while (stradr <> 0) 'ist eintrag gültig? 'wiederhole bis verzeichnisende stradr:=ios.sdnext 'einen eintrag holen if stradr <> 0 if ios.sdfattrib(19) 'Verzeichnis?,dann ignorieren next if mode==0 'einträge nur lesen und zählen n++ else 'einträge löschen (Mülleimer leeren) und rückwärts zählen ios.sddel(stradr) n-- trashcounter:=n Show_Trash activate_dirmarker(userdir) 'Userverzeichnis setzen PRI Show_Trash if trashcounter>0 icon(3,1) 'Mülleimer voll anzeigen (Deckel weg) else icon(2,1) 'Mülleimer leer anzeigen (Deckel drauf) con '***************************************************** Reboot-Funktion ******************************************************************************************************* PRI cmd_reboot 'cmd: reboot ios.displaytile(1,250,0,0,0,39) 'Schliessen-Symbol Mouse_Release FRAME_TILE(1,0,39) if display_error(25) 'Frage Reboot anzeigen und abfragen playerstop 'eventuell laufenden Player stoppen ios.Clear_Bluetooth_Command_Mode 'Kommando-Mode ausschalten ios.ram_wrbyte(0,START_FLAG) ios.admreset ios.belreset ios.venreset waitcnt(cnt+clkfreq*3) reboot PRI Mouse_Release repeat while ios.mouse_button(0) 'warten bis Maustaste losgelassen wird con '***************************************************** Directory anzeigen **************************************************************************************************** PRI cmd_dir|stradr,n,d,c',sh 'cmd: verzeichnis anzeigen {{sddir - anzeige verzeichnis}} n:=0 d:=0 dmpfiles:=0 ios.sddir 'kommando: verzeichnis öffnen repeat while (stradr <> 0) 'Begrenzung der Einträge auf die mit DIR_ENTRY vereinbarte 'ist eintrag gültig? 'wiederhole bis verzeichnisende stradr:=ios.sdnext 'einen eintrag holen if stradr <> 0 if Show_Hid_Files==0 if ios.sdfattrib(17) 'unsichtbare Dateien ausblenden next n++ if (ios.sdfattrib(19)) d++ scanstr(stradr,1) if strcomp(@buff,@dmpfile) WriteDmpToRam(DMP_RAM,stradr,ios.sdfattrib(0),dmpfiles++) c:=dmpfiles WriteNameToRam(stradr,ios.sdfattrib(0),ios.sdfattrib(10),ios.sdfattrib(11),ios.sdfattrib(12),ios.sdfattrib(19),ios.sdfattrib(16),ios.sdfattrib(17),ios.sdfattrib(18),ios.sdfattrib(20),c,n) 'Dateiname zur spaeteren Verwendung in ERam speichern an adresse n c:=0 filenumber:=n dirnumber:=d ios.ram_fill(DIR_RAM+(n*28),$1BFF-(n*28),0) 'Variablen,Dir-Speicher,nach letzten Eintrag löschen ios.ram_fill(DMP_RAM+(dmpfiles*17),$1FFF-(dmpfiles*17),0) 'Dmp-File-Speicher nach letztem Eintrag löschen PRI display_Filename(stradr,ty,col)|p 'Ausgabe Dateiname, Icon, Größe und Erstellungsdatum scanstr(stradr,1) p:=get_pic(@buff) if strsize(stradr)>0 and ty<25 ios.displaytile(p,winhcol,winframecol,col,ty,2) display_line(stradr,ty,col,winhcol) 'printfont(stradr,winhcol,0,col,3,ty) if filedir printfont(string("Dir"),winhcol,0,col,16,ty) else printdec(filelen,ty,16,winhcol,col) printdec(fileday,ty,23,winhcol,col) ios.displaytile(29,winhcol,0,col,ty,25) printdec(filemonth,ty,26,winhcol,col) ios.displaytile(29,winhcol,0,col,ty,28) printdec(fileyear,ty,29,winhcol,col) PRI display_Line(stradr,ty,vor,hin) 'Ausgabe Dateiname, Icon, Größe und Erstellungsdatum printfont(stradr,hin,0,vor,3,ty) PRI get_pic(stradr):pic 'Icon für spezifische Dateiendung zuweisen pic:=ALL_PIC if strcomp(stradr,@binfile) pic:=BIN_PIC elseif strcomp(stradr,@admfile) pic:=ADM_PIC elseif strcomp(stradr,@belfile) pic:=BEL_PIC elseif strcomp(stradr,@basfile) pic:=BAS_PIC elseif strcomp(stradr,@dmpfile) pic:=DMP_PIC elseif strcomp(stradr,@txtfile) pic:=TXT_PIC elseif strcomp(stradr,@sysfile) pic:=SYS_PIC elseif strcomp(stradr,@colorfile) pic:=CLR_PIC elseif strcomp(stradr,@extfile) pic:=EXT_PIC elseif filedir or strsize(stradr)<1 pic:=DIR_PIC PRI scanstr(f,mode) | z ,c 'Dateiendung extrahieren if mode==1 repeat while strsize(f) if c:=byte[f++] == "." 'bis punkt springen quit z:=0 repeat 3 'dateiendung lesen c:=byte[f++] buff[z++] := c buff[z++] := 0 return @buff con '*************************************************** Datei-Verwaltung im E-Ram *********************************************************************************************** PRI WriteNameToRam(st,laenge,t,m,j,dir,rdonly,hidden,sys,archiv,dpos,nummer)|adress,position,c 'Dateiliste in ERam schreiben position:=(nummer-1)*28 adress:=DIR_RAM+position repeat strsize(st) c:=byte[st++] ios.ram_wrbyte(c,adress++) ios.ram_wrlong(laenge,adress++) '4 adress+=4 ios.ram_wrword(dpos,adress++)'2 adress++ ios.ram_wrbyte(dir,adress++) '1 ios.ram_wrbyte(rdonly,adress++) '1 ios.ram_wrbyte(hidden,adress++) '1 ios.ram_wrbyte(sys,adress++) '1 ios.ram_wrbyte(archiv,adress++) '1 ios.ram_wrbyte(t,adress++)'1 ios.ram_wrbyte(m,adress++)'1 ios.ram_wrword(j,adress++)'2 PRI WriteDmpToRam(basis,st,ln,n)|adress,position,c 'dmp-File-Liste in E-Ram schreiben position:=n*17 adress:=basis+position repeat strsize(st) c:=byte[st++] ios.ram_wrbyte(c,adress++) ios.ram_wrlong(ln,adress++) PRI getfilename(nummer)|adress,position,c,z',aus 'Dateiname aus dem E-Ram holen position:=(nummer-1)*28 adress:=DIR_RAM+position 'Adresse Dateiname im eRam z:=0 'aus:=0 bytefill(@filestring,12,0) repeat 12 c:=ios.ram_rdbyte(adress++) 'Dateiname aus Dir-Ram lesen filestring[z++]:=c filestring[z]:=0 filelen:=ios.ram_rdlong(adress++) dmplen:=filelen/25 adress+=4 dumpnummer:=ios.ram_rdword(adress++) adress++ filedir:=ios.ram_rdbyte(adress++) filerdonly:=ios.ram_rdbyte(adress++) filehidden:=ios.ram_rdbyte(adress++) filesystem:=ios.ram_rdbyte(adress++) filearchiv:=ios.ram_rdbyte(adress++) fileday:=ios.ram_rdbyte(adress++) filemonth:=ios.ram_rdbyte(adress++) fileyear:=ios.ram_rdword(adress++) con '*********************************************** Icon-Buttons **************************************************************************************************************** PRI iconbutton(n,t,x,y) ios.displaytile(t,winhcol,panelcol,0,y,x) iconx[n]:=x icony[n]:=y iconnr[n]:=t iconf1[n]:=winhcol iconf2[n]:=panelcol iconf3[n]:=0 PRI iconpress(n,mode) ios.displaytile(iconnr[n],0,0,255,icony[n],iconx[n]) 'ein-Tile Icon if mode ios.displaytile(iconnr[n]+1,0,0,255,icony[n],iconx[n]+1) 'zwei-Tile Icon Mouse_Release ios.displaytile(iconnr[n],iconf1[n],iconf2[n],iconf3[n],icony[n],iconx[n]) 'ein-Tile Icon if mode ios.displaytile(iconnr[n]+1,iconf1[n],iconf2[n],iconf3[n],icony[n],iconx[n]+1) 'zwei-Tile Icon con '********************************** Speicher und Laderoutinen als Binaerdateien ************************* PRI binsave|i,a,b b:=SETTING_RAM repeat i from 0 to 14 a:=get_farbe(i) ios.sdputc(a) ios.ram_wrbyte(a,b++) 'neue Farbwerte in den Ram schreiben ios.ram_wrbyte(baud,b++) 'Übertragungsrate serielles Terminal in den Ram schreiben ios.ram_wrbyte(Show_Hid_Files,b++) 'Anzeige unsichtbarer Dateien in den Ram schreiben ios.ram_wrbyte(Use_Trash,b++) 'Verwendung Mülleimer in den Ram schreiben ios.ram_wrbyte(DCF_ON,b++) 'Verwendung DCF-Empfänger in den Ram schreiben ios.ram_wrbyte(Bluetooth_on,b++) 'Verwendung Bluetooth-Modul in den Ram schreiben ios.sdputc(baud) 'Übertragungsrate serielles Terminal in INI-Datei schreiben ios.sdputc(Show_Hid_Files) 'Anzeige unsichtbarer Dateien in INI-Datei schreiben ios.sdputc(Use_Trash) 'Verwendung Mülleimer in INI-Datei schreiben i:=LINK_RAM repeat 51 'Links in INI-Datei schreiben ios.sdputc(ios.ram_rdbyte(i++)) i:=mouse_Ram repeat 64 ios.sdputc(ios.ram_rdbyte(i++)) 'Maus-Pointer in INI-Datei schreiben i:=PARA_RAM repeat 192 ios.sdputc(ios.ram_rdbyte(i++)) 'Link-Parameter in INI-Datei schreiben ios.sdputc(dcf_on) 'Verwendung DCF-Empfänger ios.sdputc(bluetooth_on) 'Verwendung Bluetooth-Modul PRI iniload|i,a i:=SETTING_RAM repeat a from 0 to 14 farbe(a,ios.ram_rdbyte(i++)) 'Farbwerte einlesen baud:=ios.ram_rdbyte(i++) 'Übertragungsrate serielles Terminal Show_Hid_Files:=ios.ram_rdbyte(i++) 'unsichtbare Dateien anzeigen? ja/nein Use_Trash:=ios.ram_rdbyte(i++) 'Mülleimer verwenden? ja/nein dcf_on:=ios.ram_rdbyte(i++) 'DCF-Empfänger benutzen bluetooth_on:=ios.ram_rdbyte(i++) 'Bluetooth-Modul ios.Mousepointer(MOUSE_RAM) 'Maus-Pointer einlesen dcf_onoff 'DCF-Ein/Aus pri dcf_onoff if dcf_on and ios.dcf_status==0 'DCF nur einschalten, wenn es noch nicht läuft ' ios.dcf_startup if dcf_on==0 and ios.dcf_status==1 ios.dcf_down pri load_ini_in_ram change_marker:=0 playerstop activate_dirmarker(systemdir) if ios.sdopen("R",@ini) 'INI-Datei laden LINK_LOAD(0) else LINK_LOAD(1) activate_dirmarker(userdir) PRI LINK_LOAD(mode)|i,c if mode==1 i:=SETTING_RAM repeat 18 ios.ram_wrbyte(ios.sdgetc,i++) 'Farbwerte und Systemeinstellungen aus INI lesen 'und anwenden i:=LINK_RAM repeat 51 if mode==1 'INI-Datei vorhanden ->Links einlesen c:=ios.sdgetc else 'keine Ini-Datei vorhanden c:=0 ios.ram_wrbyte(c,i++) 'Linkspeicher mit Nullen füllen i:=Mouse_Ram repeat 64 if mode==1 'INI-Datei vorhanden ->Mauszeiger einlesen c:=ios.sdgetc ios.ram_wrbyte(c,i++) i:=PARA_RAM repeat 192 if mode==1 'INI-Datei vorhanden ->Links einlesen c:=ios.sdgetc else 'keine Ini-Datei vorhanden c:=0 ios.ram_wrbyte(c,i++) 'Linkspeicher mit Nullen füllen dcf_on:=ios.sdgetc 'Verwendung DCF-Empfänger bluetooth_on:=ios.sdgetc 'Bluetooth-Modul iniload PRI inisave if mountmarker==1 playerstop activate_dirmarker(systemdir) ios.sddel(@ini) ios.sdnewfile(@ini) ios.sdopen("W",@ini) binsave ios.sdclose activate_dirmarker(userdir) pri loadMouse(datei)|e e:=ios.sdopen("R",datei) 'datei öffnen ifnot e lmouse pri lmouse ios.sdxgetblk(MOUSE_RAM,64) 'datei in den Speicher schreiben (der blockbefehl ist viel schneller als der char-Befehl) ios.sdclose ios.Mousepointer(MOUSE_RAM) DAT 'lizenz {{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ TERMS OF USE: MIT License │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ │files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ │modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ │is furnished to do so, subject to the following conditions: │ │ │ │The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ │ │ │THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ │WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ │COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ │ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ }}