home *** CD-ROM | disk | FTP | other *** search
-
- XDEF Request
- XREF SysRequest,_DCScrBase
-
- INCLUDE exec/exec_lib.i
- INCLUDE intuition/intuition_lib.i
- INCLUDE libraries/dos_lib.i
- INCLUDE graphics/graphics_lib.i
- INCLUDE help.i
-
- SECTION "Request",CODE
-
- Request move.l a0,-(sp) ; Zeiger auf IText merken
- bsr OpenLibs ; Librarys öffnen
- SADD ReqWindow,a0 ; Zeiger auf Window in a0
- move.l _DCScrBase,$1e(a0) ; Screen-Zeiger eintragen
- CALLPC _IntuitionBase,OpenWindow ; Window öffnen
- beq NoReq ; Fehler ? -> NoReq
- move.l d0,a1
- lea _ReqWindBase(pc),a0
- move.l a1,(a0)
- move.l $32(a1),4(a0) ; RastPort merken
- move.l $56(a1),8(a0) ; UserPort merken
- PEEKL _ReqWindRast,a0
- move.l (sp)+,a1
- moveq.l #0,d0
- moveq.l #10,d1
- CALLSYS PrintIText
- bsr MakeRBorder
- cmpi.l #"READ",Read?
- bne BeginRead
- bsr RefreshNames
- bra WaitReq
- BeginRead
- bra ReadIn
- WaitReq PEEKL _ReqWindUser,a0
- CALLEXEC WaitPort
- PEEKL _ReqWindUser,a0
- CALLSYS GetMsg
- move.l d0,a1
- move.l $14(a1),d4
- move.l $1c(a1),a4
- CALLSYS ReplyMsg
- cmpi.b #$40,d4
- beq.s GadUp
- cmpi.b #$20,d4
- beq.s GadDown
- bra WaitReq
- GadUp cmpi.w #"CL",$26(a4)
- beq ReqQuit
- cmpi.w #"OK",$26(a4)
- beq ReqOK
- cmpi.w #"DC",$26(a4)
- beq.s BeginRead
- cmpi.w #"PT",$26(a4)
- bne.s NoParent
- bsr Parent
- bra BeginRead
- NoParent
- cmpi.w #"F0",$26(a4)
- blt.s WaitReq
- cmpi.w #"F5",$26(a4)
- bgt.s WaitReq
- bsr FileOrDir
- cmpi.l #"FILE",d7
- bne BeginRead
- bra WaitReq
- GadDown cmpi.w #"PR",$26(a4)
- bne WaitReq
- PropAg bsr PropClick
- cmpi.w #$80,RProp+$c
- beq PropAg
- bra WaitReq
- ReqQuit bsr EndRequest
- NoReq moveq.l #0,d0
- rts
-
- ReqOK bsr EndRequest
- bsr JoinName
- move.l #DirFileBuffer,d0
- rts
-
- *** Fenster schließen
-
- EndRequest
- PEEKL _ReqWindBase,a0
- CALLPC _IntuitionBase,CloseWindow
- rts
-
- *** Verwaltung der Devices
-
- GetDevs CALLEXEC Forbid ; Multitasking aus
- PEEKL _DOSBase,a0
- move.l 34(a0),a0
- move.l 24(a0),a0
- adda.l a0,a0
- adda.l a0,a0
- move.l 4(a0),a0
- adda.l a0,a0
- adda.l a0,a0
- Dev1 lea Entrys,a2
- PEEKL EntryCount,d0
- mulu #36,d0
- adda.l d0,a2
- tst.l 4(a0)
- bne.s TakeDev
- tst.l 8(a0)
- beq.s NoFound
- TakeDev move.l 4(a0),d0
- addq.l #2,d0
- move.b d0,31(a2)
- move.l $28(a0),a1
- adda.l a1,a1
- adda.l a1,a1
- move.b (a1)+,d0
- subq.l #1,d0
- CopyDev move.b (a1)+,(a2)+
- dbra d0,CopyDev
- move.b #":",(a2)+
- move.b #0,(a2)
- add.l #1,EntryCount
- NoFound tst.l (a0) ; Letzte Device ?
- beq EndDev
- move.l (a0),a0 ; Wenn nicht dann
- adda.l a0,a0 ; nächsten Eintrag
- adda.l a0,a0 ; holen und weitersuchen
- bra Dev1
- EndDev CALLSYS Permit ; Multi an
- rts
-
- *** Files einlesen
-
- ReadIn bsr ResetAll
- move.l #DirBuffer,d1
- moveq.l #-2,d2
- CALLPC _DOSBase,Lock
- beq NoLock
- move.l d0,-(sp)
- move.l (sp),d1
- move.l #FileInfo,d2
- CALLSYS Examine
- GetName move.l (sp),d1
- move.l #FileInfo,d2
- CALLPC _DOSBase,ExNext
- beq NoMore
- lea FileInfo+8,a0
- PEEKL EntryCount,d0
- mulu #36,d0
- addi.l #Entrys,d0
- move.l d0,a1
- move.b #0,31(a1)
- tst.l 4-8(a0)
- bpl CopyName
- move.l $7c-8(a0),32(a1) ;File-Länge merken
- move.b #1,31(a1)
- CopyName
- move.b (a0)+,(a1)+
- cmpi.b #0,-1(a1)
- bne.s CopyName
- addi.l #1,EntryCount
- bsr SortNames
- bsr RefreshNames
- bsr RemakeProp
- bsr PropClick
- PEEKL _ReqWindUser,a0
- CALLEXEC GetMsg
- tst.l d0
- beq NoMsg
- move.l d0,a1
- move.l $14(a1),d4
- move.l $1c(a1),a4
- CALLSYS ReplyMsg
- cmpi.w #"PT",$26(a4)
- bne NoRPar
- move.l (sp)+,d1
- CALLPC _DOSBase,UnLock
- bsr Parent
- bra ReadIn
- NoRPar cmpi.w #"OK",$26(a4)
- bne NoROK
- move.l (sp)+,d1
- CALLPC _DOSBase,UnLock
- bra ReqOK
- NoROK cmpi.w #"CL",$26(a4)
- bne NoRCL
- move.l (sp)+,d1
- CALLPC _DOSBase,UnLock
- bra ReqQuit
- NoRCL cmpi.w #"DC",$26(a4)
- bne NoRDC
- move.l (sp)+,d1
- CALLPC _DOSBase,UnLock
- bra ReadIn
- NoRDC cmpi.w #"F0",$26(a4)
- blt NoMsg
- cmpi.w #"F5",$26(a4)
- bgt NoMsg
- bsr FileOrDir
- cmpi.l #"FILE",d7
- beq.s NoMsg
- move.l (sp)+,d1
- CALLPC _DOSBase,UnLock
- bra ReadIn
- NoMsg cmpi.l #100,EntryCount
- blt GetName
- SADD TableFull,a0
- jsr SysRequest
- NoMore POKEL #"READ",Read?
- move.l (sp)+,d1
- CALLPC _DOSBase,UnLock
- NoLock bra WaitReq
-
- EntryCount ds.l 1
- Read? dc.l 0
-
- *** Namen sortieren
-
- SortNames
- PEEKL EntryCount,d7
- cmpi.b #2,d7
- blt NoSort
- subq.l #2,d7
- Sort1 moveq.l #0,d6
- Sort2 bsr Compare
- cmp.l d7,d6
- beq.s Sort3
- addq.l #1,d6
- bra Sort2
- Sort3 dbra d7,Sort1
- NoSort rts
-
- *** Namen vergleichen und austauschen
-
- Compare move.l d6,d2
- mulu #36,d2
- addi.l #Entrys,d2
- move.l d2,a0
- move.l d2,a1
- adda.l #36,a1
- move.b 31(a0),d0
- move.b 31(a1),d1
- cmp.b d0,d1
- blt Swap
- bgt NoSwap
- Com1 move.b (a0)+,d0
- move.b (a1)+,d1
- bclr #5,d0
- bclr #5,d1
- cmp.b d0,d1
- blt Swap
- bgt NoSwap
- cmpi.b #0,-1(a0)
- beq NoSwap
- bra Com1
- Swap move.l d2,a0
- move.l d2,a1
- adda.l #36,a1
- moveq.l #36-1,d1
- Swap1 move.b (a0),d0
- move.b (a1),(a0)+
- move.b d0,(a1)+
- dbra d1,Swap1
- NoSwap rts
-
- *** Parent-Gadget angeklickt ...
-
- Parent lea DirBuffer,a0
- ParFind0
- cmpi.b #0,(a0)+
- bne.s ParFind0
- cmpi.b #58,-2(a0)
- bne.s ParFindEnd
- lea DirBuffer,a0
- bra ParMake0
- ParFindEnd
- suba.l #1,a0
- cmpa.l #DirBuffer,a0
- beq ParMake0
- cmpi.b #47,(a0)
- beq.s ParMake0
- cmpi.b #58,-1(a0)
- beq.s ParMake0
- bra ParFindEnd
- ParMake0
- move.b #0,(a0)
- bra RefreshStrings
-
- *** Name angeklickt ...
-
- FileOrDir
- moveq.l #0,d7
- move.w $26(a4),d0
- subi.w #"F0",d0
- mulu #4,d0
- SADD ITextList,a0
- move.l 0(a0,d0.w),a0
- move.l $c(a0),a0
- cmpi.b #0,(a0)
- beq NoEntry
- cmpi.b #0,31(a0)
- beq DirClick
- cmpi.b #1,31(a0)
- bgt DevCl
- lea FileBuffer,a1
- FileToBuffer
- move.b (a0)+,(a1)+
- cmpi.b #0,-1(a1)
- bne.s FileToBuffer
- NoEntry move.l #"FILE",d7
- bra RefreshStrings
- DirClick
- lea DirBuffer,a1
- DirClFind0
- cmpi.b #0,(a1)+
- bne.s DirClFind0
- suba.l #1,a1
- cmpa.l #DirBuffer,a1
- beq.s DirToBuffer
- cmpi.b #58,-1(a1)
- beq.s DirToBuffer
- move.b #47,(a1)+
- DirToBuffer
- move.b (a0)+,(a1)+
- cmpi.b #0,-1(a1)
- bne.s DirToBuffer
- bra RefreshStrings
- DevCl lea DirBuffer,a1
- DevToBuffer
- move.b (a0)+,(a1)+
- cmpi.b #0,-1(a1)
- bne.s DevToBuffer
- bra RefreshStrings
-
- *** Alles zurücksetzen
-
- ResetAll
- SADD RPropSpecial,a1
- move.w #0,4(a1)
- POKEL #0,EntryCount
- POKEL #0,Read?
- lea Entrys,a0
- move.w #36*100-1,d0
- ClearEntrys
- move.b #0,(a0)+
- dbra d0,ClearEntrys
- bsr ResetPointers
- bsr GetDevs
- bsr SortNames
- bsr RefreshNames
- bsr RemakeProp
- rts
-
- *** Pointers zurücksetzen
-
- ResetPointers
- SADD ITextList,a0
- move.l #Entrys,d0
- moveq.l #6-1,d1
- ResetP1 move.l (a0)+,a1
- move.l d0,$c(a1)
- addi.l #36,d0
- dbra d1,ResetP1
- rts
-
- *** Proportional-Gadget angeklickt ...
-
- PropClick
- PEEKL EntryCount,d1
- cmpi.b #6,d1
- bls NoMove
- subq.b #6,d1
- move.l #$ffff,d0
- divu d1,d0
- and.l #$ffff,d0
- moveq.l #0,d1
- PEEKW RPropSpecial+4,d1
- divu d0,d1
- and.l #$ffff,d1
- mulu #36,d1
- add.l #Entrys,d1
- SADD ITextList,a0
- moveq.l #6-1,d2
- move.l (a0),a1
- cmp.l $c(a1),d1
- beq NoMove
- Move move.l (a0)+,a1
- move.l d1,$c(a1)
- add.l #36,d1
- dbra d2,Move
- EndMove bsr RefreshNames
- NoMove rts
-
- *** File-Namen ausgeben
-
- RefreshNames
- bsr ClearRects
- bsr MakeLenght
- SADD ITextList,a0
- moveq.l #6-1,d0
- MakeColors
- move.l (a0)+,a1
- move.l $c(a1),a2
- SADD EntryCols,a3
- move.b 31(a2),d1
- ext.w d1
- move.b 0(a3,d1.w),(a1)
- dbra d0,MakeColors
- PEEKL _ReqWindRast,a0
- SADD IText0,a1
- moveq.l #0,d0
- moveq.l #0,d1
- CALLPC _IntuitionBase,PrintIText
- rts
-
- EntryCols dc.b 3,2,1,3,1,0
-
- *** Rechtecke löschen
-
- ClearRects
- PEEKL _ReqWindRast,a1
- moveq.l #0,d0
- CALLPC _GfxBase,SetAPen
- SADD ITextList,a2
- moveq.l #47,d4
- moveq.l #6-1,d5
- DoRem move.l (a2)+,a3
- PEEKL _ReqWindRast,a1
- moveq.l #22,d0
- move.l $c(a3),a3
- MakeX cmpi.b #0,(a3)+
- beq XisOK
- addq.w #8,d0
- cmpi.w #260-8*8,d0
- bls MakeX
- move.w #260-8*8,d0
- XisOK move.l d4,d1
- move.l d1,d3
- add.l #9,d3
- move.w #260-1-7*8,d2
- CALLSYS RectFill
- add.l #10,d4
- dbra d5,DoRem
- EndRem rts
-
- *** Proportional-Gadget neu berechnen
-
- RemakeProp
- PEEKL EntryCount,d0
- cmpi.b #6,d0
- bls NoRemakeProp
- move.l #$ffff,d1
- mulu #6,d1
- divu d0,d1
- cmp.w RPropSpecial+8(pc),d1
- beq.s NoRemakeProp
- POKEW d1,RPropSpecial+8
- bsr RefreshProp
- NoRemakeProp
- rts
-
- *** Proportional-Gadget zeichnen
-
- RefreshProp
- SADD RProp,a0
- PEEKL _ReqWindBase,a1
- suba.l a2,a2
- CALLPC _IntuitionBase,RefreshGadgets
- rts
-
- *** String-Gadgets zeichnen
-
- RefreshStrings
- SADD RDir,a0
- PEEKL _ReqWindBase,a1
- suba.l a2,a2
- CALLPC _IntuitionBase,RefreshGadgets
- rts
-
- *** Verbindet Directory mit Name
-
- JoinName
- lea DirBuffer,a0
- lea FileBuffer,a1
- lea DirFileBuffer,a2
- CopyDir move.b (a0)+,(a2)+
- cmpi.b #0,-1(a2)
- bne.s CopyDir
- suba.l #1,a2
- cmpa.l #DirFileBuffer,a2
- beq JoinFile
- cmpi.b #58,-1(a2)
- beq JoinFile
- cmpi.b #47,-1(a2)
- beq JoinFile
- move.b #47,(a2)+
- JoinFile
- move.b (a1)+,(a2)+
- cmpi.b #0,-1(a2)
- bne.s JoinFile
- rts
-
- *** Datei-Längen berechnen
-
- MakeLenght
- SADD ITextList,a2
- SADD LTextList,a3
- moveq.l #6-1,d3
- MakeL move.l (a3)+,a0
- move.l (a2)+,a4
- move.l $c(a4),a4
- cmpi.b #1,31(a4)
- bne MakeLDir
- move.l 32(a4),d2
- bsr D2ToASC
- bra MakeDec
- MakeLDir
- moveq.l #7-1,d4
- ClearSize
- move.b #32,(a0)+
- dbra d4,ClearSize
- MakeDec dbra d3,MakeL
- rts
-
- *** d2 in ASC wandeln
-
- D2ToASC moveq #6,d0
- SADD ASCTens,a1
- move.l a0,-(sp)
- ASCNext moveq.b #"0",d1
- ASCDec addq.b #1,d1
- sub.l (a1),d2
- bcc.s ASCDec
- subq.b #1,d1
- add.l (a1)+,d2
- move.b d1,(a0)+
- dbra d0,ASCNext
- move.l (sp)+,a0
- moveq.l #5,d0
- ASCNill cmpi.b #"0",(a0)
- bne.s ASCEnd
- move.b #32,(a0)+
- dbra d0,ASCNill
- ASCEnd rts
-
- ASCTens dc.l 1000000,100000,10000,1000,100,10,1
-
- *** Library-Zeiger suchen und merken
-
- OpenLibs
- move.l 4,a6
- lea $17a(a6),a0
- SADD IntName,a1
- CALLSYS FindName
- POKEL d0,_IntuitionBase
- lea $17a(a6),a0
- SADD DOSName,a1
- CALLSYS FindName
- POKEL d0,_DOSBase
- lea $17a(a6),a0
- SADD GrafName,a1
- CALLSYS FindName
- POKEL d0,_GfxBase
- rts
-
- IntName INTNAME
- DOSName DOSNAME
- GrafName GRAFNAME
- _IntuitionBase ds.l 1
- _DOSBase ds.l 1
- _GfxBase ds.l 1
-
- *** Border malen
-
- MakeRBorder
- PEEKL _ReqWindRast,a0
- SADD RBorder0,a1
- moveq.l #0,d0
- moveq.l #0,d1
- CALLPC _IntuitionBase,DrawBorder
- rts
-
- *** Data-Teil
-
- ReqWindow dc.w 160,21,320,158
- dc.b -1,-1
- dc.l 8!$20!$40,$800!$1000!$10000,RGad0,0,0,0,0
- dc.w 0,0,0,0,15
- _ReqWindBase ds.l 1
- _ReqWindRast ds.l 1
- _ReqWindUser ds.l 1
-
- RGad0 dc.l RGad1
- dc.w 20,47,240,10,0,1,1
- dc.l 0,0,0,0,0
- dc.w "F0"
- dc.l 0
- RGad1 dc.l RGad2
- dc.w 20,57,240,10,0,1,1
- dc.l 0,0,0,0,0
- dc.w "F1"
- dc.l 0
- RGad2 dc.l RGad3
- dc.w 20,67,240,10,0,1,1
- dc.l 0,0,0,0,0
- dc.w "F2"
- dc.l 0
- RGad3 dc.l RGad4
- dc.w 20,77,240,10,0,1,1
- dc.l 0,0,0,0,0
- dc.w "F3"
- dc.l 0
- RGad4 dc.l RGad5
- dc.w 20,87,240,10,0,1,1
- dc.l 0,0,0,0,0
- dc.w "F4"
- dc.l 0
- RGad5 dc.l RCancel
- dc.w 20,97,240,10,0,1,1
- dc.l 0,0,0,0,0
- dc.w "F5"
- dc.l 0
- RCancel dc.l RParent
- dc.w 20,137,80,11,2,1,1
- dc.l RBorder2,RBorder4,RCancelText,0,0
- dc.w "CL"
- dc.l 0
- RCancelText dc.b 1,0,0,0
- dc.w 40-6*4,2
- dc.l 0,RCancelBytes,0
- TEXT RCancelBytes,"CANCEL"
- RParent dc.l ROK
- dc.w 80+2*20,137,80,11,2,1,1
- dc.l RBorder2,RBorder4,RParentText,0,0
- dc.w "PT"
- dc.l 0
- RParentText dc.b 1,0,0,0
- dc.w 40-6*4,2
- dc.l 0,RParentBytes,0
- TEXT RParentBytes,"PARENT"
- ROK dc.l RProp
- dc.w 2*80+3*20,137,80,11,2,1,1
- dc.l RBorder2,RBorder4,ROKText,0,0
- dc.w "OK"
- dc.l 0
- ROKText dc.b 1,0,0,0
- dc.w 40-8*4,2
- dc.l 0,ROKBytes,0
- TEXT ROKBytes,"CONTINUE"
- RProp dc.l RDir
- dc.w 284,49,12,56,0,2,3
- dc.l RPropInfo,0,0,0,RPropSpecial
- dc.w "PR"
- dc.l 0
- RPropInfo ds.w 4
- RPropSpecial dc.w 1!4!8,0,0,0,$ffff
- ds.w 6
- RDir dc.l RFile
- dc.w 21,28,278,8,0,1,4
- dc.l RBorder6,0,0,0,RDirSpecial
- dc.w "DC"
- dc.l 0
- RDirSpecial dc.l DirBuffer,UndoBuffer
- dc.w 0,81
- ds.w 12
- RFile dc.l 0
- dc.w 21,118,278,8,0,1,4
- dc.l RBorder6,0,0,0,RFileSpecial
- dc.w 0
- dc.l 0
- RFileSpecial dc.l FileBuffer,UndoBuffer
- dc.w 0,31
- ds.w 12
-
- RBorder0 dc.w 0,0 ;Borders für Fenster-
- dc.b 2,0,0,3 ;rahmen
- dc.l RPairs0,RBorder1
- RPairs0 dc.w 319,0,0,0,0,156
- RBorder1 dc.w 0,0
- dc.b 1,0,0,3
- dc.l RPairs1,RBorder8
- RPairs1 dc.w 0,157,319,157,319,1
- RBorder2 dc.w 0,0 ;Borders für Bool-Gads
- dc.b 2,0,0,3
- dc.l RPairs24,RBorder3
- RBorder3 dc.w 0,0
- dc.b 1,0,0,3
- dc.l RPairs35,0
- RBorder4 dc.w 0,0
- dc.b 1,0,0,3
- dc.l RPairs24,RBorder5
- RBorder5 dc.w 0,0
- dc.b 2,0,0,3
- dc.l RPairs35,0
- RPairs24 dc.w 79,0,0,0,0,9
- RPairs35 dc.w 0,10,79,10,79,1
- RBorder6 dc.w -1,-1 ;Borders für Strings
- dc.b 1,0,0,3
- dc.l RPairs6,RBorder7
- RPairs6 dc.w 279,0,0,0,0,8
- RBorder7 dc.w -1,-1
- dc.b 2,0,0,3
- dc.l RPairs7,0
- RPairs7 dc.w 0,9,279,9,279,1
- RBorder8 dc.w 280,47 ;Border für Prop-Gad
- dc.b 1,0,0,3
- dc.l RPairs8,RBorder9
- RPairs8 dc.w 19,0,0,0,0,58
- RBorder9 dc.w 280,47
- dc.b 2,0,0,3
- dc.l RPairs9,0
- RPairs9 dc.w 0,59,19,59,19,1
-
- IText0 dc.b 1,0,1,0
- dc.w 22,48
- dc.l 0,0,IText1
- IText1 dc.b 1,0,1,0
- dc.w 22,58
- dc.l 0,0,IText2
- IText2 dc.b 1,0,1,0
- dc.w 22,68
- dc.l 0,0,IText3
- IText3 dc.b 1,0,1,0
- dc.w 22,78
- dc.l 0,0,IText4
- IText4 dc.b 1,0,1,0
- dc.w 22,88
- dc.l 0,0,IText5
- IText5 dc.b 1,0,1,0
- dc.w 22,98
- dc.l 0,0,LText0
- ITextList dc.l IText0,IText1,IText2,IText3,IText4,IText5
-
- LText0 dc.b 2,0,1,0
- dc.w 260-7*8,48
- dc.l 0,LBytes0,LText1
- TEXT LBytes0,<" ">
- LText1 dc.b 2,0,1,0
- dc.w 260-7*8,58
- dc.l 0,LBytes1,LText2
- TEXT LBytes1,<" ">
- LText2 dc.b 2,0,1,0
- dc.w 260-7*8,68
- dc.l 0,LBytes2,LText3
- TEXT LBytes2,<" ">
- LText3 dc.b 2,0,1,0
- dc.w 260-7*8,78
- dc.l 0,LBytes3,LText4
- TEXT LBytes3,<" ">
- LText4 dc.b 2,0,1,0
- dc.w 260-7*8,88
- dc.l 0,LBytes4,LText5
- TEXT LBytes4,<" ">
- LText5 dc.b 2,0,1,0
- dc.w 260-7*8,98
- dc.l 0,LBytes5,0
- TEXT LBytes5,<" ">
- LTextList dc.l LBytes0,LBytes1,LBytes2,LBytes3,LBytes4,LBytes5
-
- *** Fehler
-
- TableFull dc.b 1,0,0,0
- dc.w 140-21*4,0
- dc.l 0,TFullBytes,0
- TEXT TFullBytes,<"MY FILE TABLE IS FULL">
-
- SECTION "Reserved",BSS
-
- Entrys ds.b 100*36
- cnop 0,4
- FileInfo ds.b 260
- DirBuffer ds.b 82
- FileBuffer ds.b 32
- DirFileBuffer ds.b 80+30+1+1
- UndoBuffer ds.b 82
-
- END
-
-
-