; Remember reader 1.0
; 
; (c) 1998 Cyborg 

	IncDir 	"Sys:Coder/"
	Include     "Preass/Konstanten.inc"
	Include     "Preass/ASL_lib.inc"
    Include     "Preass/intuition.inc"
    Include     "Include/Guienv.i"
    Include     "Include/Libraries/gadtools.i"

Main:
	Include "preass/Startup.i"
	Jsr Openlibs
	Tst.l D0
	Beq Mainende
	Jsr START
Mainende:
	jsr Closelibs
	Move.l Error,d0
	tst.l d0
	beq .l1
	jmp ErrorHandling
.l1:	Rts

    Mode_NoCase= 100
    Mode_Case=   0


FileReq:
     Move.l A0,LokalScreen
     Move.l AslBase,a6
     Move.l #ASL_FileRequest,d0
     Move.l #0,a0
     Jsr AllocAslRequest(a6)
     Move.l D0,Requester
     Tst.l Requester
     Beq .Select2
     move.l #ASLFR_Taglist,a0
     move.l LokalScreen,4(a0)
     Move.l Requester,a0
     Move.l #ASLFR_Taglist,a1
     Jsr ASLRequest(a6)
     Move.l D0,Result
        Tst.l Result
        Beq .Select2
        Clr.l D0
        Move.l Requester,A0
        Move.l 4(A0),D0
        Move.l D0,Filename_Zeiger
        Clr.l D0
        Move.l Requester,A0
        Move.l 8(A0),D0
        Move.l D0,Dirname_zeiger
        Move.l ExecBase,a6
        Move.l Dirname_zeiger,a0
        Move.l #Dirname,a1
        Move.l #100,d0
        Jsr Copymem(a6)
        Move.l Filename_zeiger,a0
        Move.l #Name,a1
        Move.l #100,d0
        Jsr Copymem(a6)
        Lea Name_Bak,a0
        move.l Dirname_zeiger,a1
.Sel1:  move.b (a1)+,(a0)+
        cmpi.b #0,(a1)
        bne .sel1
        cmpi.b #":",-1(a0)
        beq .sel12
        move.b #"/",(a0)+
.sel12: move.l Filename_zeiger,a1
.Sel2:  move.b (a1)+,(a0)+
        cmpi.b #0,(a1)
        bne .sel2
        move.b #0,(a0)+
.Select2:
        Tst.l Requester
        Beq .lab1
        Move.l AslBase,a6
        Move.l Requester,a0
        Jsr FreeASLRequest(a6)
.lab1:  RTS

FillBuffer:
    subq.l #1,d1
.l1:move.b d0,(a0)+
    dbra  d1,.l1
    RTS

ConvertZahl:
    Move.l #"    ",Zusatz
    Move.l #"   0",Zahl
ConvertZahl1:
    Movem.l a0-a5,-(sp)
    Lea Zusatz,a0
    Cmpi.l #0,d7
    bpl .l0
    Neg.l d7
    move.b #"-",zahl
    Cmpi.l #9999,d7
    bgt .l0
    move.b #"-",zusatz
.l0:Move.l d7,d0
    MoveQ.l #-1,d1
.l1:AddQ.l #1,d1
    Subi.l #10000000,d0
    Bpl .l1
    Addi.l #10000000,d0
    addi.l #$30,d1
    cmpi.b #"0",d1
    Beq .l11
    move.b d1,0(a0)
.l11:MoveQ.l #-1,d1
.l2:AddQ.l #1,d1
    Subi.l #1000000,d0
    Bpl .l2
    Addi.l #1000000,d0
    addi.l #$30,d1
    cmpi.b #" ",0(a0)
    bne .l22
    cmpi.b #"0",d1
    Beq .l21
.l22:
    move.b d1,1(a0)
.l21:MoveQ.l #-1,d1
.l3:AddQ.l #1,d1
    Subi.l #100000,d0
    Bpl .l3
    Addi.l #100000,d0
    addi.l #$30,d1
    cmpi.b #" ",1(a0)
    bne .l32
    cmpi.b #"0",d1
    Beq .l31
.l32:
    move.b d1,2(a0)
.l31:MoveQ.l #-1,d1
.l4:AddQ.l #1,d1
    Subi.l #10000,d0
    Bpl .l4
    Addi.l #10000,d0
    addi.l #$30,d1
    cmpi.b #" ",2(a0)
    bne .l42
    cmpi.b #"0",d1
    Beq .l41
