/*
   $VER: Exchange.rexx V1.4 (9.11.95) Copyright by Nils Görs

  This ARexx script was written using the tritonrexx.library and
  rexxtricks.library from Jürgen Kohrmeyer <j_kohrmeyer@wilam.north.de>.

  This Script needs HandleCX from Martin Berndt.

  required libraries: tritonrexx.library
                      rexxtricks.library
*/

/*  temporary Filename */
Tmp.Out     = "t:HandleCX.out"

/* Name and path from Martin Berndt's 'HandleCX' */
HandleCX    = "HandleCX"

/* Path from the configfiles */
Directory   = "REXX:"
ListPattern = "#?.EXCList"
/************************************************
 * Please don't change anything under this line *
 ************************************************/
NL = '0a'x

PARSE ARG PubScreen

IF PubScreen == "?" THEN DO
 OPTIONS PROMPT "PUBSCREEN/K: "
 PARSE PULL PubScreen
END


IF ~SHOW('LIBRARIES','tritonrexx.library') THEN DO
   IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN DO
      SAY 'Kann die <tritonrexx.library> nicht öffnen!'
      EXIT(10)
   END
END

IF ~SHOW('LIBRARIES','rexxtricks.library') THEN DO
   IF ~ADDLIB('rexxtricks.library',10,-30,0) THEN DO
      SAY 'Kann die <rexxtricks.library> nicht öffnen!'
      EXIT(10)
   END
END

IF PubScreen == "" THEN
   PubScreen = GETDEFAULTPUBSCREEN()

call _CreateList

/*
** Beschreibung der Applikation
*/

appname     = 'Exchange'
applongname = 'Exchange - ©1995 by Nils Görs'
appinfo     = 'Tool for Commodity controlling'
appversion  = '1.4'
apprelease  = '4'
appdate     = '9.11.95'

Activation.0 = 2
Activation.1 = "[a]ctive"
Activation.2 = "in[a]ctive"

Activation2.0 = 2
Activation2.1 = "Deact[i]vate all"
Activation2.2 = "Act[i]vate all"

IF active.1 == "INACTIVE" THEN N1 = 1

_maintags:
windowtags = WindowID(1),
             PubScreenName(PubScreen),
             WindowTitle(appname appversion),
                        BeginMenu("Project"),
                        MenuItem("?_About",10),
                        MenuItem("About Triton",11) ItemBarlabel,
                        MenuItem("U_Update Toollist",12),
                        MenuItem("C_Change PubScreen",14),
                        MenuItem("I_Iconify",16) ItemBarlabel,
                        MenuItem("F_Filelist remove",15) ItemBarlabel,
                        MenuItem("Q_Quit",13),
             'HorizGroupA Space VertGroupA Space',
                NamedSeparatorIN("Available _commodities",1),
               'Space',
               ListSS('Tools',1,0,0),
              'EndGroup',
              'VertGroupA SpaceB SpaceB',
              GetEntryButton(12),
              GetFileButton(15) 'SpaceB SpaceB SpaceB SpaceB SpaceB SpaceB SpaceB SpaceB',
              'EndGroup',
              'SpaceS',
              'VertGroupA Space',
                NamedSeparator("Informations"),
                'Space',
               'TROB_FrameBox TRFB_Text',
                'VertGroupA',
                'SpaceS',
                 ClippedTextID(Information.1,2),
                 ClippedTextID(Information2.1,22),
                'Space EndGroup',
               'SpaceB',
               'BeginLine',
               Button("_Show Window",3),
               'SpaceS',
               Button("_Hide Window",4),
               'EndLine',
              'SpaceS',
               'BeginLine',
                 CycleGadget(activation,n1,5),
                 'SpaceS',
                 Button("    _Remove   ",6),
               'EndLine',
               'SpaceS',
               'BeginLine',
                 CycleGadget(activation2,0,7),
                 'SpaceS',
                 Button("     Remove all    ",8),
               'EndLine',
              'Space EndGroup Space EndGroup EndProject'

/*
** Unterbrechungssignale
*/

