[archimedes] [11] Wir basteln uns ein !Boot

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

!Choices
~~~~~~~~

Die komplette Obey Datei !Boot.Boot.!Choices.!Run ist bis zu den
beiden *PathRepeat mehr der weniger identisch mit anderen Pseudo-Apps
die ich bereits erklärt habe.

Set IfPreDesk <124>
Set IfDesk    <124>
Set IfRun     <124>
|------------------
If "%0" = "PreDesk" Then Set IfPreDesk <32>
If "%0" = "Desk"    Then Set IfDesk    <32>
If "%0" = ""        Then Set IfRun     <32>
|------------------------------------------
IfSame Same <Obey$Dir> <Choices$Dir>
If Same Then Set IfSame <32> Else Set IfSame <124>
|-------------------------------------------------
Do <IfRun><IfSame> Filer_OpenDir |<Choices$Dir>.Default
Do <IfRun><IfSame> Filer_OpenDir |<Choices$Dir>.<User$Filename>
Do <IfRun><IfSame> Obey
|----------------------
If Same=0 Then Set Choices$Dir <Obey$Dir>
If Same=0 Then Set Choices$Write <Choices$Dir>.<User$Filename>
If Same=0 Then Set Choices$Path <Choices$Write>.,<Choices$Dir>.Default.
|----------------------------------------------------------------------
Do <IfRun> Error !Choices was moved but never installed twice
|------------------------------------------------------------
Do <IfPreDesk> EnsurePath <Choices$Write>.Boot.PreDesk.
Do <IfPreDesk> EnsurePath <Choices$Write>.Boot.Desk.
|---------------------------------------------------
Do <IfPreDesk> PathRepeat <Boot$Verbose> "Obey <Boot$Verbose>-c" <Choices$Path> 
Boot.PreDesk * -filetype &FEB
Do <IfPreDesk> PathRepeat <Boot$Verbose> Run <Choices$Path> Boot.PreDesk * 
-filetype &FED
Do <IfDesk>    PathRepeat <Boot$Verbose> "Obey <Boot$Verbose>-c" <Choices$Path> 
Boot.Desk * -filetype &FEB

Das *PathRepeat Kommando ist ein mächtiger und wesentlicher Bestandteil
um mit minimalem Aufwand zugleich eine individuelle Konfiguration über
eine vorgegebene Konfiguration zu laden. "Nebenbei" wird noch ein
Großteil des Multiuser-Boot dadurch bewerkstelligt.

==> Help on keyword PathRepeat

*PathRepeat adds the <directory> to each path of the given <path> and
searches in the resulting directories for <objects>. Performing a
<command> for each object found. If multiple objects with the same name,
type and place are found in more path entries, then only the object in
the rightmost path is used.

The meaning of the keywords: (abbreviation possible eg. -v for -verbose)
-verbose                 causes each line to be echoed before execution
-filetype <filetype>     limit search to files of this type
-files                   limit search to files
-directories             limit search to directories
-images                  limit search to images
-subdirectories <number> limit search to subdirectories
                  (eg. 0 found objects only in the given directory)

