Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!van-bc!rsoft!mindlink!a976 From: a976@mindlink.UUCP (Ron Tarrant) Newsgroups: comp.sys.amiga.programmer Subject: Re: Overscan Programming Message-ID: <4566@mindlink.UUCP> Date: 24 Jan 91 16:29:51 GMT Organization: MIND LINK! - British Columbia, Canada Lines: 115 > T32QC@CUNYVM.BITNET writes: > > I need help programming in Overscan in 1.3. I was wondering if it was > pos > sible to change the system-configuration while the computer was booted > already > change the x,y offsets and then open a graphics screen. What methods are > there > any help would be greatly appreciated. > Thanks in advance, > NEO > T32QC@CUNYVM Here is a system I've put together using bits and pieces of other examples as well as some ideas of my own. I've tested it under 1.3 and 2.0, neither of which blew up under the test conditions. This code will give you an overscan display and will allow the mousepointer access to the overscan area. Before you call SetOverScan(), you will have to open Intuition, Graphics, and a screen. --------------------- cut here ----------------------- #include #include #include #include #include "syncProto.h" #include "myContext.h" /******************************************************************/ /* My routine to fiddle with IntuitionBase, making the mouse area */ /* the same size as the overscan screen displayed. */ /******************************************************************/ void SetUpMouse(vp, screen, ibase) struct ViewPort *vp; struct Screen *screen; struct IntuitionBase *ibase; { ULONG ilock; ilock = LockIBase(0L); ibase->MinXMouse = vp->DxOffset; if(screen->Width > 600) { ibase->MaxXMouse = screen->Width; } else { ibase->MaxXMouse = (screen->Width * 2); } ibase->MinYMouse = vp->DyOffset; ibase->MaxYMouse = 480L; UnlockIBase(ilock); Forbid(); if(ibase->ActiveWindow) ClearPointer(ibase->ActiveWindow); Permit(); } /***************************************************************/ /* Here we modify the viewport so that it LOOKS like overscan. */ /***************************************************************/ void SetOverScan(screen, gfxbase, ibase) struct Screen *screen; struct GfxBase *gfxbase; struct IntuitionBase *ibase; { register WORD rows, x = screen->Width, y = screen->Height; register struct ViewPort *vp = &(screen->ViewPort); rows = gfxbase->NormalDisplayRows; if(rows > 300) { rows >>= 1; } x -= 320; if(vp->Modes & HIRES) { x -= 320; } y -= rows; if(vp->Modes & LACE) { y -= rows; } x >>= 1; if(x < 0) { x = 0; } y >>= 1; if(y < 0) { y = 0; } if(y > 40) { y = 40; } if(vp->Modes & HAM) /* Correct overscan HAM color distortions */ { if((gfxbase->ActiView->DxOffset - x) < 96) { x = gfxbase->ActiView->DxOffset - 96; } } vp->DxOffset = -x; vp->DyOffset = -y; MakeScreen(screen); RethinkDisplay(); SetUpMouse(vp, screen, ibase); } void OverScanOff(screen, gfxbase) struct Screen *screen; struct GfxBase *gfxbase; { struct ViewPort *vp = &(screen->ViewPort); vp->DxOffset = 0; vp->DyOffset = 0; MakeScreen(screen); RethinkDisplay(); } ------------------- cut here --------------------- So, all you really have to deal with here is: call SetOverScan() to turn it on and call OverScanOff() to turn it off. If you find any way of improving this code I'd appreciate hearing about it. Although, I think it's pretty robust the way it is. -Ron Tarrant a976@Mindlink.UUCP