.l42:
    move.b d1,3(a0)
.l41:MoveQ.l #-1,d1
.l5:AddQ.l #1,d1
    Subi.l #1000,d0
    Bpl .l5
    Addi.l #1000,d0
    addi.l #$30,d1
    cmpi.b #" ",3(a0)
    bne .l52
    cmpi.b #"0",d1
    Beq .l51
.l52:
    move.b d1,4(a0)
.l51:MoveQ.l #-1,d1
.l6:AddQ.l #1,d1
    Subi.l #100,d0
    Bpl .l6
    Addi.l #100,d0
    addi.l #$30,d1
    cmpi.b #" ",4(a0)
    bne .l62
    cmpi.b #"0",d1
    Beq .l61
.l62:
    move.b d1,5(a0)
.l61:MoveQ.l #-1,d1
.l7:AddQ.l #1,d1
    Subi.l #10,d0
    Bpl .l7
    Addi.l #10,d0
    addi.l #$30,d1
    cmpi.b #" ",5(a0)
    bne .l72
    cmpi.b #"0",d1
    Beq .l71
.l72:
    move.b d1,6(a0)
.l71:
    addi.l #$30,d0
    move.b d0,7(a0)
    Movem.l (sp)+,a0-a5
    Tst.l D6
    Beq .ende   
    Move.l DOSBase,a6
    Move.l D6,d1
    Move.l #Zusatz,d2
    Move.l #8,d3
    Jsr Write(a6)
.ende:RTS

CompareString:
    movem.l d0-d7/a0-a6,-(sp)
    movem.l d0-d1/a0-a1,-(sp)
    Jsr CountString
    Move.l D0,Stringlaenge
    movem.l (sp)+,d0-d1/a0-a1
    movem.l d0-d1/a0-a1,-(sp)
Move.l a1,A0
Jsr CountString
    Cmp.l Stringlaenge,D0
    Beq .l0
    movem.l (sp)+,d0-d1/a0-a1
    bra .fehler
.l0:movem.l (sp)+,d0-d1/a0-a1
    cmpi.l #Mode_Nocase,d1
    beq .nocase
    move.l Stringlaenge,d1
    subq.l #1,d1
    addi.l d0,a1
.l1:move.b (a0)+,d0
    cmp.b (a1)+,d0
    bne .fehler
    dbra d1,.l1
    movem.l (a7)+,d0-d7/a0-a6
    moveq.l #-1,d0
    RTS
.NoCase:
    move.l Stringlaenge,d1
    subq.l #1,d1
    addi.l d0,a1
.l2:move.b (a0)+,d0
    move.b (a1)+,d2
    bclr #5,d0
    bclr #5,d2
    cmp.b d2,d0
    bne .fehler
    dbra d1,.l2
    movem.l (a7)+,d0-d7/a0-a6
    moveq.l #-1,d0
    RTS
.Fehler:
    movem.l (a7)+,d0-d7/a0-a6
    moveq.l #0,d0
    RTS

CountString:
        move.l a1,-(Sp)
        move.l a0,a1
.l1:    cmpi.b #$00,(a1)+
        bne .l1
        lea -1(a1),a1
        sub.l a0,a1
        move.l a1,d0
        move.l (sp)+,a1
        RTS

CountEOL:
        move.l a1,-(Sp)
        move.l a0,a1
.l1:    cmpi.b #$0a,(a1)
        beq .l2
        cmpi.b #$00,(a1)+
        bne .l1
        lea -1(a1),a1
.l2:    sub.l a0,a1
        move.l a1,d0
        addq.l #1,d0
        cmpi.b #$00,(a0)
        beq .null
        move.l (sp)+,a1
        RTS
.null:  clr.l d0
        move.l (sp)+,a1
        RTS

CD:
        Move.l DOSBase,a6
        Move.l a0,d1
        Move.l #Access_read,d2
        Jsr Lock(a6)
        Tst.l d0
        Beq .ende
            Move.l d0,d1
            Jsr Currentdir(a6)
            Move.l d0,d1
            Jsr Unlock(a6)
            moveq.l #-1,d0
.ende:  RTS

GetFilename:
        cmpi.l #0,laenge
        beq .l13
        cmpi.l #1,laenge
        beq .l13
        Move.l Adresse,a0
