[archimedes] Re: [5] Wir basteln uns ein !Boot

  • From: Markus Huber <info@xxxxxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Fri, 15 Apr 2016 21:53:17 +0200 (BST)

Die Patches und Grundeinstelungen sind damit durch.

Ich gestehe, ich "missbrauche" die Situation ein wenig für mein eigenes
Ziel. Ich schreibe meinen Kram öffentlich, damit ich mehr Druck habe,
alte Fehler auszumerzen, weitere Verbesserungen vorzunehmen (ich hatte
in den vergangenen ~15 Jahren andere "große" Software-Projekte, mit
denen ich gereift bin) und letztlich um es zu schaffen, diese
Boot-Sequenz auf den RaspberryPi zu übertragen. Wiederum um darauf
basierend ein Hardware-Projekt mit RISC OS und Lua als Basis zu starten.

Und weil nun der grundlegende Ablauf erklärt ist, hier zum besseren
Überblick die zwei bisher erklärten Obey Dateien.

Die Datei !Boot.!Run

If "<Wimp$State>"="desktop" Then Filer_OpenDir |<Boot$Dir>
If "<Boot$Dir>"<>"" Then Obey

Set Boot$Verbose ""
|Set Boot$Verbose "-v"

Set Boot$Compile ""
|Set Boot$Compile "-c"

Set User$Filename "Markus"

Do Obey <Boot$Verbose>-c <Obey$Dir>.PreDesk


Und die Datei !Boot.PreDesk

Set Root$Dir <Obey$Dir>.^
Set Root$Path <Root$Dir>.
Set Boot$Dir <Obey$Dir>.Boot
Set Boot$Path <Boot$Dir>.
|------------------------
Set Boot$Unique Local
|--------------------
                            Set Boot$OSVersion 420
RMEnsure UtilityModule 4.20 Set Boot$OSVersion 410
RMEnsure UtilityModule 4.10 Set Boot$OSVersion 400
RMEnsure UtilityModule 3.80 Set Boot$OSVersion 370
RMEnsure UtilityModule 3.70 Set Boot$OSVersion 360
RMEnsure UtilityModule 3.60 Set Boot$OSVersion 350
RMEnsure UtilityModule 3.50 Set Boot$OSVersion 310
RMEnsure UtilityModule 3.10 Set Boot$OSVersion 300
RMEnsure UtilityModule 3.00 Set Boot$OSVersion 200
|-------------------------------------------------
Set Alias$ObeyIfInBoot IfThere <Boot$Dir>.%%0.!Run Then Obey..
...<Boot$Verbose> <Boot$Dir>.%%0.!Run

ObeyIfInBoot !Init
ObeyIfInBoot !Run
ObeyIfInBoot !Fonts
ObeyIfInBoot !Sources
ObeyIfInBoot !Scrap
ObeyIfInBoot !Unicode
ObeyIfInBoot !Sounds
ObeyIfInBoot !Transfer
ObeyIfInBoot !Waste
ObeyIfInBoot !Work
ObeyIfInBoot !Trace
ObeyIfInBoot !SysLog
ObeyIfInBoot !System
ObeyIfInBoot !Choices
ObeyIfInBoot !Sprites
Unset Alias$ObeyIfInBoot
|-----------------------
Desktop -file <Obey$Dir>.Desk


Nur mal vorrausgeschaut, die dritte und letzte Obey Datei des Boot
Prozesses "Desk", besteht gerade mal aus neun aktiven Zeilen! Und da ist
kein Fake dabei, so von wegen rufe ich halt ne andere große Obey auf
damit die Desk so kurz wird.

Nun also zur Pseudo-App !Run. ObeyIfInBoot starte ja die Obey-Datei
!Run.!Run. Die sieht wie folgt aus:

If "<Run$Dir>" <> "<Obey$Dir>" Then Do Obey <Boot$Verbose> <Obey$Dir>.!Boot
|--------------------------------------------------------------------------
If "<Wimp$State>"="desktop" Then Filer_OpenDirs |<Run$Dir>

Wenn <Run$Dir> nicht dem aktuellen Ort der !Run.!Run Datei entspricht,
wurde es entweder noch nie gestartet oder verschoben. Nur dann wird die
!Run.!Boot gestartet. Wenn wir im Desktop sind öffnet Filer_OpenDirs für
alle Verzeichnisse in !Run ein Filer-Fenster. Das sind diese drei:

!Run.Alias
!Run.Commands
!Run.Modules

Die !Run.!Boot sieht wie folgt aus:

Set Run$Dir <Obey$Dir>
Set Run$Path ,%.,<Run$Dir>.Commands.
Repeat <Run$Dir>.Alias.Repeat <Run$Dir>.Alias -directories
Repeat RMLoad <Run$Dir>.Modules

Im Ergebnis sind:

Alle Verzeichnisse in Commands als ausführbare CLI Kommandos angemeldet.
In jedem dieser Verzeichnisse sitzt eine !Run Datei (Typ: Obey, Basic,
App, Util etc.)

Alle Verzeichnisse in Alias haben die Möglichkeit bekommen, sich selbst
anzumelden. Das hat meherer Nutzen, *einer davon* ist die
Rückwärtskompatibilität auf begrenzte 10 Zeichen der Dateinamen. Damit
läßt sich kein längerer Alias bereits im Dateinamen abbilden.

Hier der pfiffige Ablauf der Alias Anmeldungen am Beispiel von HourglassOff:

....
Repeat <Run$Dir>.Alias.Repeat <Run$Dir>.Alias -directories
....

Die Datei !Run.Alias.Repeat sieht wie folgt aus:
Obey %0.!Alias %0

Und ein einfacher Alias z.B. !Run.Alias.HrglassOff dann so:
Set Alias$HourglassOff Run %0.!Run %%*0


Der oben bereits genutzte Filer_OpenDirs ist auch als Alias realisiert
und noch eine ganze Ecke pfiffiger:

Die Datei !Run.Alias.FOpenDirs.!Alias sieht wie folgt aus:
Set Alias$Filer_OpenDirs Obey %0.!Run %%*0

Die Datei !Run.Alias.FOpenDirs.!Run sieht wie folgt aus:
Repeat <Obey$Dir>.OpenDir %0 -directories %0

Und die !Run.Alias.FOpenDirs.OpenDir dann wie folgt:
SeparateObject Directory$Name Object$Name %0
Filer_OpenDir %1.<Object$Name>


Tja was ist hier nun schon wieder SeparateObject? Das wird ebenfalls in
der Pseudo-App !Run als Alias definiert. Es ist ein kleines Basic
Programm das folgendes macht:

==> Help on keyword SeparateObject
*SeparateObject set the system variable <directory> to the directory
part of the given <object> or <path> and set the system variable
<objectname> to the object name of the given <object> or <path>. Syntax:
*SeparateObject [<varname directory> <varname objectname>
<object>|<path>]

All diese Programme werde ich natürlich im Zusmmenhang mit dem
Veröffentlichen der Boot-Sequenz ebenfalls veröffentlichen. So weit ich
sie habe, auch die Sourcescodes versteht sich.

So damit ist !Run abgeschlossen. Damit stehen nun viele und zum Teil
sehr mächtige, allgemein sinnvolle, Funktionen fürs CLI und teilweise
spezialisierte Funktionen für den weiteren Boot-Prozess bereit.

--
Markus
.


Other related posts:

  • » [archimedes] Re: [5] Wir basteln uns ein !Boot - Markus Huber