/* Spot Buttons v2.0a - © 1996 Alistair Knock
 * $VER:Spot Buttons v2.0a
 * You May Change The Following Line To Wherever Your Configuration Is Stored.
 * Please do not edit and distribute this script without consent from the author.
 *
 */

Config = 'Mail:SpotButtons.Cfg'

/*
 *
 */

/*!*/All:

Parse Arg Conf

Options Results
Address 'SPOT'

Signal On Break_C
Signal On Failure

If Conf~="" Then Config=Conf

Cr='0d'x
Scrn = "SpotButtons "'a9'x" Alistair Knock 1996"
ButCount=0
ComCount=0
Fill=99
Tags_B=""
Flag1=""
Flag2=""
Flag3=""
Flag4=""
Flag5=""
Flag6=""
Pos=""
Format=0
Button.0=0
Command.0=0
Type.0=0
Button.=""
Command.=""
Type.=""


If ~Show(L,'tritonrexx.library') Then Do
    If ~Addlib('tritonrexx.library',10,-30,0) Then Do
        Say "Error : Please install the tritonrexx.library in LIBS:"
        Call CleanUp
    End
End

If ~Show(L,'rexxsupport.library') Then Do
    If ~Addlib('rexxsupport.library',10,-30,0) Then Do
        Say "Error : Please install the rexxsupport.library in LIBS:"
        Call CleanUp
    End
End

If ~Exists(config) Then Do
    Call Open(Cfg,Config,W)
    Call WriteLn(Cfg,'; SpotButtons © 1996 Alistair Knock')
    Call WriteLn(Cfg,'MWTITLE SpotButtons')
    Call WriteLn(Cfg,'GENERAL 0 0 0 0 0 0')
    Call WriteLn(Cfg,'SPACING 0 0 0 0 0')
    Call WriteLn(Cfg,'GADGETS 0 0 1 0 1 0 0 0')
    Call WriteLn(Cfg,'BUTTONS 0 0')
    Call Close(Cfg)
End

If Exists(config) Then Do
    If ~Open(Cfg,config,R) Then Do
        Say "Error: The file 'config' could not be opened"
        Call CleanUp
    End
End

If ReadLn(Cfg)~="; SpotButtons © 1996 Alistair Knock" Then Do
    Say "This configuration file is not compatible with SpotButtons."
    Call CleanUp
End

Call SetClip("STI","0")

Call Open(Sp,'Mail:Spot.Prefs',R)

Do Until Upper(Word(Ln,1))="NAME"
    Ln=ReadLn(Sp)
End
Name=DelWord(Ln,1,1)

Do Until Upper(Word(Ln,1))="AREXXPATH"
    Ln=ReadLn(Sp)
End
Rexxdir = DelWord(Ln,1,1)

Call Close(Sp)

Call R_Prefs

Call Main

Exit(0)
/*!!*/
/*!*/Main:

A_SB = TR_CreateApp('TRCA_Name SpotButtons')

If A_SB~='00000000'x Then Do
    W_SB=TR_OpenProject(A_SB,T_SB)
    If W_SB~='00000000'x Then Do
        E_SB=0
        State=Buttons
        Call Intro
        Do While E_SB~=1
            'IsMessages'

            If RC~=0 & State=Menu Then Do
                Call OpenW(B)
                State=Buttons
            End
            Else If RC=0 & State=Buttons Then Do
                Call OpenW(M)
                State=Menu
            End

            If Upper(Left(GetClip("STI"),1))="Q" Then E_SB=1

            Do While TR_HandleMsg(A_SB,'V_SB')
                If V_SB.Trm_Class='TRMS_ACTION' Then Call Selection(V_SB.Trm_ID)
                If V_SB.Trm_Class='TRMS_NEWVALUE' Then Call Selection((V_SB.Trm_Data +1))
                If V_SB.Trm_Class='TRMS_CLOSEWINDOW' Then E_SB=1
            End
        End

        D_String = "Bye!"
        Call Display
        Call TR_CloseProject(W_SB)
    End
    Call TR_DeleteApp(A_SB)
End
Return
/*!!*/
/*!*/Selection:
Parse Arg But

If But<99 Then Do
    D_String = Button.But
    Call Display
    If Command.But='HELP' Then Call Prefs
    If Command.But~='' Then Do
        If Type.But=0 Then Interpret 'Address Command "Rx '||Command.But||'"'
        If Type.But=1 Then Interpret 'Address Command "'Command.But'"'
        If Type.But=2 Then Interpret 'Address SPOT ; Command.But'
    End
    D_String = "Waiting"
    Call Display
End
If But=101 Then Call About
If But=102 Then Call Prefs
If But=103 Then Do
    'RequestFile Title "Execute ARexx Script" Pattern "#?.spot" Path "'rexxdir'"' ; Script=Result
    If Rc~=5 Then Do
        D_String = "Waiting"
        Call Display
        Interpret 'Address Command "Rx '||Script||'"'
    End
End
If But=99 Then E_SB=1
Return
/*!!*/
/*!*/About:
D_String = "About"
Call Display

