PRINT
PRINT
PRINT TAB(5),"This demo shows how you can set up your own screen."
PRINT
PRINT TAB(5),"It utilizes the fact that the standard Comal window"
PRINT TAB(5),"is opened after the scanning where all local modules"
PRINT TAB(5),"are initialized."
PRINT
PRINT TAB(5),"You cannot make it as an external module!"
PRINT TAB(5),"This is because external modules are only initialized"
PRINT TAB(5),"once - when they are loaded."
PRINT
PRINT
PRINT TAB(5),"Press any key to stop"

WHILE KEY$="" DO WAIT

MODULE SpecialScreen

  USE System
  USE SystemCode
  USE IntuitionScreen
  USE View
  USE TagItem
  USE IntuitionLibrary

  DIM Screen OF POINTER TO Screen
  DIM IOScreen OF POINTER TO Screen

  CreateScreen

  PROC CreateScreen
    LOCAL NewScreen OF NewScreen

    NewScreen.Width:=640
    NewScreen.Height:=256
    NewScreen.Depth:=2
    NewScreen.BlockPen:=1
    NewScreen.ViewModes:=HIRES
    NewScreen.Type:=$000F        // CUSTOMSCREEN
    NewScreen.DefaultTitle:=ADR("Special!")

    IF SysLibVersion<36 THEN
      Screen:=OpenScreen(ADR(NewScreen))
    ELSE
      LOCAL ScreenTags(0..1) OF TagItem
      LOCAL Pens_3D OF USHORT

      Pens_3D:=$FFFF
      ScreenTags(0).ti_Tag:=$8000003A  // SA_Pens
      ScreenTags(0).ti_Data:=ADR(Pens_3D)
      ScreenTags(1).ti_Tag:=TAG_DONE
      Screen:=OpenScreenTagList(ADR(NewScreen),ADR(ScreenTags()))
    ENDIF

    IF Screen THEN
      IOScreen:=ComalStruc@.IO_Screen
      ComalStruc@.IO_Screen:=Screen
    ENDIF
  ENDPROC CreateScreen

  PROC DeleteScreen
    IF Screen THEN
      CloseScreen(Screen)
      Screen:=0
      ComalStruc@.IO_Screen:=IOScreen
    ENDIF
  ENDPROC DeleteScreen

  PROC ScreenSignal(s OF LONG) SIGNAL
    CASE s OF
    WHEN SIG_STOP,SIG_END
      IF Screen THEN
        ScreenToBack(Screen)
      ENDIF
    WHEN SIG_CLOSE,SIG_DISCARD,SIG_CLEAR
      DeleteScreen
    OTHERWISE
      // No action
    ENDCASE
  ENDPROC ScreenSignal

ENDMODULE SpecialScreen