SIGNAL ON break_c
SIGNAL ON failure
SIGNAL ON halt
SIGNAL ON ioerr
SIGNAL ON syntax

app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
                   'TRCA_LongName' '"'applongname'"',
                   'TRCA_Info'     '"'appinfo'"',
                   'TRCA_Version'  '"'appversion'"',
                   'TRCA_Release'  '"'apprelease'"',
                   'TRCA_Date'     '"'appdate'"',
                   'TAG_END')

IF app ~= '00000000'x THEN DO

   window = TR_OPENPROJECT(app,windowtags)
   WindowProject=C2D(window) /* zum Locken des Fensters bei About */

   IF window ~= '00000000'x THEN DO
      ende = 0

IF GUI.1 == "NOGUI" THEN DO
  CALL TR_SETATTRIBUTE(window,3,'TRAT_Disabled',1)
  CALL TR_SETATTRIBUTE(window,4,'TRAT_Disabled',1)
END
      DO WHILE ende ~= 1
         CALL TR_WAIT(app,'')
/* 1 = ListView
   3 = ShowWindow
   4 = HideWindow
   5 = Cycle 1
   6 = Remove
   7 = Cycle 2
   8 = Remove all
  10 = About
  11 = About Triton
  12 = Update
  13 = Quit
  14 = Update Screen
  15 = GetFile
*/
   
         DO WHILE TR_HANDLEMSG(app,'event')
          IF event.trm_class = 'TRMS_KEYPRESSED' THEN DO
           IF event.trm_code == 32 THEN CALL _InActivate
           IF event.trm_code == 23 THEN DO
            nummer = TR_GETATTRIBUTE(window,7,'TRAT_Value')
             IF Nummer == 0 THEN 
               CALL TR_SETATTRIBUTE(window,7,'TRAT_Value',1)
              ELSE
               CALL TR_SETATTRIBUTE(window,7,'TRAT_Value',0)
           CALL _InActivateALL
           END
          END

          IF event.trm_class = 'TRMS_ACTION' THEN DO
            nummer = TR_GETATTRIBUTE(window,1,'TRAT_Value')+1
           SELECT
             WHEN event.trm_id = 3 THEN
               ADDRESS COMMAND HandleCX '"'tools.nummer'"' 'POPUP'
             WHEN event.trm_id = 4 THEN
               ADDRESS COMMAND HandleCX '"'tools.nummer'"' 'HIDE'
             WHEN event.trm_id = 6 THEN DO
               ADDRESS COMMAND HandleCX '"'tools.nummer'"' 'REMOVE'
                CALL _CreateList
                CALL TR_SETATTRIBUTE(window,1,'TROB_Listview',Tools)
                nummer = TR_GETATTRIBUTE(window,1,'TRAT_Value')+1
                CALL TR_SETATTRIBUTE(window,2,'TRAT_Text',Information.nummer)
                CALL TR_SETATTRIBUTE(window,22,'TRAT_Text',Information2.nummer)
                call _CheckGUI
                call _CheckActive
             END
             WHEN event.trm_id = 8 THEN DO
              DO i = 1 to tools.0
                   ADDRESS COMMAND HandleCX '"'Tools.i'"' 'REMOVE'
              END
                   CALL _CreateList
                   CALL TR_SETATTRIBUTE(window,1,'TROB_Listview',Tools)
                   CALL _CheckGUI
                   CALL _CheckActive
             END
                  WHEN event.trm_id = 10 THEN DO
                   CALL TR_EasyRequest(app,"Exchange.rexx V"appversion "("appdate")",
                   NL NL"(c) 1995 Nils Görs <N.Goers@Art-Line.Art-Line.de>",
                   NL"- freely distributable -","OK","TREZ_Title About TREZ_LockProject" WindowProject)
                  END

                  WHEN event.trm_id = 11 THEN DO
                   CALL TR_EasyRequest(app,"This application uses the Triton GUI creation system",
                   NL"Triton is (C) by Stefan Zeiger <s.zeiger@laren.rhein-main.de>",
                NL NL"This application was written using the tritonrexx.library",
                   NL"tritonrexx.library is (C) by Jürgen Kohrmeyer <j_kohrmeyer@wilam.north.de>",,
                   "OK","TREZ_Title" '"About Triton"' "TREZ_LockProject" WindowProject)
                  END

                  WHEN event.trm_id = 12 THEN DO
                   CALL _UpdateToolListe
                  END

                  WHEN event.trm_id = 16 THEN DO
                   CALL _Iconify
                  END

                  WHEN event.trm_id = 15 THEN DO
                  bool = ASL_RequestFile(window,filelistname,,
                               "ASLFR_PubScreenName" PubScreen,
                               "ASLFR_InitialDrawer" Directory,
                               "ASLFR_InitialPattern" ListPattern,
                               "ASLFR_TitleText" '"Commodity removelist?"')
                   IF bool = 1 THEN DO
                    CALL READFILE(filelistname.1,remlist)
                    Auswahl=TR_EasyRequest(app,"Are you sure to remove all",
                    "commodities, listed in"NL filelistname.1 "?",,
                    "_Yes|_Show first|_No","TREZ_LockProject" WindowProject)
                    IF Auswahl = 1 THEN CALL _removefromFileList
                    IF Auswahl = 2 THEN CALL _removeFileList
                   END
                  END

                  WHEN event.trm_id = 14 THEN CALL _NewPubScreen
                  WHEN event.trm_id = 13 THEN DO
                   Quit=TR_EasyRequest(app,"Really Quit?",,
                                      "_Yes|_No","TREZ_Title Quit TREZ_LockProject" WindowProject)
                    IF Quit == 1 THEN DO
                     CALL TR_CLOSEPROJECT(window)
                     CALL TR_DELETEAPP(app)
                     EXIT(0)
                    END
                  END
            OTHERWISE
            NOP
           END
          END

            IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
              /* Beim Doppelklick wird ShowWindow gestartet */
              IF BITAND(D2X(event.trm_qualifier),'0200'x) = '0200'x THEN
                 ADDRESS COMMAND HandleCX '"'tools.nummer'"' 'POPUP'
                  SELECT
                   WHEN event.trm_id = 1 THEN DO
                     nummer = event.trm_data+1
                      CALL TR_SETATTRIBUTE(window,2,'TRAT_Text',Information.nummer)
                      CALL TR_SETATTRIBUTE(window,22,'TRAT_Text',Information2.nummer)
                      call _CheckGUI
                      call _CheckActive
                  END
                  WHEN event.trm_id = 5 THEN CALL _InActivate

                  WHEN event.trm_id = 7 THEN CALL _InActivateALL
                  OTHERWISE
                     NOP
               END
            END

            IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN DO
              IF event.trm_project = window THEN ende = 1
              IF event.trm_project = dummywindow THEN
               CALL _uniconify
            END

         END
      END

      CALL TR_CLOSEPROJECT(window)
   END

   CALL TR_DELETEAPP(app)