.l1:    cmpi.b #`"`,(a0)
        beq .l10
        cmpi.b #` `,(a0)+
        beq .l1
        lea -1(a0),a1
.l2:    cmpi.b #`"`,(a0)
        beq .l11
        cmpi.b #$0a,(a0)
        beq .l12
        cmpi.b #$00,(a0)
        beq .l12
        cmpi.b #` `,(a0)+
        bne .l2
        Lea -1(a0),a2
.l3:    suba.l a1,a2
        Move.l ExecBase,a6
        Move.l a1,a0
        Move.l #Filename,a1
        Move.l a2,d0
        Jsr Copymem(a6)
        Move.l a2,d0
        rts
.l10:   lea 1(a0),a1
        bra .l2
.l11:   lea 1(a0),a1
        bra .l3
.l12:   move.l a0,a2
        bra .l3
.l13:   moveq.l #0,d0
        RTS



Start:
    Move.l DOSBase,a6
    Jsr Output(a6)
    Move.l D0,OH
Move.l #Envarc_Remembername000,d1
Move.l #Mode_old,d2
Jsr Open(a6)
Move.l D0,TH
    Cmp.l #0,D0
    Beq .ende
.l1:
    Move.l TH,d1
    Move.l #Buffer1,d2
    Move.l #250,d3
    Jsr Fgets(a6)
    Move.l D0,Result
    Move.l TH,d1
    Move.l #Buffer3,d2
    Move.l #250,d3
    Jsr Fgets(a6)
    Move.l D0,Result
    Move.l Result,d0
    Cmp.l #0,D0
    Beq .close
Move.l #Envarc_Remembername001,d1
Move.l #Mode_old,d2
Jsr Open(a6)
Move.l D0,FH
    Cmp.l #0,D0
    Bne .pre0000
    Bra .Pre0001
.Pre0000:

.l3:
                                        Move.l FH,d1
                                        Move.l #Buffer2,d2
                                        Move.l #250,d3
                                        Jsr Fgets(a6)
                                        Move.l D0,Result
                                        Move.l Result,d0
                                        Cmp.l #0,D0
                                        Beq .l2
Move.l #Buffer1,a0
Move.l #Buffer2,a1
Move.l #0,d0
Move.l #MODE_nocase,d1
Jsr Comparestring
                                        Cmp.l #0,D0
                                        Beq .l3
                                        Move.l DOSBase,a6
                                        Move.l #Buffer3,d1
                                        Move.l #0,d2
                                        Move.l #0,d3
                                        Jsr Execute(a6)
.l2:                                                     
                                        Move.l FH,d1
                                        Jsr Close(a6)
                                                         bra .l1
                                                       
.Pre0001:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
.close:
    Move.l TH,d1
    Jsr Close(a6)
.ende:
    RTS
Errorhandling:
    Move.l DOSBase,a6
    Jsr output(a6)
    Move.l D0,Ausgabe
    Move.l Error,d0
    Cmp.l #1,D0
    Beq .Pre0000
    Bra .Pre0001
.Pre0000:
Move.l DOSBase,a6
Move.l Ausgabe,d1
Move.l #Allgemeiner_Fehlerxnname000,d2
Moveq.l #$13,d3
Jsr Write(a6)
.Pre0001:
    Move.l Error,d0
    Cmp.l #2,D0
    Beq .Pre0002
    Bra .Pre0003
.Pre0002:
Move.l DOSBase,a6
Move.l Ausgabe,d1
Move.l #Konnte_File_nicht_findenxnname001,d2
Moveq.l #$19,d3
Jsr Write(a6)
.Pre0003:
    Move.l Error,d0
    Cmp.l #3,D0
    Beq .Pre0004
    Bra .Pre0005
.Pre0004:
Move.l DOSBase,a6
Move.l Ausgabe,d1
Move.l #Window_Screen_Fehlerxnname002,d2
Moveq.l #$15,d3
Jsr Write(a6)
.Pre0005:
    Move.l Error,d0
    Cmp.l #4,D0
    Beq .Pre0006
    Bra .Pre0007
.Pre0006:
Move.l DOSBase,a6
Move.l Ausgabe,d1
Move.l #Library_nicht_gefundenxnname003,d2
Moveq.l #$17,d3
Jsr Write(a6)
.Pre0007:
    Move.l Error,d0
    Cmp.l #5,D0
    Beq .Pre0008
    Bra .Pre0009
