
ASSEMBLERKURS - LEKTION 20 Teil B: Batch-Datei (Version 1: Stand: 09/2024)

Autor: Göran Strack

Noch ein paar Ergänzungen zum allgemeinen Einsatz von Batch-Dateien im 
Zusammenhang mit WinUAE:


1. Start über s/startup-sequence
===============================================================================

%~dp0	--> bedeutet wechsle in den Ordner des Batch-Skripts
%CD%	--> Variable, bedeutet aktuelles Verzeichnis

Mit Listing20e.bat wird WinUAE gestartet und gleichzeitig beim Aufruf relativ
mit %~dp0 der Pfad für das Verzeichnis in WinUAE eingestellt. In dem Ordner
befindet sich der Ordner s mit der startup-sequence. In der Datei 
startup-sequence steht lediglich der Name der aufzurufenden Exe-Datei.

Erklärung der Befehlszeile:
winuae64.exe -s quickstart=a500,1 -s filesystem2=rw,DH0:test:%~dp0\test01,0 -G

WinUAE 
- von überall starten							=> winuae64.exe
- Konfiguration über quickstart					=> -s quickstart=a500,1
(- eigene Konfiguration (funktioniert nicht)	=> -config=A500_Assembler.uae)
- ohne GUI-Fenster								=> -s use_gui=no oder -G
- Startverzeichnis *				=> -s filesystem2=rw,DH0:test:%~dp0\test01,0