T_About=WindowID(2),
        WindowTitle('About SpotButtons'),
        WindowFlags('TRWF_NOZIPGADGET'),
        WindowFlags('TRWF_NOSIZEGADGET'),
        WindowPosition('TRWP_CENTERSCREEN'),
        WindowBackfillF,
        ScreenTitle(scrn),
        PubScreenName('SPOT'),
        'HorizGroupA',
            'Space',
            'VertGroupA',
            'Space',
                NamedSeparator('SpotButtons'),
                'Space',
                CenteredText3('a9'x" Alistair Knock 1996"),
                'Space',
                CenteredText('Extra Buttons'),
                CenteredText('For Spot'),
                'Space',
                CenteredText('Thanks to Steve Pearson'),
                CenteredText('For Extra Ideas & Work'),
                'Space',
            'EndGroup',
            'Space',
        'EndGroup',
        'EndProject'

A_About=TR_CreateApp('TRCA_Name AboutButtons')

If A_About~='00000000'x Then Do
    W_About=TR_OpenProject(A_About,T_About)
    If W_About~='00000000'x Then do
        E_About=0
        Do While E_About~=1
            Call TR_Wait(A_About,'')
            Do While TR_HandleMsg(A_About,'V_About')
                If V_About.Trm_Class='TRMS_ACTION' Then Do
                    Select
                        When V_About.Trm_ID=0 Then E_About=1
                        Otherwise Nop
                    End
                End
                If V_About.Trm_Class='TRMS_CLOSEWINDOW' Then E_About=1
            End
        End
        Call TR_CloseProject(W_About)
    End
    Call TR_DeleteApp(A_About)
End
D_String = "Waiting" ; Call Display
Return
/*!!*/
/*!*/R_Prefs:
i=0
j=0
Command.0=0
Button.0=0
Type.0=0
ButCount=0

Call Open(Cfg,Config,R)

Do Until Eof(Cfg)
    Call ReadLn(Cfg)
        Tmp_Var=Result
        Keyword=Upper(Word(Tmp_Var,1))
        Ln=DelWord(Tmp_Var,1,1)
    Select
        When Keyword='MWTITLE' Then Title=Ln
        When Keyword='GENERAL' Then Do
            HPos=Word(Ln,1)
            VPos=Word(Ln,2)
            IHPos=Word(Ln,3)
            IVPos=Word(Ln,4)
            Fill.1=Word(Ln,5)
            Fill.2=Word(Ln,6)
        End
        When Keyword='SPACING' Then Do
            Top=Word(Ln,1)
            Left=Word(Ln,2)
            Bottom=Word(Ln,3)
            Right=Word(Ln,4)
            Interior=Word(Ln,5)
        End
        When Keyword='GADGETS' Then Do
            Gad_Zip=Word(Ln,1)
            Gad_Size=Word(Ln,2)
            Gad_Close=Word(Ln,3)
            Gad_Depth=Word(Ln,4)
            Gad_Active=Word(Ln,5)
            Gad_Bar=Word(Ln,6)
            Gad_Status=Word(Ln,7)
            Gad_Bank=Word(Ln,8)
        End
        When Keyword='BUTTONS' Then Do
            Button.0=Word(Ln,1)
            ButCount=Button.0
            Command.0=Button.0
            Type.0=Type.0
            Format=Word(Ln,2)
        End
        When Left(Tmp_Var,1)='#' Then Do
            i=i+1
            But=DelStr(Tmp_Var,1,1)
            Tut=Pos('^',But) + 1
            Cut=Pos('@',But)
            Button.i=SubStr(But,1,Tut-2)
            Type.i=SubStr(But,Tut,1)
            If Tut=1 Then Type.i=0
            Command.i=Trim(SubStr(But,Cut+1,100))
        End
        Otherwise Nop
    End
End

If ButCount=0 Then Do
    ButCount=1
    Button.0=1
    Command.0=1
    Type.0=1
    Button.1='Preferences'
    Command.1='HELP'
    Type.1=9
End

Wid=0

Do i=1 To Butcount
    If Length(Button.i)>Wid Then Wid=Length(Button.i)
End

Do i=1 To 2
    If Fill.i>3 Then Fill.i=0
    If Fill.i<0 Then Fill.i=0
    If Fill.i=3 Then Fill.i=7
    If Fill.i=2 Then Fill.i=3
End

BackFill=Fill.1 + Fill.2

If Backfill=0  Then Fill="None"
If Backfill=1  Then Fill="AB"
If Backfill=2  Then Fill="A"
If Backfill=3  Then Fill="SB"
If Backfill=4  Then Fill="SA"
If Backfill=6  Then Fill="S"
If Backfill=7  Then Fill="FB"
If Backfill=8  Then Fill="AF"
If Backfill=10 Then Fill="SF"
If Backfill=14 Then Fill="F"

Backfill="WindowBackFill"Fill

If Fill=99 Then Do
    'RequestNotify Title "Problem..." Center Prompt "There has been a problem with the colours.'cr'Please delete your config and retry."'
    Call CleanUp
End

If Gad_Zip=0 Then Flag1='TRWF_NOZIPGADGET'
If Gad_Size=0 Then Flag2='TRWF_NOSIZEGADGET'
If Gad_Depth=0 Then Flag3='TRWF_NODEPTHGADGET'
If Gad_Active=0 Then Flag4='TRWF_NOACTIVATE'
If Gad_Close=0 Then Flag5='TRWF_NOCLOSEGADGET'
If Gad_Bar=0 Then Flag6='TRWF_NODRAGBAR'

