;*************************************************************************
;*
;* 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: 20-09-1987
;*
;* nbCLI bringt das CLI-Window auf volle WB-Screen-Größe und löscht den
;* Rahmen mit Hilfe von Bildschirmcodes.
;* nbCLI stellt sich automatisch auf die Screen-Größe ein und berechnet
;* die Anzahl der Zeichen/Zeile und der Zeilen für das CLI-Window.
;* Vorausgesetzt wird, daß man den Topaz 8 Zeichensatz verwendet. Für
;* Topaz 9 (60 Zeichen/Zeile) müssen die Konstanten Font_Breite auf 10
;* und Font_Höhe auf 9 gestellt werden.
;* Für andere Zeichensätze müssen die entsprechenden Werte eingesetzt
;* werden.
;*
;*************************************************************************

 INCLUDE 'ram:Amiga.ASM'

;AmigaDOS-Funktionen

_LVOOpenLibrary   EQU -552
_LVOCloseLibrary  EQU -414
_LVODelay         EQU -198
_LVOSizeWindow    EQU -288
_LVOMoveWindow    EQU -168
_LVOOutput        EQU -60
_LVOWrite         EQU -48

;wichtige Konstanten:

ActiveWindow   = $34
ActiveScreen   = $38
LeftEdge       = $4
TopEdge        = $6
Width          = $8
Height         = $a
MinWidth       = $10
MinHeight      = $12
MaxWidth       = $14
MaxHeight      = $16
sc_Width       = $c
sc_Height      = $e
Font_Breite    = 8
Font_Höhe      = 8

;*****************************************************************
;Hauptprogramm:
;*****************************************************************

 INIT_AMIGA

 LEA IntuitionName,A1            ;Intuition Library öffnen
 MOVEQ #0,D0
 CALLSYS OpenLibrary
 MOVE.L D0,IntuitionBase
 BEQ EXIT

 LEA DosName,A1                  ;Dos Library öffnen
 MOVEQ #0,D0
 CALLSYS OpenLibrary
 MOVE.L D0,DosBase
 BEQ EXIT

 LEA GfxName,A1                  ;Graphics Library öffnen
 MOVEQ #0,D0
 CALLSYS OpenLibrary
 MOVE.L D0,GfxBase
 BEQ EXIT

Full:                            ;Window auf volle Größe
 MOVE.L IntuitionBase,A0
 MOVE.L ActiveScreen(A0),A1
 MOVE.L ActiveWindow(A0),A0      ;Aktives Window
 MOVE.W sc_Width(A1),D6          ;Screen-Ausmaße X/Y nach D6/D7
 MOVE.W sc_Height(A1),D7
 CLR.L D0
 CLR.L D1
 MOVE.W D6,D0                    ;Screen-Ausmaße durch 8 teilen
 MOVE.W D7,D1                    ;um die Anzahl der maximal
 DIVU #Font_Breite,D0            ;möglichen Zeichen pro Zeile
 DIVU #Font_Höhe,D1              ;und die Anzahl der maximal
 DIVU #10,D0                     ;möglichen Zeilen
 ADD.B #$30,D0                   ;in den String zu schreiben, der
 MOVE.B D0,String+10             ;dann später den Rahmen ver-
 SWAP D0                         ;schwinden läßt.
 ADD.B #$30,D0
 MOVE.B D0,String+11
 DIVU #10,D1
 ADD.B #$30,D1
 MOVE.B D1,String+15
 SWAP D1
 ADD.B #$30,D1
 MOVE.B D1,String+16
 MOVE.W D6,D0                    ;max.Window-Breite=Screen-Breite
 MOVE.W D7,D1                    ;max.Window-Höhe=Screen-Höhe
 MOVE.W Width(A0),D2             ;Differenz von augenblicklicher
 MOVE.W Height(A0),D3            ;Window-Breite/-Höhe und
 SUB.W D2,D0                     ;max. Window-Breite/-Höhe nach
 SUB.W D3,D1                     ;D0/D1
 MOVE.W LeftEdge(A0),D4
 MOVE.W TopEdge(A0),D5
 ADD.W D4,D2
 ADD.W D5,D3
 ADD.W D0,D2
 ADD.W D1,D3
 CMP.W D6,D2                     ;testen, ob max. Größe noch auf
 BGT Move1                       ;Screen paßt.Zu breit, dann MOVE1
 CMP.W D7,D3                     ;Window zu hoch,
 BGT Move1                       ;dann MOVE1

FullSize:
 LINKSYS SizeWindow,IntuitionBase   ;Window vergrößern
 BSR Delay10                        ;für 1/5 s einschläfern
 BRA Rahmen

Move1:                           ;Window wäre zu groß
 MOVEM.L D0-D1/A0,-(A7)          ;deshalb muß es zuerst in das
 NEG.W D4                        ;linke obere Eck des Screens
 NEG.W D5                        ;verschoben werden.
 MOVE.W D4,D0                    ;Verschiebung um D0/D1
 MOVE.W D5,D1
 LINKSYS MoveWindow,IntuitionBase  ;Window verschieben
 BSR Delay10                       ;für 1/5 s einschläfern
 MOVEM.L (A7)+,D0-D1/A0          ;alte Registerinhalte holen
 BRA FullSize                    ;Window vergrößern

Delay10:                         ;Verzögerungsschleife
 MOVEQ #10,D1                    ;um 10/50 s verzögern
 LINKSYS Delay,DosBase
 RTS

Rahmen:
 MOVE.L #19,D3
 MOVE.L #String,D2
 LINKSYS Output,DosBase
 MOVE.L D0,D1
 LINKSYS Write,DosBase

EXIT:                            ;Programm Ende
 MOVE.L IntuitionBase,D0         ;Intuition Library schließen
 BEQ.S No_Lib
 MOVE.L D0,A1
 CALLSYS CloseLibrary
 MOVE.L DosBase,D0               ;Dos Library schließen
 BEQ.S No_Lib
 MOVE.L D0,A1
 CALLSYS CloseLibrary
 MOVE.L GfxBase,D0               ;Graphics Library schließen
 BEQ.S No_Lib
 MOVE.L D0,A1
 CALLSYS CloseLibrary
No_Lib:
 EXIT_AMIGA 

 ALIGN
 DATA
IntuitionName:     DC.B 'intuition.library',0
DosName:           DC.B 'dos.library',0
GfxName:           DC.B 'graphics.library',0
 ALIGN
String:            DC.B 27,"[0x",27,"[0y",27,"[  u",27,"[  t",12
 ALIGN
 BSS
IntuitionBase:     DS.L 1
DosBase:           DS.L 1
GfxBase:           DS.L 1

 END

