; Warum @ 1993 by Matthias Gutt, Kantstr. 16,
; W-2120 Lueneburg 
; Dieses kleine Assembler-Programm dient zur Auswertung
; von AmigaDOS-Fehlermeldungen in deutscher Sprache.

ExecBase = 4		;ExecBasis-Adresse
OpenLibrary = -552	;Offset der Routine
CloseLibrary = -414     ;Offset der Routine
Open = -30              ;Offset der Routine
Close = -36		;Offset der Routine
Write = -48		;Offset der Routine

move.l a0,a3

Hauptprogramm:
bsr OpenDOS		;AMIGA-DOSe oeffnen
cmp.l #0,d0             ;geklappt ?
beq Ende                ;Nein !
move.l d0,Dosbase       ;Dos-Basisadresse merken
bsr OpenCLI             ;CLI-Fenster oeffnen
cmp.l #0,d0             ;geklappt ?
beq CloseDOS            ;Nein, AMIGA-DOSe wieder schliessen

move.l d0,CLIHandle     ;Handle merken
bsr Auswertung          ;Fehler auswerten & schreiben
bsr CloseCLI            ;CLI-Fenster schliessen
bsr CloseDOS            ;AMIGA-DOSe wieder schliessen
bra Ende                ;So das war`s, tat doch gar nicht weh !


OpenDOS:
move.l ExecBase,a6      ;ExecBasis-Adresse nach A6
lea Dosname(pc),a1	;Name der Bibliothek
move.l #0,d0            ;beliebige Versionsnr.
jsr OpenLibrary(a6)     ;AMIGA-DOSe oeffnen
rts

OpenCLI:
move.l DosBase(pc),a6	;DosBase nach A6
move.l #CLI,d1 		;Fensterdefinition nach D1
move.l #1006,d2		;Access-Mode `neu` nach D2
jsr Open(a6)		;CLI-Fenster oeffnen
rts

; Hier beginnt die Auswertung des Fehlervektors
Auswertung:
bsr Titel
move.l a3,a0
cmp.l #"103?",(a0)
beq InsufficientFreeStore
cmp.l #"104?",(a0)
beq TaskTableFull
cmp.l #"120?",(a0)
beq ArgumentLineInvalid
cmp.l #"121?",(a0)
beq Fileisnotanobjectmodule
cmp.l #"122?",(a0)
beq Invalidresidentlibraryduringload
cmp.l #"202?",(a0)
beq Objectinuse
cmp.l #"203?",(a0)
beq Objectalreadyexists
cmp.l #"204?",(a0)
beq Directorynotfound
cmp.l #"205?",(a0)
beq Objectnotfound
cmp.l #"206?",(a0)
beq Invalidwindow
cmp.l #"209?",(a0)
beq Packedrequestedtypeunknown
cmp.l #"210?",(a0)
beq InvalidStreamcomponentname
cmp.l #"211?",(a0)
beq Invalidobjectlock
cmp.l #"212?",(a0)
beq Objectnotofrequiredtype
cmp.l #"213?",(a0)
beq Disknotvalidated
cmp.l #"214?",(a0)
beq Diskwriteprotected
cmp.l #"215?",(a0)
beq Renameacrossdevicesattempted
cmp.l #"216?",(a0)
beq Directorynotempty
cmp.l #"218?",(a0)
beq Devicenotmounted
cmp.l #"219?",(a0)
beq Seekerror
cmp.l #"220?",(a0)
beq Commenttoobig
cmp.l #"221?",(a0)
beq Diskfull
cmp.l #"222?",(a0)
beq FileisprotectedfromDeletion
cmp.l #"223?",(a0)
beq Fileisprotectedfromwriting
cmp.l #"224?",(a0)
beq Fileisprotectedfromreading
cmp.l #"225?",(a0)
beq NotaDOSdisk
cmp.l #"226?",(a0)
beq Nodiskindrive
cmp.l #"232?",(a0)
beq Nomoreentriesindirectory
rts

Insufficientfreestore:
move.l #InsufficientfreestoreText,d2
move.l #InsufficientfreestoreTextende,d3
bsr Schreiben
rts

Tasktablefull:
move.l #TasktablefullText,d2
move.l #TasktablefullTextende,d3
bsr Schreiben
rts

Argumentlineinvalid:
move.l #ArgumentlineinvalidText,d2
move.l #ArgumentlineinvalidTextende,d3
bsr Schreiben
rts

Fileisnotanobjectmodule:
move.l #FileisnotanobjectmoduleText,d2
move.l #FileisnotanobjectmoduleTextende,d3
bsr Schreiben
rts

Invalidresidentlibraryduringload:
move.l #InvalidresidentlibraryduringloadText,d2
move.l #InvalidresidentlibraryduringloadTextende,d3
bsr Schreiben
rts

Objectinuse:
move.l #ObjectinuseText,d2
move.l #ObjectinuseTextende,d3
bsr Schreiben
rts

Objectalreadyexists:
move.l #ObjectalreadyexistsText,d2
move.l #ObjectalreadyexistsTextende,d3
bsr Schreiben
rts

Directorynotfound:
move.l #DirectorynotfoundText,d2
move.l #DirectorynotfoundTextende,d3
bsr Schreiben
rts

Objectnotfound:
move.l #ObjectnotfoundText,d2
move.l #ObjectnotfoundTextende,d3
bsr Schreiben
rts

Invalidwindow:
move.l #InvalidwindowText,d2
move.l #InvalidwindowTextende,d3
bsr Schreiben
rts

Packedrequestedtypeunknown:
move.l #PackedrequestedtypeunknownText,d2
move.l #PackedrequestedtypeunknownTextende,d3
bsr Schreiben
rts

Invalidstreamcomponentname:
move.l #InvalidStreamcomponentnameText,d2
move.l #InvalidStreamcomponentnameTextende,d3
bsr Schreiben
rts

Invalidobjectlock:
move.l #InvalidobjectlockText,d2
move.l #InvalidobjectlockTextende,d3
bsr Schreiben
rts

Objectnotofrequiredtype:
move.l #ObjectnotofrequiredtypeText,d2
move.l #ObjectnotofrequiredtypeTextende,d3
bsr Schreiben
rts

Disknotvalidated:
move.l #DisknotvalidatedText,d2
move.l #DisknotvalidatedTextende,d3
bsr Schreiben
rts

Diskwriteprotected:
move.l #DiskwriteprotectedText,d2
move.l #DiskwriteprotectedTextende,d3
bsr Schreiben
rts

Renameacrossdevicesattempted:
move.l #RenameacrossdeviceattemptedText,d2
move.l #RenameacrossdeviceattemptedTextende,d3
bsr Schreiben
rts

Directorynotempty:
move.l #DirectorynotemptyText,d2
move.l #DirectorynotemptyTextende,d3
bsr Schreiben
rts

Devicenotmounted:
move.l #DevicenotmountedText,d2
move.l #DevicenotmountedTextende,d3
bsr Schreiben
rts

Seekerror:
move.l #SeekErrorText,d2
move.l #SeekErrorTextende,d3
bsr Schreiben
rts

Commenttoobig:
move.l #CommenttoobigText,d2
move.l #CommenttoobigTextende,d3
bsr Schreiben
rts

Diskfull:
move.l #DiskfullText,d2
move.l #DiskfullTextende,d3
bsr Schreiben
rts

Fileisprotectedfromdeletion:
move.l #FileisprotectedfromdeletionText,d2
move.l #FileisprotectedfromdeletionTextende,d3
bsr Schreiben
rts

Fileisprotectedfromwriting:
move.l #FileisprotectedfromwritingText,d2
move.l #FileisprotectedfromwritingTextende,d3
bsr Schreiben
rts

Fileisprotectedfromreading:
move.l #FileisprotectedfromreadingText,d2
move.l #FileisprotectedfromreadingTextende,d3
bsr Schreiben
rts

NotaDOSdisk:
move.l #NotaDOSdiskText,d2
move.l #NotaDOSdiskTextende,d3
bsr Schreiben
rts

Nodiskindrive:
move.l #NodiskindriveText,d2
move.l #NodiskindriveTextende,d3
bsr Schreiben
rts

Nomoreentriesindirectory:
move.l #NomoreentriesindirectoryText,d2
move.l #NomoreentriesindirectoryTextende,d3
bsr Schreiben
rts

Titel:
move.l #TitelText,d2		;Anfangsadresse in D2
move.l #TitelTextende,d3	;EndAdresse nach D3
bsr Schreiben			
rts


Schreiben:
move.l DosBase(pc),a6		;DosBase nach A6
move.l CLIHandle(pc),d1		;Fenster-Handle nach D1
sub.l d2,d3			;Berechnung der Laenge
jsr Write(a6)			;Text schreiben
rts


CloseCLI:
move.l CLIHandle(pc),d1		;Fenster-Handle nach D1
move.l DosBase(pc),a6		;DosBase nach A6
jsr Close(a6)			;Fenster schliessen
rts

CloseDos:
move.l ExecBase,a6		;ExecBasis-Adresse nach A6
move.l DosBase(pc),a1		;DosBase nach A1
jsr CloseLibrary(a6)		;DOSe wieder schliessen
rts

Ende:
rts

;Variablen

even

Dosbase:
dc.l 0				;Platz fuer Dos-Basisadresse

CLIHandle:
dc.l 0				;Platz fuer Fenster-Handle

Dosname:
dc.b `dos.library`,0		;Name der DOSe

CLI:
dc.b `*`,0			;CLI-Fenster

TitelText:
dc.b $9b,`3;33;40m`
dc.b `Warum ??? @ 1993 by Matthias Gutt, Kantstr. 16, W-2120 Lueneburg`,10

dc.b `Usage: WARUM Errorcode?`,10
dc.b ` `,10

TitelTextende:

insufficientfreestoreText:
dc.b `PROBLEM: Das von Ihnen zu letzt aufgerufene Programm, konnte den`,10
dc.b `angeforderten Speicherbereich nicht erhalten, da nicht genuegend`,10
dc.b `Speicherplatz vorhanden ist !`,10
dc.b ` `,10
dc.b `ABHILFE: Loeschen Sie den Speicher durch Beenden im Hintergrund`,10
dc.b `laufender Programme oder durch einen Reset !`,10
dc.b `Oder kaufen Sie sich eine Speichererweiterung !!!`,10
insufficientfreestoreTextende:

TasktablefullText:
dc.b `PROBLEM: Sie haben versucht einen 21zigsten Prozess im AmigaDOS`,10
dc.b `zu starten, obwohl maximal nur 20 erlaubt sind !`,10
dc.b `ABHILFE: Beenden Sie einen bereits existierenden Prozess !`,10
TasktablefullTextende:

ArgumentlineinvalidText:
dc.b `PROBLEM: Sie haben beim Aufruf eines CLI-Befehls fehlerhafte Angaben`,10
dc.b `in der Argumenteliste gemacht oder die Argumenteliste war zu lang !`,10
dc.b `ABHILFE: Ueberpruefen Sie Ihre Eingabe noch einmal genau und`,10
dc.b `schauen gegebenenfalls im Benutzerhandbuch Ihres Rechners nach !`,10
ArgumentlineinvalidTextende:

FileisnotanobjectmoduleText:
dc.b `PROBLEM: Die aufgerufene Datei ist nicht ausfuehrbar !`,10
dc.b `ABHILFE: Ueberpruefen Sie, ob es sich bei dieser Datei`,10
dc.b `tatsaechlich um ein ausfuehrbares Programm oder etwa um eine`,10
dc.b `Text-,Grafik-,Sound- oder Sampledatei handelt !`,10

dc.b `Moeglicherweise ist diese Datei auch zerstoert !!!`,10
FileisnotanobjectmoduleTextende:

InvalidresidentlibraryduringloadText:
dc.b `PROBLEM: Die aufgerufene residente Bibliothek ist ungueltig !`,10
dc.b `ABHILFE: Tauschen Sie die fehlerhafte Bibliothek im Verzeichnis`,10
dc.b `LIBS: gegen eine funktionsfaehige aus !`,10
InvalidresidentlibraryduringloadTextende:

ObjectinuseText:
dc.b `PROBLEM: Sie haben versucht auf eine Datei bzw. auf ein Verzeichnis`,10
dc.b `zu zugreifen, welche(s) bereits von einem anderen Programm`,10
dc.b `benutzt wird !`,10
dc.b `ABHILFE: Warten Sie bis das anderen Programm mit der Benutzung`,10
dc.b `fertig ist oder loesen Sie einen Reset aus !`,10
ObjectinuseTextende:

ObjectalreadyexistsText:
dc.b `PROBLEM: Sie haben einen Datei- bzw. Verzeichnisnamen`,10
dc.b `angegeben, der bereits existiert !`,10
dc.b `ABHILFE: Denken Sie sich einen neuen Namen aus !`,10
ObjectalreadyexistsTextende:

DirectorynotfoundText:
dc.b `PROBLEM: Sie haben ein Verzeichnis angewaehlt, das nicht existiert !`,10

dc.b `ABHILFE: Ueberpruefen Sie, ob Sie den Namen richtig `,10
dc.b `eingegeben haben ansonsten existiert das Verzeichnis tatsaechlich`,10
dc.b `nicht !`,10
DirectorynotfoundTextende:

ObjectnotfoundText:
dc.b `PROBLEM: Die angegebene Datei konnte nicht gefunden werden !`,10
dc.b `ABHILFE: Falls diese Datei wirklich existiert, ueberpruefen Sie`,10
dc.b `bitte noch einmal den eingetippten Namen auf Fehler !`,10
ObjectnotfoundTextende:

InvalidwindowText:
dc.b `PROBLEM: Es sollte ein DOS-Fenster geoffnet werden, welches`,10
dc.b `ungueltige Werte enthielt !`,10
dc.b `ABHILFE: Ueberpruefen Sie die Parameter fuer die Fensterangaben`,10
dc.b `in Ihrem Programm doch einmal !`,10
InvalidwindowTextende:

PackedrequestedtypeunknownText:
dc.b `PROBLEM: Es sollte eine Funktion auf einem Geraet durchgefuehrt`,10
dc.b `werden, die auf diesem Geraet nicht durchgefuehrt werden kann !`,10
dc.b `ABHILFE: Kann man pauschal so nicht sagen, da es vom Einzelfall`,10
dc.b `abhaengt !`,10
PackedrequestedtypeunknownTextende:

InvalidStreamComponentnameText:
dc.b `PROBLEM: Der angegebene Dateiname ist zu lang oder er enthaelt`,10
dc.b `unerlaubte Zeichen !`,10
dc.b `ABHILFE: Ueberpruefen Sie die Schreibweise des Dateinamens`,10
dc.b `auf Fehler !`,10
InvalidStreamComponentnameTextende:

InvalidobjectlockText:
dc.b `PROBLEM: Die angegebene Lock-Struktur ist ungueltig !`,10
dc.b `ABHILFE: Ueberpruefen Sie die Parameter der Lock-Struktur !`,10
InvalidobjectlockTextende:

ObjectnotofrequiredtypeText:
dc.b `PROBLEM: Der Dateiname und der Verzeichnisname sind verwechselt`,10
dc.b `worden !`,10
dc.b `ABHILFE: Aendern Sie entweder den Dateinamen oder den`,10
dc.b `Verzeichnisnamen !`,10
ObjectnotofrequiredtypeTextende:

DisknotvalidatedText:
dc.b `PROBLEM: Entweder wurde versucht zu einem Zeitpunkt auf die`,10
dc.b `Diskette zu zugreifen, als die BAM noch nicht eingelesen `,10
dc.b `wurde oder die BAM ist ungueltig !`,10
dc.b `ABHILFE: In der BAM ( Block Allocation Map ) sind saemtliche`,10
dc.b `Angaben ueber freie und belegte Bloecke enthalten.`,10
dc.b `Ist die BAM ungueltig, so koennen keine Dateien auf diese`,10
dc.b `Diskette mehr abgespeichert, wohl aber gelesen werden !`,10
dc.b `Fuer einen derartigen Fall haelt das Betriebssystem die`,10
dc.b `sogen. DISK-VALIDATING-Routine bereit, mit der die Block-Angaben`,10
dc.b `provisorisch eingelesen werden koennen !`,10
dc.b `Hiernach sind Schreibzugriffe wieder moeglich.`,10
dc.b `Sie sollten nun versuchen etwas auf diese Diskette zu`,10
dc.b `schreiben oder von ihr zu loeschen, um wieder eine gueltige`,10
dc.b `BitMap ( BAM ) zu erhalten !`,10
dc.b `ACHTUNG !!!`,10
dc.b `Es gibt auch sogen. DISK-VALIDATOR-Viren, die absichtlich`,10
dc.b `die BitMap zerstoeren !`,10
dc.b `Testen Sie evtl. Ihr System mit einem Viruskiller !`,10
DisknotvalidatedTextende:

DiskwriteprotectedText:
dc.b `PROBLEM: Es wurde versucht etwas auf eine schreibgeschuezte `,10
dc.b `Diskette abzuspeichern !`,10
dc.b `ABHILFE: Bewegen Sie den Schieber am rechten oberen Rand`,10
dc.b `Ihrer Diskette zum Zentrum dieser !`,10
DiskwriteprotectedTextende:

RenameacrossdeviceattemptedText:
dc.b `PROBLEM: Es wurde versucht etwas von einer Diskette auf eine`,10
dc.b `andere umzubenennen, was unmoeglich ist !`,10
dc.b `Sie koennen Verzeichnisse & Dateien nur innerhalb einer`,10
dc.b `Diskette umbenennen !`,10
dc.b `ABHILFE: Um eine Datei auf eine andere Diskette zu bringen,`,10
dc.b `verwenden Sie am besten den COPY-Befehl !`,10
RenameacrossdeviceattemptedTextende:

DirectorynotemptyText:
dc.b `PROBLEM: Es wurde versucht ein nicht leeres Verzeichnis`,10
dc.b `zu loeschen !`,10
dc.b `ABHILFE: Entfernen Sie entweder alle Dateien aus diesem`,10

dc.b `Verzeichnis oder versuchen Sie es von der WORKBENCH-Oberflaeche`,10
dc.b `aus zu loeschen, vorrausgesetzt es hat ein Piktogramm !`,10
DirectorynotemptyTextende:

DevicenotmountedText:
dc.b `PROBLEM: Es wurde versucht auf eine Diskette zu zugreifen,`,10
dc.b `die gar nicht eingelegt war !`,10
dc.b `ABHILFE: Na, nu legen Sie doch endlich die Diskette ein !!!`,10
DevicenotmountedTextende:

SeekErrorText:
dc.b `PROBLEM: Es wurde versucht die SEEK-Routine mit fehlerhaften`,10
dc.b `Parametern aufzurufen !`,10
dc.b `ABHILFE: Ueberpruefen Sie die Parameter der SEEK-Funktion`,10
dc.b `in Ihrem Programm !`,10
SeekErrorTextende:

CommenttoobigText:
dc.b `PROBLEM: Der Kommentar zur Datei ist zu lang !`,10
dc.b `ABHILFE: Fassen Sie sich kurz !`,10
CommenttoobigTextende:

DiskfullText:
dc.b `PROBLEM: Sie haben versucht etwas auf eine voll belegte`,10
dc.b `Diskette abzuspeichern !`,10
dc.b `ABHILFE: 10er-Pack Leerdisketten kaufen ...`,10
DiskFullTextende:

FileisprotectedfromdeletionText:
dc.b `PROBLEM: Sie haben versucht eine gegen Loeschen geschuetzte `,10
dc.b `Datei zu loeschen !`,10
dc.b `ABHILFE schafft:`,10
dc.b `PROTECT Dateiname RWDE`,10
FileisprotectedfromdeletionTextende:

FileisprotectedfromwritingText:
dc.b `PROBLEM: Sie haben versucht eine gegen Ueberschreiben `,10
dc.b `geschuetzte Datei zu ueberschreiben !`,10
dc.b `ABHILFE schafft:`,10
dc.b `PROTECT Dateiname RWDE`,10
FileisprotectedfromwritingTextende:

FileisprotectedfromreadingText:
dc.b `PROBLEM: Sie haben versucht eine gegen Lesen geschuetzte Datei`,10
dc.b `zu lesen !`,10
dc.b `ABHILFE schafft:`,10
dc.b `PROTECT Dateiname RWDE`,10
FileisprotectedfromreadingTextende:

NotaDOSdiskText:
dc.b `PROBLEM: Die eingelegte Diskette ist entwerder schadhaft oder`,10
dc.b `sie verwendet kein AmigaDOS-Format !`,10
NotaDOSDiskTextende:

NoDiskindriveText:
dc.b `PROBLEM: Im angewaehlten Laufwerk ist keine Diskette eingelegt`,10
dc.b `worden !`,10
dc.b `ABHILFE: Diskette einlegen - aber zacki !!!`,10
NoDiskindriveTextende:

NomoreentriesindirectoryText:
dc.b `Die EXNEXT-Routine konnte keinen weiteren Eintrag im`,10
dc.b `Verzeichnis finden !`,10
NomoreentriesindirectoryTextende:
 



