/*
   $VER: Exchange.rexx V1.5 (10.2.96) 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

Schreibfehler bemerkt von: rick@emma.panam.wimsey.com (Rick Younie)
*/

/*  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 *
 ************************************************/

PARSE ARG PubScreen

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

CALL _InitAll
call _CreateList

/*
** Beschreibung der Applikation
*/

appname     = 'Exchange'
applongname = 'Exchange - ©1995/96 by Nils Görs'
appinfo     = 'Tool for Commodity controlling'
appversion  = '1.5'
apprelease  = '5'
appdate     = '10.2.96'

Activation.0 = 2
Activation.1 = localestring(MSG_CYCLE_ACTIVE)
Activation.2 = localestring(MSG_CYCLE_INACTIVE)

Activation2.0 = 2
Activation2.1 = localestring(MSG_CYCLE_ACTIVEALL)
Activation2.2 = localestring(MSG_CYCLE_DEACTIVEALL)

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

_maintags:
windowtags = WindowID(1),
             PubScreenName(PubScreen),
             WindowTitle(appname appversion),
                        BeginMenu(localestring(MSG_MAIN_MENU_PROJECT)),
                        MenuItem(localestring(MSG_MAIN_MENUITEM_ABOUT),10),
                        MenuItem(localestring(MSG_MAIN_MENUITEM_ABOUT2),11) ItemBarlabel,
                        MenuItem(localestring(MSG_MAIN_MENUITEM_UPDATE),12),
                        MenuItem(localestring(MSG_MAIN_MENUITEM_CHANGE),14),
                        MenuItem(localestring(MSG_MAIN_MENUITEM_ICONIFY),16) ItemBarlabel,
                        MenuItem(localestring(MSG_MAIN_MENUITEM_FILEREM),15) ItemBarlabel,
                        MenuItem(localestring(MSG_MAIN_MENUITEM_QUIT),13),
             'HorizGroupA Space VertGroupA Space',
                NamedSeparatorIN(localestring(MSG_MAIN_TEXT_AVAILABLE),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(localestring(MSG_MAIN_TEXT_INFORMATIONS)),
                'Space',
               'TROB_FrameBox TRFB_Text',
                'VertGroupA',
                'SpaceS',
                 ClippedTextID(Information.1,2),
                 ClippedTextID(Information2.1,22),
                'Space EndGroup',
               'SpaceB',
               'BeginLine',
               Button(localestring(MSG_MAIN_GADGET_SHOWWINDOW),3),
               'SpaceS',
               Button(localestring(MSG_MAIN_GADGET_HIDEWINDOW),4),
               'EndLine',
              'SpaceS',
               'BeginLine',
                 CycleGadget(activation,n1,5),
                 'SpaceS',
                 Button(localestring(MSG_MAIN_GADGET_REMOVE),6),
               'EndLine',
               'SpaceS',
               'BeginLine',
                 CycleGadget(activation2,0,7),
                 'SpaceS',
                 Button(localestring(MSG_MAIN_GADGET_REMOVEALL),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/1996 Nils Görs <N.Goers@Art-Line.Art-Line.de>",
                   NL"- freely distributable -","OK", "TREZ_Title" localestring(MSG_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" '"'localestring(MSG_MAIN_MENUITEM_ABOUT2)'"' "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" '"'localestring(MSG_REQUESTER_REMOVELIST)'"')
                   IF bool = 1 THEN DO
                    CALL READFILE(filelistname.1,remlist)
                    Auswahl=TR_EasyRequest(app,localestring(MSG_REQUEST_AREYOUSURE) NL filelistname.1 "?",,
                    localestring(MSG_REQUEST_YESSHOWNO),"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,localestring(MSG_REQUEST_REALLYQUIT),,
                                      localestring(MSG_REQUEST_YESNO),"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

delstart=LSEARCH(PubScreen,Screenlist)
IF delstart ~= -1 THEN RXTR_STEMREMOVE(ScreenList,delstart)

ScreenListTags = WindowID(2),
   WindowPosition('TRWP_MOUSEPOINTER'),
   WindowTitle(localestring(MSG_TITLE_CHANGEPUBSCREEN)),
   WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
   PubScreenName(Pubscreen),
   'VertGroupA',
      'Space',
      'HorizGroupA',
         'Space',
         ListSel('screenlist',301,0),
         'Space',
      'EndGroup',
      'Space',
      'HorizSeparator',
      'Space',
      'HorizGroupA',
      'Space',
      ButtonRE(localestring(MSG_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(localestring(MSG_TITLE_REMOVETHIS)),
   WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
   PubScreenName(Pubscreen),
   'VertGroupA',
      'Space',
      'HorizGroupA',
         'Space',
         ListRO('remlist',301,0),
         'Space',
      'EndGroup',
      'Space',
      'HorizSeparator',
      'Space',
      'HorizGroupA',
      'Space',
      ButtonR(localestring(MSG_GADGET_REMOVE),302),
      ButtonE(localestring(MSG_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)
RETURN


/* 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),
                        BeginMenu(localestring(MSG_MAIN_MENU_PROJECT)),
                        MenuItem(localestring(MSG_MAIN_MENUITEM_QUIT),13),
           '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

/*******************************************************************************
** Load and interpret arexx script
*******************************************************************************/

loadrexx:
   PARSE ARG dir,file,store

   IF dir ~= '' THEN DO
      IF RIGHT(dir,1) = ':' THEN
         file = dir||file
      ELSE
         file = dir||'/'||file
   END

   IF ~OPEN('rexxfile',file,'R') THEN
      RETURN(FALSE)

   rexxtext = READCH('rexxfile',64000)
   INTERPRET rexxtext

   CALL CLOSE('rexxfile')

   IF store ~= '' THEN
      INTERPRET store '= rexxtext'

   DROP rexxtext

   RETURN(TRUE)

/*******************************************************************************
** Text aus dem Catalog-File auslesen, falls vorhanden
*******************************************************************************/

localestring:
   PARSE ARG stringnumber

   IF catalog ~= 0 THEN
      RETURN(GETCATALOGSTR(catalog,stringnumber,strings.stringnumber))
   ELSE
      RETURN(strings.stringnumber)

_InitAll:
NL = '0a'x
TRUE  = 1
FALSE = 0

   catalog      = 0


   /*
   ** Open libs
   */

   IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
      IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
         quit('Cannot open tritonrexx.library!',10)

   IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
      IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
         quit('Cannot open rexxtricks.library!',10)

   IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
      IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
         quit('Cannot open rexxsupport.library!',10)

   IF ~SHOW('LIBRARIES','rexxreqtools.library') THEN
      IF ~ADDLIB('rexxreqtools.library',9,-30,0) THEN
         quit('Cannot open rexxreqtools.library!',10)

   /*
   ** Set current dir
   */

   PARSE SOURCE . . . script .
   progdir = PATHPART(script)

   booll = LENGTH(progdir)
   booli= LASTPOS(":",progdir)
   boolh= LASTPOS("/",progdir)

  IF booli <= booll THEN progdir2=progdir||"/"
  IF boolh == 0 THEN progdir2=progdir||"/"

   CALL PRAGMA('D',progdir)

   /*
   ** Read default strings, open locale.library and catalog
   */

   IF ~loadrexx(progdir,'ExchangeGUI.strings','') THEN
      quit('Error reading file "ExchangeGUI.strings"!'),10)

   IF ~SHOW('LIBRARIES','locale.library') THEN
      CALL ADDLIB('locale.library',0,-30,0)

   IF SHOW('LIBRARIES','locale.library') THEN DO
      language = GETENV('language')
      IF language ~= '' THEN
         catalog = OPENCATALOG(MAKEPATH(progdir,'catalogs/' || language || '/ExchangeGUI.catalog'),'english',0)

      IF catalog = 0 THEN
         catalog = OPENCATALOG('ExchangeGUI.catalog','english',0)

   END

/* Gibt es einen Parameter für den Bildschirm. Wenn nicht, dann wird
   der Screen auf dem defaultPubScreen geöffnet. */

IF PubScreen == "" THEN
   PubScreen = RXTR_GETDEFAULTPUBSCREEN()
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*/