END

EXIT(0)

/*  Routine, die das GUI auf einem neuen PubScreen öffnen läßt */
_NewPubScreen:
IF PUBSCREENLIST('ScreenList') == 0 THEN RETURN

ScreenListTags = WindowID(2),
   WindowPosition('TRWP_MOUSEPOINTER'),
   WindowTitle('Change PubScreen'),
   WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
   PubScreenName(Pubscreen),
   'VertGroupA',
      'Space',
      'HorizGroupA',
         'Space',
         ListSel('screenlist',301,0),
         'Space',
      'EndGroup',
      'Space',
      'HorizSeparator',
      'Space',
      'HorizGroupA',
      'Space',
      ButtonRE('Cancel',302),
      'Space',
   'EndGroup Space EndGroup EndGroup EndProject'

    PubScreenProject = TR_OPENPROJECT(app,Screenlisttags)

  IF PubScreenProject ~= '00000000'x THEN DO
    CALL TR_LOCKPROJECT(window)

      DO WHILE ende ~= 1
         DO WHILE TR_HANDLEMSG(app,'event2')
            IF event2.trm_class = 'TRMS_ACTION' THEN ende = 1 /* Cancel Gadget */

            IF event2.trm_class = 'TRMS_NEWVALUE' THEN DO
            nummer = TR_GETATTRIBUTE(PubScreenProject,301,'TRAT_Value')+1
             IF PubScreen ~= Screenlist.nummer THEN DO
              PubScreen = ScreenList.nummer
              CALL TR_UNLOCKPROJECT(window)
              CALL TR_CLOSEPROJECT(PubScreenProject)
              CALL TR_CLOSEPROJECT(window)
              CALL TR_DELETEAPP(app)
              CALL _maintags
             END
            ELSE ende = 1
            END
         END
      END

   ende = 0
    CALL TR_UNLOCKPROJECT(window)
    CALL TR_CLOSEPROJECT(PubScreenProject)