Tags_W=WindowID(1) WindowTitle(Title) ScreenTitle(Scrn) PubScreenName('SPOT')

WD.Trd_Left=HPos
WD.Trd_Top=VPos
WD.Trd_Width=1
WD.Trd_Height=1
WD.Trd_Left2=0
WD.Trd_Top2=0
WD.Trd_Width2=0
WD.Trd_Height2=0
WD.Trd_Zoomed=0

WI.Trd_Left=IHPos
WI.Trd_Top=IVPos
WI.Trd_Width=1
WI.Trd_Height=1
WI.Trd_Left2=1
WI.Trd_Top2=1
WI.Trd_Width2=1
WI.Trd_Height2=1
WI.Trd_Zoomed=1

Tags_M=BeginMenu('Project') MenuItem('About...',101) ItemBarLabel MenuItem('Preferences...',102) MenuItem('Execute Script...',103) ItemBarLabel MenuItem('Quit',99) BeginMenu('Items')
Tags_I='HorizGroupA'

If Top=0 Then STop='N'
If Top=1 Then STop='S'
If Top=2 Then STop=''
If Top=3 Then STop='B'

If Left=0 Then SLeft='N'
If Left=1 Then SLeft='S'
If Left=2 Then SLeft=''
If Left=3 Then SLeft='B'

If Right=0 Then SRight='N'
If Right=1 Then SRight='S'
If Right=2 Then SRight=''
If Right=3 Then SRight='B'

If Bottom=0 Then SBottom='N'
If Bottom=1 Then SBottom='S'
If Bottom=2 Then SBottom=''
If Bottom=3 Then SBottom='B'

If Interior=0 Then SInterior='N'
If Interior=1 Then SInterior='S'
If Interior=2 Then SInterior=''
If Interior=3 Then SInterior='B'

SP="Space"SLeft ; Tags_I=Tags_I SP 'VertGroupA'
SP="Space"STop ; Tags_I=Tags_I SP
SP="Space"SBottom ; Tags_E=SP 'EndGroup'
SP="Space"SRight ; Tags_E=Tags_E SP 'EndGroup EndProject'

If Gad_Status=1 Then Tags_B = TextBox('Waiting',150,10) "Space"SInterior

If Gad_Bank=1 Then Tags_B = Tags_B 'HorizGroupEA' Button('P',102) Button('E',103) 'EndGroup' "Space"SInterior

Do A=1 To ButCount
    Tags_M=Tags_M MenuItem(Button.A,A)
    If Format=0 Then Tags_B=Tags_B Button(Button.A,A) "Space"SInterior
End

If Format=1 Then Tags_B=Tags_B,
                        ListSel(Button,5,0) 'TRAT_MinHeight 'Button.0 'TRAT_MinWidth 'Wid+5

BTags=Tags_W WindowDimensions(WD) BackFill WindowFlags(Flag1) WindowFlags(Flag2) WindowFlags(Flag3) WindowFlags(Flag4) WindowFlags(Flag5) WindowFlags(Flag6) Tags_M Tags_I Tags_B Tags_E
MTags=Tags_W WindowDimensions(WI) BackFill WindowFlags(Flag1) WindowFlags(Flag2) WindowFlags(Flag3) WindowFlags(Flag4) WindowFlags(Flag5) WindowFlags(Flag6) Tags_M 'EndProject'

T_SB=BTags

Call Close(Cfg)

Return
/*!!*/
/*!*/OpenW:
Arg St

If St=B Then T_SB=BTags
If St=M Then T_SB=MTags

Call TR_CloseProject(W_SB)
W_SB=TR_OpenProject(A_SB,T_SB)
If W_SB='00000000'x Then Call CleanUp

Return
/*!!*/
/*!*/Prefs:
D_String = "Prefs"
Call Display

Space.0=4
Space.1='None'
Space.2='Small'
Space.3='Normal'
Space.4='Big'

PrefTitle='SpotButtons Prefs © 1996 Alistair Knock'

Gad.0=2
Gad.1='No'
Gad.2='Yes'

A_P   = TR_CreateApp('TRCA_Name SBPrefs')

T_P   = WindowID(1),
        WindowTitle('SpotButtons Prefs'),
        ScreenTitle(PrefTitle),
        PubScreenName('SPOT'),
        QuickHelpOn(1),
        WindowFlags('TRWF_NOSIZEGADGET'),
        WindowFlags('TRWF_NOCLOSEGADGET'),
        WindowFlags('TRWF_NODEPTHGADGET'),
        WindowFlags('TRWF_NOZIPGADGET'),
        WindowPosition('TRWP_CENTERDISPLAY'),
        'HorizGroupEA',
            'Space',
            'VertGroupEA',
                'Space',
                Button('General',1),
                Button('Spacing',2),
                Button('Gadgets',3),
                Button('Buttons',4),
                'Space',
                Button('Save',20),
                Button('Cancel',0),
                'Space',
            'EndGroup',
            'Space',
        'EndGroup',
        'EndProject'