.Pre0008:
Move.l DOSBase,a6
Move.l Ausgabe,d1
Move.l #Fehlerhafte_Eingabexnname004,d2
Moveq.l #$14,d3
Jsr Write(a6)
.Pre0009:
    Move.l Error,d0
    Cmp.l #6,D0
    Beq .Pre0010
    Bra .Pre0011
.Pre0010:
Move.l DOSBase,a6
Move.l Ausgabe,d1
Move.l #Speicherfehlerxnname005,d2
Moveq.l #$0F,d3
Jsr Write(a6)
.Pre0011:
    RTS
even
Ausgabe:		dc.l 0
Allgemeiner_Fehlerxnname000:
	dc.b `Allgemeiner Fehler`,$a,``,0
even
Konnte_File_nicht_findenxnname001:
	dc.b `Konnte File nicht finden`,$a,``,0
even
Window_Screen_Fehlerxnname002:
	dc.b `Window|Screen Fehler`,$a,``,0
even
Library_nicht_gefundenxnname003:
	dc.b `Library nicht gefunden`,$a,``,0
even
Fehlerhafte_Eingabexnname004:
	dc.b `Fehlerhafte Eingabe`,$a,``,0
even
Speicherfehlerxnname005:	dc.b `Speicherfehler`,$a,``,0
even

Even
Openlibs:
	Move.l $4.w,a6
	Move.l #Aslname,a1
	Moveq.l #0,d0
	Jsr Openlibrary(a6)
	Move.l d0,Aslbase
	Tst.l D0
	Beq.w .ende
	Move.l #DOSname,a1
	Moveq.l #0,d0
	Jsr Openlibrary(a6)
	Move.l d0,DOSbase
	Tst.l D0
	Beq.w .ende
	RTS
.ende:	Move.l #4,Error
	Rts
Closelibs:
	Move.l $4.w,a6
	Tst.l Aslbase
	Beq.w .ende00
	Move.l Aslbase,a1
	Jsr Closelibrary(a6)
.ende00:Tst.l DOSbase
	Beq.w .ende01
	Move.l DOSbase,a1
	Jsr Closelibrary(a6)
.ende01:Rts
even
WBmessage:		dc.l 0
Laenge:		dc.l 0
Adresse:		dc.l 0
Error:		dc.l 0
LokalScreen:		dc.l 0
Requester:		dc.l 0
Result:		dc.l 0
Filename_Zeiger:		dc.l 0
Dirname_zeiger:		dc.l 0
Zusatz:		dc.l 0
Zahl:		dc.l 0
Zahlyyy:		dc.l 0
Stringlaenge:		dc.l 0
OH:		dc.l 0
TH:		dc.l 0
FH:		dc.l 0
AslBase:		dc.l 0
DOSBase:		dc.l 0
NONE:		dc.l 0
even
DirName:	blk.b 256,0
even
Name:	blk.b 256,0
even
Name_bak:	blk.b 256,0
even
ASLFR_Taglist:
	dc.l ASLFR_screen,0
	dc.l ASLFR_PrivateIDCMP,Dostrue
	dc.l ASLFR_TextAttr,Dosfalse
	dc.l ASLFR_InitialLeftEdge,20
	dc.l ASLFR_InitialTopEdge,24
	dc.l ASLFR_InitialWidth,300
	dc.l ASLFR_Initialheight,210
	dc.l ASLFR_InitialDrawer,Dirname
	dc.l ASLFR_InitialFile,Name
	dc.l Tag_end,0
Filename:	blk.b 256,0
even
Version:	dc.b "$VER: Remember Reader 1.0 30.3.98 (C) CYBORG 98",0
even
Buffer1:	blk.b 250,0
even
Buffer3:	blk.b 250,0
even
Buffer2:	blk.b 250,0
even
Envarc_Remembername000:
	dc.b `Envarc:Remember.tasks`,0
even
Envarc_Remembername001:
	dc.b `Envarc:Remember.dump`,0
even
Aslname: dc.b "asl.library",0
DOSname: dc.b "dos.library",0
even
	Include "Preass:LVO3.0/Exec_lib.i"
	Include "Preass:LVO3.0/Asl_lib.i"
	Include "Preass:LVO3.0/DOS_lib.i"