Syntax: *PathRepeat [[-verbose] <command> <path> [<directory>
[<wildcarded object>]] [-filetype <filetype>]|[-files] [-directories]
[-images] [-subdirectories <number>]

Welche erst mal einfache Aufgabe steckt dahinter? Nun nehmen wir als
Beispiel mal die Tastatur: englisch oder deutsch oder noch ne andere?
Welche solls denn werden?

Dazu gibt es erst mal eine Voreinstellung, den Default:

In der Obey Datei !Choices.Default.Boot.PreDesk.Country steht nur:
Keyboard UK

Der hier vereinfachte *PathRepeat der die Obey Datei Country aufruft:

PathRepeat Obey <Choices$Path> Boot.PreDesk * -filetype &FEB

Obey : das Kommando das als Parameter die gefundenen Dateien bekommt

<Choices$Path> : hier vereinfacht mit <Boot$Dir>
<Boot$Dir>.!Choices.Markus.,<Boot$Dir>.!Choices.Default.
Beinhaltet also als erstes meinen persönlichen Pfad zu meinen
Einstellungen und danach noch den Pfad zu den Default Einstellungen.

Boot.PreDesk : die Zeichenkette wird jedem Pfad hinzugefügt

* : ein Filter für Objektnamen bzw. Dateinamen mit Wildcards

-filetype &FEB : welche Dateitypen sollen berücksichtig werden
                 &FEB sind Obey Dateien

Also haben wir zwei Pfade als Ergebnis:

<Boot$Dir>.!Choices.Markus.Boot.PreDesk und
<Boot$Dir>.!Choices.Default.Boot.PreDesk

Jetzt sucht PathRepeat an diesen beiden Pfaden nach allen Obey Dateien
mit beliebigem Dateinamen. Es findet nur die oben schon genannte Datei
Country und führt diese mit dem Kommando Obey aus. Ergebnis: die
Tastatur ist auf UK eingestellt. Fertig.

Nächtser Schritt, ich will eine eigene Einstellung, eine deutsche
Tastatur. Nun ändern wir keinesfalls die Obey Datei selbst
!Choices.Default.Boot.PreDesk.Country das ist die Default Einstellung
und wie soll das sonst mit dem Multiuser-Boot funktionieren?

In mein persönliches Verzeichnis <Boot$Dir>.!Choices.Markus.Boot.PreDesk
kopiere ich die Obey Datei Country und ändere deren Inhalt auf, Keyboard
Germany, das wars.

Beim nächsten mal such sucht PathRepeat wieder an den beiden Pfaden nach
allen Obey Dateien mit beliebigem Dateinamen. Es findet diesmal aber
zwei namensgleiche Obey Dateien Conutry. Dann wird nur die Datei
verwendet, deren Pfad am rechtesten in <Choices$Path> ist. Ergebnis: nur
meine Country Datei wird ausgeführt, die Tastatur ist deutsch.

Ändern wir den <User$Filename> ganz oben in der !Boot.!Run und
starten den Rechner neu, dann bekommt dieser "neue" Nutzer erst mal
wieder die englische Tastatur. Ändere ich auf meinen Namen dann bekomme
ich wieder meine deutsche.

Es muss aber gar nicht der selbe Dateiname zwei mal existieren, also in
Default und in Markus, damit meine Obeydatei verwendet wird. Ich kann
beliebig viele eigene Obey Dateien in meinem Verzeichnis plazieren, die
werden alle ausgeführt.

Und wer bisher rätselte wo dnn nun endlich die vielen Einstellungen
kommen, Desktop-Farben, Hintergrundbild, Pinboard, Tastatur,
Desktop-Schrift, Monitorauflösung usw. alles verteilt in den vier
Verzeichnissen:

!Choices.Markus.Boot.PreDesk.
!Choices.Default.Boot.PreDesk
!Choices.Markus.Boot.Desk.
!Choices.Default.Boot.Desk

Vor dem Starten des *Dekstop(s) kommen die Dateien in den PreDesks dran,
nach gestartetem *Desktop kommen die Dateien in Desk dran. Bei
namensgleichen Dateien in .Default. und .Markus. wird nur meine in
..Markus. ausgeführt. Alle Dateien die eh nur einmal vorhanden sind,
also egal ob in .Default. oder .Markus. werden sowieso ausgeführt.

Will man zu den Defaults nur etwas hinzufügen, beispielsweise werden in
den Defaults die Filetypes definiert:

!Choices.Default.Boot.PreDesk.Filetypes

Kann man ja einfach eine kleine Namensänderung machen und eigene
(persönliche) Filetypes hinzufügen:

!Choices.Markus.Boot.PreDesk.MyFiletypes

Dann werden natürlich beide Obey Dateien ausgeführt, weil sie nicht
namensgleich sind.

Bei mir sind da folgende Dateien:

!Choices.Markus.Boot.PreDesk.Alias
!Choices.Markus.Boot.PreDesk.Configure
!Choices.Markus.Boot.PreDesk.Country
!Choices.Markus.Boot.PreDesk.Filer
!Choices.Markus.Boot.PreDesk.Font
!Choices.Markus.Boot.PreDesk.Monitor
!Choices.Markus.Boot.PreDesk.Time
!Choices.Markus.Boot.PreDesk.Palette

!Choices.Default.Boot.PreDesk.Country
!Choices.Default.Boot.PreDesk.DOSMap
!Choices.Default.Boot.PreDesk.Filetypes
!Choices.Default.Boot.PreDesk.Font
!Choices.Default.Boot.PreDesk.Format
!Choices.Default.Boot.PreDesk.Monitor
!Choices.Default.Boot.PreDesk.Palette

!Choices.Markus.Boot.Desk.BackDrop
!Choices.Markus.Boot.Desk.Pinboard

Mein Pinboard speichert direkt richtig nach
<Choices$Write>.Boot.Desk.Pinboard

Mein altes !Configure speichert korrekt in
<Choices$Write>.Boot.PreDesk.Configure

Damit sind nun auch die !Choices durch.

--
Markus
.


Other related posts:

  • » [archimedes] [11] Wir basteln uns ein !Boot - Markus Huber