If A_P~='00000000'x Then Do
    W_P=TR_OpenProject(A_P,T_P)
    If W_P~='00000000'x Then do
        E_P=0
        Do While E_P~=1
            Call TR_Wait(A_P,'')
            Do While TR_HandleMsg(A_P,'V_P')
                If V_P.Trm_Class='TRMS_ACTION' Then Do
                    Select
                        When V_P.Trm_ID=0 Then E_P=1
                        When V_P.Trm_ID=1 Then Call P_General
                        When V_P.Trm_ID=2 Then Call P_Spacing
                        When V_P.Trm_ID=3 Then Call P_Gadgets
                        When V_P.Trm_ID=4 Then Call P_Buttons
                        When V_P.Trm_ID=20 Then Do
                            Call Save_Prefs
                            Call TR_CloseProject(W_SB)
                            Call TR_DeleteApp(A_SB)
                            Call TR_CloseProject(W_P)
                            Call TR_DeleteApp(A_P)
                            Call All
                        End
                        Otherwise Nop
                    End
                End
                If V_P.Trm_Class='TRMS_CLOSEWINDOW' Then E_P=1
            End
        End
        Call TR_CloseProject(W_P)
    End
    Call TR_DeleteApp(A_P)

End

D_String = "Waiting"
Call Display
Return
/*!!*/
/*!*/P_Buttons:

BType.0 = 3
BType.1 = 'Rexx'
BType.2 = 'CLI'
BType.3 = 'Spot'
Tot = Button.0

Do i=0 To Tot
    Old_Button.i = Button.i
    Old_Command.i = Command.i
    Old_Type.i = Type.i
End

T_P_B = WindowID(1),
        WindowTitle('SpotButtons Prefs'),
        ScreenTitle('SpotButtons Prefs © 1996 Alistair Knock'),
        WindowPosition('TRWP_CENTERDISPLAY'),
        QuickHelpOn(1),
        PubScreenName('SPOT'),
        WindowFlags('TRWF_NOZIPGADGET'),
        WindowFlags('TRWF_NOCLOSEGADGET'),
        WindowFlags('TRWF_NOSIZEGADGET'),
        WindowFlags('TRWF_NODEPTHGADGET'),
        'HorizGroupEA',
            'Space',
            'VertGroupEA',
                'Space',
                'HorizGroupEA',
                    'VertGroupEA',
                        NamedSeparatorN('Buttons'),
                        'Space',
                        ListSS(button,5,0,0) 'TRAT_MinWidth 40' 'TRAT_MinHeight 10',
                        'HorizGroupEA',
                            Button('_Add',6),
                            Button('_Insert',7),
                            Button('D_elete',8),
                        'EndGroup',
                        'HorizGroupEA',
                            Button('_Up',9),
                            Button('_Sort',10),
                            Button('_Down',11),
                        'EndGroup',
                        'Space',
                        LineArray,
                            BeginLine,
                                TextID('_Button',2) 'TRAT_Flags TROF_RightAlign',
                                'SpaceS',
                                'HorizGroupE',
                                StringGadget(button.1,2),
                                CycleGadget(btype,Type.1,4),
                                'EndGroup',
                            EndLine,
                            'Space',
                            BeginLine,
                                TextID('_Command',3) 'TRAT_Flags TROF_RightAlign',
                                'SpaceS',
                                StringGadget(command.1,3),
                                GetFileButton(20),
                            EndLine,
                        EndArray,
                        'Space',
                    'EndGroup',
                    'EndGroup',
                    'Space',
                    'HorizGroupEA',
                        Button('Use',1),
                        Button('Cancel',0),
                    'EndGroup',
                    'Space',
                'EndGroup',
                'Space',
            'EndGroup',
        'EndProject'

A_P_B = TR_CreateApp('TRCA_Name SBPrefsB')

