123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508 |
- draw_box
- move.l a0,Box_BMAP
- move.w d0,Box_TLx
- move.w d1,Box_TLy
- move.w d2,Box_BRx
- move.w d3,Box_BRy
-
- move.w Box_TLx,d0
- move.w Box_TLy,d1
- move.w Box_BRx,d2
- move.w Box_TLy,d3
- bsr Draw_Line
- move.l Box_BMAP,a0
- move.w Box_BRx,d0
- move.w Box_TLy,d1
- move.w Box_BRx,d2
- move.w Box_BRy,d3
- bsr Draw_Line
- move.l Box_BMAP,a0
- move.w Box_BRx,d0
- move.w Box_BRy,d1
- move.w Box_TLx,d2
- move.w Box_BRy,d3
- bsr Draw_Line
-
- move.l Box_BMAP,a0
- move.w Box_TLx,d0
- move.w Box_BRy,d1
- move.w Box_TLx,d2
- move.w Box_TLy,d3
- bsr Draw_Line
- rts
- Box_BMAP dc.l 0
- Box_TLx dc.w 0
- Box_TLy dc.w 0
- Box_BRx dc.w 0
- Box_BRy dc.w 0
- LockDosList EQU -$28e
- NextDosEntry EQU -$2b2
- delay equ -168
- MAX_FILES EQU 79*2
- open_dos move.l 4.w,a6 ;open dos lib
- lea DosLib(pc),a1
- jsr -408(A6)
- move.l d0,DosBase
- move.l Info_Block,d0
- andi.l #$fffffffc,d0
- move.l d0,Info_Block
- rts
- close_dos move.l 4.w,a6
- move.l dosbase(pc),a1
- jmp -414(a6) ;close dos
- MEM_FIX EQU 1234567
- rsreset
- FH_Filename rs.l 1 ; pointer to null terminated filename
- FH_Memory_Type rs.l 1 ; ie MEM_CHIP,FAST,CLEAR etc. or MEM_FIX for fixed addresses
- FH_Memory rs.l 1 ; pointer to memory used by that file
- FH_Length rs.l 1 ; Length (in bytes) on the file.
- rsreset
- Current_Filename
- ds.b 108+108 ; just in case of maximum
- even
- CRLF dc.b 10,13,0
- even
- File_Routine_Pointer dc.l 0 ; *SET BY EACH ROUTINE THAT USES IT
- Current_File dc.l 0
- lock dc.l 0
- dosbase dc.l 0
- doslib dc.b "dos.library",0
- even
- Info_Block dc.l Info_Structure
- ds.b 4
- Info_Structure ds.b 260
- even
-
- LoadAnyOldFile
- ; a0 sent with pointer to file handle structure
- ; d0 returned with error number, d0 = 0 = no errors
- movem.l d1-d7/a0-a6,-(sp)
- move.l a0,File_Handle_Structure
- cmp.l #MEM_FIX,FH_Memory_Type(a0) ; requires allocation?
- beq Dont_Need_To_Deallocate
- tst.l FH_Memory(a0)
- beq Dont_Need_To_Deallocate
-
- move.l FH_Memory(a0),a1
- move.l FH_Length(a0),d0
- move.l EXEC,a6
- jsr -210(a6) ; de-allocate
-
- move.l File_Handle_Structure,a0
- clr.l FH_Memory(a0)
- clr.l FH_Length(a0)
- Dont_Need_To_Deallocate
- move.l FH_FileName(a0),d1
- move.l #-2,d2 ; mode read
- move.l dosbase,a6
- jsr -84(a6) ; lock
- tst.l d0
- beq DOS_Error_while_loading
- move.l d0,lock
-
- move.l lock,d1
- move.l Info_Block,d2
- move.l dosbase,a6
- jsr -102(a6)
- tst.l d0
- beq DOS_Error_while_loading
-
- move.l Info_Block,a1
- move.l 124(a1),d0
- move.l File_Handle_Structure,a0
- move.l d0,FH_Length(a0)
- cmp.l #MEM_FIX,FH_Memory_Type(a0) ; requires allocation?
- beq Dont_Need_To_allocate
-
- move.l exec,a6
- move.l File_Handle_Structure,a0
- move.l FH_Memory_Type(a0),d1
- jsr -198(a6) ; allocate
- tst.l d0
- beq Couldnt_Allocate_File
- move.l File_Handle_Structure,a0
- move.l d0,FH_Memory(a0)
- Dont_Need_To_allocate
- move.l FH_FileName(a0),d1
- move.l #MODE_OLD,d2
- move.l dosbase,a6
- jsr OPEN(a6)
- tst.l d0
- beq DOS_Error_while_loading
- move.l d0,Current_File_Handle
- move.l File_Handle_Structure,a0
- move.l Current_File_Handle,d1
- move.l FH_Memory(a0),d2
- move.l FH_Length(a0),d3
- move.l dosbase,a6
- jsr READ(a6)
- tst.l d0
- bne.s File_Loaded_Ok
-
- move.l Current_File_Handle,d1
- move.l dosbase,a6
- jsr CLOSE(a6)
- move.l lock,d1
- move.l dosbase,a6
- jsr -90(a6) ; Un-lock
- bra.s DOS_Error_while_loading
- File_Loaded_Ok
- move.l Current_File_Handle,d1
- move.l dosbase,a6
- jsr CLOSE(a6)
- move.l lock,d1
- move.l dosbase,a6
- jsr -90(a6) ; Un-lock
- moveq.l #0,d0
- bra.s exit_load_routine
- Couldnt_Allocate_File
- move.l #1001,d0
- bra.s exit_load_routine
- move.l lock,d1
- move.l dosbase,a6
- jsr -90(a6) ; Un-lock
-
- DOS_Error_while_loading
- movem.l a0-a6/d0-d7,-(sp)
- move.l dosbase,a6
- move.l #50*5,d1
- jsr delay(a6)
- move.l dosbase,a6
- jsr -132(a6)
- movem.l (sp)+,a0-a6/d0-d7
-
- exit_load_routine
-
- movem.l (sp)+,d1-d7/a0-a6
- rts
- SaveAnyOldFile
- ; a0 sent with pointer to file handle structure
- ; d0 returned with error number, d0 = 0 = no errors
- movem.l d1-d7/a0-a6,-(sp)
- move.l a0,File_Handle_Structure
-
- move.l FH_FileName(a0),d1
- move.l #MODE_NEW,d2
- move.l dosbase,a6
- jsr OPEN(a6)
- tst.l d0
- beq DOS_Error_while_saving
- move.l d0,Current_File_Handle
- move.l File_Handle_Structure,a0
- move.l Current_File_Handle,d1
- move.l FH_Memory(a0),d2
- move.l FH_Length(a0),d3
- move.l dosbase,a6
- jsr Write(a6)
- tst.l d0
- bne.s File_Saved_Ok
-
- move.l Current_File_Handle,d1
- move.l dosbase,a6
- jsr CLOSE(a6)
- bra.s DOS_Error_while_saving
- File_Saved_Ok
- move.l Current_File_Handle,d1
- move.l dosbase,a6
- jsr CLOSE(a6)
- moveq.l #0,d0
- bra.s exit_save_routine
-
- DOS_Error_while_saving
- movem.l a0-a6/d0-d7,-(sp)
- move.l dosbase,a6
- move.l #50*5,d1
- jsr delay(a6)
- move.l dosbase,a6
- jsr -132(a6)
- movem.l (sp)+,a0-a6/d0-d7
-
- exit_save_routine
-
- movem.l (sp)+,d1-d7/a0-a6
- rts
- File_Handle_Structure dc.l 0
- Current_File_Handle dc.l 0
- char_position dc.w 0
- get_pressed_key jmp Read_Keyboard
- ;/* Clear_Word_Chunk
- * ----------------
- * $Inputs: a0.l = Window Structure
- * d0.w = Top (in words)
- * d1.w = Left
- * d2.w = Width (in words)
- * d3.w = Height
- */
-
- Clear_Word_Chunk
- ifnd hard_only
- bsr own_the_blitter
- endc
- movem.l a1-a6,-(sp)
- move.l screen_mem(a0),a2
- move.l #main_screen_struct,a1
- andi.l #$FFFF,d0
- asl.w #1,d0
- add.l d0,a2
- asl.w #1,d2
-
- move.w screen_x_size(a1),d4
- asr.w #3,d4
- mulu.w d4,d1
-
- add.l d1,a2
- sub.w d2,d4 ;overall modulus
- asl.w #6,d3
- lsr.w #1,d2 ; put back to words for blit
- or.w d2,d3
- move.w #2-1,d7 ; only first two planes
- clear_chunk
- btst #14,DMACONR(a6)
- bne.s clear_chunk
- move.w #$0000,bltadat(a6)
- move.l a2,bltdpt(a6)
- move.w d4,bltdmod(a6)
- move.w #$01f0,bltcon0(a6)
- clr.w bltcon1(a6)
- move.l #$ffffffff,bltafwm(a6)
- move.w d3,bltsize(a6)
- moveq #0,d0
- move.w screen_x_size(a1),d0
- asr.w #3,d0
- mulu screen_y_size(a1),d0
- add.l d0,a2
- dbra d7,clear_chunk
- movem.l (sp)+,a1-a6
- ifnd hard_only
- bsr disown_the_blitter
- endc
- rts
-
- own_the_blitter
- movem.l d0-d7/a0-a6,-(sp)
- move.l graphics_lib_ptr,a6
- jsr ownblitter(a6)
- movem.l (sp)+,d0-d7/a0-a6
- rts
-
- disown_the_blitter
- movem.l d0-d7/a0-a6,-(sp)
- move.l graphics_lib_ptr,a6
- jsr disownblitter(a6)
- movem.l (sp)+,d0-d7/a0-a6
- rts
-
- path.txt: dc.b 'scratch:',0
- cnop 0,4
- display_file_request:
- movem.l d1-d7/a0-a6,-(sp)
- bsr switch_screens
- lea path.txt,a0 ;save default path...
- move.l a0,a1
- lea current_filename,a2 ;filename buffer
- bsr reqon
- movem.l (sp)+,d1-d7/a0-a6
- tst.l d0
- beq.s no_call
- move.l File_Routine_Pointer,d0
- beq.s no_call
- move.l a0,-(sp)
- move.l d0,a0
- jsr (a0)
- move.l (sp)+,a0
- tst.l d0
- rts
- no_call: bsr Remove_File_Request
- tst.l d0
- rts
- Remove_File_Request
- movem.l d0-a6,-(sp)
- bsr DeAllocReqMem
- bsr CloseReqTools
- bsr switch_screens
- movem.l (sp)+,d0-a6
- rts
- cnop 0,4
- reqon: move.l a2,a5
- lea path(pc),a3
- move.l a0,(a3) ;default path...
- move.l a1,TitlePtr-path(a3)
- bsr OpenReqTools
- bsr AllocReqMem
- lea Wild_Tags(pc),a0 ;standard file req
- lea Blk_Tags(pc),a1 ;we want block attr`s
- move.l TitlePtr(pc),a3 ;requester msg
- bsr _RequestFile
- tst.l d0
- rts
- cnop 0,4
- OpenReqTools: lea RTName(pc),a1
- move.l 4.w,a6
- jsr -408(a6)
- lea _ReqToolsBase(pc),a0
- move.l d0,(a0)
- rts
- cnop 0,4
- CloseReqTools: move.l 4.w,a6
- move.l _ReqToolsBase(pc),d0
- beq.s RTNotOpen
- move.l d0,a1
- jsr -414(a6)
- lea _ReqToolsBase(pc),a0
- clr.l (a0)
- RTNotOpen rts
- *-------------- Allocate File-Requester structure memory..
- RTFI_Dirs = $80000032
- RTFI_Flags = $80000028
- TAG_DONE = 0
- rtfi_Dir = $10
- RT_FILEREQ = $0
- ifd TREV
- RT_FLAGS = $A
- endc
- FREQF_PATGAD = $1
- _LVOrtAllocRequestA = $FFFFFFE2
- _LVOrtFreeRequest = $FFFFFFDC
- _LVOrtFileRequestA = $FFFFFFCA
- _LVOrtChangeReqAttrA = $FFFFFFD0
- cnop 0,4
- AllocReqMem move.l #RT_FILEREQ,d0
- suba.l a0,a0
- move.l _ReqToolsBase(pc),a6
- jsr _LVOrtAllocRequestA(a6)
- lea RTReqPtr(pc),a0
- move.l d0,(a0)
- rts
- cnop 0,4
- DeAllocReqMem: move.l RTReqPtr(pc),d0
- beq.s AllocNot
- move.l d0,a1
- move.l _ReqToolsBase(pc),d1
- beq.s AllocNot
- move.l d1,a6
- jsr _LVOrtFreeRequest(a6)
- lea RTReqPtr(pc),a0
- clr.l (a0)
- AllocNot rts
-
- * $Inputs: a0.l = wildcards, etc . tags
- * a1.l = individual attribute tags
- * a2.l = body of requester..
- * a3.l = title
- *
- * $Outputs: d0.l = d0 (result-code)
- cnop 0,4
- _RequestFile: lea TempName(pc),a2
- sf.b (a2)
- bsr Do_FileRequest
- tst.l d0
- beq.s no_name
-
- move.l RTReqPtr(pc),a1 ;& a path name!
- move.l rtfi_Dir(a1),a0
- move.l a5,a1
- bytecopy: move.b (a0)+,(a1)+
- bne.s bytecopy
- cmp.b #":",-2(a1)
- bne.s add_slash
- tst.b -(a1)
- bra.s no_slash
-
- add_slash: tst.b -(a1)
- move.b #"/",(a1)+
- no_slash: move.l a2,a0
- bytecopy2: move.b (a0)+,(a1)+
- bne.s bytecopy2
- clr.b (a1)+
- move.l a5,a0
- moveq #1,d0 ;return success on name..
- no_name: tst.l d0
- rts
- cnop 0,4
- Do_FileRequest movem.l d1-d7/a0-a6,-(sp)
- move.l a1,a0
- move.l RTReqPtr(pc),a1 ;& a path name!
- move.l _ReqToolsBase(pc),a6
- jsr _LVOrtChangeReqAttrA(a6)
- move.l RTReqPtr(pc),a1
- jsr _LVOrtFileRequestA(a6)
- movem.l (sp)+,d1-d7/a0-a6
- rts
- cnop 0,4
- RTName: dc.b 'reqtools.library',0
- even
- Wild_Tags: dc.l RTFI_Flags,FREQF_PATGAD
- dc.l TAG_DONE
- Blk_Tags: dc.l RTFI_Dirs
- path dc.l 0
- dc.l TAG_DONE
- _ReqToolsBase: ds.l 1
- RTReqPtr: ds.l 1
- TitlePtr: ds.l 1
- LoadPtr: ds.l 1
- TempName: ds.b 256
- even
|