From: Toni Wilen Date: Sat, 14 Feb 2009 12:48:56 +0000 (+0200) Subject: imported winuaesrc1600b12.zip X-Git-Tag: 2100~100 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=90f5686feb07d61f8372f0e95ccf67abc9739e70;p=francis%2Fwinuae.git imported winuaesrc1600b12.zip --- diff --git a/cfgfile.c b/cfgfile.c index e7657874..7f0e5334 100644 --- a/cfgfile.c +++ b/cfgfile.c @@ -161,6 +161,7 @@ static const char *scsimode[] = { "false", "true", "scsi", 0 }; static const char *maxhoriz[] = { "lores", "hires", "superhires", 0 }; static const char *maxvert[] = { "nointerlace", "interlace", 0 }; static const char *abspointers[] = { "none", "mousehack", "tablet", 0 }; +static const char *magiccursors[] = { "both", "native", "host", 0 }; static const char *autoscale[] = { "none", "scale", "resize", 0 }; static const char *obsolete[] = { @@ -504,6 +505,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, "parallel_autoflush=%d\n", p->parallel_autoflush_time); cfgfile_dwrite (f, "uae_hide=%d\n", p->uae_hide); cfgfile_dwrite (f, "magic_mouse=%s\n", p->input_magic_mouse ? "true" : "false"); + cfgfile_dwrite (f, "magic_mousecursor=%s\n", magiccursors[p->input_magic_mouse_cursor]); cfgfile_dwrite (f, "absolute_mouse=%s\n", abspointers[p->input_tablet]); cfgfile_write (f, "gfx_display=%d\n", p->gfx_display); @@ -974,6 +976,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value) || cfgfile_strval (option, value, "gfx_max_horizontal", &p->gfx_max_horizontal, maxhoriz, 0) || cfgfile_strval (option, value, "gfx_max_vertical", &p->gfx_max_vertical, maxvert, 0) || cfgfile_strval (option, value, "gfx_filter_autoscale", &p->gfx_filter_autoscale, autoscale, 0) + || cfgfile_strval (option, value, "magic_mousecursor", &p->input_magic_mouse_cursor, magiccursors, 0) || cfgfile_strval (option, value, "absolute_mouse", &p->input_tablet, abspointers, 0)) return 1; @@ -3081,6 +3084,7 @@ void default_prefs (struct uae_prefs *p, int type) p->input_tablet = TABLET_OFF; p->input_magic_mouse = 0; + p->input_magic_mouse_cursor = 0; inputdevice_default_prefs (p); diff --git a/custom.c b/custom.c index 39bbfb70..b7f42dd9 100644 --- a/custom.c +++ b/custom.c @@ -206,6 +206,7 @@ static struct sprite spr[MAX_SPRITES]; uaecptr sprite_0; int sprite_0_width, sprite_0_height, sprite_0_doubled; uae_u32 sprite_0_colors[4]; +static uae_u8 magic_sprite_mask = 0xff; static int sprite_vblank_endline = VBLANK_SPRITE_PAL; @@ -2135,7 +2136,7 @@ static void record_sprite (int line, int num, int sprxp, uae_u16 *data, uae_u16 mask = 1 << half; } width = (sprite_width << sprite_buffer_res) >> sprres; - attachment = (spr[num & ~1].armed && ((sprctl[num | 1] & 0x80) || (!(currprefs.chipset_mask & CSMASK_AGA) && (sprctl[num & ~1] & 0x80)))); + attachment = sprctl[num | 1] & 0x80; /* Try to coalesce entries if they aren't too far apart */ if (!next_sprite_forced && e[-1].max + sprite_width >= sprxp) { @@ -2275,7 +2276,7 @@ static void decide_sprites (int hpos) if (spr[i].xpos < 0) continue; - if (!((debug_sprite_mask) & (1 << i))) + if (!((debug_sprite_mask & magic_sprite_mask) & (1 << i))) continue; if (! spr[i].armed) @@ -3103,10 +3104,10 @@ static void INTREQ_d (uae_u16 v, int d) void INTREQ (uae_u16 v) { - if (!use_eventmode()) - INTREQ_f(v); + if (!use_eventmode ()) + INTREQ_f (v); else - INTREQ_d(v, 6); + INTREQ_d (v, 6); } static void ADKCON (int hpos, uae_u16 v) @@ -4253,6 +4254,12 @@ static void cursorsprite (void) sprite_0_colors[3] = xcolors[current_colors.color_regs_ecs[19]]; } sprite_0_width = sprite_width; + if (currprefs.input_tablet && currprefs.input_magic_mouse) { + if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive ()) + magic_sprite_mask &= ~1; + else + magic_sprite_mask |= 1; + } } STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cycle, int mode) @@ -6216,8 +6223,19 @@ uae_u8 *save_custom (int *len, uae_u8 *dstptr, int full) SW (sprdatb[i][0]); /* 1x6 SPRxDATB */ } } - for ( i = 0; i < 32; i++) - SW (current_colors.color_regs_ecs[i]); /* 180-1BE COLORxx */ + for ( i = 0; i < 32; i++) { + if (currprefs.chipset_mask & CSMASK_AGA) { + uae_u32 v = current_colors.color_regs_aga[i]; + uae_u16 v2; + v &= 0x00f0f0f0; + v2 = (v >> 4) & 15; + v2 |= ((v >> 12) & 15) << 4; + v2 |= ((v >> 20) & 15) << 8; + SW (v2); + } else { + SW (current_colors.color_regs_ecs[i]); /* 180-1BE COLORxx */ + } + } SW (htotal); /* 1C0 HTOTAL */ SW (hsstop); /* 1C2 HSTOP*/ SW (hbstrt); /* 1C4 HBSTRT */ diff --git a/disk.c b/disk.c index 314d6979..a4367029 100644 --- a/disk.c +++ b/disk.c @@ -3247,9 +3247,9 @@ uae_u8 *restore_disk(int num,uae_u8 *src) drv->dskchange_time = 0; restore_u32 (); strcpy (old, currprefs.df[num]); - strncpy(changed_prefs.df[num],src,255); + strncpy (changed_prefs.df[num], src, 255); newis = changed_prefs.df[num][0] ? 1 : 0; - src+=strlen(src)+1; + src += strlen(src) + 1; if (!(disabled & (1 << num))) { if (!newis) { drv->dskchange = 1; @@ -3265,7 +3265,7 @@ uae_u8 *restore_disk(int num,uae_u8 *src) } } } - reset_drive_gui(num); + reset_drive_gui (num); return src; } diff --git a/drawing.c b/drawing.c index 81abe99f..abd71a69 100644 --- a/drawing.c +++ b/drawing.c @@ -114,7 +114,7 @@ struct vidbuf_description gfxvidinfo; xcolnr xcolors[4096]; struct spritepixelsbuf { - int attach:1; + uae_u8 attach; uae_u8 stdata; uae_u16 data; }; @@ -757,7 +757,6 @@ STATIC_INLINE void fill_line (void) } } -static int linetoscr_double_offset; #define SPRITE_DEBUG 0 STATIC_INLINE uae_u8 render_sprites (int pos, int dualpf, uae_u8 apixel, int aga) @@ -1787,6 +1786,7 @@ STATIC_INLINE void do_flush_screen (int start, int stop) static void pfield_expand_dp_bplcon (void) { int brdblank_2; + static int b2; bplres = dp_for_drawing->bplres; bplplanecnt = dp_for_drawing->nr_planes; @@ -1807,7 +1807,7 @@ static void pfield_expand_dp_bplcon (void) plf1pri = dp_for_drawing->bplcon2 & 7; plf2pri = (dp_for_drawing->bplcon2 >> 3) & 7; plf_sprite_mask = 0xFFFF0000 << (4 * plf2pri); - plf_sprite_mask |= (0xFFFF << (4 * plf1pri)) & 0xFFFF; + plf_sprite_mask |= (0x0000FFFF << (4 * plf1pri)) & 0xFFFF; bpldualpf = (dp_for_drawing->bplcon0 & 0x400) == 0x400; bpldualpfpri = (dp_for_drawing->bplcon2 & 0x40) == 0x40; @@ -1977,7 +1977,6 @@ static void pfield_draw_line (int lineno, int gfx_ypos, int follow_ypos) case LINE_DECIDED_DOUBLE: if (follow_ypos != -1) { do_double = 1; - linetoscr_double_offset = gfxvidinfo.rowbytes * (follow_ypos - gfx_ypos); linestate[lineno + 1] = LINE_DONE_AS_PREVIOUS; } diff --git a/filesys.asm b/filesys.asm index ab514382..12a6ea74 100644 --- a/filesys.asm +++ b/filesys.asm @@ -18,6 +18,9 @@ ; 2007.09.01 ACTION_EXAMINE_ALL (TW) ; 2007.09.05 fully filesystem device mounting on the fly (TW) ; 2008.01.09 ACTION_EXAMINE_ALL does not anymore return eac_Entries = 0 with continue (fixes some broken programs) +; 2008.12.11 mousehack -> tablet driver +; 2008.12.25 mousehack cursor sync +; 2009.01.20 clipboard sharing AllocMem = -198 FreeMem = -210 @@ -39,19 +42,18 @@ NRF_WAIT_REPLY = 8 NRF_NOTIFY_INITIAL = 16 NRF_MAGIC = $80000000 - dc.l 16 + dc.l 16 ; 4 our_seglist: - dc.l 0 ;/* NextSeg */ + dc.l 0 ; 8 /* NextSeg */ start: - bra filesys_mainloop - dc.l make_dev-start - dc.l filesys_init-start - dc.l exter_server-start - dc.l bootcode-start - dc.l setup_exter-start - - dc.l p96vsyncfix1-start - dc.l mousehack_x-start + bra.w filesys_mainloop ;12 + dc.l make_dev-start ;16 + dc.l filesys_init-start ;20 + dc.l exter_server-start ;24 + dc.l bootcode-start ;28 + dc.l setup_exter-start ;32 + dc.l mh_e-start ;36 + ;40 bootcode: lea.l doslibname(pc),a1 @@ -185,29 +187,40 @@ FSIN_chip_done general_ret: rts - ; this is getting ridiculous but I don't see any other solutions.. -fsmounttask -.fsm1 move.l 4.w,a6 - moveq #0,d0 - bset #17,d0 ; SIGBREAK_CTRL_D - jsr -$013e(a6) ;Wait +createproc + movem.l d2-d4/a2/a6,-(sp) + move.l 4.w,a6 + move.l d0,d2 + move.l d1,d4 + move.l a1,d3 + move.l a0,a2 lea doslibname(pc),a1 moveq #0,d0 jsr -$0228(a6) ; OpenLibrary tst.l d0 - beq.s .fsm1 + beq.s .noproc move.l d0,a6 - lea fsprocname(pc),a0 - move.l a0,d1 - moveq #15,d2 - lea mountproc(pc),a0 - move.l a0,d3 + move.l a2,d1 lsr.l #2,d3 - move.l #8000,d4 jsr -$08a(a6) ; CreateProc move.l a6,a1 move.l 4.w,a6 jsr -$019e(a6); CloseLibrary +.noproc + movem.l (sp)+,d2-d4/a2/a6 + rts + + ; this is getting ridiculous but I don't see any other solutions.. +fsmounttask +.fsm1 move.l 4.w,a6 + moveq #0,d0 + bset #13,d0 ; SIGBREAK_CTRL_D + jsr -$013e(a6) ;Wait + lea fsprocname(pc),a0 + lea mountproc(pc),a1 + moveq #15,d0 + move.l #8000,d1 + bsr.w createproc bra.s .fsm1 ; dummy process here because can't mount devices with ADNF_STARTPROC from task.. @@ -307,6 +320,14 @@ setup_exter: move.w #$0214,8(a1) moveq.l #3,d0 jsr -168(a6) ; AddIntServer + move.w mh_e(pc),d0 + beq.s .nomh + bsr.w mousehack_init +.nomh + cmp.w #36,20(a6) + bcs.s .noclip + bsr.w clipboard_init +.noclip movem.l (sp)+,d0-d1/a0-a1 rts @@ -814,14 +835,14 @@ make_dev: ; IN: A0 param_packet, D6: unit_no, D7: b0=autoboot,b1=onthefly,b2=v36 move.l d0,d3 cmp.w #-2,d3 beq.w general_ret - cmp.w #1,d3 - bne.s mountalways + ;cmp.w #1,d3 + ;bne.s mountalways ; KS < V36: init regular hardfiles only if filesystem is loaded - btst #2,d7 - bne.s mountalways ; >= 36 - btst #1,d7 - bne.w mountalways + ;btst #2,d7 + ;bne.s mountalways ; >= 36 + ;btst #1,d7 + ;bne.w mountalways mountalways ; allocate memory for loaded filesystem @@ -1056,9 +1077,15 @@ filesys_mainloop: jsr -294(a6) ; FindTask move.l d0,176(a3) - bsr.w allocinputdevice + lea inp_dev(pc),a0 + moveq #0,d0 + moveq #0,d1 + bsr.w allocdevice move.l d0,164(a3) - bsr.w alloctimerdevice + lea tim_dev(pc),a0 + moveq #0,d0 + moveq #0,d1 + bsr.w allocdevice move.l d0,168(a3) moveq.l #0,d5 ; No commands queued. @@ -1085,7 +1112,6 @@ filesys_mainloop: bsr.w diskinsertremove .nonotif - bsr.w mousehack_init bra.w FSML_Reply ; We abuse some of the fields of the message we get. Offset 0 is @@ -1097,7 +1123,6 @@ filesys_mainloop: ; processing by now, so it's safe to reply to it. FSML_loop: - bsr.w mousehack_init move.l a5,a0 jsr -372(a6) ; GetMsg @@ -1108,7 +1133,7 @@ FSML_loop: moveq #0,d0 move.b 15(a5),d1 ;mp_SigBit bset d1,d0 - bset #17,d0 ; SIGBREAK_CTRL_D + bset #13,d0 ; SIGBREAK_CTRL_D jsr -$013e(a6) ;Wait .msg ; disk changed? @@ -1292,32 +1317,6 @@ getrtbase: add.l d0,a0 rts - ;p96 stuff - -p96flag dc.w 0 -p96vsyncfix1 - cmp.l #34,8(sp) ; picasso_WaitVerticalSync? - bne.s p961 - movem.l d0-d1/a0-a2/a6,-(sp) - move.l 4.w,a6 - sub.l a1,a1 - jsr -$126(a6) ; FindTask - move.l d0,a2 - move.l a2,a1 - moveq #-20,d0 - jsr -$12c(a6) ; SetTaskPri - lea p96flag(pc),a0 - move.w (a0),d1 -p962 cmp.w (a0),d1 - beq.s p962 - move.l a2,a1 - jsr -$12c(a6) ; SetTaskPri - moveq #1,d1 - movem.l (sp)+,d0-d1/a0-a2/a6 - addq.l #4,sp ; return directly to caller -p961 rts - - ; mouse hack newlist: @@ -1329,7 +1328,7 @@ newlist: createport: movem.l d2/a2/a6,-(sp) - move.l 4,a6 + move.l 4.w,a6 moveq #-1,d0 jsr -$014a(a6) ;AllocSignal sub.l a0,a0 @@ -1356,11 +1355,14 @@ createport: createio: movem.l d2/a2/a6,-(sp) - move.l 4,a6 + move.l 4.w,a6 tst.l d0 beq.s .f move.l d0,a2 + move.l d1,d2 + bne.s .ci moveq #48,d2 +.ci move.l d2,d0 move.l #65536+1,d1 jsr AllocMem(a6) @@ -1372,16 +1374,20 @@ createio: movem.l (sp)+,d2/a2/a6 rts -allocinputdevice - movem.l a2/a6,-(sp) +allocdevice + movem.l d2-d3/a2/a6,-(sp) + move.l a0,a2 + move.l d0,d2 + move.l d1,d3 move.l 4.w,a6 bsr.w createport + move.l d3,d1 bsr.w createio beq.s .f + move.l a2,a0 move.l d0,a1 move.l d0,a2 - lea inp_dev(pc),a0 - moveq #0,d0 + move.l d2,d0 moveq #0,d1 jsr -$01bc(a6) ;OpenDevice move.l d0,d1 @@ -1390,33 +1396,12 @@ allocinputdevice bne.s .f move.l a2,d0 .f tst.l d0 - movem.l (sp)+,a2/a6 - rts - -alloctimerdevice - movem.l a2/a6,-(sp) - move.l 4.w,a6 - bsr.w createport - bsr.w createio - beq.s .f - move.l d0,a2 - move.l d0,a1 - lea tim_dev(pc),a0 - moveq #0,d0 - moveq #0,d1 - jsr -$01bc(a6) ;OpenDevice - move.l d0,d1 - moveq #0,d0 - tst.l d1 - bne.s .f - move.l a2,d0 -.f tst.l d0 - movem.l (sp)+,a2/a6 + movem.l (sp)+,d2-d3/a2/a6 rts createtask: movem.l d2/d3/d4/a2/a3/a6,-(sp) - move.l 4,a6 + move.l 4.w,a6 move.l d0,d4 move.l a0,d2 move.l a1,d3 @@ -1443,43 +1428,211 @@ createtask: .f movem.l (sp)+,d2/d3/d4/a2/a3/a6 rts -mousehack_e: dc.w 0 -mousehack_x: dc.w 0 -mousehack_y: dc.w 0 +; mousehack/tablet + +mousehack_init: + lea mhname(pc),a0 + lea mousehack_task(pc),a1 + moveq #19,d0 + bsr createtask + rts + +mhdoiotimer: + move.l MH_TM(a5),a1 + move.w #10,28(a1) ;TR_GETSYSTIME + move.b #1,30(a1) ;IOF_QUICK + jsr -$01c8(a6) ;DoIO + move.l MH_TM(a5),a1 + move.l 32(a1),14(a2) + move.l 36(a1),18(a2) + move.l MH_IO(a5),a1 + move.b #1,30(a1) ;IOF_QUICK + jsr -$01c8(a6) ;DoIO + rts +mhdoio: + clr.l 14(a2) + clr.l 18(a2) + move.l MH_IO(a5),a1 + move.b #1,30(a1) ;IOF_QUICK + jsr -$01c8(a6) ;DoIO + rts + +; these shouldn't be here but it is easier this way.. + +mh_e: dc.w 0 +mh_cnt: dc.w -1 +mh_maxx: dc.w 0 +mh_maxy: dc.w 0 +mh_maxz: dc.w 0 +mh_x: dc.w 0 +mh_y: dc.w 0 +mh_z: dc.w 0 +mh_resx: dc.w 0 +mh_resy: dc.w 0 +mh_maxax: dc.w 0 +mh_maxay: dc.w 0 +mh_maxaz: dc.w 0 +mh_ax: dc.w 0 +mh_ay: dc.w 0 +mh_az: dc.w 0 +mh_pressure: dc.w 0 +mh_buttonbits: dc.l 0 +mh_inproximity: dc.w 0 +mh_absx: dc.w 0 +mh_absy: dc.w 0 MH_INT = 0 + MH_FOO = (MH_INT+22) -MH_IEV = (MH_FOO+16) -MH_IO = (MH_IEV+22) +MH_FOO_CNT = 0 +MH_FOO_BUTTONS = 4 +MH_FOO_TASK = 8 +MH_FOO_MASK = 12 +MH_FOO_EXECBASE = 16 +MH_FOO_INTBASE = 20 +MH_FOO_GFXBASE = 24 +MH_FOO_DELAY = 28 +MH_FOO_DIMS_X = 32 +MH_FOO_DIMS_Y = 36 +MH_FOO_VPXY = 40 +MH_FOO_MOFFSET = 44 +MH_FOO_ALIVE = 48 +MH_FOO_LIMITCNT = 52 +MH_FOO_DIMS = 56 +MH_FOO_DISP = (MH_FOO_DIMS+88) +MH_FOO_PREFS = (MH_FOO_DISP+48) +MH_FOO_SIZE = (MH_FOO_PREFS+102) + +PREFS_SIZE = 102 + +MH_IEV = (MH_FOO+MH_FOO_SIZE) ;InputEvent +MH_IEH = (MH_IEV+22) ;InputHandler (Interrupt) +MH_IEPT = (MH_IEH+22) ;IEPointerTable/IENewTablet +MH_IENTTAGS = (MH_IEPT+32) ;space for ient_TagList +MH_IO = (MH_IENTTAGS+16*4*2) MH_TM = (MH_IO+4) MH_END = (MH_TM+4) -mousehack_init: - move.l a0,-(sp) - tst.b 157(a3) - bne.s .no - lea mousehack_e(pc),a0 - cmp.b #1,(a0) - bne.s .no - lea mhname(pc),a0 - lea mousehack_task(pc),a1 - moveq #5,d0 - bsr createtask - st 157(a3) - ;tell native side that mousehack is active +MH_MOUSEHACK = 0 +MH_TABLET = 1 +MH_ACTIVE = 7 + +TAG_USER equ $80000000 +TABLETA_Dummy EQU TAG_USER+$3A000 +TABLETA_TabletZ EQU TABLETA_Dummy+$01 +TABLETA_RangeZ EQU TABLETA_Dummy+$02 +TABLETA_AngleX EQU TABLETA_Dummy+$03 +TABLETA_AngleY EQU TABLETA_Dummy+$04 +TABLETA_AngleZ EQU TABLETA_Dummy+$05 +TABLETA_Pressure EQU TABLETA_Dummy+$06 +TABLETA_ButtonBits EQU TABLETA_Dummy+$07 +TABLETA_InProximity EQU TABLETA_Dummy+$08 +TABLETA_ResolutionX EQU TABLETA_Dummy+$09 +TABLETA_ResolutionY EQU TABLETA_Dummy+$0A + + +DTAG_DISP EQU $80000000 +DTAG_DIMS EQU $80001000 +DTAG_MNTR EQU $80002000 +DTAG_NAME EQU $80003000 + +getgfxlimits: + movem.l d0-d4/a0-a6,-(sp) + move.l a0,a5 + sub.l a2,a2 + sub.l a3,a3 + sub.l a4,a4 + moveq #0,d4 + + move.l MH_FOO_GFXBASE(a5),a6 + move.l MH_FOO_INTBASE(a5),a0 + move.l 60(a0),d0 ;FirstScreen + beq.s .end + + move.l d0,a0 + lea 44(a0),a0 ;ViewPort + move.l a0,a4 + jsr -$318(a6) ;GetVPModeID + moveq #-1,d1 + moveq #-1,d2 + cmp.l d0,d1 + beq.s .end + move.l d0,d3 + + ; mouse offset + move.l MH_FOO_INTBASE(a5),a6 + lea MH_FOO_PREFS(a5),a0 + moveq #PREFS_SIZE,d0 + jsr -$84(a6) ;GetPrefs + lea MH_FOO_PREFS(a5),a0 + move.w 100(a0),d4 + move.l MH_FOO_GFXBASE(a5),a6 + + ; Text Overscan area needed + sub.l a0,a0 + lea MH_FOO_DIMS(a5),a1 + moveq #0,d0 + move.w #88,d0 + move.l #DTAG_DIMS,d1 + move.l d3,d2 + jsr -$2f4(a6) ;GetDisplayInfoData + moveq #-1,d1 + moveq #-1,d2 + tst.l d0 + bmi.s .end + lea MH_FOO_DIMS(a5),a2 + move.l 50(a2),d1 + move.l 54(a2),d2 +.end + + move.l 28(a4),d0 + cmp.w MH_FOO_MOFFSET(a5),d4 + bne.s .dosend + cmp.l MH_FOO_VPXY(a5),d0 + bne.s .dosend + cmp.l MH_FOO_DIMS_X(a5),d1 + bne.s .dosend + cmp.l MH_FOO_DIMS_Y(a5),d2 + beq.s .nosend +.dosend + move.l d0,MH_FOO_VPXY(a5) + move.l d1,MH_FOO_DIMS_X(a5) + move.l d2,MH_FOO_DIMS_Y(a5) + move.w d4,MH_FOO_MOFFSET(a5) + + ; This only for doublescan properties bit.. + sub.l a0,a0 + lea MH_FOO_DISP(a5),a1 + moveq #0,d0 + move.w #88,d0 + move.l #DTAG_DISP,d1 + move.l d3,d2 + jsr -$2f4(a6) ;GetDisplayInfoData + tst.l d0 + bmi.s .nomntr + lea MH_FOO_DISP(a5),a3 +.nomntr + + ;send updated data to native side + move.w MH_FOO_MOFFSET(a5),d2 move.w #$FF38,d0 + moveq #1,d1 bsr.w getrtbase jsr (a0) -.no move.l (sp)+,a0 + +.nosend + movem.l (sp)+,d0-d4/a0-a6 rts mousehack_task: - move.l 4,a6 + move.l 4.w,a6 + + move.w 20(a6),d7 moveq #-1,d0 jsr -$014a(a6) ;AllocSignal - moveq #0,d2 - bset d0,d2 + moveq #0,d6 + bset d0,d6 sub.l a1,a1 jsr -$0126(a6) ;FindTask @@ -1489,30 +1642,18 @@ mousehack_task: move.l a4,a1 jsr -$012c(a6) ;SetTaskPri - moveq #0,d0 - lea intlibname(pc),a1 - jsr -$0228(a6) - move.l d0,d7 - moveq #0,d0 move.w #MH_END,d0 move.l #65536+1,d1 jsr AllocMem(a6) move.l d0,a5 - bsr.w allocinputdevice - move.l d0,MH_IO(a5) - beq.w .f - bsr.w alloctimerdevice - move.l d0,MH_TM(a5) - beq.w .f - lea MH_FOO(a5),a3 - move.l a4,12(a3);task - move.l d2,8(a3) ;sigmask + move.l a6,MH_FOO_EXECBASE(a3) + move.l a4,MH_FOO_TASK(a3) + move.l d6,MH_FOO_MASK(a3) moveq #-1,d0 - move.l d0,(a3) ;mx - move.l d0,4(a3) ;my + move.w d0,MH_FOO_CNT(a3) lea MH_INT(a5),a1 move.b #2,8(a1) ;NT_INTERRUPT @@ -1521,83 +1662,699 @@ mousehack_task: move.l a0,10(a1) lea mousehackint(pc),a0 move.l a0,18(a1) - move.l a3,14(a1) + move.l a5,14(a1) moveq #5,d0 ;INTB_VERTB jsr -$00a8(a6) - bra.s mhloop -.f rts mhloop - move.l d2,d0 + move.l d6,d0 jsr -$013e(a6) ;Wait - + + moveq #0,d0 + subq.l #1,MH_FOO_DELAY(a3) + bpl.s .delay1 + moveq #10,d0 + move.l d0,MH_FOO_DELAY(a3) +.delay1 + + tst.l MH_FOO_INTBASE(a3) + bne.s .intyes + tst.l MH_FOO_DELAY(a3) + bne.s mhloop + lea intlibname(pc),a1 + moveq #0,d0 + jsr -$0228(a6) ;OpenLibrary + move.l d0,MH_FOO_INTBASE(a3) + beq.s mhloop +.intyes + tst.l MH_FOO_GFXBASE(a3) + bne.s .gfxyes + tst.l MH_FOO_DELAY(a3) + bne.s mhloop + lea gfxlibname(pc),a1 + moveq #0,d0 + jsr -$0228(a6) ;OpenLibrary + move.l d0,MH_FOO_GFXBASE(a3) + beq.w mhloop +.gfxyes + + tst.l MH_IO(a5) + bne.s .yesio + tst.l MH_FOO_DELAY(a3) + bne.s mhloop + jsr -$0084(a6) ;Forbid + lea 350(a6),a0 ;DeviceList + lea inp_dev(pc),a1 + jsr -$114(a6) ;FindName + move.l d0,d2 + jsr -$008a(a6) ;Permit + tst.l d2 + beq.s mhloop + lea inp_dev(pc),a0 + moveq #0,d0 + moveq #0,d1 + bsr.w allocdevice + move.l d0,MH_IO(a5) + beq.w mhend + bra.w mhloop +.yesio + tst.l MH_TM(a5) + bne.s .yestim + tst.l MH_FOO_DELAY(a3) + bne.w mhloop + jsr -$0084(a6) ;Forbid + lea 350(a6),a0 ;DeviceList + lea tim_dev(pc),a1 + jsr -$114(a6) ;FindName + move.l d0,d2 + jsr -$008a(a6) ;Permit + tst.l d2 + beq.w mhloop + lea tim_dev(pc),a0 + moveq #0,d0 + moveq #0,d1 + bsr.w allocdevice + move.l d0,MH_TM(a5) + beq.w mhend + + ;tell native side that mousehack is now active + move.w #$FF38,d0 + moveq #0,d1 + bsr.w getrtbase + jsr (a0) + bra.w mhloop +.yestim + + cmp.w #36,d7 + bcs.s .nodims + subq.l #1,MH_FOO_LIMITCNT(a3) + bpl.s .nodims + move.l a3,a0 + bsr.w getgfxlimits + moveq #50,d0 + move.l d0,MH_FOO_LIMITCNT(a3) +.nodims + move.l MH_IO(a5),a1 lea MH_IEV(a5),a2 move.w #11,28(a1) ;IND_WRITEEVENT move.l #22,36(a1) ;sizeof(struct InputEvent) move.l a2,40(a1) - move.b #1,30(a1) ;IOF_QUICK - move.b #4,4(a2) ;IECLASS_POINTERPOS - clr.b 5(a2) ;ie_SubClass + move.b mh_e(pc),d0 + cmp.w #39,d7 + bcs.w .notablet + btst #MH_TABLET,d0 + beq.w .notablet + + ;IENewTablet + + lea MH_IEPT(a5),a0 + move.l a0,10(a2) ;ie_Addr + + move.b #$13,4(a2) ;ie_Class=IECLASS_NEWPOINTERPOS + move.b #3,5(a2) ;ie_SubClass = IESUBCLASS_NEWTABLET + clr.l (a0) ;ient_CallBack + clr.l 4(a0) + clr.w 6(a2) ;ie_Code + clr.l 8(a0) + clr.w 12(a0) + + ;IEQUALIFIER_MIDBUTTON=0x1000/IEQUALIFIER_RBUTTON=0x2000/IEQUALIFIER_LEFTBUTTON=0x4000 + move.l mh_buttonbits(pc),d1 + and.w #7,d1 + moveq #7,d0 + sub.w d1,d0 + lsl.w #8,d0 + lsl.w #4,d0 + move.w d0,8(a2) ;ie_Qualifier + + move.w mh_x(pc),12+2(a0) ;ient_TabletX + clr.w 16(a0) + move.w mh_y(pc),16+2(a0) ;ient_TabletY + clr.w 20(a0) + move.w mh_maxx(pc),20+2(a0) ;ient_RangeX + clr.w 24(a0) + move.w mh_maxy(pc),24+2(a0) ;ient_RangeY + lea MH_IENTTAGS(a5),a1 + move.l a1,28(a0) ;ient_TagList + move.l #TABLETA_Pressure,(a1)+ + move.w mh_pressure(pc),d0 + ext.l d0 + asl.l #8,d0 + move.l d0,(a1)+ + move.l #TABLETA_ButtonBits,(a1)+ + move.l mh_buttonbits(pc),(a1)+ + + moveq #0,d0 + + move.w mh_resx(pc),d0 + bmi.s .noresx + move.l #TABLETA_ResolutionX,(a1)+ + move.l d0,(a1)+ +.noresx + move.w mh_resy(pc),d0 + bmi.s .noresy + move.l #TABLETA_ResolutionY,(a1)+ + move.l d0,(a1)+ +.noresy + + move.w mh_maxz(pc),d0 + bmi.s .noz + move.l #TABLETA_RangeZ,(a1)+ + move.l d0,(a1)+ + move.w mh_z(pc),d0 + move.l #TABLETA_TabletZ,(a1)+ + move.l d0,(a1)+ +.noz + + move.w mh_maxax(pc),d0 + bmi.s .noax + move.l #TABLETA_AngleX,(a1)+ + move.w mh_ax(pc),d0 + ext.l d0 + asl.l #8,d0 + move.l d0,(a1)+ +.noax + move.w mh_maxay(pc),d0 + bmi.s .noay + move.l #TABLETA_AngleY,(a1)+ + move.w mh_ay(pc),d0 + ext.l d0 + asl.l #8,d0 + move.l d0,(a1)+ +.noay + move.w mh_maxaz(pc),d0 + bmi.s .noaz + move.l #TABLETA_AngleZ,(a1)+ + move.w mh_az(pc),d0 + ext.l d0 + asl.l #8,d0 + move.l d0,(a1)+ +.noaz + + moveq #0,d0 + move.w mh_inproximity(pc),d0 + bmi.s .noproxi + move.l #TABLETA_InProximity,(a1)+ + move.l d0,(a1)+ +.noproxi + clr.l (a1) ;TAG_DONE + + bsr.w mhdoio + + ;create mouse button events if button state changed + move.w #$68,d3 ;IECODE_LBUTTON->IECODE_RBUTTON->IECODE_MBUTTON + moveq #1,d2 + move.l mh_buttonbits(pc),d4 +.nextbut + move.l d4,d0 + and.l d2,d0 + move.l MH_FOO_BUTTONS(a3),d1 + and.l d2,d1 + cmp.l d0,d1 + beq.s .nobut + + clr.l (a2) + move.w #$0200,4(a2) ;ie_Class=IECLASS_RAWMOUSE,ie_SubClass=0 + clr.l 10(a2) ;ie_Addr/X+Y + move.w d3,d1 + tst.b d0 + bne.s .butdown + bset #7,d1 ;IECODE_UP_PREFIX +.butdown + move.w d1,6(a2) ;ie_Code + clr.w 8(a2) ;ie_Qualifier + + bsr.w mhdoio + +.nobut + addq.w #1,d3 + add.w d2,d2 + cmp.w #8,d2 + bne.s .nextbut + move.l d4,MH_FOO_BUTTONS(a3) + +.notablet + + move.b mh_e(pc),d0 + btst #MH_MOUSEHACK,d0 + beq.w mhloop + + clr.l (a2) + move.w #$0400,4(a2) ;IECLASS_POINTERPOS clr.w 6(a2) ;ie_Code clr.w 8(a2) ;ie_Qualifier - move.l d7,a0 ;intbase + move.l MH_FOO_INTBASE(a3),a0 - move.l MH_FOO+0(a5),d0 + move.w mh_absx(pc),d0 move.w 34+14(a0),d1 add.w d1,d1 sub.w d1,d0 + bpl.s .xn + moveq #0,d0 +.xn move.w d0,10(a2) - move.l MH_FOO+4(a5),d0 + move.w mh_absy(pc),d0 move.w 34+12(a0),d1 add.w d1,d1 sub.w d1,d0 - ext.l d0 + bpl.s .yn + moveq #0,d0 +.yn move.w d0,12(a2) - move.l MH_TM(a5),a1 - move.w #10,28(a1) ;TR_GETSYSTIME - move.b #1,30(a1) ;IOF_QUICK - jsr -$01c8(a6) ;DoIO - move.l MH_TM(a5),a1 - move.l 32(a1),14(a2) - move.l 36(a1),18(a2) + bsr.w mhdoiotimer - move.l MH_IO(a5),a1 - jsr -$01c8(a6) ;DoIO - bra.w mhloop +mhend + rts + mousehackint: - move.w mousehack_x(pc),d0 - ext.l d0 - move.w mousehack_y(pc),d1 - ext.l d1 - cmp.l (a1),d0 - bne .l1 - cmp.l 4(a1),d1 - beq .l2 -.l1 move.l d1,4(a1) - move.l d0,(a1) - move.l 8(a1),d0 - move.l 12(a1),a1 - move.l 4.w,a6 + tst.l MH_IO(a1) + beq.s .l1 + tst.l MH_TM(a1) + beq.s .l1 + move.w mh_cnt(pc),d0 + cmp.w MH_FOO+MH_FOO_CNT(a1),d0 + beq.s .l2 + move.w d0,MH_FOO+MH_FOO_CNT(a1) +.l1 + move.l MH_FOO+MH_FOO_EXECBASE(a1),a6 + move.l MH_FOO+MH_FOO_MASK(a1),d0 + move.l MH_FOO+MH_FOO_TASK(a1),a1 jsr -$0144(a6) ; Signal -.l2 lea $dff000,a0 +.l2 + subq.w #1,MH_FOO+MH_FOO_ALIVE(a1) + bpl.s .l3 + move.w #50,MH_FOO+MH_FOO_ALIVE(a1) + move.w #$FF38,d0 + moveq #2,d1 + bsr.w getrtbase + jsr (a0) +.l3 + lea $dff000,a0 moveq #0,d0 rts +; clipboard sharing + +CLIP_WRITE_SIZE = 0 +CLIP_WRITE_ALLOC = (CLIP_WRITE_SIZE+4) +CLIP_TASK = (CLIP_WRITE_ALLOC+4) +CLIP_UNIT = (CLIP_TASK+4) +CLIP_ID = (CLIP_UNIT+4) +CLIP_EXEC = (CLIP_ID+4) +CLIP_DOS = (CLIP_EXEC+4) +CLIP_HOOK = (CLIP_DOS+4) +CLIP_BUF = (CLIP_HOOK+20) +CLIP_BUF_SIZE = 8 +CLIP_POINTER_NOTIFY = (CLIP_BUF+CLIP_BUF_SIZE) +CLIP_POINTER_PREFS = (CLIP_POINTER_NOTIFY+48) +CLIP_END = (CLIP_POINTER_PREFS+32) + +clipboard_init: + lea clname(pc),a0 + lea clipboard_task(pc),a1 + moveq #-10,d0 + bsr createtask + rts + +clipboard_task: + sub.l a5,a5 + move.l 4.w,a6 + + move.l #CLIP_END,d0 + move.l #$10001,d1 + jsr AllocMem(a6) + tst.l d0 + beq.s clipdie + move.l d0,a5 + + move.l a6,CLIP_EXEC(a5) + + sub.l a1,a1 + jsr -294(a6) ; FindTask + move.l d0,CLIP_TASK(a5) + + move.w #$FF38,d0 + moveq #14,d1 + bsr.w getrtbase + move.l a5,d0 + jsr (a0) + +.wait + moveq #0,d0 + bset #13,d0 + jsr -$013e(a6) ;Wait + jsr -$0084(a6) ;Forbid + lea 378(a6),a0 ;LibList + lea doslibname(pc),a1 + jsr -$114(a6) ;FindName + move.l d0,d2 + jsr -$008a(a6) ;Permit + tst.l d2 + beq.s .wait + + clr.l CLIP_TASK(a5) + ; we need to be a process, LoadLibrary() needs to call dos + lea clname(pc),a0 + lea clipboard_proc(pc),a1 + moveq #-10,d0 + move.l #10000,d1 + bsr.w createproc + + ; task has done its job, process continues.. + moveq #0,d0 + rts + +clipdie: + move.w #$FF38,d0 + moveq #10,d1 + bsr.w getrtbase + jsr (a0) + move.l a5,d0 + beq.s .cd1 + move.l CLIP_EXEC(a5),a6 + move.l CLIP_DOS(a5),d0 + beq.s .cd2 + move.l d0,a1 + jsr -414(a6) ; CloseLibrary +.cd2 + move.l a5,a1 + move.l #CLIP_END,d0 + jsr FreeMem(a6) +.cd1 + moveq #0,d0 + rts + +prefsread: + movem.l d2-d4/a2-a6,-(sp) + move.l CLIP_DOS(a5),a6 + lea pointer_prefs(pc),a0 + move.l a0,d1 + move.l #1005,d2 + jsr -$001e(a6) ;Open + move.l d0,d4 + beq.s .pr1 + lea CLIP_POINTER_PREFS(a5),a2 +.pr4 + clr.l (a2) +.pr3 + move.w 2(a2),(a2) + move.l a2,d2 + addq.l #2,d2 + moveq #2,d3 + move.l d4,d1 + jsr -$002a(a6) ;Read + cmp.l d0,d3 + bne.s .pr1 + cmp.l #'PNTR',(a2) + bne.s .pr3 + move.l a2,d2 + moveq #4,d3 + move.l d4,d1 + jsr -$002a(a6) ;Read + move.l a2,d2 + moveq #32,d3 + move.l d4,d1 + jsr -$002a(a6) ;Read + cmp.l d0,d3 + bne.s .pr1 + tst.w 16(a2) ;pp_Which + bne.s .pr4 + move.w #$FF38,d0 + moveq #16,d1 + bsr.w getrtbase + jsr (a0) +.pr1 + move.l d4,d1 + beq.s .pr2 + jsr -$0024(a6) ;Close +.pr2 + movem.l (sp)+,d2-d4/a2-a6 + rts + +prefshook: + move.l CLIP_DOS(a5),a6 + lea ram_name(pc),a0 + move.l a0,d1 + moveq #-2,d2 + jsr -$0054(a6) ;Lock + move.l d0,d1 + beq.s .ph1 + jsr -$005a(a6) ;Unlock + move.l CLIP_EXEC(a5),a6 + lea CLIP_POINTER_NOTIFY(a5),a2 + moveq #-1,d0 + jsr -$014a(a6) ;AllocSignal + move.b d0,20(a2) ;nr_SignalNum + lea pointer_prefs(pc),a0 + move.l a0,(a2) ;nr_Name + move.l #NRF_SEND_SIGNAL|NRF_NOTIFY_INITIAL,12(a2) ;nr_Flags + move.l CLIP_TASK(a5),16(a2) ;nr_Task + move.l CLIP_DOS(a5),a6 + move.l a2,d1 + jsr -$378(a6) ;StartNotify +.ph1 + move.l CLIP_EXEC(a5),a6 + rts + + cnop 0,4 + dc.l 16 +clipboard_proc: + dc.l 0 + + move.w #$FF38,d0 + moveq #13,d1 + bsr.w getrtbase + jsr (a0) + tst.l d0 + beq.w clipdie + move.l d0,a5 + move.l CLIP_EXEC(a5),a6 + + sub.l a1,a1 + jsr -294(a6) ; FindTask + move.l d0,CLIP_TASK(a5) + + lea doslibname(pc),a1 + moveq #0,d0 + jsr -$0228(a6) ; OpenLibrary + move.l d0,CLIP_DOS(a5) + tst.l d0 + beq.w clipdie + move.l d0,a6 + +.devsloop + moveq #50,d1 + jsr -$00c6(a6) ;Delay + lea devs_name(pc),a0 + move.l a0,d1 + moveq #-2,d2 + jsr -$0054(a6) ;Lock + tst.l d0 + beq.s .devsloop + move.l d0,d1 + jsr -$005a(a6) ;Unlock + moveq #50,d1 + jsr -$00c6(a6) ;Delay + lea clip_name(pc),a0 + move.l a0,d1 + moveq #-2,d2 + jsr -$0054(a6) ;Lock + tst.l d0 + beq.w clipdie + move.l d0,d1 + jsr -$005a(a6) ;Unlock + + move.l CLIP_EXEC(a5),a6 + + bsr.w createport + moveq #0,d1 + move.w #52,d1 + bsr.w createio + move.l d0,a4 + tst.l d0 + beq.w clipdie + +cfloop2 + moveq #0,d0 + bset #13,d0 + jsr -$013e(a6) ;Wait + + moveq #0,d1 + move.l CLIP_UNIT(a5),d0 + lea clip_dev(pc),a0 + move.l a4,a1 + jsr -$01bc(a6) ;OpenDevice + tst.l d0 + bne.s cfloop2 + + move.w #$FF38,d0 + moveq #15,d1 + bsr.w getrtbase + jsr (a0) + + bsr.w prefshook + + lea CLIP_HOOK(a5),a0 + move.l a0,40(a4) + moveq #1,d0 + move.l d0,36(a4) + move.w #12,28(a4) ;CBD_CHANGEHOOK + move.l a5,CLIP_HOOK+16(a5) + lea cliphook(pc),a0 + move.l a0,CLIP_HOOK+8(a5) + move.l a4,a1 + jsr -$01c8(a6) ;DoIO + +cfloop + moveq #0,d0 + moveq #0,d2 + move.b CLIP_POINTER_NOTIFY+20(a5),d2 + bset d2,d0 + bset #13,d0 + jsr -$013e(a6) ;Wait + btst d2,d0 + beq.s .clipsignal + bsr.w prefsread + bra.s cfloop + +.clipsignal + move.l CLIP_WRITE_SIZE(a5),d0 + beq.w clipread + ;allocate amiga-side space + moveq #1,d1 + jsr AllocMem(a6) + move.l d0,CLIP_WRITE_ALLOC(a5) + ;and notify host-side + move.w #$FF38,d0 + moveq #12,d1 + bsr.w getrtbase + jsr (a0) + ; and now we should have the data in CLIP_WRITE_ALLOC + tst.l CLIP_WRITE_ALLOC(a5) + beq.s .nowrite + + move.w #3,28(a4) ;CMD_WRITE + clr.b 31(a4) + clr.l 32(a4) + move.l CLIP_WRITE_SIZE(a5),36(a4) + move.l CLIP_WRITE_ALLOC(a5),40(a4) + clr.l 44(a4) + clr.l 48(a4) + move.l a4,a1 + jsr -$01c8(a6) ;DoIO + move.l 48(a4),CLIP_ID(a5) + move.w #4,28(a4) ;CMD_UPDATE + move.l a4,a1 + jsr -$01c8(a6) ;DoIO + +.nowrite + move.l CLIP_WRITE_SIZE(a5),d0 + clr.l CLIP_WRITE_SIZE(a5) + move.l CLIP_WRITE_ALLOC(a5),d1 + beq.w cfloop + move.l d1,a1 + jsr FreeMem(a6) + bra.w cfloop + +clipread: + ; read first 8 bytes + move.w #2,28(a4) ;CMD_READ + lea CLIP_BUF(a5),a0 + clr.l (a0) + clr.l 4(a0) + clr.b 31(a4) + clr.l 44(a4) + clr.l 48(a4) + move.l a0,40(a4) + moveq #8,d0 + move.l d0,36(a4) + move.l a4,a1 + jsr -$01c8(a6) ;DoIO + cmp.l #'FORM',CLIP_BUF(a5) + bne.s .cf1 + move.l CLIP_BUF+4(a5),d0 + beq.s .cf1 + bmi.s .cf1 + move.l 48(a4),CLIP_ID(a5) + addq.l #8,d0 + move.l d0,d2 + moveq #1,d1 + jsr AllocMem(a6) + tst.l d0 + beq.s .cf1 + move.l d0,a2 + ; read the rest + move.l a2,a0 + move.l CLIP_BUF(a5),(a0)+ + move.l CLIP_BUF+4(a5),(a0)+ + move.l a0,40(a4) + move.l d2,d0 + subq.l #8,d0 + move.l d0,36(a4) + move.l a4,a1 + jsr -$01c8(a6) ;DoIO + move.w #$FF38,d0 + moveq #11,d1 + bsr.w getrtbase + move.l 32(a4),d0 + jsr (a0) + move.l a2,a1 + move.l d2,d0 + jsr FreeMem(a6) +.cf1 + ; tell clipboard.device that we are done (read until io_Actual==0) + tst.l 32(a4) + beq.w cfloop + lea CLIP_BUF(a5),a0 + move.l a0,40(a4) + moveq #1,d0 + move.l d0,36(a4) + clr.l 32(a4) + move.l a4,a1 + jsr -$01c8(a6) ;DoIO + bra.s .cf1 + +cliphook: + lea -CLIP_HOOK(a0),a0 + move.l 8(a1),d0 + cmp.l CLIP_ID(a0),d0 ;ClipHookMsg->chm_ClipID + beq.s .same + move.l d0,CLIP_ID(a0) + move.l a6,-(sp) + move.l CLIP_EXEC(a0),a6 + move.l CLIP_TASK(a0),a1 + moveq #0,d0 + bset #13,d0 ;SIG_D + jsr -$0144(a6) ;Signal + move.l (sp)+,a6 +.same + moveq #0,d0 + rts + + inp_dev: dc.b 'input.device',0 tim_dev: dc.b 'timer.device',0 -mhname: dc.b 'UAE mouse hack',0 +devs_name: dc.b 'DEVS:',0 +clip_name: dc.b 'DEVS:clipboard.device',0 +ram_name: dc.b 'RAM:',0 +clip_dev: dc.b 'clipboard.device',0 + ;argghh but StartNofity()ing non-existing ENV: causes "Insert disk ENV: in any drive" dialog.. +pointer_prefs: dc.b 'RAM:Env/Sys/Pointer.prefs',0 +clname: dc.b 'UAE clipboard sharing',0 +mhname: dc.b 'UAE mouse driver',0 exter_name: dc.b 'UAE filesystem',0 fstaskname: dc.b 'UAE fs automounter',0 fsprocname: dc.b 'UAE fs automount process',0 doslibname: dc.b 'dos.library',0 intlibname: dc.b 'intuition.library',0 +gfxlibname: dc.b 'graphics.library',0 explibname: dc.b 'expansion.library',0 fsresname: dc.b 'FileSystem.resource',0 END diff --git a/filesys.c b/filesys.c index 2119f80d..23ebe03c 100644 --- a/filesys.c +++ b/filesys.c @@ -2342,9 +2342,12 @@ action_add_notify (Unit *unit, dpacket packet) #endif p = name + strlen (name) - 1; - if (p[0] == ':') p--; - while (p > name && p[0] != ':' && p[0] != '/') p--; - if (p[0] == ':' || p[0] == '/') p++; + if (p[0] == ':') + p--; + while (p > name && p[0] != ':' && p[0] != '/') + p--; + if (p[0] == ':' || p[0] == '/') + p++; partname = my_strdup (p); n = new_notify (unit, partname); n->notifyrequest = nr; @@ -2710,7 +2713,7 @@ get_fileinfo (Unit *unit, dpacket packet, uaecptr info, a_inode *aino) PUT_PCK_RES1 (packet, DOS_TRUE); } -int get_native_path(uae_u32 lock, char *out) +int get_native_path (uae_u32 lock, char *out) { int i = 0; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { @@ -3331,10 +3334,17 @@ static void do_find (Unit *unit, dpacket packet, int mode, int create, int fallb fsdb_set_file_attrs (aino); put_long (fh + 36, k->uniq); - if (create == 2) + if (create == 2) { aino->elock = 1; - else + // clear comment if file already existed + if (aino->comment) { + xfree (aino->comment); + aino->comment = 0; + } + fsdb_set_file_attrs (aino); + } else { aino->shlock++; + } de_recycle_aino (unit, aino); PUT_PCK_RES1 (packet, DOS_TRUE); } @@ -5403,7 +5413,7 @@ static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) uaecptr diminfo = m68k_areg (&context->regs, 2); uaecptr dispinfo = m68k_areg (&context->regs, 3); uaecptr vp = m68k_areg (&context->regs, 4); - input_mousehack_status (mode, diminfo, dispinfo, vp); + input_mousehack_status (mode, diminfo, dispinfo, vp, m68k_dreg (&context->regs, 2)); } else if (mode == 10) { amiga_clipboard_die (); } else if (mode == 11) { @@ -5416,6 +5426,9 @@ static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) amiga_clipboard_task_start (m68k_dreg (&context->regs, 0)); } else if (mode == 15) { amiga_clipboard_init (); + } else if (mode == 16) { + uaecptr a2 = m68k_areg (&context->regs, 2); + input_mousehack_mouseoffset (a2); } return 1; } @@ -5791,23 +5804,23 @@ static uae_u8 *restore_key(UnitInfo *ui, Unit *u, uae_u8 *src) return src; } -static uae_u8 *restore_notify(UnitInfo *ui, Unit *u, uae_u8 *src) +static uae_u8 *restore_notify (UnitInfo *ui, Unit *u, uae_u8 *src) { - Notify *n = (Notify*)xcalloc (sizeof (Notify), 1); + Notify *n = xcalloc (sizeof (Notify), 1); uae_u32 hash; char *s; - n->notifyrequest = restore_u32(); - s = restore_string(); - n->fullname = (char*)xmalloc (strlen(ui->volname) + 2 + strlen(s) + 1); + n->notifyrequest = restore_u32 (); + s = restore_string (); + n->fullname = xmalloc (strlen (ui->volname) + 2 + strlen (s) + 1); sprintf (n->fullname, "%s:%s", ui->volname, s); xfree(s); - s = strrchr(n->fullname, '/'); + s = strrchr (n->fullname, '/'); if (s) s++; else s = n->fullname; - n->partname = my_strdup(s); + n->partname = my_strdup (s); hash = notifyhash (n->fullname); n->next = u->notifyhash[hash]; u->notifyhash[hash] = n; diff --git a/filesys_bootrom.c b/filesys_bootrom.c index d365cbd7..5c8385d2 100644 --- a/filesys_bootrom.c +++ b/filesys_bootrom.c @@ -2,14 +2,14 @@ db(0x60); db(0x00); db(0x09); db(0x8e); db(0x00); db(0x00); db(0x07); db(0x6c); db(0x00); db(0x00); db(0x00); db(0x30); db(0x00); db(0x00); db(0x01); db(0x8c); db(0x00); db(0x00); db(0x00); db(0x1c); db(0x00); db(0x00); db(0x02); db(0x48); - db(0x00); db(0x00); db(0x0d); db(0x5c); db(0x43); db(0xfa); db(0x15); db(0x6f); + db(0x00); db(0x00); db(0x0d); db(0x5c); db(0x43); db(0xfa); db(0x16); db(0x64); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0b); db(0x8a); - db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x15); db(0x78); db(0x70); db(0x24); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x16); db(0x6d); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); - db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x15); db(0x68); db(0x70); db(0x00); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x16); db(0x5d); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x5a); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); @@ -28,20 +28,20 @@ db(0x0a); db(0xf8); db(0x4e); db(0x90); db(0x72); db(0x03); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x0a); db(0x67); db(0x08); db(0x78); db(0x00); db(0x22); db(0x44); - db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x14); db(0x73); + db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x15); db(0x68); db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0b); db(0xac); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); db(0x0a); db(0xc4); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); - db(0x14); db(0x6d); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x15); db(0x62); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x14); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x15); db(0x13); db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); @@ -74,14 +74,14 @@ db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x22); db(0x40); db(0x41); db(0xfa); db(0x12); db(0xf6); db(0x23); db(0x48); + db(0x22); db(0x40); db(0x41); db(0xfa); db(0x13); db(0xeb); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xff); db(0x28); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xff); db(0x20); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x30); db(0x3a); db(0x0a); db(0xdc); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0a); db(0x7a); db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04); - db(0x61); db(0x00); db(0x0f); db(0x62); db(0x4c); db(0xdf); db(0x03); db(0x03); + db(0x61); db(0x00); db(0x0f); db(0x5a); db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); @@ -90,7 +90,7 @@ db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); - db(0x12); db(0x7a); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); + db(0x13); db(0x6f); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); @@ -127,13 +127,13 @@ db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); - db(0x45); db(0xfa); db(0x11); db(0xcc); db(0x10); db(0x19); db(0x12); db(0x1a); + db(0x45); db(0xfa); db(0x12); db(0xc1); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); - db(0x00); db(0x08); db(0x41); db(0xfa); db(0x11); db(0xa2); db(0x25); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x11); db(0x1e); db(0x25); db(0x48); + db(0x00); db(0x08); db(0x41); db(0xfa); db(0x12); db(0x97); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x12); db(0x13); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); @@ -285,16 +285,16 @@ db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x43); db(0xfa); db(0x0c); db(0x9b); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0x43); db(0xfa); db(0x0d); db(0x90); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x06); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0c); db(0x96); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0d); db(0x8b); db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa); - db(0x0c); db(0x84); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x0d); db(0x79); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x2c); @@ -307,16 +307,16 @@ db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); - db(0x43); db(0xfa); db(0x0b); db(0xeb); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0x43); db(0xfa); db(0x0c); db(0xe0); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0b); db(0x06); + db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0b); db(0xdc); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x84); - db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0b); db(0x03); + db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0b); db(0xd9); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x74); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae); @@ -415,16 +415,16 @@ db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); - db(0x41); db(0xfa); db(0x08); db(0x3f); db(0x43); db(0xfa); db(0x01); db(0x30); + db(0x41); db(0xfa); db(0x09); db(0x34); db(0x43); db(0xfa); db(0x01); db(0x5c); db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); - db(0x22); db(0x6d); db(0x01); db(0x9e); db(0x33); db(0x7c); db(0x00); db(0x0a); + db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6d); db(0x01); db(0x9e); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); - db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x01); db(0x9a); + db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x42); db(0xaa); db(0x00); db(0x0e); - db(0x42); db(0xaa); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x01); db(0x9a); + db(0x42); db(0xaa); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x00); db(0x00); db(0xff); db(0xff); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); @@ -432,272 +432,303 @@ db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x48); db(0xe7); db(0xf0); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); - db(0x97); db(0xcb); db(0x99); db(0xcc); db(0x2c); db(0x6d); db(0x00); db(0x18); - db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); - db(0x67); db(0x40); db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); - db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); - db(0xb2); db(0x80); db(0x67); db(0x2e); db(0x26); db(0x00); db(0x91); db(0xc8); - db(0x43); db(0xed); db(0x00); db(0x30); db(0x70); db(0x00); db(0x30); db(0x3c); - db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); db(0x10); db(0x00); - db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x72); db(0xff); - db(0x74); db(0xff); db(0x4a); db(0x80); db(0x6b); db(0x0c); db(0x45); db(0xed); - db(0x00); db(0x30); db(0x22); db(0x2a); db(0x00); db(0x32); db(0x24); db(0x2a); - db(0x00); db(0x36); db(0x20); db(0x2c); db(0x00); db(0x1c); db(0xb0); db(0xad); - db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); db(0x00); db(0x20); - db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); db(0x67); db(0x38); - db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); db(0x00); db(0x20); - db(0x2b); db(0x42); db(0x00); db(0x24); db(0x91); db(0xc8); db(0x43); db(0xed); - db(0x00); db(0x88); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); + db(0x48); db(0xe7); db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); + db(0x97); db(0xcb); db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); + db(0x00); db(0x18); db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); + db(0x00); db(0x3c); db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); + db(0x00); db(0x2c); db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); + db(0x72); db(0xff); db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); + db(0x26); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); + db(0x00); db(0xc0); db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xed); db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); + db(0x00); db(0x38); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); + db(0x22); db(0x3c); db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); + db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); + db(0x4a); db(0x80); db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); + db(0x22); db(0x2a); db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); + db(0x20); db(0x2c); db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); + db(0x66); db(0x12); db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); + db(0xb2); db(0xad); db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); + db(0x00); db(0x24); db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); + db(0x2b); db(0x41); db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); + db(0x3b); db(0x44); db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); + db(0x00); db(0x90); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); - db(0x47); db(0xed); db(0x00); db(0x88); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x01); db(0x61); db(0x00); db(0xfd); db(0x9c); db(0x4e); db(0x90); - db(0x4c); db(0xdf); db(0x7f); db(0x0f); db(0x4e); db(0x75); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); db(0x70); db(0xff); - db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); db(0x01); db(0xc6); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); - db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); - db(0x70); db(0x00); db(0x30); db(0x3c); db(0x01); db(0xa2); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x2a); db(0x40); db(0x47); db(0xed); db(0x00); db(0x16); db(0x27); db(0x4e); - db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); db(0x27); db(0x46); - db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); db(0x00); db(0x00); - db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); db(0x00); db(0x02); - db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); db(0x00); db(0x09); - db(0x41); db(0xfa); db(0x06); db(0xaf); db(0x23); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0x03); db(0x0e); db(0x23); db(0x48); db(0x00); db(0x12); - db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); - db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2); - db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06); - db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab); - db(0x00); db(0x14); db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); - db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x06); db(0xcd); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14); - db(0x67); db(0x00); db(0xff); db(0xd0); db(0x4a); db(0xab); db(0x00); db(0x18); - db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xc2); - db(0x43); db(0xfa); db(0x06); db(0xc1); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); - db(0xff); db(0xb2); db(0x4a); db(0xad); db(0x01); db(0x9a); db(0x66); db(0x38); - db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa4); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); - db(0x05); db(0xd4); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x8a); - db(0x41); db(0xfa); db(0x05); db(0xc2); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0xfd); db(0x40); db(0x2b); db(0x40); db(0x01); db(0x9a); - db(0x67); db(0x00); db(0x02); db(0x74); db(0x60); db(0x00); db(0xff); db(0x74); - db(0x4a); db(0xad); db(0x01); db(0x9e); db(0x66); db(0x48); db(0x4a); db(0xab); - db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x66); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); - db(0x05); db(0xa1); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); - db(0xff); db(0x4a); db(0x41); db(0xfa); db(0x05); db(0x8d); db(0x70); db(0x00); - db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xfe); db(0x2b); db(0x40); - db(0x01); db(0x9e); db(0x67); db(0x00); db(0x02); db(0x32); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0x4a); - db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x26); db(0x0c); db(0x47); - db(0x00); db(0x24); db(0x65); db(0x06); db(0x20); db(0x4b); db(0x61); db(0x00); - db(0xfd); db(0xf8); db(0x22); db(0x6d); db(0x01); db(0x9a); db(0x45); db(0xed); - db(0x00); db(0xce); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); - db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); - db(0x23); db(0x4a); db(0x00); db(0x28); db(0x10); db(0x3a); db(0xfd); db(0xae); - db(0x6a); db(0x08); db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x00); - db(0x01); db(0xaa); db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); - db(0x42); db(0x6a); db(0x00); db(0x06); db(0x22); db(0x3a); db(0xfd); db(0xb8); + db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); + db(0xfd); db(0x70); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); + db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); + db(0x7c); db(0x00); db(0x01); db(0xc6); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c); + db(0x02); db(0x10); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x47); db(0xed); + db(0x00); db(0x16); db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); + db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); + db(0x37); db(0x40); db(0x00); db(0x00); db(0x43); db(0xed); db(0x00); db(0x00); + db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); + db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x07); db(0x78); + db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xda); + db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); + db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); + db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); + db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16); + db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa); + db(0x07); db(0x96); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x27); db(0x40); db(0x00); db(0x14); db(0x67); db(0xd0); db(0x4a); db(0xab); + db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x07); db(0x8c); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18); + db(0x67); db(0x00); db(0xff); db(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08); + db(0x66); db(0x38); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); + db(0x43); db(0xfa); db(0x06); db(0x80); db(0x4e); db(0xae); db(0xfe); db(0xec); + db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); + db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0x6e); db(0x70); db(0x00); + db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x16); db(0x2b); db(0x40); + db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x42); db(0x60); db(0x00); + db(0xff); db(0x76); db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); + db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x68); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); + db(0x43); db(0xfa); db(0x06); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0xec); + db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); + db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0x39); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xd4); + db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x00); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); + db(0xfc); db(0x20); db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x28); + db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x12); db(0x53); db(0xab); + db(0x00); db(0x34); db(0x6a); db(0x0c); db(0x20); db(0x4b); db(0x61); db(0x00); + db(0xfd); db(0xc8); db(0x70); db(0x32); db(0x27); db(0x40); db(0x00); db(0x34); + db(0x22); db(0x6d); db(0x02); db(0x08); db(0x45); db(0xed); db(0x01); db(0x3c); + db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); + db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); + db(0x00); db(0x28); db(0x10); db(0x3a); db(0xfd); db(0x78); db(0x0c); db(0x47); + db(0x00); db(0x27); db(0x65); db(0x00); db(0x01); db(0x62); db(0x08); db(0x00); + db(0x00); db(0x01); db(0x67); db(0x00); db(0x01); db(0x5a); db(0x41); db(0xed); + db(0x01); db(0x68); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x15); db(0x7c); + db(0x00); db(0x13); db(0x00); db(0x04); db(0x15); db(0x7c); db(0x00); db(0x03); + db(0x00); db(0x05); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); + db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0xa8); db(0x00); db(0x08); + db(0x42); db(0x68); db(0x00); db(0x0c); db(0x22); db(0x3a); db(0xfd); db(0x60); db(0x02); db(0x41); db(0x00); db(0x07); db(0x70); db(0x07); db(0x90); db(0x41); db(0xe1); db(0x48); db(0xe9); db(0x48); db(0x35); db(0x40); db(0x00); db(0x08); - db(0x41); db(0xed); db(0x00); db(0xfa); db(0x25); db(0x48); db(0x00); db(0x0a); - db(0x10); db(0x3a); db(0xfd); db(0x7a); db(0x6b); db(0x00); db(0x00); db(0xf2); - db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); db(0x00); db(0xee); - db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); - db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0xa8); db(0x00); db(0x08); - db(0x42); db(0x68); db(0x00); db(0x0c); db(0x31); db(0x7a); db(0xfd); db(0x60); - db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x7a); - db(0xfd); db(0x58); db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); - db(0x31); db(0x7a); db(0xfd); db(0x46); db(0x00); db(0x16); db(0x42); db(0x68); - db(0x00); db(0x18); db(0x31); db(0x7a); db(0xfd); db(0x3e); db(0x00); db(0x1a); - db(0x43); db(0xed); db(0x01); db(0x1a); db(0x21); db(0x49); db(0x00); db(0x1c); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x3a); - db(0xfd); db(0x44); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xfa); - db(0xfd); db(0x36); db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfd); db(0x1e); - db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfd); db(0x12); db(0x6b); db(0x08); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); - db(0x30); db(0x3a); db(0xfc); db(0xfa); db(0x6b); db(0x14); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x3a); - db(0xfc); db(0xf2); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xec); db(0x6b); db(0x10); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x3a); - db(0xfc); db(0xe6); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x30); db(0x3a); db(0xfc); db(0xd8); db(0x6b); db(0x10); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x3a); db(0xfc); db(0xd2); - db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); - db(0xfc); db(0xc4); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x05); db(0x30); db(0x3a); db(0xfc); db(0xbe); db(0x48); db(0xc0); - db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x3a); - db(0xfc); db(0xba); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); db(0x60); db(0x32); - db(0x42); db(0x6a); db(0x00); db(0x08); db(0x0c); db(0x47); db(0x00); db(0x24); - db(0x65); db(0x00); db(0xfd); db(0xc8); db(0x15); db(0x7c); db(0x00); db(0x02); - db(0x00); db(0x05); db(0x30); db(0xba); db(0xfc); db(0x74); db(0x31); db(0x7a); - db(0xfc); db(0x72); db(0x00); db(0x02); db(0x31); db(0x7a); db(0xfc); db(0x70); - db(0x00); db(0x04); db(0x31); db(0x7a); db(0xfc); db(0x6c); db(0x00); db(0x06); - db(0x30); db(0x3a); db(0xfc); db(0x7a); db(0xe0); db(0x40); db(0x31); db(0x40); - db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x38); db(0x10); db(0x3a); - db(0xfc); db(0x4c); db(0x6b); db(0x00); db(0xfd); db(0x96); db(0x36); db(0x3c); - db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x3a); db(0xfc); db(0x60); + db(0x31); db(0x7a); db(0xfd); db(0x34); db(0x00); db(0x0e); db(0x42); db(0x68); + db(0x00); db(0x10); db(0x31); db(0x7a); db(0xfd); db(0x2c); db(0x00); db(0x12); + db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x7a); db(0xfd); db(0x1a); + db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); db(0x31); db(0x7a); + db(0xfd); db(0x12); db(0x00); db(0x1a); db(0x43); db(0xed); db(0x01); db(0x88); + db(0x21); db(0x49); db(0x00); db(0x1c); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x06); db(0x30); db(0x3a); db(0xfd); db(0x18); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x07); db(0x22); db(0xfa); db(0xfd); db(0x0a); db(0x70); db(0x00); + db(0x30); db(0x3a); db(0xfc); db(0xf2); db(0x6b); db(0x08); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0xe6); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xce); + db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x02); + db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc6); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0xc0); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x03); db(0x30); db(0x3a); db(0xfc); db(0xba); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xac); + db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x04); + db(0x30); db(0x3a); db(0xfc); db(0xa6); db(0x48); db(0xc0); db(0xe1); db(0x80); + db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0x98); db(0x6b); db(0x10); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); db(0x30); db(0x3a); + db(0xfc); db(0x92); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); + db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0x8e); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x08); db(0x22); db(0xc0); + db(0x42); db(0x91); db(0x61); db(0x00); db(0xfc); db(0x40); db(0x36); db(0x3c); + db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x3a); db(0xfc); db(0x70); db(0x20); db(0x04); db(0xc0); db(0x82); db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); db(0x35); db(0x41); db(0x00); db(0x06); - db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfb); db(0xf6); + db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x06); db(0x52); db(0x43); db(0xd4); db(0x42); db(0x0c); db(0x42); db(0x00); db(0x08); - db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); db(0x60); db(0x00); - db(0xfd); db(0x4a); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x04); db(0x00); + db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); db(0x10); db(0x3a); + db(0xfc); db(0x0c); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x00); + db(0xfd); db(0x7e); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x6b); db(0x00); db(0x14); db(0x30); db(0x3a); - db(0xfc); db(0x0c); db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); + db(0xfc); db(0x14); db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); - db(0x00); db(0x0a); db(0x30); db(0x3a); db(0xfb); db(0xfa); db(0x32); db(0x28); + db(0x00); db(0x0a); db(0x30); db(0x3a); db(0xfc); db(0x02); db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0c); db(0x61); db(0x00); - db(0xfb); db(0x70); db(0x60); db(0x00); db(0xfd); db(0x06); db(0x4e); db(0x75); - db(0x4a); db(0xa9); db(0x01); db(0x9a); db(0x67); db(0x14); db(0x4a); db(0xa9); - db(0x01); db(0x9e); db(0x67); db(0x0e); db(0x30); db(0x3a); db(0xfb); db(0xa8); + db(0xfb); db(0x78); db(0x60); db(0x00); db(0xfd); db(0x3a); db(0x4e); db(0x75); + db(0x4a); db(0xa9); db(0x02); db(0x08); db(0x67); db(0x14); db(0x4a); db(0xa9); + db(0x02); db(0x0c); db(0x67); db(0x0e); db(0x30); db(0x3a); db(0xfb); db(0xb0); db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x14); db(0x33); db(0x40); db(0x00); db(0x16); db(0x2c); db(0x69); db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0xbc); db(0x53); db(0x69); db(0x00); db(0x42); db(0x6a); db(0x12); - db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x42); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x02); db(0x61); db(0x00); db(0xf9); db(0xe2); + db(0xfe); db(0xbc); db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x12); + db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x02); db(0x61); db(0x00); db(0xf9); db(0xea); db(0x4e); db(0x90); db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x03); db(0x35); + db(0x70); db(0x00); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x04); db(0x32); db(0x43); db(0xfa); db(0x00); db(0x0a); db(0x70); db(0xf6); db(0x61); db(0x00); - db(0xfa); db(0xa4); db(0x4e); db(0x75); db(0x9b); db(0xcd); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x38); + db(0xfa); db(0xac); db(0x4e); db(0x75); db(0x9b); db(0xcd); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x5e); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00); db(0xf9); db(0x92); + db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00); db(0xf9); db(0x9a); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x7a); db(0x43); db(0xfa); - db(0x03); db(0x3d); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); + db(0x04); db(0x3a); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0xdc); - db(0x42); db(0xad); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x02); db(0xc5); - db(0x43); db(0xfa); db(0x00); db(0x42); db(0x70); db(0xf6); db(0x22); db(0x3c); - db(0x00); db(0x00); db(0x0b); db(0xb8); db(0x61); db(0x00); db(0xee); db(0x98); + db(0x42); db(0xad); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x03); db(0xc2); + db(0x43); db(0xfa); db(0x01); db(0x0a); db(0x70); db(0xf6); db(0x22); db(0x3c); + db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); db(0xee); db(0xa0); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0a); db(0x61); db(0x00); db(0xf9); db(0x44); db(0x4e); db(0x90); - db(0x20); db(0x0d); db(0x67); db(0x18); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0x72); db(0x0a); db(0x61); db(0x00); db(0xf9); db(0x4c); db(0x4e); db(0x90); + db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06); db(0x22); db(0x40); - db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); db(0x70); db(0x38); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0x58); + db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); db(0x03); db(0xed); + db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); db(0x67); db(0x4c); + db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); db(0x34); db(0xaa); + db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82); db(0x76); db(0x02); + db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); + db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); + db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); db(0x76); db(0x20); + db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); + db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); db(0x66); db(0xc4); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); + db(0xf8); db(0xc0); db(0x4e); db(0x90); db(0x22); db(0x04); db(0x67); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf); db(0x7c); db(0x1c); + db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); + db(0x02); db(0xd0); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); + db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34); db(0x4e); db(0xae); + db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x45); db(0xed); + db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); + db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa); db(0x02); db(0xc0); + db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x12); + db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08); db(0x00); db(0x10); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a); db(0x4e); db(0xae); + db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0d); db(0x61); db(0x00); - db(0xf9); db(0x10); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0xff); db(0xbc); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0xf8); db(0x50); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xf4); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); - db(0x00); db(0x08); db(0x43); db(0xfa); db(0x02); db(0xb9); db(0x70); db(0x00); + db(0x00); db(0x08); db(0x43); db(0xfa); db(0x02); db(0xee); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2b); db(0x40); db(0x00); db(0x18); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xff); db(0x98); db(0x2c); db(0x40); + db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xd0); db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); - db(0x02); db(0x0e); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); + db(0x02); db(0x24); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x01); db(0xf8); db(0x22); db(0x08); + db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0x0e); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); - db(0x67); db(0x00); db(0xff); db(0x62); db(0x22); db(0x00); db(0x4e); db(0xae); + db(0x67); db(0x00); db(0xfe); db(0x9a); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); - db(0xf8); db(0xbc); db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); - db(0x61); db(0x00); db(0xf9); db(0x00); db(0x28); db(0x40); db(0x4a); db(0x80); - db(0x67); db(0x00); db(0xff); db(0x42); db(0x70); db(0x00); db(0x08); db(0xc0); + db(0xf7); db(0xfc); db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); + db(0x61); db(0x00); db(0xf8); db(0x40); db(0x28); db(0x40); db(0x4a); db(0x80); + db(0x67); db(0x00); db(0xfe); db(0x7a); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x72); db(0x00); - db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x01); db(0xcc); + db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x01); db(0xe7); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0f); - db(0x61); db(0x00); db(0xf8); db(0x66); db(0x4e); db(0x90); db(0x41); db(0xed); - db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); - db(0x29); db(0x40); db(0x00); db(0x24); db(0x39); db(0x7c); db(0x00); db(0x0c); - db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); - db(0x01); db(0x38); db(0x2b); db(0x48); db(0x00); db(0x24); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x70); db(0x00); db(0x08); db(0xc0); - db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x20); db(0x2d); - db(0x00); db(0x00); db(0x67); db(0x00); db(0x00); db(0x72); db(0x72); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); - db(0xf8); db(0x18); db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x04); - db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); - db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); - db(0x29); db(0x6d); db(0x00); db(0x00); db(0x00); db(0x24); db(0x29); db(0x6d); - db(0x00); db(0x04); db(0x00); db(0x28); db(0x42); db(0xac); db(0x00); db(0x2c); - db(0x42); db(0xac); db(0x00); db(0x30); db(0x22); db(0x4c); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); - db(0x39); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x1c); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x20); db(0x2d); db(0x00); db(0x00); - db(0x42); db(0xad); db(0x00); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x04); - db(0x67); db(0x00); db(0xff); db(0x8a); db(0x22); db(0x41); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x80); db(0x39); db(0x7c); - db(0x00); db(0x02); db(0x00); db(0x1c); db(0x41); db(0xed); db(0x00); db(0x30); - db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x2c); - db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); - db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x08); - db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x0c); db(0xad); db(0x46); db(0x4f); db(0x52); db(0x4d); - db(0x00); db(0x30); db(0x66); db(0x52); db(0x20); db(0x2d); db(0x00); db(0x34); - db(0x67); db(0x4c); db(0x6b); db(0x4a); db(0x2b); db(0x6c); db(0x00); db(0x30); - db(0x00); db(0x10); db(0x50); db(0x80); db(0x24); db(0x00); db(0x72); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x36); - db(0x24); db(0x40); db(0x20); db(0x4a); db(0x20); db(0xed); db(0x00); db(0x30); - db(0x20); db(0xed); db(0x00); db(0x34); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40); db(0x00); db(0x24); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00); db(0xf7); db(0x42); - db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); - db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); - db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xf0); db(0x41); db(0xed); - db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); - db(0x29); db(0x40); db(0x00); db(0x24); db(0x42); db(0xac); db(0x00); db(0x20); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0xde); - db(0x41); db(0xe8); db(0xff); db(0xe4); db(0x20); db(0x29); db(0x00); db(0x08); - db(0xb0); db(0xa8); db(0x00); db(0x10); db(0x67); db(0x1a); db(0x21); db(0x40); - db(0x00); db(0x10); db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); - db(0x22); db(0x68); db(0x00); db(0x08); db(0x70); db(0x00); db(0x08); db(0xc0); - db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); - db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); - db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); - db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); - db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); - db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); - db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); - db(0x65); db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); - db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); - db(0x63); db(0x65); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); + db(0x61); db(0x00); db(0xf7); db(0xa6); db(0x4e); db(0x90); db(0x61); db(0x00); + db(0xfe); db(0xf2); db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); + db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); + db(0x39); db(0x7c); db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); + db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x4a); db(0x2b); db(0x48); + db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c); + db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); + db(0xfe); db(0xc2); db(0x05); db(0x00); db(0x67); db(0x06); db(0x61); db(0x00); + db(0xfe); db(0x3c); db(0x60); db(0xe4); db(0x20); db(0x2d); db(0x00); db(0x00); + db(0x67); db(0x00); db(0x00); db(0x72); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0xf7); db(0x42); + db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x04); db(0x67); db(0x3a); + db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); db(0x42); db(0x2c); + db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); db(0x29); db(0x6d); + db(0x00); db(0x00); db(0x00); db(0x24); db(0x29); db(0x6d); db(0x00); db(0x04); + db(0x00); db(0x28); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); + db(0x00); db(0x30); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); db(0x39); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x1c); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x38); db(0x20); db(0x2d); db(0x00); db(0x00); db(0x42); db(0xad); + db(0x00); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x04); db(0x67); db(0x00); + db(0xff); db(0x78); db(0x22); db(0x41); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x60); db(0x00); db(0xff); db(0x6e); db(0x39); db(0x7c); db(0x00); db(0x02); + db(0x00); db(0x1c); db(0x41); db(0xed); db(0x00); db(0x30); db(0x42); db(0x90); + db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x2c); db(0x00); db(0x1f); + db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x08); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x0c); db(0xad); db(0x46); db(0x4f); db(0x52); db(0x4d); db(0x00); db(0x30); + db(0x66); db(0x52); db(0x20); db(0x2d); db(0x00); db(0x34); db(0x67); db(0x4c); + db(0x6b); db(0x4a); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); + db(0x50); db(0x80); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x36); db(0x24); db(0x40); + db(0x20); db(0x4a); db(0x20); db(0xed); db(0x00); db(0x30); db(0x20); db(0xed); + db(0x00); db(0x34); db(0x29); db(0x48); db(0x00); db(0x28); db(0x20); db(0x02); + db(0x51); db(0x80); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x0b); db(0x61); db(0x00); db(0xf6); db(0x6c); db(0x20); db(0x2c); + db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); db(0x20); db(0x02); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); db(0x00); db(0x20); + db(0x67); db(0x00); db(0xfe); db(0xde); db(0x41); db(0xed); db(0x00); db(0x30); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x42); db(0xac); db(0x00); db(0x20); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0xde); db(0x41); db(0xe8); + db(0xff); db(0xe4); db(0x20); db(0x29); db(0x00); db(0x08); db(0xb0); db(0xa8); + db(0x00); db(0x10); db(0x67); db(0x1a); db(0x21); db(0x40); db(0x00); db(0x10); + db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); db(0x22); db(0x68); + db(0x00); db(0x08); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e); + db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74); + db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76); + db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); + db(0x3a); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); - db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); - db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); - db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); - db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); - db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); + db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); + db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); + db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); + db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); + db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); + db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); + db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); + db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); + db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); + db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); + db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); - db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); - db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); - db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); - db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); + db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); + db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); + db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); + db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); + db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); + db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); - db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); + db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); - db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); - db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); - db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); - db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); - db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); - db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); - db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); - db(0x65); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); + db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/include/inputdevice.h b/include/inputdevice.h index fb1b18b6..355904b0 100644 --- a/include/inputdevice.h +++ b/include/inputdevice.h @@ -84,10 +84,15 @@ extern uae_u8 handle_joystick_buttons (uae_u8); extern int getbuttonstate (int joy, int button); extern int getjoystate (int joy); +#define MAGICMOUSE_BOTH 0 +#define MAGICMOUSE_NATIVE_ONLY 1 +#define MAGICMOUSE_HOST_ONLY 2 + extern int magicmouse_alive (void); extern int is_tablet (void); extern int inputdevice_is_tablet (void); -extern void input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp); +extern void input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp, uae_u32 moffset); +extern void input_mousehack_mouseoffset (uaecptr pointerprefs); extern int mousehack_alive (void); extern void setmouseactive (int); diff --git a/include/options.h b/include/options.h index 7ab572cc..0ad43f09 100644 --- a/include/options.h +++ b/include/options.h @@ -359,6 +359,7 @@ struct uae_prefs { int input_mouse_speed; int input_tablet; int input_magic_mouse; + int input_magic_mouse_cursor; struct uae_input_device joystick_settings[MAX_INPUT_SETTINGS + 1][MAX_INPUT_DEVICES]; struct uae_input_device mouse_settings[MAX_INPUT_SETTINGS + 1][MAX_INPUT_DEVICES]; struct uae_input_device keyboard_settings[MAX_INPUT_SETTINGS + 1][MAX_INPUT_DEVICES]; diff --git a/inputdevice.c b/inputdevice.c index fcfd888f..da23a7e9 100644 --- a/inputdevice.c +++ b/inputdevice.c @@ -835,7 +835,7 @@ static int mouseedge_alive, mousehack_alive_cnt; static int lastmx, lastmy; static uaecptr magicmouse_ibase, magicmouse_gfxbase; static int dimensioninfo_width, dimensioninfo_height, dimensioninfo_dbl; -static int vp_xoffset, vp_yoffset; +static int vp_xoffset, vp_yoffset, mouseoffset_x, mouseoffset_y; static int tablet_maxx, tablet_maxy, tablet_data; int mousehack_alive (void) @@ -936,6 +936,7 @@ static void mousehack_reset (void) int off; dimensioninfo_width = dimensioninfo_height = 0; + mouseoffset_x = mouseoffset_y = 0; dimensioninfo_dbl = 0; mousehack_alive_cnt = 0; vp_xoffset = vp_yoffset = 0; @@ -955,18 +956,27 @@ static void mousehack_enable (void) off = 12 + get_long (rtarea_base + 36); if (rtarea[off + MH_E]) return; - mode = 1; - if (inputdevice_is_tablet () < 0) - mode |= 0x80; - write_log ("Tablet driver enabled (%s)\n", (mode & 0x80) ? "mousehack" : "real"); - rtarea[off + MH_E] = mode; + mode = 0x80; + if (currprefs.input_tablet == TABLET_MOUSEHACK) + mode |= 1; + if (inputdevice_is_tablet () > 0) + mode |= 2; + write_log ("Tablet driver enabled (%s)\n", ((mode & 3) == 3 ? "tablet+mousehack" : ((mode & 3) == 2) ? "tablet" : "mousehack")); + rtarea[off + MH_E] = 0x80; +} + +void input_mousehack_mouseoffset (uaecptr pointerprefs) +{ + mouseoffset_x = (uae_s16)get_word (pointerprefs + 28); + mouseoffset_y = (uae_s16)get_word (pointerprefs + 30); + write_log ("MO: %dx%d\n", mouseoffset_x, mouseoffset_y); } -void input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp) +void input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp, uae_u32 moffset) { if (mode == 0) { uae_u8 v = rtarea[12 + get_long (rtarea_base + 36)]; - v |= 2; + v |= 0x40; rtarea[12 + get_long (rtarea_base + 36)] = v; write_log ("Tablet driver running (%02x)\n", v); } else if (mode == 1) { @@ -1109,6 +1119,7 @@ void inputdevice_tablet (int x, int y, int z, int pressure, uae_u32 buttonbits, if (!memcmp (tmp, p + MH_START, MH_END - MH_START)) return; + rtarea[off + MH_E] = 0xc0 | 2; p[MH_CNT]++; } @@ -1145,7 +1156,7 @@ void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay void getgfxoffset (int *dx, int *dy, int*,int*); -static void inputdevice_tablet_abs (int x, int y) +static void inputdevice_mh_abs (int x, int y) { uae_u8 *p; uae_u8 tmp[4]; @@ -1158,9 +1169,13 @@ static void inputdevice_tablet_abs (int x, int y) memcpy (tmp, p + MH_ABSX, 4); - getgfxoffset (&fdx, &fdy, &fmx, &fmy); - x -= fdx; - y -= fdy; + if (!picasso_on) { + getgfxoffset (&fdx, &fdy, &fmx, &fmy); + x -= fdx - 1; + y -= fdy - 1; + } + x -= mouseoffset_x + 1; + y -= mouseoffset_y + 2; p[MH_ABSX] = x >> 8; p[MH_ABSX + 1] = x; @@ -1169,11 +1184,13 @@ static void inputdevice_tablet_abs (int x, int y) if (!memcmp (tmp, p + MH_ABSX, 4)) return; + rtarea[off + MH_E] = 0xc0 | 1; p[MH_CNT]++; tablet_data = 1; } -static void inputdevice_tablet_abs_v36 (int x, int y) +#if 0 +static void inputdevice_mh_abs_v36 (int x, int y) { uae_u8 *p; uae_u8 tmp[MH_END]; @@ -1290,17 +1307,20 @@ static void inputdevice_tablet_abs_v36 (int x, int y) p[MH_CNT]++; tablet_data = 1; } +#endif static void mousehack_helper (void) { int x, y; - if (currprefs.input_magic_mouse == 0 || currprefs.input_tablet == 0) + if (currprefs.input_magic_mouse == 0 || currprefs.input_tablet < TABLET_MOUSEHACK) return; +#if 0 if (kickstart_version >= 36) { - inputdevice_tablet_abs_v36 (lastmx, lastmy); + inputdevice_mh_abs_v36 (lastmx, lastmy); return; } +#endif #ifdef PICASSO96 if (picasso_on) { x = lastmx - picasso96_state.XOffset; @@ -1311,7 +1331,7 @@ static void mousehack_helper (void) x = coord_native_to_amiga_x (lastmx); y = coord_native_to_amiga_y (lastmy) << 1; } - inputdevice_tablet_abs (x, y); + inputdevice_mh_abs (x, y); } static int mouseedge_x, mouseedge_y, mouseedge_time; diff --git a/main.c b/main.c index 25f63641..0041e358 100644 --- a/main.c +++ b/main.c @@ -497,10 +497,9 @@ static void parse_cmdline (int argc, char **argv) target_cfgfile_load (&currprefs, argv[i] + 8, -1, 1); } else if (strncmp (argv[i], "-statefile=", 11) == 0) { savestate_state = STATE_DORESTORE; - strcpy (savestate_fname, argv[++i]); - } - /* Check for new-style "-f xxx" argument, where xxx is config-file */ - else if (strcmp (argv[i], "-f") == 0) { + strcpy (savestate_fname, argv[i] + 11); + } else if (strcmp (argv[i], "-f") == 0) { + /* Check for new-style "-f xxx" argument, where xxx is config-file */ if (i + 1 == argc) { write_log ("Missing argument for '-f' option.\n"); } else { diff --git a/od-win32/fsdb_win32.c b/od-win32/fsdb_win32.c index 59db874d..893424df 100644 --- a/od-win32/fsdb_win32.c +++ b/od-win32/fsdb_win32.c @@ -365,7 +365,7 @@ int fsdb_set_file_attrs (a_inode *aino) aino->dirty = 1; if (aino->volflags & MYVOLUMEINFO_STREAMS) { - if (needs_fsdb(aino)) { + if (needs_fsdb (aino)) { create_uaefsdb (aino, fsdb, mode); write_uaefsdb (aino->nname, fsdb); } else { diff --git a/od-win32/picasso96_win.c b/od-win32/picasso96_win.c index 938deb8c..725faea5 100644 --- a/od-win32/picasso96_win.c +++ b/od-win32/picasso96_win.c @@ -32,7 +32,7 @@ #define MULTIDISPLAY 0 #define P96DX 0 -#define WINCURSOR 0 +#define WINCURSOR 1 #include "sysconfig.h" #include "sysdeps.h" @@ -1515,6 +1515,8 @@ int createwindowscursor (uaecptr src, int w, int h, int hiressprite, int doubled if (isfullscreen () > 0 || currprefs.input_tablet == 0 || currprefs.input_magic_mouse == 0) goto exit; + if (currprefs.input_magic_mouse_cursor != MAGICMOUSE_HOST_ONLY) + goto exit; if (chipset) { if (!sprite_0 || !mousehack_alive ()) { @@ -1548,8 +1550,10 @@ int createwindowscursor (uaecptr src, int w, int h, int hiressprite, int doubled !memcmp (tmp_sprite_data, realsrc, datasize) && !memcmp (tmp_sprite_colors, ct, sizeof (uae_u32)*4) && hiressprite == tmp_sprite_hires && doubledsprite == tmp_sprite_doubled ) { - if (GetCursor () == wincursor) + if (GetCursor () == wincursor) { + wincursor_shown = 1; return 1; + } } } write_log ("wincursor: %dx%d hires=%d doubled=%d\n", w2, h2, hiressprite, doubledsprite); @@ -1639,17 +1643,20 @@ end: if (wincursor) { SetCursor (wincursor); -#if WINCURSOR > 0 wincursor_shown = 1; -#endif } if (!ret) write_log ("RTG Windows color cursor creation failed\n"); exit: - if (wincursor == oldwincursor) - SetCursor (normalcursor); + if (currprefs.input_tablet && currprefs.input_magic_mouse && currprefs.input_magic_mouse_cursor == MAGICMOUSE_NATIVE_ONLY) { + if (GetCursor () != NULL) + SetCursor (NULL); + } else { + if (wincursor == oldwincursor) + SetCursor (normalcursor); + } if (oldwincursor) DestroyIcon (oldwincursor); oldwincursor = NULL; diff --git a/od-win32/resources/resource b/od-win32/resources/resource index f5d649da..83a41ad2 100644 --- a/od-win32/resources/resource +++ b/od-win32/resources/resource @@ -331,6 +331,8 @@ #define IDC_PORT1_JOYS 1027 #define IDC_SCREENMODE_RTG 1027 #define IDC_MBMEM1 1028 +#define IDC_PORT_TABLE_CURSOR 1028 +#define IDC_PORT_TABLET_CURSOR 1028 #define IDC_SLOWMEM 1030 #define IDC_MBMEM2 1031 #define IDC_PARALLEL 1033 @@ -817,7 +819,6 @@ #define IDC_QUICKSTART_HOSTCONFIG 1679 #define IDC_PATHS_RIP 1679 #define IDC_DF1QQ 1680 -#define IDC_PATHS_SAVEIMAGES2 1680 #define IDC_PATHS_RIPS 1680 #define IDC_QUICKSTART_SETCONFIG 1681 #define IDC_CONFIGAUTO 1682 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 32ac9eac..91104a38 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -381,13 +381,15 @@ BEGIN RTEXT "Port 1:",IDC_STATIC,11,49,25,15,SS_CENTERIMAGE LTEXT "X-Arcade layout information []#1",IDC_STATIC,16,68,106,15,SS_NOTIFY | SS_CENTERIMAGE GROUPBOX "Mouse and Joystick settings",IDC_STATIC,4,15,292,76 - GROUPBOX "Mouse extra settings",IDC_STATIC,4,92,292,67 + GROUPBOX "Mouse extra settings",IDC_STATIC,4,92,292,76 RTEXT "Mouse speed:",IDC_STATIC,17,106,56,10,SS_CENTERIMAGE EDITTEXT IDC_INPUTSPEEDM,87,106,25,12,ES_NUMBER - CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,123,120,10 + CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,118,120,10 CONTROL "Full tablet input emulation",IDC_PORT_TABLET_FULL, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,137,121,10 - CONTROL "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,109,119,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,151,121,10 + CONTROL "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,106,119,10 + COMBOBOX IDC_PORT_TABLET_CURSOR,167,132,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "Magic Mouse cursor mode:",IDC_STATIC,17,135,138,10,SS_CENTERIMAGE END IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242 diff --git a/od-win32/srcrelease.cmd b/od-win32/srcrelease.cmd index b59021f1..cbb802eb 100644 --- a/od-win32/srcrelease.cmd +++ b/od-win32/srcrelease.cmd @@ -3,6 +3,7 @@ rm -rf bak mkdir bak copy c:\projects\winuae\src\ c:\projects\winuae_bak\bak\ /s copy d:\amiga\text\winuaechangelog.txt c:\projects\winuae_bak\bak\od-win32 +copy d:\amiga\amiga\filesys.asm c:\projects\winuae_bak\bak cd bak del *.obj *.ilk *.exe *.pdb *.pch *.idb /s diff --git a/od-win32/win32.c b/od-win32/win32.c index cdca089f..8a2da406 100644 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -487,8 +487,13 @@ void setpriority (struct threadpriorities *pri) static void setcursorshape (void) { - if (!picasso_setwincursor ()) - SetCursor (normalcursor); + if (currprefs.input_tablet && currprefs.input_magic_mouse && currprefs.input_magic_mouse_cursor == MAGICMOUSE_NATIVE_ONLY) { + if (GetCursor () != NULL) + SetCursor (NULL); + } else if (!picasso_setwincursor ()) { + if (GetCursor () != normalcursor) + SetCursor (normalcursor); + } } static void releasecapture (void) @@ -527,7 +532,7 @@ void setmouseactive (int active) if (isfullscreen () <= 0 && currprefs.input_magic_mouse && currprefs.input_tablet > 0) { if (mousehack_alive ()) return; - SetCursor (normalcursor); + SetCursor (normalcursor); } if (mouseactive > 0) diff --git a/od-win32/win32.h b/od-win32/win32.h index 3c7116a5..4b84833f 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -17,8 +17,8 @@ #define WINUAEPUBLICBETA 1 -#define WINUAEBETA "11" -#define WINUAEDATE MAKEBD(2009, 2, 5) +#define WINUAEBETA "12" +#define WINUAEDATE MAKEBD(2009, 2, 14) #define WINUAEEXTRA "" #define WINUAEREV "" diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index df40b23c..67c72fac 100644 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -1285,7 +1285,7 @@ static void prefs_to_gui (struct uae_prefs *p) workprefs = *p; /* filesys hack */ workprefs.mountitems = currprefs.mountitems; - memcpy(&workprefs.mountconfig, &currprefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof (struct uaedev_config_info)); + memcpy (&workprefs.mountconfig, &currprefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof (struct uaedev_config_info)); updatewinfsmode (&workprefs); #if 0 @@ -1424,9 +1424,6 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs break; } } - openFileName.lStructSize = sizeof (OPENFILENAME); - openFileName.hwndOwner = hDlg; - openFileName.hInstance = hInst; szFilter[0] = 0; szFilter[1] = 0; @@ -1556,6 +1553,8 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs p += strlen(p) + 1; *p = 0; } + openFileName.lStructSize = sizeof (OPENFILENAME); + openFileName.hwndOwner = hDlg; openFileName.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_LONGNAMES | OFN_HIDEREADONLY | OFN_NOCHANGEDIR; openFileName.lpstrFilter = szFilter; @@ -3937,7 +3936,7 @@ static void init_quickstartdlg (HWND hDlg) qssize = sizeof (tmp1); regquerystr (NULL, "QuickStartHostConfig", hostconf, &qssize); - if (firsttime == 0) { + if (firsttime == 0 && workprefs.start_gui) { regqueryint (NULL, "QuickStartModel", &quickstart_model); regqueryint (NULL, "QuickStartConfiguration", &quickstart_conf); regqueryint (NULL, "QuickStartCompatibility", &quickstart_compa); @@ -3950,8 +3949,8 @@ static void init_quickstartdlg (HWND hDlg) load_quickstart (hDlg, 1); quickstarthost (hDlg, hostconf); } - firsttime = 1; } + firsttime = 1; CheckDlgButton (hDlg, IDC_QUICKSTARTMODE, quickstart); @@ -8313,200 +8312,200 @@ static INT_PTR CALLBACK FloppyDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA switch (msg) { - case WM_INITDIALOG: - { - char ft35dd[20], ft35hd[20], ft525sd[20], ftdis[20], ft35ddescom[20]; - int df0texts[] = { IDC_DF0TEXT, IDC_DF1TEXT, IDC_DF2TEXT, IDC_DF3TEXT, -1 }; - - WIN32GUI_LoadUIString (IDS_FLOPPYTYPE35DD, ft35dd, sizeof ft35dd); - WIN32GUI_LoadUIString (IDS_FLOPPYTYPE35HD, ft35hd, sizeof ft35hd); - WIN32GUI_LoadUIString (IDS_FLOPPYTYPE525SD, ft525sd, sizeof ft525sd); - WIN32GUI_LoadUIString (IDS_FLOPPYTYPE35DDESCOM, ft35ddescom, sizeof ft35ddescom); - WIN32GUI_LoadUIString (IDS_FLOPPYTYPEDISABLED, ftdis, sizeof ftdis); - pages[FLOPPY_ID] = hDlg; - if (workprefs.floppy_speed > 0 && workprefs.floppy_speed < 10) - workprefs.floppy_speed = 100; - currentpage = FLOPPY_ID; - SendDlgItemMessage (hDlg, IDC_FLOPPYSPD, TBM_SETRANGE, TRUE, MAKELONG (0, 4)); - SendDlgItemMessage (hDlg, IDC_FLOPPYSPD, TBM_SETPAGESIZE, 0, 1); - SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_RESETCONTENT, 0, 0L); - SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35dd); - SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35hd); - SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft525sd); - SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_SETCURSEL, 0, 0); - for (i = 0; i < 4; i++) { - int f_type = floppybuttons[i][3]; - SendDlgItemMessage (hDlg, f_type, CB_RESETCONTENT, 0, 0L); - SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ftdis); - SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft35dd); - SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft35hd); - SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft525sd); - SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft35ddescom); + case WM_INITDIALOG: + { + char ft35dd[20], ft35hd[20], ft525sd[20], ftdis[20], ft35ddescom[20]; + int df0texts[] = { IDC_DF0TEXT, IDC_DF1TEXT, IDC_DF2TEXT, IDC_DF3TEXT, -1 }; + + WIN32GUI_LoadUIString (IDS_FLOPPYTYPE35DD, ft35dd, sizeof ft35dd); + WIN32GUI_LoadUIString (IDS_FLOPPYTYPE35HD, ft35hd, sizeof ft35hd); + WIN32GUI_LoadUIString (IDS_FLOPPYTYPE525SD, ft525sd, sizeof ft525sd); + WIN32GUI_LoadUIString (IDS_FLOPPYTYPE35DDESCOM, ft35ddescom, sizeof ft35ddescom); + WIN32GUI_LoadUIString (IDS_FLOPPYTYPEDISABLED, ftdis, sizeof ftdis); + pages[FLOPPY_ID] = hDlg; + if (workprefs.floppy_speed > 0 && workprefs.floppy_speed < 10) + workprefs.floppy_speed = 100; + currentpage = FLOPPY_ID; + SendDlgItemMessage (hDlg, IDC_FLOPPYSPD, TBM_SETRANGE, TRUE, MAKELONG (0, 4)); + SendDlgItemMessage (hDlg, IDC_FLOPPYSPD, TBM_SETPAGESIZE, 0, 1); + SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_RESETCONTENT, 0, 0L); + SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35dd); + SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35hd); + SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft525sd); + SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_SETCURSEL, 0, 0); + for (i = 0; i < 4; i++) { + int f_type = floppybuttons[i][3]; + SendDlgItemMessage (hDlg, f_type, CB_RESETCONTENT, 0, 0L); + SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ftdis); + SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft35dd); + SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft35hd); + SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft525sd); + SendDlgItemMessage (hDlg, f_type, CB_ADDSTRING, 0, (LPARAM)ft35ddescom); + } + setmultiautocomplete (hDlg, df0texts); } - setmultiautocomplete (hDlg, df0texts); - } - case WM_USER: - recursive++; - SetDlgItemText (hDlg, IDC_DF0TEXT, workprefs.df[0]); - SetDlgItemText (hDlg, IDC_DF1TEXT, workprefs.df[1]); - SetDlgItemText (hDlg, IDC_DF2TEXT, workprefs.df[2]); - SetDlgItemText (hDlg, IDC_DF3TEXT, workprefs.df[3]); - SetDlgItemText (hDlg, IDC_DF0TEXTQ, workprefs.df[0]); - SetDlgItemText (hDlg, IDC_DF1TEXTQ, workprefs.df[1]); - SetDlgItemText (hDlg, IDC_CREATE_NAME, diskname); - SendDlgItemMessage (hDlg, IDC_FLOPPYSPD, TBM_SETPOS, TRUE, - workprefs.floppy_speed ? exact_log2 ((workprefs.floppy_speed) / 100) + 1 : 0); - out_floppyspeed (hDlg); - addallfloppies (hDlg); - recursive--; - break; - - case WM_CONTEXTMENU: - diskselectmenu (hDlg, wParam); - break; + case WM_USER: + recursive++; + SetDlgItemText (hDlg, IDC_DF0TEXT, workprefs.df[0]); + SetDlgItemText (hDlg, IDC_DF1TEXT, workprefs.df[1]); + SetDlgItemText (hDlg, IDC_DF2TEXT, workprefs.df[2]); + SetDlgItemText (hDlg, IDC_DF3TEXT, workprefs.df[3]); + SetDlgItemText (hDlg, IDC_DF0TEXTQ, workprefs.df[0]); + SetDlgItemText (hDlg, IDC_DF1TEXTQ, workprefs.df[1]); + SetDlgItemText (hDlg, IDC_CREATE_NAME, diskname); + SendDlgItemMessage (hDlg, IDC_FLOPPYSPD, TBM_SETPOS, TRUE, + workprefs.floppy_speed ? exact_log2 ((workprefs.floppy_speed) / 100) + 1 : 0); + out_floppyspeed (hDlg); + addallfloppies (hDlg); + recursive--; + break; - case WM_COMMAND: - if (recursive > 0) + case WM_CONTEXTMENU: + diskselectmenu (hDlg, wParam); break; - recursive++; - if (HIWORD (wParam) == CBN_SELCHANGE || HIWORD (wParam) == CBN_KILLFOCUS) { + + case WM_COMMAND: + if (recursive > 0) + break; + recursive++; + if (HIWORD (wParam) == CBN_SELCHANGE || HIWORD (wParam) == CBN_KILLFOCUS) { + switch (LOWORD (wParam)) + { + case IDC_DF0TEXT: + case IDC_DF0TEXTQ: + getfloppyname (hDlg, 0); + addfloppytype (hDlg, 0); + addfloppyhistory (hDlg); + break; + case IDC_DF1TEXT: + case IDC_DF1TEXTQ: + getfloppyname (hDlg, 1); + addfloppytype (hDlg, 1); + addfloppyhistory (hDlg); + break; + case IDC_DF2TEXT: + getfloppyname (hDlg, 2); + addfloppytype (hDlg, 2); + addfloppyhistory (hDlg); + break; + case IDC_DF3TEXT: + getfloppyname (hDlg, 3); + addfloppytype (hDlg, 3); + addfloppyhistory (hDlg); + break; + case IDC_DF0TYPE: + getfloppytype (hDlg, 0); + break; + case IDC_DF1TYPE: + getfloppytype (hDlg, 1); + break; + case IDC_DF2TYPE: + getfloppytype (hDlg, 2); + break; + case IDC_DF3TYPE: + getfloppytype (hDlg, 3); + break; + } + } switch (LOWORD (wParam)) { - case IDC_DF0TEXT: - case IDC_DF0TEXTQ: - getfloppyname (hDlg, 0); + case IDC_DF0ENABLE: + case IDC_DF0QENABLE: + getfloppytypeq (hDlg, 0); + break; + case IDC_DF1ENABLE: + case IDC_DF1QENABLE: + getfloppytypeq (hDlg, 1); + break; + case IDC_DF2ENABLE: + getfloppytypeq (hDlg, 2); + break; + case IDC_DF3ENABLE: + getfloppytypeq (hDlg, 3); + break; + case IDC_DF0WP: + case IDC_DF0WPQ: + floppysetwriteprotect (hDlg, 0, currentpage == QUICKSTART_ID ? IsDlgButtonChecked (hDlg, IDC_DF0WPQ) : IsDlgButtonChecked (hDlg, IDC_DF0WP)); + break; + case IDC_DF1WP: + case IDC_DF1WPQ: + floppysetwriteprotect (hDlg, 1, currentpage == QUICKSTART_ID ? IsDlgButtonChecked (hDlg, IDC_DF1WPQ) : IsDlgButtonChecked (hDlg, IDC_DF1WP)); + break; + case IDC_DF2WP: + floppysetwriteprotect (hDlg, 2, IsDlgButtonChecked (hDlg, IDC_DF2WP)); + break; + case IDC_DF3WP: + floppysetwriteprotect (hDlg, 3, IsDlgButtonChecked (hDlg, IDC_DF3WP)); + break; + case IDC_DF0: + case IDC_DF0QQ: + diskselect (hDlg, wParam, &workprefs, 0, NULL); + break; + case IDC_DF1: + case IDC_DF1QQ: + diskselect (hDlg, wParam, &workprefs, 1, NULL); + break; + case IDC_DF2: + diskselect (hDlg, wParam, &workprefs, 2, NULL); + break; + case IDC_DF3: + diskselect (hDlg, wParam, &workprefs, 3, NULL); + break; + case IDC_EJECT0: + case IDC_EJECT0Q: + SetDlgItemText (hDlg, IDC_DF0TEXT, ""); + SetDlgItemText (hDlg, IDC_DF0TEXTQ, ""); + workprefs.df[0][0] = 0; addfloppytype (hDlg, 0); - addfloppyhistory (hDlg); break; - case IDC_DF1TEXT: - case IDC_DF1TEXTQ: - getfloppyname (hDlg, 1); + case IDC_EJECT1: + case IDC_EJECT1Q: + SetDlgItemText (hDlg, IDC_DF1TEXT, ""); + SetDlgItemText (hDlg, IDC_DF1TEXTQ, ""); + workprefs.df[1][0] = 0; addfloppytype (hDlg, 1); - addfloppyhistory (hDlg); break; - case IDC_DF2TEXT: - getfloppyname (hDlg, 2); + case IDC_EJECT2: + SetDlgItemText (hDlg, IDC_DF2TEXT, ""); + workprefs.df[2][0] = 0; addfloppytype (hDlg, 2); - addfloppyhistory (hDlg); break; - case IDC_DF3TEXT: - getfloppyname (hDlg, 3); + case IDC_EJECT3: + SetDlgItemText (hDlg, IDC_DF3TEXT, ""); + workprefs.df[3][0] = 0; addfloppytype (hDlg, 3); - addfloppyhistory (hDlg); break; - case IDC_DF0TYPE: - getfloppytype (hDlg, 0); + case IDC_SAVEIMAGE0: + deletesaveimage (hDlg, 0); + break; + case IDC_SAVEIMAGE1: + deletesaveimage (hDlg, 1); + break; + case IDC_SAVEIMAGE2: + deletesaveimage (hDlg, 2); break; - case IDC_DF1TYPE: - getfloppytype (hDlg, 1); + case IDC_SAVEIMAGE3: + deletesaveimage (hDlg, 3); break; - case IDC_DF2TYPE: - getfloppytype (hDlg, 2); + case IDC_CREATE: + DiskSelection(hDlg, wParam, 1, &workprefs, 0); break; - case IDC_DF3TYPE: - getfloppytype (hDlg, 3); + case IDC_CREATE_RAW: + DiskSelection(hDlg, wParam, 1, &workprefs, 0); break; } - } - switch (LOWORD (wParam)) - { - case IDC_DF0ENABLE: - case IDC_DF0QENABLE: - getfloppytypeq (hDlg, 0); - break; - case IDC_DF1ENABLE: - case IDC_DF1QENABLE: - getfloppytypeq (hDlg, 1); - break; - case IDC_DF2ENABLE: - getfloppytypeq (hDlg, 2); - break; - case IDC_DF3ENABLE: - getfloppytypeq (hDlg, 3); - break; - case IDC_DF0WP: - case IDC_DF0WPQ: - floppysetwriteprotect (hDlg, 0, currentpage == QUICKSTART_ID ? IsDlgButtonChecked (hDlg, IDC_DF0WPQ) : IsDlgButtonChecked (hDlg, IDC_DF0WP)); - break; - case IDC_DF1WP: - case IDC_DF1WPQ: - floppysetwriteprotect (hDlg, 1, currentpage == QUICKSTART_ID ? IsDlgButtonChecked (hDlg, IDC_DF1WPQ) : IsDlgButtonChecked (hDlg, IDC_DF1WP)); - break; - case IDC_DF2WP: - floppysetwriteprotect (hDlg, 2, IsDlgButtonChecked (hDlg, IDC_DF2WP)); - break; - case IDC_DF3WP: - floppysetwriteprotect (hDlg, 3, IsDlgButtonChecked (hDlg, IDC_DF3WP)); - break; - case IDC_DF0: - case IDC_DF0QQ: - diskselect (hDlg, wParam, &workprefs, 0, NULL); - break; - case IDC_DF1: - case IDC_DF1QQ: - diskselect (hDlg, wParam, &workprefs, 1, NULL); - break; - case IDC_DF2: - diskselect (hDlg, wParam, &workprefs, 2, NULL); - break; - case IDC_DF3: - diskselect (hDlg, wParam, &workprefs, 3, NULL); - break; - case IDC_EJECT0: - case IDC_EJECT0Q: - SetDlgItemText (hDlg, IDC_DF0TEXT, ""); - SetDlgItemText (hDlg, IDC_DF0TEXTQ, ""); - workprefs.df[0][0] = 0; - addfloppytype (hDlg, 0); - break; - case IDC_EJECT1: - case IDC_EJECT1Q: - SetDlgItemText (hDlg, IDC_DF1TEXT, ""); - SetDlgItemText (hDlg, IDC_DF1TEXTQ, ""); - workprefs.df[1][0] = 0; - addfloppytype (hDlg, 1); - break; - case IDC_EJECT2: - SetDlgItemText (hDlg, IDC_DF2TEXT, ""); - workprefs.df[2][0] = 0; - addfloppytype (hDlg, 2); - break; - case IDC_EJECT3: - SetDlgItemText (hDlg, IDC_DF3TEXT, ""); - workprefs.df[3][0] = 0; - addfloppytype (hDlg, 3); - break; - case IDC_SAVEIMAGE0: - deletesaveimage (hDlg, 0); - break; - case IDC_SAVEIMAGE1: - deletesaveimage (hDlg, 1); - break; - case IDC_SAVEIMAGE2: - deletesaveimage (hDlg, 2); - break; - case IDC_SAVEIMAGE3: - deletesaveimage (hDlg, 3); - break; - case IDC_CREATE: - DiskSelection(hDlg, wParam, 1, &workprefs, 0); - break; - case IDC_CREATE_RAW: - DiskSelection(hDlg, wParam, 1, &workprefs, 0); + recursive--; break; - } - recursive--; - break; - case WM_HSCROLL: - workprefs.floppy_speed = (int)SendMessage (GetDlgItem (hDlg, IDC_FLOPPYSPD), TBM_GETPOS, 0, 0); - if (workprefs.floppy_speed > 0) { - workprefs.floppy_speed--; - workprefs.floppy_speed = 1 << workprefs.floppy_speed; - workprefs.floppy_speed *= 100; - } - out_floppyspeed (hDlg); - break; + case WM_HSCROLL: + workprefs.floppy_speed = (int)SendMessage (GetDlgItem (hDlg, IDC_FLOPPYSPD), TBM_GETPOS, 0, 0); + if (workprefs.floppy_speed > 0) { + workprefs.floppy_speed--; + workprefs.floppy_speed = 1 << workprefs.floppy_speed; + workprefs.floppy_speed *= 100; + } + out_floppyspeed (hDlg); + break; } return FALSE; @@ -8799,6 +8798,7 @@ static void enable_for_gameportsdlg (HWND hDlg) int v = full_property_sheet; ew (hDlg, IDC_PORT_TABLET_FULL, v && is_tablet () && workprefs.input_tablet > 0); ew (hDlg, IDC_PORT_MOUSETRICK, v); + ew (hDlg, IDC_PORT_TABLET_CURSOR, v && workprefs.input_tablet > 0); } static void enable_for_portsdlg (HWND hDlg) @@ -8843,6 +8843,7 @@ static void updatejoyport (HWND hDlg) SetDlgItemInt (hDlg, IDC_INPUTSPEEDM, workprefs.input_mouse_speed, FALSE); CheckDlgButton (hDlg, IDC_PORT_MOUSETRICK, workprefs.input_magic_mouse); + SendDlgItemMessage (hDlg, IDC_PORT_TABLET_CURSOR, CB_SETCURSEL, workprefs.input_magic_mouse_cursor, 0); CheckDlgButton (hDlg, IDC_PORT_TABLET, workprefs.input_tablet > 0); CheckDlgButton (hDlg, IDC_PORT_TABLET_FULL, workprefs.input_tablet == TABLET_REAL); @@ -8931,6 +8932,7 @@ static void values_from_gameportsdlg (HWND hDlg, int d) currprefs.input_mouse_speed = workprefs.input_mouse_speed = i; workprefs.input_magic_mouse = IsDlgButtonChecked (hDlg, IDC_PORT_MOUSETRICK) ? -1 : 0; + workprefs.input_magic_mouse_cursor = SendDlgItemMessage (hDlg, IDC_PORT_TABLET_CURSOR, CB_GETCURSEL, 0, 0L); workprefs.input_tablet = 0; if (IsDlgButtonChecked (hDlg, IDC_PORT_TABLET)) { workprefs.input_tablet = TABLET_MOUSEHACK; @@ -9222,6 +9224,10 @@ static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP recursive++; pages[GAMEPORTS_ID] = hDlg; currentpage = GAMEPORTS_ID; + SendDlgItemMessage (hDlg, IDC_PORT_TABLET_CURSOR, CB_RESETCONTENT, 0, 0L); + SendDlgItemMessage (hDlg, IDC_PORT_TABLET_CURSOR, CB_ADDSTRING, 0, (LPARAM)"Show both cursors"); + SendDlgItemMessage (hDlg, IDC_PORT_TABLET_CURSOR, CB_ADDSTRING, 0, (LPARAM)"Show native cursor only"); + SendDlgItemMessage (hDlg, IDC_PORT_TABLET_CURSOR, CB_ADDSTRING, 0, (LPARAM)"Show host cursor only"); inputdevice_updateconfig (&workprefs); enable_for_gameportsdlg (hDlg); updatejoyport (hDlg); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 564d0059..7a038891 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,24 @@ +Beta 12: + +- file comment was not reset when file already existed and file was + opened mode = MODE_NEWFILE, also caused lost file comment if file + was opened and old comment was set again (probably another "since + the beginning bug") Thanks to TC for finding easy test case. +- mousehack/tablet support "mouse sync" updates (still not fixed) +- "Magic mouse cursor" mode configuration added. + - Both = show standard Windows and Amiga cursors + - Native = show Amiga cursor only + - Host = show Windows cursor only (with colors and shape copied + from real hidden Amiga cursor) This mode fakes really smooth + looking cursor movement (as long as positioning is correct..) +- 'e' debugger command OCS/ECS color register contents are shown + correctly in AGA mode +- sprite garbage in some rare situations (reason not fully known..) +- floppy drives were emptied if quickstart was enabled, show gui on + startup was not enabled and GUI was entered for the first time +- sprite attachment fixed. Surprisingly it works as documented :) + Beta 11: - fix for graphics corruption introduced in 1.5.3 when bitplane DMA @@ -19,7 +39,6 @@ Beta 11: - file selection dialog (adf, hdf etc..) remembers previous filter mode ("*.adf", "all files" etc..) - Beta 10: clipboard stuff. - clipboard: multiple CHRS chunks inside FTXT supported @@ -142,7 +161,6 @@ Beta 6: - detected screen size logged - loading new statefile didn't always trigger scale update - Beta 5: WARNING: big changes. 1.6 version change expected. - KS loader 16-bit odd/even rom image to 32-bit merging fixed diff --git a/sana2.c b/sana2.c index 6d0c4935..b84a9da3 100644 --- a/sana2.c +++ b/sana2.c @@ -1408,7 +1408,6 @@ static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) static uae_u32 REGPARAM2 uaenet_int_handler (TrapContext *ctx) { int i, j; - int ours = 0; int gotit; struct asyncreq *ar; @@ -1554,7 +1553,7 @@ static uae_u32 REGPARAM2 uaenet_int_handler (TrapContext *ctx) uaenet_int_requested = 0; uaenet_int_late = 0; uae_sem_post (&async_sem); - return ours; + return 0; } static void dev_reset (void)