If A_P_B~='00000000'x Then Do
    W_P_B=TR_OpenProject(A_P_B,T_P_B)
    If W_P_B~='00000000'x Then Do ; E_P_B=0
        Do While E_P_B~=1
            Call TR_Wait(A_P_B,'')
            Do While TR_HandleMsg(A_P_B,'V_P_B')
                If V_P_B.Trm_Class='TRMS_ACTION' Then Do
                    Select
                        When V_P_B.Trm_ID=0 Then Do
                            Do i=0 To Tot
                                Button.i  = Old_Button.i
                                Command.i = Old_Command.i
                                Type.i    = Old_Type.i
                            End
                            E_P_B=1
                        End

                        When V_P_B.Trm_ID=1 Then E_P_B=1

                        When V_P_B.Trm_ID=6 Then Do  /* Add */
                            Button.0=Button.0 + 1
                            Command.0=Command.0 + 1
                            Type.0=Type.0 + 1
                            Newn=Button.0
                            Button.NewN='--New--'
                            Command.NewN=''
                            Type.NewN=0
                            Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                            Call TR_SetAttribute(W_P_B,5,'TRAT_Value',NewN-1)
                            Call TR_SetAttribute(W_P_B,2,'TROB_String','')
                            Call TR_SetAttribute(W_P_B,2,'TRAT_Disabled',0)
                            Call TR_SetAttribute(W_P_B,3,'TROB_String','')
                            Call TR_SetAttribute(W_P_B,3,'TRAT_Disabled',0)
                            Call TR_SetAttribute(W_P_B,4,'TRAT_Disabled',0)
                            Call TR_SetAttribute(W_P_B,4,'TRAT_Value',0)
                            Call TR_SetAttribute(W_P_B,20,'TRAT_Disabled',0)
                            If Newn>2 Then Call TR_SetAttribute(W_P_B,5,'TRLV_Top',Newn-2)
                            Call TR_SendMessage(W_P_B,2,'TROM_Activate',0)
                        End

                        When V_P_B.Trm_ID=7 Then Do  /* Insert */
                            Button.0=Button.0 + 1
                            Command.0=Command.0 + 1
                            Type.0=Type.0 + 1
                            NewN=Button.0
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                            Ins=Result+1
                            Do i=NewN To Ins By -1
                                j=i+1
                                If i>0 Then Do
                                    Button.j=Button.i
                                    Command.j=Command.i
                                    Type.j=Type.i
                                End
                            End
                            Button.ins='--New--'
                            Command.ins=''
                            Type.ins=0
                            Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                            Call TR_SetAttribute(W_P_B,2,'TROB_String',Button.ins)
                            Call TR_SetAttribute(W_P_B,3,'TROB_String',Command.ins)
                            Call TR_SetAttribute(W_P_B,4,'TRAT_Value',Type.ins)
                            Call TR_SetAttribute(W_P_B,2,'TRAT_Disabled',0)
                            Call TR_SetAttribute(W_P_B,3,'TRAT_Disabled',0)
                            Call TR_SetAttribute(W_P_B,4,'TRAT_Disabled',0)
                            Call TR_SetAttribute(W_P_B,20,'TRAT_Disabled',0)
                            Call TR_SendMessage(W_P_B,2,'TROM_Activate',0)
                        End

                        When V_P_B.Trm_ID=8 Then Do  /* Delete */
                            NumB=Button.0
                            If NumB>0 Then Do
                                Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                                DelB=Result+1
                                Do i=DelB To NumB
                                    If i>0 Then Do
                                        b=i+1
                                        Button.i=Button.b
                                        Command.i=Command.b
                                        Type.i=Type.b
                                    End
                                End
                                Button.NumB=''
                                Command.NumB=''
                                Type.NumB=''
                                Command.0=NumB-1
                                Button.0=NumB-1
                                Type.0=NumB-1
                                Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                                Call TR_GetAttribute(W_P_B,5,'TRAT_Value') ; Cur=Result+1
                                Call TR_SetAttribute(W_P_B,2,'TROB_String',Button.Cur)
                                Call TR_SetAttribute(W_P_B,3,'TROB_String',Command.Cur)
                                Call TR_SetAttribute(W_P_B,4,'TRAT_Value',Type.Cur)
                            End
                            If Button.0=0 Then Do
                                Call TR_SetAttribute(W_P_B,2,'TROB_String','')
                                Call TR_SetAttribute(W_P_B,2,'TRAT_Disabled',1)
                                Call TR_SetAttribute(W_P_B,3,'TROB_String','')
                                Call TR_SetAttribute(W_P_B,3,'TRAT_Disabled',1)
                                Call TR_SetAttribute(W_P_B,4,'TRAT_Disabled',1)
                                Call TR_SetAttribute(W_P_B,20,'TRAT_Disabled',1)
                            End
                        End

                        When V_P_B.Trm_ID=20 Then Do  /* Get File */
                            Tpe=TR_GetAttribute(W_P_B,4,'TRAT_Value')

                            If Tpe=0 Then Do
                                'RequestFile Title "Select ARexx Script" Path "Rexx:Spot"'
                                X=Rc
                            End

                            If Tpe=1 Then Do
                                'RequestFile Title "Select CLI Command" Path "C:"'
                                X=Rc
                            End
                            If X~=5 then Do
                                File=Result
                                Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                                Cur=Result+1
                                Command.Cur=File
                                Call TR_SetAttribute(W_P_B,3,'TROB_String',File)
                            End
                        End

                        When V_P_B.Trm_ID=9 Then Do  /* Up */
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                            Cur=Result+1
                            Above=Cur-1
                            Move=0
                            If Cur>1 Then Do
                                BTmp=Button.Cur
                                Button.Cur=Button.Above
                                Button.Above=BTmp
                                CTmp=Command.Cur
                                Command.Cur=Command.Above
                                Command.Above=CTmp
                                TTmp=Type.Cur
                                Type.Cur=Type.Above
                                Type.Above=TTmp
                                Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                                Call TR_SetAttribute(W_P_B,5,'TRAT_Value',Above-1)
                                If Above>0 Then Call TR_SetAttribute(W_P_B,5,'TRLV_Top',Above-1)
                            End
                        End

                        When V_P_B.Trm_ID=10 Then Do /* Sort */
                            Changed=1
                            Do While Changed=1
                                Changed=0
                                Do A=2 To Button.0
                                    B=A-1
                                    IF Button.A<Button.B THEN DO
                                        Temp=Button.A
                                        Button.A=Button.B
                                        Button.B=Temp
                                        Temp=Command.A
                                        Command.A=Command.B
                                        Command.B=Temp
                                        Temp=Type.A
                                        Type.A=Type.B
                                        Type.B=Temp
                                        Changed=1
                                    End
                                End
                            End
                            Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value') ; Cur=Result+1
                            Call TR_SetAttribute(W_P_B,2,'TROB_String',Button.Cur)
                            Call TR_SetAttribute(W_P_B,3,'TROB_String',Command.Cur)
                            Call TR_SetAttribute(W_P_B,4,'TRAT_Value',Type.Cur)
                        End

                        When V_P_B.Trm_ID=11 Then Do /* Down */
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                            Cur=Result+1
                            Below=Cur+1
                            Move=0
                            If Cur<Button.0 Then Do
                                BTmp=Button.Cur
                                Button.Cur=Button.Below
                                Button.Below=BTmp
                                CTmp=Command.Cur
                                Command.Cur=Command.Below
                                Command.Below=CTmp
                                TTmp=Type.Cur
                                Type.Cur=Type.Below
                                Type.Below=TTmp
                                If Cur>9 Then Move=Cur-9
                                Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                                Call TR_SetAttribute(W_P_B,5,'TRAT_Value',Below-1)
                                Call TR_SetAttribute(W_P_B,5,'TRLV_Top',move)
                            End
                        End
                        OtherWise Nop
                    End
                End

                If V_P_B.Trm_Class='TRMS_NEWVALUE' Then Do
                    Select

                        When V_P_B.Trm_ID=5 Then Do
                            NewV=V_P_B.Trm_Data+1
                            Call TR_SetAttribute(W_P_B,2,'TROB_String',Button.NewV)
                            Call TR_SetAttribute(W_P_B,3,'TROB_String',Command.NewV)
                            Call TR_SetAttribute(W_P_B,4,'TRAT_Value',Type.NewV)
                        End

                        When V_P_B.Trm_ID=2 Then Do
                            Call TR_GetAttribute(W_P_B,2,'TROB_String')
                            Tmp=Result
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                            Num=Result+1
                            Button.Num=Tmp
                            Call TR_SetAttribute(W_P_B,5,'TROB_ListView',Button)
                        End

                        When V_P_B.Trm_ID=4 Then Do
                            Call TR_GetAttribute(W_P_B,4,'TRAT_Value')
                            Tmp=Result
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                            Num=Result+1
                            Type.Num=Tmp
                            If Tmp=2 Then Do
                                Call TR_SetAttribute(W_P_B,20,'TRAT_Disabled',1)
                            End
                            Else Do
                                Call TR_SetAttribute(W_P_B,20,'TRAT_Disabled',0)
                            End
                        End

                        When V_P_B.Trm_ID=3 Then Do
                            Call TR_GetAttribute(W_P_B,3,'TROB_String')
                            Tmp=Result
                            Call TR_GetAttribute(W_P_B,5,'TRAT_Value')
                            Num=Result+1
                            Command.Num=Tmp
                        End

                        Otherwise Nop
                    End
                End
                If V_P_B.Trm_Class='TRMS_CLOSEWINDOW' Then E_P_B=1
                End
            End
            Call TR_CloseProject(W_P_B)
    End
    Call TR_DeleteApp(A_P_B)
