Page 2 of 2

Re: How does dual monitor word on X1000

Posted: Fri Dec 21, 2012 11:37 pm
by amigasociety
Severin, would be nice to see a video of this in action, your new apps that make screen switching easier.

;)

TJ

Re: How does dual monitor word on X1000

Posted: Sun Dec 23, 2012 12:56 pm
by Severin
@ssolie

They're not written as commodities yet, I just call them from fkey.

@amigasociety

I don't have the equipment or the bandwidth to do that but I can send you the beta versions although I haven't found a bug yet that occasionally locks the system. Probably due to changes in OS4 as I'm compiling OS3 68k exe's or maybe the ancient 3rd party library calls I've used... have to remove those and see what happens.

Anyway heres the code if anyone is interested:

SwapMonitor:

Code: Select all

#MODEID_FILTER = $FF000000 & #MONITOR_ID_MASK

*toFrontScreen.Screen = 0

lock.l = LockIBase_ (0)
*myIntuitionBase.IntuitionBase = IntuitionBase
*myScreen.Screen = *myIntuitionBase\FirstScreen

If *myScreen
  firstModeID.l = GetVPModeID_(*myScreen\ViewPort) & #MODEID_FILTER
  *myScreen = *myScreen\NextScreen
EndIf

While *myScreen
  toFrontModeID.l = GetVPModeID_(*myScreen\ViewPort) & #MODEID_FILTER
  If (toFrontModeID><firstModeID)
    *toFrontScreen = *myScreen
    *myScreen = 0
  Else
    *myScreen = *myScreen\NextScreen
  End If
Wend

UnlockIBase_ lock

If *toFrontScreen><0 Then ScreenToFront_ *toFrontScreen
End
SwapScreen:

Code: Select all

#MODEID_FILTER = $FF000000 & #MONITOR_ID_MASK

*toFrontScreen.Screen = 0
*toBackScreen.Screen  = 0
count.b=0

lock.l = LockIBase_ (0)
*myIntuitionBase.IntuitionBase = IntuitionBase
*myScreen.Screen = *myIntuitionBase\FirstScreen
*toBackScreen = *myScreen

If *myScreen
  firstModeID.l = GetVPModeID_(*myScreen\ViewPort) & #MODEID_FILTER
  *myScreen = *myScreen\NextScreen
EndIf

While *myScreen
  count + 1
  toFrontModeID.l = GetVPModeID_(*myScreen\ViewPort) & #MODEID_FILTER
  If (toFrontModeID=firstModeID) AND (*toFrontScreen=0)
    *toFrontScreen = *myScreen
    ;*myScreen = 0
  Else
    *myScreen = *myScreen\NextScreen
  End If
Wend

UnlockIBase_ lock

If *toFrontScreen><0
  ScreenToFront_ *toFrontScreen
  For i.b=1 To count
    ScreenToBack_ *toBackScreen
  Next
EndIf
End