OpenLib = -408
CloseLib = -414
ExecBase = 4

Open = -30
Close = -36
Read = -42
Write = -48

Mode_Old = 1005

	jmp     main

BUFLEN = 80
NAMELEN = 80

Name:   blk.b   NAMELEN
stackptr:       dc.l    0
Buf:    blk.b   BUFLEN

prompt: dc.b    "Bitte Namen eingaben: ",0
	even
gruss:  dc.b    "Hallo ",0
	even
meldung:        dc.b    "Ende mit <Return>"
	even

main:
	move.l  a7,stackptr
	bsr     OpenDos
	bsr     OpenCon
	move.l  #2,d0
	move.l  #2,d1
	bsr     Locate
	lea     prompt,a0
	bsr     WriteText
	lea     Name,a0
	move.l  #NAMELEN,d0
	bsr     ReadText
	move.l  #4,d0
	move.l  #2,d1
	bsr     Locate
	lea     gruss,a0
	bsr     WriteText
	lea     Name,a0
	bsr     WriteText
	clr.l   d0
	bsr     SetCursor
	move.l  #10,d0
	move.l  #10,d1
	bsr     Locate
	lea     meldung,a0
	bsr     WriteText
	bsr     WaitReturn
	bsr     CloseAll
	clr.l   d0
	rts

OpenDos:
	move.l  ExecBase,a6
	lea     dosname,a1
	clr.l   d0
	jsr     OpenLib(a6)
	move.l  d0,dosbase
	beq     error
	rts
dosname:        dc.b    "dos.library",0
	even
dosbase: dc.l   0

CloseDos:
	tst.l   DosBase
	beq     CDEnd
	move.l  DosBase,a1
	move.l  ExecBase,a6
	jsr     CloseLib(a6)
CDEnd:  rts

OpenCon:
	move.l  dosbase,a6
	move.l  #conspec,d1
	move.l  #Mode_Old,d2
	jsr     Open(a6)
	move.l  d0,ConHandle
	beq     error
	rts

conspec:        dc.b    "con:10/10/300/130/test",0
	even
ConHandle: dc.l 0

CloseCon:
	move.l  ConHandle,d1
	beq     CCEnd
	move.l  DosBase,a6
	jsr     Close(a6)
CCEnd:  rts

CloseAll:
	bsr     CloseCon
	bsr     CloseDos
	rts

error:
	bsr     CloseAll
	move.l  #20,d0
	move.l  stackptr,a7
	rts

OutAsc:
	move.l  d2,-(a7)
	move.l  a0,a1
	move.l  #100000,d2
OALoop0:
	move.b  #-1,d1
OALoop1:
	addq.b  #1,d1
	sub.l   d2,d0
	bpl     OALoop1
	add.l   d2,d0
	cmp.l   a0,a1
	bne     OA1
	tst.b   d1
	beq     OA2
OA1:
	add.b   #$30,d1
	move.b  d1,(a0)+
OA2:
	divu    #10,d2
	bne     OALoop0
	move.l  (a7)+,d2
	rts

GetVal:
	clr.l   d0
	clr.l   d1
GVal1:  move.b  (a0)+,d1
	cmp.b   #" ",d1
	beq     GVal1
	move.b  d1,-(a7)
	cmp.b   #"-",d1
	bne     GVal21
GVal2:  move.b  (a0)+,d1
GVal21: cmp.b   #$30,d1
	blt     GVal3
	cmp.b   #$39,d1
	bgt     GVal3
	mulu    #10,d0
	sub.b   #$30,d1
	add.l   d0,d1
	bra     GVal2
GVal3:  move.b  (a7)+,d1
	cmp.b   #"-",d1
	bne     GVEnd
	neg.l   d0
GVEnd:  rts

Locate:
	move.l  d1,-(a7)
	lea     buf,a0
	move.b  #$9b,(a0)+
	jsr     OutAsc
	move.b  #";",(a0)+
	move.l  (a7)+,d0
	jsr     OutAsc
	move.b  #"H",(a0)+
	clr.b   (a0)+
	jmp     WriteBuf

SetCursor:
	tst.l   d0
	beq     SCurs2
	move.l  #$9b207000,buf
	jmp     WriteBuf
SCurs2: move.l  #$9b302070,buf
	clr.b   buf+4
	jmp     WriteBuf
	
SetBold:
	tst.l   d0
	beq     SBold2
	move.l  #$9b316d00,buf
	jmp     WriteBuf
SBold2: move.l  #$9b32326d,buf
	clr.b   buf+4
	jmp     WriteBuf
SetItalic:
	tst.l   d0
	beq     SItal2
	move.l  #$9b336d00,buf
	jmp     WriteBuf
SItal2: move.l  #$9b32336d,buf
	clr.b   buf+4
	jmp     WriteBuf
SetUnderline:
	tst.l   d0
	beq     SUnder2
	move.l  #$9b346d00,buf
	jmp     WriteBuf
SUnder2:        move.l  #$9b32346d,buf
	clr.b   buf+4
	jmp     WriteBuf
SetInvers:
	tst.l   d0
	beq     SInv2
	move.l  #$9b376d00,buf
	jmp     WriteBuf
SInv2:  move.l  #$9b32376d,buf
	clr.b   buf+4
	jmp     WriteBuf

TextLen:
	move.l  #-1,d0
TL1:
	addq.l  #1,d0
	tst.b   (a0)+
	bne     TL1
	rts

CopyToBuf:
	lea     buf,a1
CTB1:
	move.b  (a0)+,(a1)+
	bne     CTB1
	rts

WriteBuf:
	lea     buf,a0
WriteText:
	movem.l d2-d3,-(a7)
	move.l  a0,-(a7)
	jsr     TextLen
	move.l  d0,d3
	move.l  (a7)+,d2
	move.l  ConHandle,d1
	jsr     Write(a6)
	movem.l (a7)+,d2-d3
	rts

ReadBuf:        lea     buf,a0
	move.l  #BUFLEN,d0
ReadText:
	movem.l d2-d3,-(a7)
	move.l  ConHandle,d1
	move.l  a0,d2   ; Adresse
	move.l  d0,d3   ; L„nge
	move.l  d2,-(a7)
	jsr     Read(a6)
	tst.l   d0
	beq     RT1     ; nichts gelesen
	subq.l  #1,d0
RT1:    add.l   (a7)+,d0        ; Adresse+L„nge+1
	move.l  d0,a0
	clr.b   (a0)    ; Null = Ende
	movem.l (a7)+,d2-d3
	rts

ReadVal:
	bsr     ReadBuf
	lea     buf,a0
	bsr     GetVal
	rts

WaitReturn:
	movem.l d2-d3,-(a7)
	move.l  ConHandle,d1
	move.l  #buf,d2
	move.l  #1,d3
	jsr     Read(a6)
	movem.l (a7)+,d2-d3
	rts
