;------------------------------------------ INCLUDE "pk92lib.h" INCLUDE "tios.h" INCLUDE "kernel.h" INCLUDE "flib.h" ;------------------------------------------ XDEF pk92sfx@0000 XDEF _library ;----------------------------------------- ; BuildScr ;----------------------------------------- ; builds screen BuildScr: movem.l d0-d7/a0-a6, -(a7) move.l #tios::main_lcd, d0 lsr.l #3, d0 move.w d0, $600010 jsr flib::clr_scr ;**** PK92-SFX by David Khling 1998 **** ; set_font(int font) move.w #1, -(a7) jsr tios::FontSetSys ; DrawStrXY(int x, int y, char *string, int color) move.w #4, -(a7) pea Header(PC) move.w #1, -(a7) move.w #18, -(a7) jsr tios::DrawStrXY lea 12(a7), a7 ;invert text moveq.w #74, d7 lea tios::main_lcd, a0 \InvertLp: not.l (a0)+ dbra d7, \InvertLp ; frame_rect(rect r) move.w #121, -(a7) move.w #239, -(a7) move.w #0, -(a7) move.w #0, -(a7) jsr flib::frame_rect addq.w #8, a7 movem.l (a7)+, d0-d7/a0-a6 rts ;--------------------------------- ; DrawList ;--------------------------------- ; Parameter: ; d1 = ScrollPos ; a0 = *Names[] DrawList: movem.w d4-d7, -(a7) ; erase_rect(rect r) move.w #118, -(a7) move.w #238, -(a7) move.w #14, -(a7) move.w #1, -(a7) jsr flib::erase_rect addq.w #8, a7 clr.b d3 move.w d1, d7 move.w #12, d5 \DrawLoop: move.w d7, d6 lsl.w #1, d6 move.w 0(a0, d6.w), d4 tst.w d4 seq d3 beq \EndofList lea 0(a0, d4.w), a2 bsr \PrintName addq.w #1, d7 dbra d5, \DrawLoop \EndofList: movem.w (a7)+, d4-d7 rts \PrintName: ;FileNum in d7, address in a2 movem.l d0-d7/a0-a6, -(a7) ; DrawStrXY (int x, int y, char *string, int color) move.w #4, -(a7) move.l a2, -(a7) sub.w d1, d7 lsl.w #3, d7 add.w #14, d7 move.w d7, -(a7) move.w #4, -(a7) jsr tios::DrawStrXY lea 10(a7), a7 movem.l (a7)+, d0-d7/a0-a6 rts ;-------------------------------- ; MarkFile ;-------------------------------- ; d2 = Marked MarkFile: movem.l d2/d6/d7/a0, -(a7) sub.w d1, d2 mulu #240, d2 add.w #14*30, d2 lea tios::main_lcd, a0 adda.w d2, a0 move.w #7, d7 \YLoop: eori.w #$0FFF, (a0)+ move.w #6, d6 \_XLoop: not.l (a0)+ dbra d6, \_XLoop eori.b #$0F, -1(a0) dbra d7, \YLoop movem.l (a7)+, d2/d6/d7/a0 rts ;-------------------------------- ; PrintError ;-------------------------------- ; d0 = ErrorNum ; all regs destroyed ; Screen is not rebuild PrintError: ; erase_rect(rect r) move.w d0, -(a7) move.w #74, -(a7) move.w #178, -(a7) move.w #61, -(a7) move.w #61, -(a7) jsr flib::erase_rect jsr flib::frame_rect addq.w #8, a7 ; DrawStrXY(int x, int y, char *string, int color) move.w (a7)+, d0 move.w #0, -(a7) mulu #20, d0 lea Errors(PC), a0 pea 0(a0, d0.w) move.w #64, -(a7) move.w #63, -(a7) jsr tios::DrawStrXY lea 10(a7), a7 jsr flib::idle_loop rts ;-------------------------------- ; ShowFileList ;-------------------------------- ; Shows filelist and asks for file ; Temp: ; d1 = ScrollPos ; d2 = Marked ; d3 = EndofList ShowFileList: clr.w d1 clr.w d2 bsr DrawList ;sets EndofList lea \Loop(PC), a6 \Loop: cmp.w d1, d2 bge \_CheckScrollDown subq.w #1, d1 bsr DrawList \_CheckScrollDown: move.w d1, d4 add.w #12, d4 cmp.w d2, d4 bge \_NoScrollDown addq.w #1, d1 bsr DrawList \_NoScrollDown: \_WrongKey: bsr MarkFile jsr flib::idle_loop bsr MarkFile \_CheckUp: cmpi.w #338, d0 bne \_CheckDown tst.w d2 beq \_WrongKey subq.w #1, d2 jmp (a6) \_CheckDown: cmpi.w #344, d0 bne \_Check2ndUp move.w d2, d7 lsl.w #1, d7 tst.w 2(a0, d7.w) beq \_WrongKey addq.w #1, d2 jmp (a6) \_Check2ndUp: cmpi.w #4434, d0 bne \_Check2ndDown tst.w d1 beq \_WrongKey moveq.w #12, d4 sub.w d4, d2 sub.w d4, d1 bmi \__ScrollUpErr \__ScrollUpEnd bsr DrawList jmp (a6) \__ScrollUpErr: clr.w d1 bra \__ScrollUpEnd \_Check2ndDown: cmpi.w #4440, d0 bne \_CheckEnter tst.b d3 bne \_WrongKey add.w #12, d1 move.w d1, d2 bsr DrawList jmp (a6) ;----------------------------- \_CheckEnter: cmpi.w #13, d0 bne \_CheckEsc movem.l a0-a6/d0-d7, -(a7) ;Extract: ; Parameters: ; a0 = pointer to archives' begin ; for normal and divided archives: d0.w = number of file ; Return: ; d0.b = 0 OK / FF ERROR ; a1 = pointer to uncompressed file ; d1.w = handle of uncompressed file ; d2.l = Length of uncompressed file move.w d2, d0 ;----Uncompression move.l a1, a0 jsr pk92lib::Extract tst.b d0 beq \__UncpOk clr.w d0 ; Uncompression Error bsr PrintError bra \__EndExecution \__UncpOk: ; exec(int handle) ;----Execution move.w d1, -(a7) jsr kernel::exec addq.l #2, a7 tst.w d0 beq \__EndExecution bsr PrintError ; Execution Error beq \__EndExecution \__EndExecution: jsr pk92lib::FreeMem movem.l (a7)+, a0-a6/d0-d7 bsr BuildScr bsr DrawList clr.w tios::kb_vars+$1C jmp (a6) \_CheckEsc: cmpi.w #264, d0 bne \_WrongKey rts ;************************************************************************* ;* ShowList ;*----------------------------------------------------------------------- ;* Parameter: ;* a0 = *Names[] ;* a1 = *Archive ;************************************************************************* pk92sfx@0000: bsr BuildScr bsr ShowFileList rts Header: dc.b "PK92-SFX - by David Kühling 1998", 0 Errors: dc.b "Uncompression Error", 0 dc.b " Out Of Memory ", 0 dc.b " Fargo Too Old ", 0 dc.b " Lib Not Found ", 0 dc.b " Wrong Lib Version ", 0 dc.b " Execution Error ", 0 dc.b " TIOS Exception ", 0 dc.b " Incompatible Prog ", 0 dc.b " Incompatible ROM ", 0 ;------------------------------------------ _library dc.b "pk92sfx", 0 ;------------------------------------------ END