End
Return
/*!!*/
/*!*/P_Gadgets:

T_P_D = WindowID(1),
        WindowTitle('SpotButtons Prefs'),
        ScreenTitle('SpotButtons Prefs © 1996 Alistair Knock'),
        WindowPosition('TRWP_CENTERDISPLAY'),
        QuickHelpOn(1),
        PubScreenName('SPOT'),
        WindowFlags('TRWF_NOZIPGADGET'),
        WindowFlags('TRWF_NOCLOSEGADGET'),
        WindowFlags('TRWF_NOSIZEGADGET'),
        WindowFlags('TRWF_NODEPTHGADGET'),
        'HorizGroupEA',
            'Space',
            'VertGroupEA',
                'Space',
                'HorizGroupEA',
                    'VertGroupEA',
                        NamedSeparatorN('Gadgets'),
                        'Space',
                        LineArray,
                            BeginLine,
                                TextID('_Zip Gadget',2) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_zip,2),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Size Gadget',3) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_size,3),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Close Gadget',4) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_close,4),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Depth Gadget',5) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_depth,5),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Activated',6) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_active,6),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('D_rag Bar',7) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_bar,7),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('S_tatus Window',8) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_status,8),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Extra Bank',9) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(gad,gad_bank,9),
                            EndLine,
                        EndArray,
                        'Space',
                    'EndGroup',
                    'EndGroup',
                    'Space',
                    'HorizGroupEA',
                        Button('Use',1),
                        Button('Cancel',0),
                    'EndGroup',
                    'Space',
                'EndGroup',
                'Space',
            'EndGroup',
        'EndProject'

A_P_D = TR_CreateApp('TRCA_Name SBPrefsD')