END
RETURN

/* Routine, um die Commodities aus der Fileliste zu entfernen */
_RemoveFileList:
RemoveListTags = WindowID(2),
   WindowPosition('TRWP_MOUSEPOINTER'),
   WindowTitle('Remove this Commodities?'),
   WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
   PubScreenName(Pubscreen),
   'VertGroupA',
      'Space',
      'HorizGroupA',
         'Space',
         ListRO('remlist',301,0),
         'Space',
      'EndGroup',
      'Space',
      'HorizSeparator',
      'Space',
      'HorizGroupA',
      'Space',
      ButtonRE('_Remove',302),
      ButtonRE('_Cancel',303),
      'Space',
   'EndGroup Space EndGroup EndGroup EndProject'


    PubScreenProject = TR_OPENPROJECT(app,Removelisttags)

  IF PubScreenProject ~= '00000000'x THEN DO
    CALL TR_LOCKPROJECT(window)

      DO WHILE ende ~= 1
         DO WHILE TR_HANDLEMSG(app,'event2')
            IF event2.trm_id = 302 THEN DO
             CALL _removefromFileList
             ende = 1
            END
            IF event2.trm_id = 303 THEN ende = 1
         END
      END
    CALL TR_UNLOCKPROJECT(window)
    CALL TR_CLOSEPROJECT(PubScreenProject)
END
ende = 0
RETURN
_removefromFileList:
DO i = 1 to remlist.0
 ADDRESS COMMAND HandleCX '"'remlist.i'"' 'REMOVE'
END
CALL _UpdateToolListe
RETURN

/* hier wird die List der Commodities upgedatet! */
_UpdateToolListe:
CALL _CreateList
CALL _CheckGUI
CALL _CheckActive
CALL TR_SETATTRIBUTE(window,1,'TROB_Listview',Tools)
CALL TR_SETATTRIBUTE(window,1,'TRAT_Value',Nummer-1)
CALL TR_SETATTRIBUTE(window,2,'TRAT_Text',Information.nummer)
CALL TR_SETATTRIBUTE(window,22,'TRAT_Text',Information2.nummer)
RETRUN


/* Es folgen nun die ganzen Unterroutinen, die die Listen erzeugen,
   die GUI überprüfen, Texte updaten etc. etc. */

_CreateList:
ADDRESS COMMAND HandleCX "v >"Tmp.out
IF READFILE(Tmp.Out,Infile) == 0 THEN EXIT(5)

Tools.0 = Infile.0/2
Information.0 = Tools.0
Information2.0 = Tools.0
Active.0 = Tools.0
GUI.0 = Tools.0
j = 1

DO i = 1 TO Infile.0
 /* hier wird alles in die richtigen Listen verteilt,
    Toolname, Active, Gui, Information */
 Tools.j=DELWORD(Infile.i,1,1)
 WordNo=WORDS(Tools.j)
 GUI.j = SUBWORD(Tools.j,WordNo)
 Active.j = SUBWORD(Tools.j,WordNo-1,1)
 Tools.j = SUBWORD(Tools.j,1,WordNo-2)

 /* und hier wird die Information zu dem Commodity verarbeitet */
 i = i+1
 Information.j=DELWORD(Infile.i,1,1)
  MaxLenght=LENGTH(Information.j)
  IF INDEX(Information.j,") ") ~= 0 THEN DO
   /* (xx.xx.xx) (xxxxx) */
    Position=LASTPOS(" (",Information.j)
    First=LEFT(Information.j,Position)
    second=RIGHT(Information.j,Maxlenght-Position-1)
    second=LEFT(second,Maxlenght-Position-2)
  END
  ELSE DO
   /* (xxxxx) */
   Position=INDEX(Information.j," (")
   First=LEFT(Information.j,Position)
    second=RIGHT(Information.j,Maxlenght-Position-1)
    second=LEFT(second,Maxlenght-Position-2)
  END
 Information.j = First
 Information2.j = second
 j=j+1