-s filesystem2 
       = (read/write,device_name:volume_label:<path to directory\archive>,0
	     (last zero is boot priority)	
		 											
* hier befindet sich der Ordner s mit der Datei startup-sequence
  in der Datei startup-sequence steht der Name der zu startenden Datei

filesystem2=rw,						; read/write
DH0:								; device z.B. hd0 oder DH0 	
test:								; volume z.B. test
D:\asm-kurs\Listings20\test01		; Pfad zu s\startup-sequence absolut
%~dp0\test01						; Pfad zu s\startup-sequence relativ
0									; Bootpriorität

Pfadangabe relativ (1):	%~dp0
%~dp0	--> bedeutet wechsle in den Ordner des Batch-Skripts
\..\winuae\hd0 -> erst eine Verzeichnisebene nach oben und dann nach winuae\hd0

wenn Verzeichnis unterhalb des Ordners WinUAE liegt:
Pfadangabe relativ (2): %CD%	-s filesystem2=rw,DH0:DH0:%CD%\hd,0
%CD% - Variable, bedeutet aktuelles Verzeichnis

Ergebnis:
Mit dem Aufruf der Batch-Datei Listing20e.bat wird WinUAE gestartet und aus der
startup-sequence heraus die Exe-Datei.
																				

2. Namen der Startdatei in s/startup-sequence ändern
===============================================================================

Und mit dem Listing20f.bat erfolgt nochmal der Aufruf von uaedbg und der 
Exe-Datei. Zuvor werden jedoch die fehlenden Dateien in den Ordner kopiert und
der Aufruf in der s/startup-sequence geändert.

Erklärung der Befehlszeile:
@echo |set /p =example.exe>"..\winuae\hd0\s\startup-sequence"

Diese Befehlszeile schreibt den Text "example.exe" in die Textdatei startup-
sequence

@							; keine Ausgabe der Befehlszeile in cmd
echo						; Ausgabe
|							; Pipe
set /p=						; Ein- und Ausgaben in Variablen speichern
/							; Schalter
example.exe					; Variablenwert hier String
>							; Ausgabeumleitung 
"..\winuae\hd0\s\startup-sequence"	; Pfad und Datei

@
Schaltet die Ausgabe der Befehlszeile auf dem Bildschirm nur für den aktuellen
Befehl aus und ist selbst kein eigener Befehl. Syntax @befehl

echo - Ausgabe

Pipe | 
Sie können die Ausgabe eines Befehls als Eingabe an den nächsten Befehl
übergeben

more |
Mit diesem Zeichen ist es möglich, zwei Befehle miteinander auf eine spezielle
Weise zu verbinden. Dabei wird der erste Befehl ausgeführt, seine Ausgaben
werden jedoch nicht  auf den Bildschirm geschrieben, sondern in einen Puffer.
Der zweite Befehl wird auf eine Weise gestartet, dass er seine Eingaben nicht
von der Tastatur, sondern von ebendiesem Puffer bekommt.
Mit more ist es ebenfalls möglich den Inhalt einer Datei an eine andere Datei
anzuhängen.

Neben der bereits erläuterten "Pipeline"-Funktion wird der vertikale Balken
auch als bitweiser ODER-Operator im Befehl SET /A verwendet, wie folgt:
set /A "var=5 | 2"
Die Pipe wird verwendet, um die Ausgabe eines Befehls an die Eingabe eines
anderen Befehls zu senden.

Ausgabeumleitung >

Umgeleitete Ausgaben. Eine Möglichkeit der Umleitung einer Ausgabe besteht über
den set /p Befehl:
Syntax:
ECHO {Befehl}> {Dateiname}
SET /P {Variablenname}=<{Dateiname}

/p ist ein Schalter bzw. / Schalter und p die Option (parameter)
Es setzt den Inhalt der Variablen (no name) auf den Wert 'example.exe'

set [[/a [expression]] [/p [variable=]] string]

Wird hauptsächlich verwendet, um einer Variablen einen Wert zuzuweisen. 
Ohne Parameter gibt set eine Liste aller Umbegebungsvariablen aus.
Der Parameter "/p" kann dazu verwendet werden der Variable eine Benutzereingabe
zuzuweisen. Der Parameter "/a" kann dazu verwendet werden, um mit den Variablen
Rechenoperation durchzuführen.

;------------------------------------------------------------------------------
Anmerkung:
So einfach geht es leider nicht, weil zusätzliche Zeichen hinzugefügt werden.
Sind im Hex-Editor zu sehen.

@echo example.exe>"..\test\s\startup-sequence"	; funktioniert nicht


3. Standardbefehle REM / copy / del
==============================================================================

REM:
Kommentarzeile

copy:
Mit dem Befehl copy können eine Datei oder mehrere Dateien kopiert werden.

copy Hallo.txt "..\Test"
copy "..\tools\Haha.txt" %~dp0
copy "%~dp0\uaedbg\hd\L15c" "%~dp0\test02"

del:
del Hallo.txt	; entfernt Datei im aktuellen Verzeichnis
del "..\winuae\hd0\example.exe"		; geht eine Verzeichnisebene höher und dann
							; in den Ordner gemäß dem Pfad und löscht die Datei


4. vasm (Buildprozess: ausführbare Datei erstellen)
==============================================================================

Beispielaufruf:
vasmm68k_mot -m68020 -Fhunkexe -nocase -quiet -o L15c Listing15c.s

L15c wäre die ausführbare Datei, die dann in den Ordner kopiert werden muss
auf den s/startup-sequence zugreifen kann.


5. VBCC - Umgebungsvariable setzen
==============================================================================

@if X%VBCC%==X%~dp0 goto AlreadySet
@set VBCC=%~dp0
@set PATH=%VBCC%\..\tools;%PATH%
:AlreadySet

@ 
Schaltet die Ausgabe der Befehlszeile auf dem Bildschirm nur für den 
aktuellen Befehl aus und ist selbst kein eigener Befehl. Syntax @befehl

if vergleicht zwei Strings auf Gleichheit, wenn sie gleich sind wird zum Label
gesprungen, ansonsten Variable setzen und der Umgebungsvariablen hinzufügen.

:AlreadySet			; Label

set PATH=%PATH%;C:\your\path\here\

set- Ein Befehl, der die Umgebungsvariablen von cmd nur für die aktuelle 
cmd-Sitzung ändert, andere Programme und das System bleiben davon unberührt.

PATH=  Gibt an, dass es sich um PATH um die Umgebungsvariable handelt, die
vorübergehend geändert werden soll.

Der %PATH% Teil wird auf den aktuellen Wert von PATH erweitert und
;C:\your\path\here\ 
dann mit diesem verkettet. Das wird das Neue PATH.
Wenn Sie es nur für die aktuelle Sitzung ändern möchten, verwenden Sie set


==============================================================================
Weitere Informationen befinden sich in der Lektion 22: vasm, vlink, vbcc