If A_P_D~='00000000'x Then Do
    W_P_D=TR_OpenProject(A_P_D,T_P_D)
    If W_P_D~='00000000'x Then Do ; E_P_D=0
        If TR_GetAttribute(W_P_D,3,'TRAT_Value')=1 Then Do
            Call TR_SetAttribute(W_P_D,2,'TRAT_Disabled',1)
            Call TR_SetAttribute(W_P_D,2,'TRAT_Value',1)
        End
        Do While E_P_D~=1
            Call TR_Wait(A_P_D,'')
            Do While TR_HandleMsg(A_P_D,'V_P_D')
                If V_P_D.Trm_Class='TRMS_ACTION' Then Do
                    Select
                        When V_P_D.Trm_ID=0 Then E_P_D=1
                        When V_P_D.Trm_ID=1 Then Do
                            Gad_Zip    = TR_GetAttribute(W_P_D,2,'TRAT_Value')
                            Gad_Size   = TR_GetAttribute(W_P_D,3,'TRAT_Value')
                            Gad_Close  = TR_GetAttribute(W_P_D,4,'TRAT_Value')
                            Gad_Depth  = TR_GetAttribute(W_P_D,5,'TRAT_Value')
                            Gad_Active = TR_GetAttribute(W_P_D,6,'TRAT_Value')
                            Gad_Bar    = TR_GetAttribute(W_P_D,7,'TRAT_Value')
                            Gad_Status = TR_GetAttribute(W_P_D,8,'TRAT_Value')
                            Gad_Bank   = TR_GetAttribute(W_P_D,9,'TRAT_Value')
                            E_P_D=1
                        End
                        Otherwise Nop
                    End
                End
                If V_P_D.Trm_Class='TRMS_NEWVALUE' Then Do
                    Select
                        When V_P_D.Trm_ID=3 Then Do
                            x=TR_GetAttribute(W_P_D,3,'TRAT_Value')
                            If x=1 Then Do
                                y=TR_GetAttribute(W_P_D,2,'TRAT_Value')
                                Call TR_SetAttribute(W_P_D,2,'TRAT_Disabled',1)
                                Call TR_SetAttribute(W_P_D,2,'TRAT_Value',1)
                            End
                            If x=0 Then Do
                                Call TR_SetAttribute(W_P_D,2,'TRAT_Disabled',0)
                                Call TR_SetAttribute(W_P_D,2,'TRAT_Value',y)
                            End
                        End
                        Otherwise Nop
                    End
                End
                If V_P_D.Trm_Class='TRMS_CLOSEWINDOW' Then E_P_D=1
                End
            End
            Call TR_CloseProject(W_P_D)
    End
    Call TR_DeleteApp(A_P_D)
End
Return
/*!!*/
/*!*/P_Spacing:

T_P_S = WindowID(1),
        WindowTitle('SpotButtons Prefs'),
        ScreenTitle('SpotButtons Prefs © 1996 Alistair Knock'),
        WindowPosition('TRWP_CENTERDISPLAY'),
        QuickHelpOn(1),
        PubScreenName('SPOT'),
        WindowFlags('TRWF_NOZIPGADGET'),
        WindowFlags('TRWF_NOCLOSEGADGET'),
        WindowFlags('TRWF_NOSIZEGADGET'),
        WindowFlags('TRWF_NODEPTHGADGET'),
        'HorizGroupEA',
            'Space',
            'VertGroupEA',
                'Space',
                'HorizGroupEA',
                    'VertGroupEA',
                        NamedSeparatorN('Spacing'),
                        'Space',
                        LineArray,
                            BeginLine,
                                TextID('_Top',2) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(Space,Top,2),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Left',3) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(Space,Left,3),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Bottom',4) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(Space,Bottom,4),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Right',5) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(Space,Right,5),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Interior',6) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(Space,Interior,6),
                            EndLine,
                            'Space',
                        EndArray,
                        'Space',
                    'EndGroup',
                    'EndGroup',
                    'Space',
                    'HorizGroupEA',
                        Button('Use',1),
                        Button('Cancel',0),
                    'EndGroup',
                    'Space',
                'EndGroup',
                'Space',
            'EndGroup',
        'EndProject'

A_P_S = TR_CreateApp('TRCA_Name SBPrefsS')

If A_P_S~='00000000'x Then Do
    W_P_S=TR_OpenProject(A_P_S,T_P_S)
    If W_P_S~='00000000'x Then Do ; E_P_S=0
        Do While E_P_S~=1
            Call TR_Wait(A_P_S,'')
            Do While TR_HandleMsg(A_P_S,'V_P_S')
                If V_P_S.Trm_Class='TRMS_ACTION' Then Do
                    Select
                        When V_P_S.Trm_ID=0 Then E_P_S=1
                        When V_P_S.Trm_ID=1 Then Do
                            Top      = TR_GetAttribute(W_P_S,2,'TRAT_Value')
                            Left     = TR_GetAttribute(W_P_S,3,'TRAT_Value')
                            Bottom   = TR_GetAttribute(W_P_S,4,'TRAT_Value')
                            Right    = TR_GetAttribute(W_P_S,5,'TRAT_Value')
                            Interior = TR_GetAttribute(W_P_S,6,'TRAT_Value')
                            E_P_S=1
                        End
                        Otherwise Nop
                    End
                End
                If V_P_S.Trm_Class='TRMS_CLOSEWINDOW' Then E_P_S=1
                End
            End
            Call TR_CloseProject(W_P_S)
    End
    Call TR_DeleteApp(A_P_S)
End
Return
/*!!*/
/*!*/P_General:
Form.0=2
Form.1="Buttons"
Form.2="List"

