;*************************************************************************
;*
;* Dieses Programm ist Public Domain und wurde mit dem Profimat-Assembler
;* von Data Becker erstellt. Das Kopieren für den privaten
;* Gebrauch ist erlaubt. Sollen das Programm oder Teile daraus für
;* kommerzielle Zwecke verwendet werden, bitte ich darum, sich mit
;* mir in Verbindung zu setzen.
;*
;* © 1987 Richard Englert, Flößaustraße 160, 8510 Fürth, Tel.:0911/708255
;*
;* letzte Änderung: 31-10-1987
;*
;* ChangeTaskPri ist ein Ersatz für den gleichnamigen CLI-Befehl.
;* Die Handhabung ist genauso, mit der kleinen Ausnahme, daß nur
;* Prioritäten zwischen -9 und +9 vergeben werden können, aus dem
;* einfachen Grund, weil ich zu faul war mehrstellige Prioritäten
;* abzufragen. Wer Lust hat kann das noch ändern, allerdings sollte
;* man laut Commodore sowieso keine Prioritäten größer als 10 vergeben.
;*
;*************************************************************************

 INCLUDE 'ram:Amiga.ASM'

_LVOOpenLibrary   EQU -$0228
_LVOCloseLibrary  EQU -$019e
_LVOSetTaskPri    EQU -$012c

;*************************************************************************
;Hauptprogramm:
;*************************************************************************
 MOVE.L A0,CBuf                  ;Startadresse des CLI-Übergabepuffers
 MOVE.L D0,CLen                  ;Länge des CLI-Übergabepuffers

 INIT_AMIGA

 MOVE.L #0,A1                    ;welche Task bin ich ?
 LINKSYS FindTask,ExecBase
 MOVE.L D0,A1                    ;Task Struktur Pointer nach A1

 MOVE.L Cbuf,A0                  ;aus Länge und Startadresse
 MOVE.L CLen,D0                  ;die Endadresse berechnen und
 MOVE.L A0,A2                    ;in A2 ablegen
 ADD.L D0,A2
 CLR.L D1                        ;D0 und D1 löschen
 CLR.L D0

Loop:
 CMP.L A0,A2                     ;schon am Ende des Puffers ?
 BLT EXIT                        ;ja, dann EXIT
 MOVE.B (A0)+,D0                 ;Zeichen aus Puffer nach D0
 CMP.B #' ',D0                   ;Zeichen = Leerzeichen ?
 BEQ Loop                        ;ja, nächstes Zeichen holen
 CMP.B #'-',D0                   ;Zeichen = '-' Zeichen
 BNE weiter                      ;nein, dann WEITER
 MOVE.B #-1,D1                   ;ja, D1 auf -1 setzen
 BRA Loop                        ;nächstes Zeichen
weiter:
 CMP.B #30,D0                    ;ASCII-Code < $30
 BLT EXIT                        ;ja, EXIT
 CMP.B #$39,D0                   ;ASCII-Code > $39
 BGT EXIT                        ;ja, EXIT
 SUB.B #$30,D0                   ;ASCII-Code - $30
 TST.B D1                        ;D1 testen
 BPL TaskPri                     ;positiv, dann TASKPRI
 NEG.L D0                        ;negativ, D0 negieren

TaskPri:
 LINKSYS SetTaskPri,ExecBase     ;Task Priorität ändern

EXIT:

 EXIT_AMIGA

 ALIGN

 BSS
CBuf:DS.L 1
CLen:DS.L 1

 END
