	opt l-,d+,s-,n+
	plen 72
	llen 80
	ttl "Printer-Device"
	
	include df0:include/exec/exec_lib.i
	include df0:include/intuition/intuition_lib.i
	include df0:include/startup

begin	lea intname,a1			;Intuition-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0			
	beq fini
	move.l d0,_IntuitionBase

	lea newwindow,a0		;Window öffnen
	CALLINT OpenWindow
	move.l d0,windowpointer

	suba.l a1,a1
  	CALLEXEC FindTask		;eigenen Task ermitteln
	move.l d0,IOPort+16		;in IOPort-Struktur eintragen
	lea IOPort,a1
	CALLEXEC AddPort

	lea IORequestT,a1		;Zeiger auf IO-Request-Struktur
	lea devicename,a0		;Zeiger auf Devicenamen
	clr.l d0			;Unit 0
	clr.l d1			;Keine Flags
	CALLEXEC OpenDevice		;Device öffnen
	tst.l d0			;Fehler ?
	bne error			;Ja, Abbruch !
	lea IORequestT,a1		;Zeiger auf IORequest-Struktur
	CALLEXEC DoIO			;Kommando ausführen
	lea IORequestT,a1
	CALLEXEC CloseDevice		;und Device schließen

	lea IORequestS,a1		;Zeiger auf IO-Request-Struktur
	lea devicename,a0		;Zeiger auf Devicenamen
	clr.l d0			;Unit 0
	clr.l d1			;Keine Flags
	CALLEXEC OpenDevice		;Device öffnen
	tst.l d0			;Fehler ?
	bne error			;Ja, Abbruch !
	lea IORequestS,a1		;Zeiger auf IORequest-Struktur
	CALLEXEC DoIO			;Kommando ausführen
	lea IORequestS,a1
	CALLEXEC CloseDevice		;und Device schließen

	move.l windowpointer,a0
	move.l $2E(a0),a0		;Adresse Screen-Struktur holen
	move.l a0,d0
	add.l #$54,d0			;Zeiger auf Rast-Port-Struktur
	move.l d0,rastp			;in IORequest-Struktur
	move.w $0C(a0),width		;Screen-Breite und -Höhe in
	move.w $0E(a0),height		;IORequest-Struktur eintragen
	adda.l #$2C,a0			;Zeiger auf View-Port-Struktur
	move.l 4(a0),color		;Zeiger auf Color-Map und
	clr.l d0
	move.w $20(a0),d0
	move.l d0,viewm 		;View-Mode in IORequest-Struktur
	move.l windowpointer,a0		;Window schliessen
	CALLINT CloseWindow	

	lea IORequestH,a1		;Zeiger auf IO-Request-Struktur
	lea devicename,a0		;Zeiger auf Devicenamen
	clr.l d0			;Unit 0
	clr.l d1			;Keine Flags
	CALLEXEC OpenDevice		;Device öffnen
	tst.l d0			;Fehler ?
	bne error			;Ja, Abbruch !
	lea IORequestH,a1		;Zeiger auf IORequest-Struktur
	CALLEXEC DoIO			;Kommando ausführen
	lea IORequestH,a1
	CALLEXEC CloseDevice		;und Device schließen

error	lea IOPort,a1
	CALLEXEC RemPort
	move.l _IntuitionBase,a1	;Library schließen
	CALLEXEC CloseLibrary
fini	rts

	cnop 0,2

_IntuitionBase  dc.l 0
intname  dc.b "intuition.library",0
	cnop 0,2
devicename  dc.b "printer.device",0
	cnop 0,2
portname    dc.b "printer.port",0
	cnop 0,4

* IOPort-Struktur für Messages

IOPort     dc.l 0,0		;Reply-Port (Initialisierung im Programm)
	   dc.b 4
	   dc.b 0
	   dc.l portname
	   dc.b 0
	   dc.b 31
	   dc.l 0
lh1	   dc.l lh2
lh2	   dc.l 0
	   dc.l lh1
	   dc.b 0,0

	   cnop 0,4

* IORequest-Struktur für Hardcopy

IORequestH dc.l 0,0
	   dc.b 5,0
	   dc.l 0
	   dc.l IOPort		;Zeiger auf IOPort-Struktur
	   dc.w 62		;Größe der IORequest-Struktur in Bytes
	   dc.l 0,0
command	   dc.w 11		;Kommando: DumpRastPort (Hardcopy)
	   dc.b 0,0
rastp	   dc.l 0		;Zeiger auf Rastport
color	   dc.l 0		;Zeiger auf Color-Map
viewm	   dc.l 0		;View-Port Mode
	   dc.w 0		;x-Ursprung
	   dc.w 0		;y-Ursprung
width	   dc.w 0		;Breite des Rast-Ports
height	   dc.w 0		;Höhe des Rastports
	   dc.l 960		;Breite des Ausdrucks in Punkten
	   dc.l 0		;Höhe des Ausdrucks in Punkten egal
	   dc.w 128		;wegen Flag

	   cnop 0,4
	
* IORequest-Struktur für Steuerzeichen

IORequestS dc.l 0,0
	   dc.b 5,0
	   dc.l 0
	   dc.l IOPort		;Zeiger auf IOPort-Struktur
	   dc.w 48		;Größe der IORequest-Struktur in Bytes
	   dc.l 0,0
	   dc.w 10		;Kommando: Steuerzeichen senden
	   dc.b 0,0
steuer	   dc.w 3		;Code für Steuerzeichen
para1	   dc.b 0		;1.Parameter
para2	   dc.b 0		;2.Parameter
para3	   dc.b 0		;3.Parameter
para4	   dc.b 0		;4.Parameter
	   dc.l 0,0,0,0

* IORequest-Struktur für Textausgabe

IORequestT dc.l 0,0
	   dc.b 5,0
	   dc.l 0
	   dc.l IOPort		;Zeiger auf IOPort-Struktur
	   dc.w 48		;Größe der IORequest-Struktur in Bytes
	   dc.l 0,0
	   dc.w 9		;Kommando: Text drucken
	   dc.b 0,0
	   dc.l 0		
long	   dc.l -1		;Textlänge
print	   dc.l text		;Zeiger auf Text
	   dc.w 0,0,0,0
	   dc.l 0,0		
	   dc.w 0		

	cnop 0,4
text	dc.b "********** Hardcopy des Workbenchscreens **********",13,0
	even	

* NewWindow-Struktur
  
newwindow    dc.w        0      ;Linke Ecke
             dc.w        0	;Obere Ecke
             dc.w        5	;Breite
             dc.w        5	;Hoehe
             dc.b       0,1	;Farben
             dc.l        0	;Flags für Events
             dc.l    $1000	;Window Flags
             dc.l        0      ;Zeiger auf erstes Gadget
             dc.l        0      ;Check Mark
             dc.l        0      ;Windowname						
	     dc.l        0	;Screenpointer
             dc.l        0	;Bit Map
             dc.w        0	;Mindest-Breite
             dc.w        0 	;Mindest-Hoehe
             dc.w        0	;Maximale Breite
             dc.w        0	;Maximale Hoehe
             dc.w        1	;Window-Typ (Workbench)

windowpointer  dc.l 0