END

ADDRESS COMMAND "c:delete" Tmp.Out "QUIET"
RETURN

/* wie sollen die Gadget in der GUI denn nun dargestellt werden ? */
_CheckGUI:
 IF gui.nummer == "NOGUI" THEN DO
  CALL TR_SETATTRIBUTE(window,3,'TRAT_Disabled',1)
  CALL TR_SETATTRIBUTE(window,4,'TRAT_Disabled',1)
 END
 ELSE DO
  CALL TR_SETATTRIBUTE(window,3,'TRAT_Disabled',0)
  CALL TR_SETATTRIBUTE(window,4,'TRAT_Disabled',0)
 END
RETURN

_CheckActive:
 IF active.nummer == "INACTIVE" THEN
  CALL TR_SETATTRIBUTE(window,5,'TRAT_Value',1)
 ELSE
  CALL TR_SETATTRIBUTE(window,5,'TRAT_Value',0)
RETURN

_InActivate:
  nummer = TR_GETATTRIBUTE(window,1,'TRAT_Value')+1
  ADDRESS COMMAND HandleCX '"'Tools.Nummer'"' 'TOGGLE'
  CALL _CreateList
  CALL TR_SETATTRIBUTE(window,1,'TROB_Listview',Tools)
  CALL _CheckGUI
  CALL _CheckActive
RETURN

_InActivateALL:
  nummer = TR_GETATTRIBUTE(window,7,'TRAT_Value')
  IF nummer == 1 THEN Action = 'Disable'
  ELSE Action = 'Enable'
  DO i = 1 to tools.0
  ADDRESS COMMAND HandleCX '"'tools.i'"' Action
  END
  CALL _CreateList
  CALL TR_SETATTRIBUTE(window,1,'TROB_Listview',Tools)
  CALL _CheckGUI
  CALL _CheckActive
RETURN

_Iconify:
iwinsize.trd_left=10
iwinsize.trd_top=10
iwinsize.trd_width=20
iwinsize.trd_height=10
iwinsize.trd_left2=10
iwinsize.trd_top2=10
iwinsize.trd_width2=10
iwinsize.trd_height2=20
iwinsize.trd_zoomed=30

SleepWin = WindowID(1000),
           PubScreenName(PubScreen),
           WindowTitle(appname appversion),
           WindowDimensions(iwinsize),
           'EndProject'

  ok=tr_closeproject(window)
  window = '00000000'x
dummywindow = TR_OPENPROJECT(app,SleepWin)
return

_uniconify:
  ok=tr_closeproject(dummywindow)
  dummywindow = '00000000'x

  prefs.iwinx=iwinsize.trd_left
  prefs.iwiny=iwinsize.trd_top
  prefs.iwinw=iwinsize.trd_width
  prefs.iwinh=iwinsize.trd_height
  prefs.iwinx2=iwinsize.trd_left2
  prefs.iwiny2=iwinsize.trd_top2
  prefs.iwinw2=iwinsize.trd_width2
  prefs.iwinh2=iwinsize.trd_height2
  prefs.iwinz=iwinsize.trd_zoomed

   window = TR_OPENPROJECT(app,windowtags)
   WindowProject=C2D(window) /* zum Locken des Fensters bei About */
  CALL _UpdateToolListe

return
/*******************************************************************************
** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
*******************************************************************************/

break_c:
failure:
halt:
ioerr:
syntax:
   SAY '+++ Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)
   SAY SOURCELINE(sigl)

   IF app ~= '00000000'x THEN
      CALL TR_DELETEAPP(app)

   EXIT(10)
/*EOS*/