T_P_G = WindowID(1),
        WindowTitle('SpotButtons Prefs'),
        ScreenTitle('SpotButtons Prefs © 1996 Alistair Knock'),
        WindowPosition('TRWP_CENTERDISPLAY'),
        QuickHelpOn(1),
        PubScreenName('SPOT'),
        WindowFlags('TRWF_NOZIPGADGET'),
        WindowFlags('TRWF_NOCLOSEGADGET'),
        WindowFlags('TRWF_NOSIZEGADGET'),
        WindowFlags('TRWF_NODEPTHGADGET'),
        'HorizGroupEA',
            'Space',
            'VertGroupEA',
                'Space',
                'HorizGroupEA',
                    'VertGroupEA',
                        NamedSeparatorN('General'),
                        'Space',
                        LineArray,
                            BeginLine,
                                TextID('_Title',2) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                StringGadget(Title,2),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Left Position',3) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                StringGadget(HPos,3),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('T_op Position',4) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                StringGadget(VPos,4),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('Left Iconified',5) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                StringGadget(IHPos,5),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('Top Iconified',6) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                StringGadget(IVPos,6),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('_Format',9) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                CycleGadget(Form,Format,9),
                            EndLine,
                            'SpaceS',
                            BeginLine,
                                TextID('Fill _1',7) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                PaletteGadget(fill.1,7),
                                'SpaceB',
                                TextID('Fill _2',8) 'TRAT_Flags TROF_RightAlign',
                                'Space',
                                PaletteGadget(fill.2,8),
                            EndLine,
                            'Space',
                        EndArray,
                        'Space',
                    'EndGroup',
                    'EndGroup',
                    'Space',
                    'HorizGroupEA',
                        Button('Use',1),
                        Button('Cancel',0),
                    'EndGroup',
                    'Space',
                'EndGroup',
                'Space',
            'EndGroup',
        'EndProject'

A_P_G = TR_CreateApp('TRCA_Name SBPrefsG')

If A_P_G~='00000000'x Then Do
    W_P_G=TR_OpenProject(A_P_G,T_P_G)
    If W_P_G~='00000000'x Then Do ; E_P_G=0
        Do While E_P_G~=1
            Call TR_Wait(A_P_G,'')
            Do While TR_HandleMsg(A_P_G,'V_P_G')
                If V_P_G.Trm_Class='TRMS_ACTION' Then Do
                    Select
                        When V_P_G.Trm_ID=0 Then E_P_G=1
                        When V_P_G.Trm_ID=1 Then Do
                            Title  = TR_GetAttribute(W_P_G,2,'TROB_String')
                            HPos   = TR_GetAttribute(W_P_G,3,'TROB_String') ; If HPos="" Then HPos=0
                            VPos   = TR_GetAttribute(W_P_G,4,'TROB_String') ; If VPos="" Then VPos=0
                            IHPos  = TR_GetAttribute(W_P_G,5,'TROB_String') ; If IHPos="" Then IHPos=0
                            IVPos  = TR_GetAttribute(W_P_G,6,'TROB_String') ; If IVPos="" Then IVPos=0
                            Format = TR_GetAttribute(W_P_G,9,'TRAT_Value')
                            Fill.1 = TR_GetAttribute(W_P_G,7,'TRAT_Value')
                            Fill.2 = TR_GetAttribute(W_P_G,8,'TRAT_Value')
                            E_P_G=1
                        End
                        Otherwise Nop
                    End
                End
                If V_P_G.Trm_Class='TRMS_CLOSEWINDOW' Then E_P_G=1
                End
            End
            Call TR_CloseProject(W_P_G)
    End
    Call TR_DeleteApp(A_P_G)
End
Return
/*!!*/
/*!*/Save_Prefs:
D_String = "Saving"
Call Display

Call Open(Cfg,Config,W)

Call WriteLn(Cfg,'; SpotButtons © 1996 Alistair Knock')
Call WriteLn(Cfg,'MWTITLE 'Title)
Call WriteLn(Cfg,'GENERAL 'HPos VPos IHPos IVPos Fill.1 Fill.2)
Call WriteLn(Cfg,'SPACING 'Top Left Bottom Right Interior)
Call WriteLn(Cfg,'GADGETS 'Gad_Zip Gad_Size Gad_Close Gad_Depth Gad_Active Gad_Bar Gad_Status Gad_Bank)
Call WriteLn(Cfg,'BUTTONS 'Button.0 Format)

Do i=1 To Button.0
    Call WriteLn(Cfg,'#'Button.i'^'Type.i'@'Command.i)
End

Call Close(Cfg)

D_String = "Waiting"
Call Display
Return
/*!!*/
/*!*/Intro:
A_String="         Greetings "Name"!   "
Do i=1 To Length(A_String)
    D_String=Left(SubStr(A_String,i,10+i),11)
    Call TR_SetAttribute(W_SB,0,'TRWI_Title',D_String)
    Call Delay(2)
End
Call TR_SetAttribute(W_SB,0,'TRWI_Title',Title)
Return
/*!!*/
/*!*/Display:
Call TR_SetAttribute(W_SB,150,'TRAT_Text',D_String)
Return
/*!!*/
/*!*/Break_C:
    Failure:
            Say '+++ Error' rc 'in Line' sigl '-' ERRORTEXT(rc)
            Say SOURCELINE(sigl)
            Say
            Say 'Please report this error to the author.'
        CleanUp:
            Call TR_CloseProject(W_SB)
            Call TR_DeleteApp(A_SB)
            Exit
/*!!*/
