home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / rexxtk12.zip / rexxtkbase.c < prev    next >
C/C++ Source or Header  |  2002-08-07  |  94KB  |  2,464 lines

  1. /*
  2.  *  Rexx/Tk
  3.  *  Copyright (C) 1999       Roger O'Connor <ocon@metronet.com>
  4.  *  Copyright (C) 2000-2001  Mark Hessling  <M.Hessling@qut.edu.au>
  5.  *
  6.  *  This library is free software; you can redistribute it and/or
  7.  *  modify it under the terms of the GNU Library General Public
  8.  *  License as published by the Free Software Foundation; either
  9.  *  version 2 of the License, or (at your option) any later version.
  10.  *
  11.  *  This library is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  *  Library General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU Library General Public
  17.  *  License along with this library; if not, write to the Free
  18.  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  */
  20.  
  21.  
  22. #define REXXTK_VERSION "1.2.0"
  23. #define REXXTK_DATE "25 May 2001"
  24.  
  25. #include "rexxtk.h"
  26.  
  27. char *RxPackageName = "rexxtk";
  28.  
  29. RexxFunctionHandler TkActivate            ;
  30. RexxFunctionHandler TkAdd                 ;
  31. RexxFunctionHandler TkAfter               ;
  32. RexxFunctionHandler TkBBox                ;
  33. RexxFunctionHandler TkBind                ;
  34. RexxFunctionHandler TkButton              ;
  35. RexxFunctionHandler TkCanvas              ;
  36. RexxFunctionHandler TkCanvasAddTag        ;
  37. RexxFunctionHandler TkCanvasArc           ;
  38. RexxFunctionHandler TkCanvasBind          ;
  39. RexxFunctionHandler TkCanvasBitmap        ;
  40. RexxFunctionHandler TkCanvasCanvasx       ;
  41. RexxFunctionHandler TkCanvasCanvasy       ;
  42. RexxFunctionHandler TkCanvasCoords        ;
  43. RexxFunctionHandler TkCanvasDChars        ;
  44. RexxFunctionHandler TkCanvasDTag          ;
  45. RexxFunctionHandler TkCanvasDelete        ;
  46. RexxFunctionHandler TkCanvasFind          ;
  47. RexxFunctionHandler TkCanvasFocus         ;
  48. RexxFunctionHandler TkCanvasImage         ;
  49. RexxFunctionHandler TkCanvasLine          ;
  50. RexxFunctionHandler TkCanvasOval          ;
  51. RexxFunctionHandler TkCanvasPolygon       ;
  52. RexxFunctionHandler TkCanvasPostscript    ;
  53. RexxFunctionHandler TkCanvasRectangle     ;
  54. RexxFunctionHandler TkCanvasText          ;
  55. RexxFunctionHandler TkCanvasType          ;
  56. RexxFunctionHandler TkCanvasWindow        ;
  57. RexxFunctionHandler TkCget                ;
  58. RexxFunctionHandler TkCheckButton         ;
  59. RexxFunctionHandler TkChooseColor         ;
  60. RexxFunctionHandler TkChooseDirectory     ;
  61. RexxFunctionHandler TkConfig              ;
  62. RexxFunctionHandler TkCurSelection        ;
  63. RexxFunctionHandler TkDelete              ;
  64. RexxFunctionHandler TkDestroy             ;
  65. RexxFunctionHandler TkDropFuncs           ;
  66. RexxFunctionHandler TkEntry               ;
  67. RexxFunctionHandler TkEvent               ;
  68. RexxFunctionHandler TkError               ;
  69. RexxFunctionHandler TkFocus               ;
  70. RexxFunctionHandler TkFontActual          ;
  71. RexxFunctionHandler TkFontConfig          ;
  72. RexxFunctionHandler TkFontCreate          ;
  73. RexxFunctionHandler TkFontDelete          ;
  74. RexxFunctionHandler TkFontFamilies        ;
  75. RexxFunctionHandler TkFontMeasure         ;
  76. RexxFunctionHandler TkFontMetrics         ;
  77. RexxFunctionHandler TkFontNames           ;
  78. RexxFunctionHandler TkFrame               ;
  79. RexxFunctionHandler TkGet                 ;
  80. RexxFunctionHandler TkGetBaseData         ;
  81. RexxFunctionHandler TkGetConfig           ;
  82. RexxFunctionHandler TkGetOpenFile         ;
  83. RexxFunctionHandler TkGetSaveFile         ;
  84. RexxFunctionHandler TkGrab                ;
  85. RexxFunctionHandler TkGrid                ;
  86. RexxFunctionHandler TkGridBbox            ;
  87. RexxFunctionHandler TkGridColumnConfig    ;
  88. RexxFunctionHandler TkGridConfig          ;
  89. RexxFunctionHandler TkGridForget          ;
  90. RexxFunctionHandler TkGridInfo            ;
  91. RexxFunctionHandler TkGridLocation        ;
  92. RexxFunctionHandler TkGridPropagate       ;
  93. RexxFunctionHandler TkGridRemove          ;
  94. RexxFunctionHandler TkGridRowConfig       ;
  95. RexxFunctionHandler TkGridSize            ;
  96. RexxFunctionHandler TkGridSlaves          ;
  97. RexxFunctionHandler TkImageBitmap         ;
  98. RexxFunctionHandler TkImagePhoto          ;
  99. RexxFunctionHandler TkIndex               ;
  100. RexxFunctionHandler TkInsert              ;
  101. RexxFunctionHandler TkItemConfig          ;
  102. RexxFunctionHandler TkLabel               ;
  103. RexxFunctionHandler TkListBox             ;
  104. RexxFunctionHandler TkLoadFuncs           ;
  105. RexxFunctionHandler TkLower               ;
  106. RexxFunctionHandler TkMenu                ;
  107. RexxFunctionHandler TkMenuClone           ;
  108. RexxFunctionHandler TkMenuEntryCget       ;
  109. RexxFunctionHandler TkMenuEntryConfig     ;
  110. RexxFunctionHandler TkMenuInvoke          ;
  111. RexxFunctionHandler TkMenuPost            ;
  112. RexxFunctionHandler TkMenuPostCascade     ;
  113. RexxFunctionHandler TkMenuType            ;
  114. RexxFunctionHandler TkMenuUnPost          ;
  115. RexxFunctionHandler TkMenuYPosition       ;
  116. RexxFunctionHandler TkMessageBox          ;
  117. RexxFunctionHandler TkNearest             ;
  118. RexxFunctionHandler TkPack                ;
  119. RexxFunctionHandler TkPopup               ;
  120. RexxFunctionHandler TkRadioButton         ;
  121. RexxFunctionHandler TkRaise               ;
  122. RexxFunctionHandler TkScale               ;
  123. RexxFunctionHandler TkScan                ;
  124. RexxFunctionHandler TkScrollBar           ;
  125. RexxFunctionHandler TkSee                 ;
  126. RexxFunctionHandler TkSelection           ;
  127. RexxFunctionHandler TkSet                 ;
  128. RexxFunctionHandler TkSetFileType         ;
  129. RexxFunctionHandler TkTcl                 ;
  130. RexxFunctionHandler TkText                ;
  131. RexxFunctionHandler TkTextImageCreate     ;
  132. RexxFunctionHandler TkTextTagBind         ;
  133. RexxFunctionHandler TkTextTagConfig       ;
  134. RexxFunctionHandler TkTopLevel            ;
  135. RexxFunctionHandler TkVar                 ;
  136. RexxFunctionHandler TkVariable            ;
  137. RexxFunctionHandler TkWait                ;
  138. RexxFunctionHandler TkWinfo               ;
  139. RexxFunctionHandler TkWm                  ;
  140. RexxFunctionHandler TkXView               ;
  141. RexxFunctionHandler TkYView               ;
  142.  
  143. /*-----------------------------------------------------------------------------
  144.  * Table of TK Functions. Used to install/de-install functions.
  145.  * If you change this table, don't forget to change the table at the end
  146.  * of this file.
  147.  *----------------------------------------------------------------------------*/
  148. RexxFunction RxPackageFunctions[] = {
  149.    { "TKACTIVATE"            ,TkActivate            ,"TkActivate"            , 1 },
  150.    { "TKADD"                 ,TkAdd                 ,"TkAdd"                 , 1 },
  151.    { "TKAFTER"               ,TkAfter               ,"TkAfter"               , 1 },
  152.    { "TKBBOX"                ,TkBBox                ,"TkBBox"                , 1 },
  153.    { "TKBIND"                ,TkBind                ,"TkBind"                , 1 },
  154.    { "TKBUTTON"              ,TkButton              ,"TkButton"              , 1 },
  155.    { "TKCANVAS"              ,TkCanvas              ,"TkCanvas"              , 1 },
  156.    { "TKCANVASADDTAG"        ,TkCanvasAddTag        ,"TkCanvasAddTag"        , 1 },
  157.    { "TKCANVASARC"           ,TkCanvasArc           ,"TkCanvasArc"           , 1 },
  158.    { "TKCANVASBIND"          ,TkCanvasBind          ,"TkCanvasBind"          , 1 },
  159.    { "TKCANVASBITMAP"        ,TkCanvasBitmap        ,"TkCanvasBitmap"        , 1 },
  160.    { "TKCANVASCANVASX"       ,TkCanvasCanvasx       ,"TkCanvasCanvasx"       , 1 },
  161.    { "TKCANVASCANVASY"       ,TkCanvasCanvasy       ,"TkCanvasCanvasy"       , 1 },
  162.    { "TKCANVASCOORDS"        ,TkCanvasCoords        ,"TkCanvasCoords"        , 1 },
  163.    { "TKCANVASDCHARS"        ,TkCanvasDChars        ,"TkCanvasDChars"        , 1 },
  164.    { "TKCANVASDTAG"          ,TkCanvasDTag          ,"TkCanvasDTag"          , 1 },
  165.    { "TKCANVASDELETE"        ,TkCanvasDelete        ,"TkCanvasDelete"        , 1 },
  166.    { "TKCANVASFIND"          ,TkCanvasFind          ,"TkCanvasFind"          , 1 },
  167.    { "TKCANVASFOCUS"         ,TkCanvasFocus         ,"TkCanvasFocus"         , 1 },
  168.    { "TKCANVASIMAGE"         ,TkCanvasImage         ,"TkCanvasImage"         , 1 },
  169.    { "TKCANVASLINE"          ,TkCanvasLine          ,"TkCanvasLine"          , 1 },
  170.    { "TKCANVASOVAL"          ,TkCanvasOval          ,"TkCanvasOval"          , 1 },
  171.    { "TKCANVASPOLYGON"       ,TkCanvasPolygon       ,"TkCanvasPolygon"       , 1 },
  172.    { "TKCANVASPOSTSCRIPT"    ,TkCanvasPostscript    ,"TkCanvasPostscript"    , 1 },
  173.    { "TKCANVASRECTANGLE"     ,TkCanvasRectangle     ,"TkCanvasRectangle"     , 1 },
  174.    { "TKCANVASTEXT"          ,TkCanvasText          ,"TkCanvasText"          , 1 },
  175.    { "TKCANVASTYPE"          ,TkCanvasType          ,"TkCanvasType"          , 1 },
  176.    { "TKCANVASWINDOW"        ,TkCanvasWindow        ,"TkCanvasWindow"        , 1 },
  177.    { "TKCGET"                ,TkCget                ,"TkCget"                , 1 },
  178.    { "TKCHECKBUTTON"         ,TkCheckButton         ,"TkCheckButton"         , 1 },
  179.    { "TKCHOOSECOLOR"         ,TkChooseColor         ,"TkChooseColor"         , 1 },
  180.    { "TKCHOOSEDIRECTORY"     ,TkChooseDirectory     ,"TkChooseDirectory"     , 1 },
  181.    { "TKCONFIG"              ,TkConfig              ,"TkConfig"              , 1 },
  182.    { "TKCURSELECTION"        ,TkCurSelection        ,"TkCurSelection"        , 1 },
  183.    { "TKDELETE"              ,TkDelete              ,"TkDelete"              , 1 },
  184.    { "TKDESTROY"             ,TkDestroy             ,"TkDestroy"             , 1 },
  185.    { "TKDROPFUNCS"           ,TkDropFuncs           ,"TkDropFuncs"           , 1 },
  186.    { "TKENTRY"               ,TkEntry               ,"TkEntry"               , 1 },
  187.    { "TKERROR"               ,TkError               ,"TkError"               , 1 },
  188.    { "TKEVENT"               ,TkEvent               ,"TkEvent"               , 1 },
  189.    { "TKFOCUS"               ,TkFocus               ,"TkFocus"               , 1 },
  190.    { "TKFONTACTUAL"          ,TkFontActual          ,"TkFontActual"          , 1 },
  191.    { "TKFONTCONFIG"          ,TkFontConfig          ,"TkFontConfig"          , 1 },
  192.    { "TKFONTCREATE"          ,TkFontCreate          ,"TkFontCreate"          , 1 },
  193.    { "TKFONTDELETE"          ,TkFontDelete          ,"TkFontDelete"          , 1 },
  194.    { "TKFONTFAMILIES"        ,TkFontFamilies        ,"TkFontFamilies"        , 1 },
  195.    { "TKFONTMEASURE"         ,TkFontMeasure         ,"TkFontMeasure"         , 1 },
  196.    { "TKFONTMETRICS"         ,TkFontMetrics         ,"TkFontMetrics"         , 1 },
  197.    { "TKFONTNAMES"           ,TkFontNames           ,"TkFontNames"           , 1 },
  198.    { "TKFRAME"               ,TkFrame               ,"TkFrame"               , 1 },
  199.    { "TKGET"                 ,TkGet                 ,"TkGet"                 , 1 },
  200.    { "TKGETCONFIG"           ,TkGetConfig           ,"TkGetConfig"           , 1 },
  201.    { "TKGETOPENFILE"         ,TkGetOpenFile         ,"TkGetOpenFile"         , 1 },
  202.    { "TKGETSAVEFILE"         ,TkGetSaveFile         ,"TkGetSaveFile"         , 1 },
  203.    { "TKGRAB"                ,TkGrab                ,"TkGrab"                , 1 },
  204.    { "TKGRID"                ,TkGrid                ,"TkGrid"                , 1 },
  205.    { "TKGRIDBBOX"            ,TkGridBbox            ,"TkGridBbox"            , 1 },
  206.    { "TKGRIDCOLUMNCONFIG"    ,TkGridColumnConfig    ,"TkGridColumnConfig"    , 1 },
  207.    { "TKGRIDCONFIG"          ,TkGridConfig          ,"TkGridConfig"          , 1 },
  208.    { "TKGRIDFORGET"          ,TkGridForget          ,"TkGridForget"          , 1 },
  209.    { "TKGRIDINFO"            ,TkGridInfo            ,"TkGridInfo"            , 1 },
  210.    { "TKGRIDLOCATION"        ,TkGridLocation        ,"TkGridLocation"        , 1 },
  211.    { "TKGRIDPROPAGATE"       ,TkGridPropagate       ,"TkGridPropagate"       , 1 },
  212.    { "TKGRIDROWCONFIG"       ,TkGridRowConfig       ,"TkGridRowConfig"       , 1 },
  213.    { "TKGRIDREMOVE"          ,TkGridRemove          ,"TkGridRemove"          , 1 },
  214.    { "TKGRIDSIZE"            ,TkGridSize            ,"TkGridSize"            , 1 },
  215.    { "TKGRIDSLAVES"          ,TkGridSlaves          ,"TkGridSlaves"          , 1 },
  216.    { "TKIMAGEBITMAP"         ,TkImageBitmap         ,"TkImageBitmap"         , 1 },
  217.    { "TKIMAGEPHOTO"          ,TkImagePhoto          ,"TkImagePhoto"          , 1 },
  218.    { "TKINDEX"               ,TkIndex               ,"TkIndex"               , 1 },
  219.    { "TKINSERT"              ,TkInsert              ,"TkInsert"              , 1 },
  220.    { "TKITEMCONFIG"          ,TkItemConfig          ,"TkItemConfig"          , 1 },
  221.    { "TKLABEL"               ,TkLabel               ,"TkLabel"               , 1 },
  222.    { "TKLISTBOX"             ,TkListBox             ,"TkListBox"             , 1 },
  223.    { "TKLOADFUNCS"           ,TkLoadFuncs           ,"TkLoadFuncs"           , 0 }, /* don't load this from a DLL */
  224.    { "TKLOWER"               ,TkLower               ,"TkLower"               , 1 },
  225.    { "TKMENU"                ,TkMenu                ,"TkMenu"                , 1 },
  226.    { "TKMENUCLONE"           ,TkMenuClone           ,"TkMenuClone"           , 1 },
  227.    { "TKMENUENTRYCGET"       ,TkMenuEntryCget       ,"TkMenuEntryCget"       , 1 },
  228.    { "TKMENUENTRYCONFIG"     ,TkMenuEntryConfig     ,"TkMenuEntryConfig"     , 1 },
  229.    { "TKMENUINVOKE"          ,TkMenuInvoke          ,"TkMenuInvoke"          , 1 },
  230.    { "TKMENUPOST"            ,TkMenuPost            ,"TkMenuPost"            , 1 },
  231.    { "TKMENUPOSTCASCADE"     ,TkMenuPostCascade     ,"TkMenuPostCascade"     , 1 },
  232.    { "TKMENUTYPE"            ,TkMenuType            ,"TkMenuType"            , 1 },
  233.    { "TKMENUUNPOST"          ,TkMenuUnPost          ,"TkMenuUnPost"          , 1 },
  234.    { "TKMENUYPOSITION"       ,TkMenuYPosition       ,"TkMenuYPosition"       , 1 },
  235.    { "TKMESSAGEBOX"          ,TkMessageBox          ,"TkMessageBox"          , 1 },
  236.    { "TKNEAREST"             ,TkNearest             ,"TkNearest"             , 1 },
  237.    { "TKPACK"                ,TkPack                ,"TkPack"                , 1 },
  238.    { "TKPOPUP"               ,TkPopup               ,"TkPopup"               , 1 },
  239.    { "TKRADIOBUTTON"         ,TkRadioButton         ,"TkRadioButton"         , 1 },
  240.    { "TKRAISE"               ,TkRaise               ,"TkRaise"               , 1 },
  241.    { "TKSCALE"               ,TkScale               ,"TkScale"               , 1 },
  242.    { "TKSCAN"                ,TkScan                ,"TkScan"                , 1 },
  243.    { "TKSCROLLBAR"           ,TkScrollBar           ,"TkScrollBar"           , 1 },
  244.    { "TKSEE"                 ,TkSee                 ,"TkSee"                 , 1 },
  245.    { "TKSELECTION"           ,TkSelection           ,"TkSelection"           , 1 },
  246.    { "TKSET"                 ,TkSet                 ,"TkSet"                 , 1 },
  247.    { "TKSETFILETYPE"         ,TkSetFileType         ,"TkSetFileType"         , 1 },
  248.    { "TKTCL"                 ,TkTcl                 ,"TkTcl"                 , 1 },
  249.    { "TKTEXT"                ,TkText                ,"TkText"                , 1 },
  250.    { "TKTEXTIMAGECREATE"     ,TkTextImageCreate     ,"TkTextImageCreate"     , 1 },
  251.    { "TKTEXTTAGBIND"         ,TkTextTagBind         ,"TkTextTagBind"         , 1 },
  252.    { "TKTEXTTAGCONFIG"       ,TkTextTagConfig       ,"TkTextTagConfig"       , 1 },
  253.    { "TKTOPLEVEL"            ,TkTopLevel            ,"TkTopLevel"            , 1 },
  254.    { "TKVAR"                 ,TkVar                 ,"TkVar"                 , 1 },
  255.    { "TKVARIABLE"            ,TkVariable            ,"TkVariable"            , 1 },
  256.    { "TKWAIT"                ,TkWait                ,"TkWait"                , 1 },
  257.    { "TKWINFO"               ,TkWinfo               ,"TkWinfo"               , 1 },
  258.    { "TKWM"                  ,TkWm                  ,"TkWm"                  , 1 },
  259.    { "TKXVIEW"               ,TkXView               ,"TkXView"               , 1 },
  260.    { "TKYVIEW"               ,TkYView               ,"TkYView"               , 1 },
  261.    { "TKGETBASEDATA"         ,TkGetBaseData         ,"TkGetBaseData"         , 1 },
  262.    { NULL, NULL, NULL, 0 }
  263. };
  264.  
  265. #if defined(WIN32) || defined(OS2_DYN)
  266. int GetTclTkLibraries(void);
  267. char *tcllibs[] = { "tcl85", "tcl84", "tcl83", "tcl82", "tcl81", "tcl80", NULL };
  268. char *tklibs[]  = { "tk85" , "tk84",  "tk83",  "tk82",  "tk81",  "tk80",  NULL };
  269. #endif
  270. /*
  271.  * The Tcl code that implements TkWait() is defined here. It has to be
  272.  * copied into a variable that points to writeable memory, otherwise
  273.  * Tcl 8.1 and above seg fault!
  274.  */
  275. static char *rexxtk_setrexxtk="global rexxtkcommandlist\n"
  276.                               "global rexxtkcommandcount\n"
  277.                               "if {$rexxtkcommandcount==0} {vwait rexxtkcommandcount}\n"
  278.                               "set rexxtkcommandcount [expr $rexxtkcommandcount-1]\n"
  279.                               "set rexxtk [lindex $rexxtkcommandlist $rexxtkcommandcount]\n"
  280.                               "if {$rexxtkcommandcount==0} {\n"
  281.                               " set rexxtkcommandlist {}\n"
  282.                               "} else {\n"
  283.                               " set rexxtkcommandlist [lrange $rexxtkcommandlist 0 $rexxtkcommandcount]}\n"
  284.                               "set rexxtk\n";
  285.  
  286. static char czTclCommand[TCLCOMMANDLEN+1000];
  287. static REXXTKDATA RexxTkData;
  288.  
  289. #if defined(WIN32) || defined(OS2_DYN)
  290. Tcl_Interp *RexxTk_TclCreateInterp(void)
  291. {
  292.    return RexxTkData.Dyn_TclCreateInterp();
  293. }
  294. int RexxTk_TclDeleteInterp(Tcl_Interp *interp)
  295. {
  296.    return RexxTkData.Dyn_TclDeleteInterp(interp);
  297. }
  298.  
  299. int RexxTk_TclEval(Tcl_Interp *interp, char *string)
  300. {
  301.    return RexxTkData.Dyn_TclEval( interp, string );
  302. }
  303.  
  304. int RexxTk_TclInit(Tcl_Interp *interp)
  305. {
  306.    return RexxTkData.Dyn_TclInit( interp );
  307. }
  308.  
  309. int RexxTk_TkInit(Tcl_Interp *interp)
  310. {
  311.    return RexxTkData.Dyn_TkInit( interp );
  312. }
  313.  
  314. void RexxTk_TclFindExecutable(char *argv)
  315. {
  316.    RexxTkData.Dyn_TclFindExecutable( argv );
  317. }
  318. #endif
  319.  
  320. /*
  321.  * Rexx/Tk functions start here...
  322.  */
  323. RFH_RETURN_TYPE TkTcl
  324.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  325. {
  326.    int i;
  327.  
  328.    FunctionPrologue( (char *)name, argc, argv );
  329.  
  330.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  331.  
  332.    czTclCommand[0] = '\0';
  333.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  334.  
  335.    for (i = 1; i < (int)argc; i++){
  336.       strcat(czTclCommand, " ");
  337.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  338.    }
  339.  
  340.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkTcl) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  341.    
  342.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  343.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  344.    }
  345.  
  346.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  347. }
  348.  
  349.  
  350. RFH_RETURN_TYPE TkCanvas
  351.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  352. {
  353.    FunctionPrologue( (char *)name, argc, argv );
  354.  
  355.    return rtk_TypeA(&RexxTkData,czTclCommand,name, "canvas", argc, argv, retstr);
  356. }
  357.  
  358. /*
  359.  * pathName create window x y ?option...?
  360.  * TkCanvasWindow(pathName, x, y [,options])
  361.  */
  362. RFH_RETURN_TYPE TkCanvasWindow
  363.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  364. {
  365.    FunctionPrologue( (char *)name, argc, argv );
  366.  
  367.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  368.  
  369.    if ( my_checkparam( name, argc, 3, 0 ) )
  370.       return 1;
  371.  
  372.    czTclCommand[0] = '\0';
  373.  
  374.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  375.    strcat(czTclCommand, " create window ");
  376.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  377.    strcat(czTclCommand, " ");
  378.    strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  379.    if (argc > 3)
  380.    {
  381.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,3) )
  382.          return 1;
  383.    }
  384.    
  385.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasWindow) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  386.  
  387.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  388.    {
  389.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  390.    }
  391.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  392. }
  393. /*
  394.  * pathName create text x y ?option...?
  395.  * TkCanvasText(pathName, x, y [,options])
  396.  */
  397. RFH_RETURN_TYPE TkCanvasText
  398.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  399. {
  400.    FunctionPrologue( (char *)name, argc, argv );
  401.  
  402.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  403.  
  404.    if ( my_checkparam( name, argc, 3, 0 ) )
  405.       return 1;
  406.  
  407.    czTclCommand[0] = '\0';
  408.  
  409.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  410.    strcat(czTclCommand, " create text ");
  411.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  412.    strcat(czTclCommand, " ");
  413.    strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  414.    if (argc > 3)
  415.    {
  416.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,3) )
  417.          return 1;
  418.    }
  419.    
  420.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasText) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  421.  
  422.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  423.    {
  424.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  425.    }
  426.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  427. }
  428. /*
  429.  * pathName create image x y ?option...?
  430.  * TkCanvasImage(pathName, x, y [,options])
  431.  */
  432. RFH_RETURN_TYPE TkCanvasImage
  433.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  434. {
  435.    FunctionPrologue( (char *)name, argc, argv );
  436.  
  437.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  438.  
  439.    if ( my_checkparam( name, argc, 3, 0 ) )
  440.       return 1;
  441.  
  442.    czTclCommand[0] = '\0';
  443.  
  444.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  445.    strcat(czTclCommand, " create image ");
  446.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  447.    strcat(czTclCommand, " ");
  448.    strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  449.    if (argc > 3)
  450.    {
  451.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,3) )
  452.          return 1;
  453.    }
  454.    
  455.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasImage) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  456.  
  457.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  458.    {
  459.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  460.    }
  461.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  462. }
  463. /*
  464.  * pathName create bitmap x y ?option...?
  465.  * TkCanvasBitmap(pathName, x, y [,options])
  466.  */
  467. RFH_RETURN_TYPE TkCanvasBitmap
  468.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  469. {
  470.    FunctionPrologue( (char *)name, argc, argv );
  471.  
  472.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  473.  
  474.    if ( my_checkparam( name, argc, 3, 0 ) )
  475.       return 1;
  476.  
  477.    czTclCommand[0] = '\0';
  478.  
  479.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  480.    strcat(czTclCommand, " create bitmap ");
  481.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  482.    strcat(czTclCommand, " ");
  483.    strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  484.    if (argc > 3)
  485.    {
  486.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,3) )
  487.          return 1;
  488.    }
  489.    
  490.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasBitmap) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  491.  
  492.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  493.    {
  494.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  495.    }
  496.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  497. }
  498. /*
  499.  * pathName addtag tag searchSpec ?arg...?
  500.  * TkCanvasAddtag(pathName ,tag [, searchSpec [,arg] )
  501.  */
  502. RFH_RETURN_TYPE TkCanvasAddTag
  503.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  504. {
  505.    FunctionPrologue( (char *)name, argc, argv );
  506.  
  507.    return rtk_TypeC(&RexxTkData,czTclCommand,name, "addtag", argc, argv, retstr);
  508. }
  509. /*
  510.  * pathName create arc x1 y1 x2 y2 ?option...?
  511.  * TkCanvasArc(pathName, x1, y1, x2, y2, [,options])
  512.  */
  513. RFH_RETURN_TYPE TkCanvasArc
  514.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  515. {
  516.    int i;
  517.    FunctionPrologue( (char *)name, argc, argv );
  518.  
  519.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  520.  
  521.    if ( my_checkparam( name, argc, 5, 0 ) )
  522.       return 1;
  523.  
  524.    czTclCommand[0] = '\0';
  525.  
  526.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  527.    strcat(czTclCommand, " create arc");
  528.    for (i = 1; i < 5; i++)
  529.    {
  530.       strcat(czTclCommand, " ");
  531.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  532.    }
  533.    if (argc > 5)
  534.    {
  535.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,5) )
  536.          return 1;
  537.    }
  538.    
  539.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasArc) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  540.  
  541.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  542.    {
  543.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  544.    }
  545.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  546. }
  547. /*
  548.  * pathName bind tag sequence [+]script
  549.  * TkCanvasBind(pathName ,tagOrId [,sequence [,[+|*]tcl script]]] )
  550.  */
  551. RFH_RETURN_TYPE TkCanvasBind
  552.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  553. {
  554.    FunctionPrologue( (char *)name, argc, argv );
  555.  
  556.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  557.  
  558.    if ( my_checkparam( name, argc, 2, 4 ) )
  559.       return 1;
  560.  
  561.    czTclCommand[0] = '\0';
  562.  
  563.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  564.    strcat(czTclCommand, " bind");
  565.    strcat(czTclCommand, " ");
  566.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  567.    if ( argc > 2)
  568.    {
  569.       strcat(czTclCommand, " ");
  570.       strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  571.    }
  572.    if ( argc > 3)
  573.    {
  574.       if ( argv[3].strptr[0] == '*' )
  575.       {
  576.          strcat(czTclCommand, " {setRexxtk ");
  577.          strncat(czTclCommand, argv[3].strptr+1, argv[3].strlength);
  578.          strcat(czTclCommand, "} "); 
  579.       }
  580.       else
  581.       {
  582.          strcat(czTclCommand, " \"");
  583.          strncat(czTclCommand, argv[3].strptr, argv[3].strlength);
  584.          strcat(czTclCommand, "\"");
  585.       }
  586.    }
  587.    
  588.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasBind) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  589.  
  590.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  591.    {
  592.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  593.    }
  594.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  595. }
  596. /*
  597.  * pathName canvasx screenx ?gridspacing?
  598.  * TkCanvasCanvasx(pathName ,screenx [,gridspacing] )
  599.  */
  600. RFH_RETURN_TYPE TkCanvasCanvasx
  601.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  602. {
  603.    FunctionPrologue( (char *)name, argc, argv );
  604.  
  605.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  606.  
  607.    if ( my_checkparam( name, argc, 2, 3 ) )
  608.       return 1;
  609.  
  610.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"canvasxx", argc, argv, retstr);
  611. }
  612. /*
  613.  * pathName canvasy screeny ?gridspacing?
  614.  * TkCanvasCanvasy(pathName ,screeny [,gridspacing] )
  615.  */
  616. RFH_RETURN_TYPE TkCanvasCanvasy
  617.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  618. {
  619.    FunctionPrologue( (char *)name, argc, argv );
  620.  
  621.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  622.  
  623.    if ( my_checkparam( name, argc, 2, 3 ) )
  624.       return 1;
  625.  
  626.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"canvasxy", argc, argv, retstr);
  627. }
  628. /*
  629.  * pathName coords option
  630.  * TkCanvasCoords(pathName, tagOrId [,x0, y0, ...] )
  631.  */
  632. RFH_RETURN_TYPE TkCanvasCoords
  633.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  634. {
  635.    FunctionPrologue( (char *)name, argc, argv );
  636.  
  637.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"coords", argc, argv, retstr);
  638. }
  639. /*
  640.  * pathName dchars tagOrId first ?last?
  641.  * TkCanvasDChars(pathName ,tagOrId, first [,last] )
  642.  */
  643. RFH_RETURN_TYPE TkCanvasDChars
  644.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  645. {
  646.    FunctionPrologue( (char *)name, argc, argv );
  647.  
  648.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  649.  
  650.    if ( my_checkparam( name, argc, 3, 4 ) )
  651.       return 1;
  652.  
  653.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"dchars", argc, argv, retstr);
  654. }
  655. /*
  656.  * pathName dtag tagOrId ?tagToDelete?
  657.  * TkCanvasDTag(pathName ,tagOrId, [,deleteTagOrId] )
  658.  */
  659. RFH_RETURN_TYPE TkCanvasDTag
  660.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  661. {
  662.    FunctionPrologue( (char *)name, argc, argv );
  663.  
  664.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  665.  
  666.    if ( my_checkparam( name, argc, 2, 3 ) )
  667.       return 1;
  668.  
  669.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"dtag", argc, argv, retstr);
  670. }
  671. /*
  672.  * pathName find searchCommand ?arg arg...?
  673.  * TkCanvasFind(pathName ,searchCommand [,arg ...] )
  674.  */
  675. RFH_RETURN_TYPE TkCanvasFind
  676.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  677. {
  678.    FunctionPrologue( (char *)name, argc, argv );
  679.  
  680.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  681.  
  682.    if ( my_checkparam( name, argc, 2, 0 ) )
  683.       return 1;
  684.  
  685.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"find", argc, argv, retstr);
  686. }
  687. /*
  688.  * pathName focus ?tagOrId?
  689.  * TkCanvasFocus(pathName [,tagOrId] )
  690.  */
  691. RFH_RETURN_TYPE TkCanvasFocus
  692.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  693. {
  694.    FunctionPrologue( (char *)name, argc, argv );
  695.  
  696.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"focus", argc, argv, retstr);
  697. }
  698. /*
  699.  * pathName create rectangle x1 y1 x2 y2 ?option...?
  700.  * TkCanvasRectangle(pathName, x1, y1, x2, y2, [,options])
  701.  */
  702. RFH_RETURN_TYPE TkCanvasRectangle
  703.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  704. {
  705.    int i;
  706.    FunctionPrologue( (char *)name, argc, argv );
  707.  
  708.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  709.  
  710.    if ( my_checkparam( name, argc, 5, 0 ) )
  711.       return 1;
  712.  
  713.    czTclCommand[0] = '\0';
  714.  
  715.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  716.    strcat(czTclCommand, " create rectangle");
  717.    for (i = 1; i < 5; i++)
  718.    {
  719.       strcat(czTclCommand, " ");
  720.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  721.    }
  722.    if (argc > 5)
  723.    {
  724.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,5) )
  725.          return 1;
  726.    }
  727.    
  728.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasRectangle) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  729.  
  730.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  731.    {
  732.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  733.    }
  734.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  735. }
  736. /*                                           
  737.  * pathName create oval x1 y1 x2 y2 ?option...?
  738.  * TkCanvasOval(pathName, x1, y1, x2, y2 [,options])
  739.  */
  740. RFH_RETURN_TYPE TkCanvasOval
  741.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  742. {
  743.    int i;
  744.    FunctionPrologue( (char *)name, argc, argv );
  745.  
  746.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  747.  
  748.    if ( my_checkparam( name, argc, 5, 0 ) )
  749.       return 1;
  750.  
  751.    czTclCommand[0] = '\0';
  752.  
  753.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  754.    strcat(czTclCommand, " create oval");
  755.    for (i = 1; i < 5; i++)
  756.    {
  757.       strcat(czTclCommand, " ");
  758.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  759.    }
  760.    if (argc > 5)
  761.    {
  762.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,5) )
  763.          return 1;
  764.    }
  765.    
  766.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasOval) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  767.  
  768.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  769.    {
  770.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  771.    }
  772.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  773. }
  774. /*                                           
  775.  * pathName create line x1 y1 x2 y2 ?option...?
  776.  * TkCanvasLine(pathName, x1, y1, x2, y2, [xn, yn [,options]])
  777.  */
  778. RFH_RETURN_TYPE TkCanvasLine
  779.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  780. {
  781.    RFH_ARG1_TYPE i;
  782.    int number_coords=0;
  783.    RFH_ARG1_TYPE first_option=argc;
  784.  
  785.    FunctionPrologue( (char *)name, argc, argv );
  786.  
  787.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  788.  
  789.    if ( my_checkparam( name, argc, 5, 0 ) )
  790.       return 1;
  791.    /*
  792.     * Find first (if any) option argument; ie starts with '-'
  793.     * All arguments up to that point must be in pairs; x/y coords
  794.     */
  795.    for ( i = 5; i < argc; i++ )
  796.    {
  797.       if ( argv[i].strlength != 0
  798.       &&   argv[i].strptr != NULL )
  799.       {
  800.          if ( argv[i].strptr[0] == '-' )
  801.          {
  802.             first_option = i;
  803.             break;
  804.          }
  805.          else
  806.             number_coords++;
  807.       }
  808.    }
  809.    if ( number_coords % 2 )
  810.       return 1;
  811.  
  812.    czTclCommand[0] = '\0';
  813.  
  814.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  815.    strcat(czTclCommand, " create line");
  816.    for (i = 1; i < first_option; i++)
  817.    {
  818.       strcat(czTclCommand, " ");
  819.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  820.    }
  821.    if (argc > first_option)
  822.    {
  823.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,first_option) )
  824.          return 1;
  825.    }
  826.    
  827.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasLine) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  828.  
  829.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  830.    {
  831.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  832.    }
  833.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  834. }
  835.  
  836. /*                                           
  837.  * pathName create polygon x1 y1 x2 y2 ?xn yn? ?option...?
  838.  * TkCanvasPolygon(pathName, x1, y1, x2, y2, [xn, yn [,options]])
  839.  */
  840. RFH_RETURN_TYPE TkCanvasPolygon
  841.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  842. {
  843.    RFH_ARG1_TYPE i;
  844.    int number_coords=0;
  845.    RFH_ARG1_TYPE first_option=argc;
  846.  
  847.    FunctionPrologue( (char *)name, argc, argv );
  848.  
  849.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  850.  
  851.    if ( my_checkparam( name, argc, 5, 0 ) )
  852.       return 1;
  853.    /*
  854.     * Find first (if any) option argument; ie starts with '-'
  855.     * All arguments up to that point must be in pairs; x/y coords
  856.     */
  857.    for ( i = 5; i < argc; i++ )
  858.    {
  859.       if ( argv[i].strlength != 0
  860.       &&   argv[i].strptr != NULL )
  861.       {
  862.          if ( argv[i].strptr[0] == '-' )
  863.          {
  864.             first_option = i;
  865.             break;
  866.          }
  867.          else
  868.             number_coords++;
  869.       }
  870.    }
  871.    if ( number_coords % 2 )
  872.       return 1;
  873.  
  874.    czTclCommand[0] = '\0';
  875.  
  876.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  877.    strcat(czTclCommand, " create polygon");
  878.    for (i = 1; i < first_option; i++)
  879.    {
  880.       strcat(czTclCommand, " ");
  881.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  882.    }
  883.    if (argc > first_option)
  884.    {
  885.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,first_option) )
  886.          return 1;
  887.    }
  888.    
  889.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkCanvasPolygon) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  890.  
  891.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  892.    {
  893.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  894.    }
  895.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  896. }
  897.  
  898. RFH_RETURN_TYPE TkCanvasDelete
  899.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  900. {
  901.    FunctionPrologue( (char *)name, argc, argv );
  902.  
  903.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"delete", argc, argv, retstr);
  904. }
  905.  
  906. RFH_RETURN_TYPE TkCanvasPostscript
  907.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  908. {
  909.    FunctionPrologue( (char *)name, argc, argv );
  910.  
  911.    return rtk_TypeE(&RexxTkData,czTclCommand,name,"postscript", argc, argv, retstr);
  912. }
  913.    
  914. /*                                           
  915.  * pathName type tagOrid
  916.  * TkCanvasType(pathName, tagOrid)
  917.  */
  918. RFH_RETURN_TYPE TkCanvasType
  919.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  920. {
  921.    FunctionPrologue( (char *)name, argc, argv );
  922.  
  923.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  924.  
  925.    if ( my_checkparam( name, argc, 2, 2 ) )
  926.       return 1;
  927.  
  928.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"type", argc, argv, retstr);
  929. }
  930.    
  931. /*                                           
  932.  * pathName itemconfig tagOrid|index option ?option...?
  933.  * TkItemConfig(pathName, tagOrid|index, [options])
  934.  */
  935. RFH_RETURN_TYPE TkItemConfig
  936.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  937. {
  938.    FunctionPrologue( (char *)name, argc, argv );
  939.  
  940.    return rtk_TypeD(&RexxTkData,czTclCommand,name,"itemconfigure", argc, argv, retstr);
  941. }
  942.    
  943. /*
  944.  * pathName bbox ?args?
  945.  * TkBBox(pathName ,tagorId [,tagOrId...] )
  946.  */
  947. RFH_RETURN_TYPE TkBBox
  948.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  949. {
  950.    FunctionPrologue( (char *)name, argc, argv );
  951.  
  952.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"bbox", argc, argv, retstr);
  953. }
  954. /*
  955.  * command tag sequence [+]script
  956.  * TkBind( tag [,sequence [,[+|*]tcl script]]] )
  957.  */
  958. RFH_RETURN_TYPE TkBind
  959.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  960. {
  961.    FunctionPrologue( (char *)name, argc, argv );
  962.  
  963.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  964.  
  965.    if ( my_checkparam( name, argc, 1, 3 ) )
  966.       return 1;
  967.  
  968.    strcpy(czTclCommand, "bind ");
  969.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  970.    if ( argc > 1)
  971.    {
  972.       strcat(czTclCommand, " ");
  973.       strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  974.    }
  975.    if ( argc > 2)
  976.    {
  977.       if ( argv[2].strptr[0] == '*' )
  978.       {
  979.          strcat(czTclCommand, " {setRexxtk ");
  980.          strncat(czTclCommand, argv[2].strptr+1, argv[2].strlength);
  981.          strcat(czTclCommand, "} "); 
  982.       }
  983.       else
  984.       {
  985.          strcat(czTclCommand, " \"");
  986.          strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  987.          strcat(czTclCommand, "\"");
  988.       }
  989.    }
  990.    
  991.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkBind) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  992.  
  993.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  994.    {
  995.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  996.    }
  997.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  998. }
  999.    
  1000. RFH_RETURN_TYPE TkButton
  1001.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1002. {
  1003.    FunctionPrologue( (char *)name, argc, argv );
  1004.  
  1005.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"button", argc, argv, retstr);
  1006. }
  1007.  
  1008. RFH_RETURN_TYPE TkScale
  1009.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1010. {
  1011.    FunctionPrologue( (char *)name, argc, argv );
  1012.  
  1013.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"scale", argc, argv, retstr);
  1014. }
  1015.  
  1016. RFH_RETURN_TYPE TkMenu
  1017.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1018. {
  1019.    FunctionPrologue( (char *)name, argc, argv );
  1020.  
  1021.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"menu", argc, argv, retstr);
  1022. }
  1023.  
  1024. RFH_RETURN_TYPE TkMenuClone
  1025.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1026. {
  1027.    FunctionPrologue( (char *)name, argc, argv );
  1028.  
  1029.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1030.  
  1031.    if ( my_checkparam( name, argc, 2, 3 ) )
  1032.       return 1;
  1033.  
  1034.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"clone", argc, argv, retstr);
  1035. }
  1036.  
  1037. RFH_RETURN_TYPE TkMenuPost
  1038.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1039. {
  1040.    FunctionPrologue( (char *)name, argc, argv );
  1041.  
  1042.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1043.  
  1044.    if ( my_checkparam( name, argc, 3, 3 ) )
  1045.       return 1;
  1046.  
  1047.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"post", argc, argv, retstr);
  1048. }
  1049.  
  1050. RFH_RETURN_TYPE TkMenuEntryCget
  1051.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1052. {
  1053.    FunctionPrologue( (char *)name, argc, argv );
  1054.  
  1055.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1056.  
  1057.    if ( my_checkparam( name, argc, 2, 3 ) )
  1058.       return 1;
  1059.  
  1060.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"entrycget", argc, argv, retstr);
  1061. }
  1062.  
  1063. RFH_RETURN_TYPE TkMenuPostCascade
  1064.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1065. {
  1066.    FunctionPrologue( (char *)name, argc, argv );
  1067.  
  1068.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1069.  
  1070.    if ( my_checkparam( name, argc, 2, 2 ) )
  1071.       return 1;
  1072.  
  1073.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"postcascade", argc, argv, retstr);
  1074. }
  1075.  
  1076. RFH_RETURN_TYPE TkMenuInvoke
  1077.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1078. {
  1079.    FunctionPrologue( (char *)name, argc, argv );
  1080.  
  1081.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1082.  
  1083.    if ( my_checkparam( name, argc, 2, 2 ) )
  1084.       return 1;
  1085.  
  1086.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"invoke", argc, argv, retstr);
  1087. }
  1088.  
  1089. RFH_RETURN_TYPE TkMenuType
  1090.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1091. {
  1092.    FunctionPrologue( (char *)name, argc, argv );
  1093.  
  1094.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1095.  
  1096.    if ( my_checkparam( name, argc, 2, 2 ) )
  1097.       return 1;
  1098.  
  1099.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"type", argc, argv, retstr);
  1100. }
  1101.  
  1102. RFH_RETURN_TYPE TkMenuYPosition
  1103.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1104. {
  1105.    FunctionPrologue( (char *)name, argc, argv );
  1106.  
  1107.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1108.  
  1109.    if ( my_checkparam( name, argc, 2, 2 ) )
  1110.       return 1;
  1111.  
  1112.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"yposition", argc, argv, retstr);
  1113. }
  1114.  
  1115. RFH_RETURN_TYPE TkMenuEntryConfig
  1116.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1117. {
  1118.    FunctionPrologue( (char *)name, argc, argv );
  1119.  
  1120.    return rtk_TypeD(&RexxTkData,czTclCommand,name,"entryconfigure", argc, argv, retstr);
  1121. }
  1122.  
  1123. RFH_RETURN_TYPE TkMenuUnPost
  1124.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1125. {
  1126.    FunctionPrologue( (char *)name, argc, argv );
  1127.  
  1128.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1129.  
  1130.    if ( my_checkparam( name, argc, 1, 1 ) )
  1131.       return 1;
  1132.  
  1133.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"unpost", argc, argv, retstr);
  1134. }
  1135.  
  1136. RFH_RETURN_TYPE TkActivate
  1137.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1138. {
  1139.    FunctionPrologue( (char *)name, argc, argv );
  1140.  
  1141.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"activate", argc, argv, retstr);
  1142. }
  1143.  
  1144. RFH_RETURN_TYPE TkAdd
  1145.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1146. {
  1147.    FunctionPrologue( (char *)name, argc, argv );
  1148.  
  1149.    return rtk_TypeD(&RexxTkData,czTclCommand,name,"add", argc, argv, retstr);
  1150. }
  1151.  
  1152. RFH_RETURN_TYPE TkLabel
  1153.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1154. {
  1155.    FunctionPrologue( (char *)name, argc, argv );
  1156.  
  1157.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"label", argc, argv, retstr);
  1158. }
  1159.  
  1160. RFH_RETURN_TYPE TkFrame
  1161.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1162. {
  1163.    FunctionPrologue( (char *)name, argc, argv );
  1164.  
  1165.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"frame", argc, argv, retstr);
  1166. }
  1167.  
  1168. RFH_RETURN_TYPE TkText
  1169.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1170. {
  1171.    FunctionPrologue( (char *)name, argc, argv );
  1172.  
  1173.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"text", argc, argv, retstr);
  1174. }
  1175. /*
  1176.  * pathName image create index ?options?
  1177.  * TkTextImageCreate(pathName, index [,option, value[ ,option, value...]] )
  1178.  */
  1179. RFH_RETURN_TYPE TkTextImageCreate
  1180.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1181. {
  1182.    FunctionPrologue( (char *)name, argc, argv );
  1183.  
  1184.    return rtk_TypeD(&RexxTkData,czTclCommand,name,"image create", argc, argv, retstr);
  1185. }
  1186.  
  1187. /*
  1188.  * pathName tag bind tagName ?sequence? ?[+]script?
  1189.  * TkTextTagBind(pathName, tagName [,sequence [,[+|*]script]]] )
  1190.  */
  1191. RFH_RETURN_TYPE TkTextTagBind
  1192.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1193. {
  1194.    FunctionPrologue( (char *)name, argc, argv );
  1195.  
  1196.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1197.  
  1198.    if ( my_checkparam( name, argc, 2, 4 ) )
  1199.       return 1;
  1200.  
  1201.    czTclCommand[0] = '\0';
  1202.  
  1203.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1204.    strcat(czTclCommand, " tag bind");
  1205.    strcat(czTclCommand, " ");
  1206.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  1207.    if ( argc > 2)
  1208.    {
  1209.       strcat(czTclCommand, " ");
  1210.       strncat(czTclCommand, argv[2].strptr, argv[2].strlength);
  1211.    }
  1212.    if ( argc > 3)
  1213.    {
  1214.       if ( argv[3].strptr[0] == '*' )
  1215.       {
  1216.          strcat(czTclCommand, " {setRexxtk ");
  1217.          strncat(czTclCommand, argv[3].strptr+1, argv[3].strlength);
  1218.          strcat(czTclCommand, "} "); 
  1219.       }
  1220.       else
  1221.       {
  1222.          strcat(czTclCommand, " \"");
  1223.          strncat(czTclCommand, argv[3].strptr, argv[3].strlength);
  1224.          strcat(czTclCommand, "\"");
  1225.       }
  1226.    }
  1227.    
  1228.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkTextTagBind) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1229.  
  1230.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  1231.    {
  1232.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1233.    }
  1234.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1235. }
  1236. /*
  1237.  * pathName tag configure tagName ?options?
  1238.  * TkTextTagConfig(pathName, tagName [,option, value[ ,option, value...]] )
  1239.  */
  1240. RFH_RETURN_TYPE TkTextTagConfig
  1241.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1242. {
  1243.    FunctionPrologue( (char *)name, argc, argv );
  1244.  
  1245.    return rtk_TypeD(&RexxTkData,czTclCommand,name,"tag configure", argc, argv, retstr);
  1246. }
  1247.  
  1248. RFH_RETURN_TYPE TkTopLevel
  1249.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1250. {
  1251.    FunctionPrologue( (char *)name, argc, argv );
  1252.  
  1253.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"toplevel", argc, argv, retstr);
  1254. }
  1255.  
  1256. RFH_RETURN_TYPE TkWm
  1257.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1258. {
  1259.    FunctionPrologue( (char *)name, argc, argv );
  1260.  
  1261.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"wm", argc, argv, retstr);
  1262. }
  1263.  
  1264. RFH_RETURN_TYPE TkXView
  1265.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1266. {
  1267.    FunctionPrologue( (char *)name, argc, argv );
  1268.  
  1269.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"xview", argc, argv, retstr);
  1270. }
  1271.  
  1272. RFH_RETURN_TYPE TkYView
  1273.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1274. {
  1275.    FunctionPrologue( (char *)name, argc, argv );
  1276.  
  1277.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"yview", argc, argv, retstr);
  1278. }
  1279.  
  1280. RFH_RETURN_TYPE TkDestroy
  1281.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1282. {
  1283.    FunctionPrologue( (char *)name, argc, argv );
  1284.  
  1285.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"destroy", argc, argv, retstr);
  1286. }
  1287.  
  1288. RFH_RETURN_TYPE TkGrab
  1289.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1290. {
  1291.    FunctionPrologue( (char *)name, argc, argv );
  1292.  
  1293.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grab", argc, argv, retstr);
  1294. }
  1295. /*
  1296.  * raise pathName ?aboveThis?
  1297.  * TkRaise( pathName [,aboveThis] )
  1298.  */
  1299. RFH_RETURN_TYPE TkRaise
  1300.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1301. {
  1302.    FunctionPrologue( (char *)name, argc, argv );
  1303.  
  1304.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1305.  
  1306.    if ( my_checkparam( name, argc, 1, 2 ) )
  1307.       return 1;
  1308.  
  1309.    strcpy(czTclCommand, "raise ");
  1310.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1311.    if ( argc == 2)
  1312.    {
  1313.       strcat(czTclCommand, " ");
  1314.       strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  1315.    }
  1316.    
  1317.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkRaise) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1318.  
  1319.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  1320.    {
  1321.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1322.    }
  1323.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1324. }
  1325. /*
  1326.  * lower pathName ?belowThis?
  1327.  * TkLower( pathName [,belowThis] )
  1328.  */
  1329. RFH_RETURN_TYPE TkLower
  1330.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1331. {
  1332.    FunctionPrologue( (char *)name, argc, argv );
  1333.  
  1334.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1335.  
  1336.    if ( my_checkparam( name, argc, 1, 2 ) )
  1337.       return 1;
  1338.  
  1339.    strcpy(czTclCommand, "lower ");
  1340.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1341.    if ( argc == 2)
  1342.    {
  1343.       strcat(czTclCommand, " ");
  1344.       strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  1345.    }
  1346.    
  1347.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkRaise) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1348.  
  1349.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) 
  1350.    {
  1351.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1352.    }
  1353.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1354. }
  1355.  
  1356. RFH_RETURN_TYPE TkGrid
  1357.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1358. {
  1359.    FunctionPrologue( (char *)name, argc, argv );
  1360.  
  1361.    return rtk_TypeF(&RexxTkData,czTclCommand,name,"grid configure", argc, argv, retstr);
  1362. }
  1363.  
  1364. RFH_RETURN_TYPE TkGridBbox
  1365.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1366. {
  1367.    FunctionPrologue( (char *)name, argc, argv );
  1368.  
  1369.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1370.  
  1371.    if ( my_checkparam( name, argc, 1, 5 ) )
  1372.       return 1;
  1373.  
  1374.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid bbox", argc, argv, retstr);
  1375. }
  1376.  
  1377. RFH_RETURN_TYPE TkGridColumnConfig
  1378.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1379. {
  1380.    FunctionPrologue( (char *)name, argc, argv );
  1381.  
  1382.    if (RexxTkData.REXXTK_IntCode) ClearIntError(&RexxTkData);
  1383.  
  1384.    if ( my_checkparam( name, argc, 2, 0 ) )
  1385.       return 1;
  1386.    
  1387.    strcpy(czTclCommand, "grid columnconfigure ");
  1388.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1389.    strcat(czTclCommand, " ");
  1390.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  1391.    strcat(czTclCommand, " ");
  1392.    if (argc > 2)
  1393.    {
  1394.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,2) )
  1395.          return 1;
  1396.    }
  1397.    
  1398.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkGridColumnConfig) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1399.  
  1400.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  1401.       return ReturnError( &RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1402.    }
  1403.    
  1404.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1405. }
  1406.  
  1407. RFH_RETURN_TYPE TkGridConfig
  1408.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1409. {
  1410.    FunctionPrologue( (char *)name, argc, argv );
  1411.  
  1412.    return rtk_TypeF(&RexxTkData,czTclCommand,name,"grid configure", argc, argv, retstr);
  1413. }
  1414.  
  1415. RFH_RETURN_TYPE TkGridForget
  1416.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1417. {
  1418.    FunctionPrologue( (char *)name, argc, argv );
  1419.  
  1420.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1421.  
  1422.    if ( my_checkparam( name, argc, 1, 0 ) )
  1423.       return 1;
  1424.  
  1425.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid forget", argc, argv, retstr);
  1426. }
  1427.  
  1428. RFH_RETURN_TYPE TkGridInfo
  1429.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1430. {
  1431.    FunctionPrologue( (char *)name, argc, argv );
  1432.  
  1433.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1434.  
  1435.    if ( my_checkparam( name, argc, 1, 1 ) )
  1436.       return 1;
  1437.  
  1438.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid info", argc, argv, retstr);
  1439. }
  1440.  
  1441. RFH_RETURN_TYPE TkGridLocation
  1442.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1443. {
  1444.    FunctionPrologue( (char *)name, argc, argv );
  1445.  
  1446.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1447.  
  1448.    if ( my_checkparam( name, argc, 3, 3 ) )
  1449.       return 1;
  1450.  
  1451.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid location", argc, argv, retstr);
  1452. }
  1453.  
  1454. RFH_RETURN_TYPE TkGridPropagate
  1455.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1456. {
  1457.    FunctionPrologue( (char *)name, argc, argv );
  1458.  
  1459.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1460.  
  1461.    if ( my_checkparam( name, argc, 1, 2 ) )
  1462.       return 1;
  1463.  
  1464.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid propagate", argc, argv, retstr);
  1465. }
  1466.  
  1467. RFH_RETURN_TYPE TkGridRowConfig
  1468.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1469. {
  1470.    FunctionPrologue( (char *)name, argc, argv );
  1471.  
  1472.    if (RexxTkData.REXXTK_IntCode) ClearIntError(&RexxTkData);
  1473.  
  1474.    if ( my_checkparam( name, argc, 2, 0 ) )
  1475.       return 1;
  1476.    
  1477.    strcpy(czTclCommand, "grid rowconfigure ");
  1478.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1479.    strcat(czTclCommand, " ");
  1480.    strncat(czTclCommand, argv[1].strptr, argv[1].strlength);
  1481.    strcat(czTclCommand, " ");
  1482.    if (argc > 2)
  1483.    {
  1484.       if ( rtk_procOptArgs(name,czTclCommand,argc,argv,2) )
  1485.          return 1;
  1486.    }
  1487.    
  1488.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkGridRowConfig) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1489.  
  1490.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  1491.       return ReturnError( &RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1492.    }
  1493.    
  1494.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1495. }
  1496.  
  1497. RFH_RETURN_TYPE TkGridRemove
  1498.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1499. {
  1500.    FunctionPrologue( (char *)name, argc, argv );
  1501.  
  1502.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1503.  
  1504.    if ( my_checkparam( name, argc, 1, 0 ) )
  1505.       return 1;
  1506.  
  1507.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid remove", argc, argv, retstr);
  1508. }
  1509.  
  1510. RFH_RETURN_TYPE TkGridSize
  1511.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1512. {
  1513.    FunctionPrologue( (char *)name, argc, argv );
  1514.  
  1515.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1516.  
  1517.    if ( my_checkparam( name, argc, 2, 2 ) )
  1518.       return 1;
  1519.  
  1520.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"grid size", argc, argv, retstr);
  1521. }
  1522.  
  1523. RFH_RETURN_TYPE TkGridSlaves
  1524.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1525. {
  1526.    FunctionPrologue( (char *)name, argc, argv );
  1527.  
  1528.    return rtk_TypeF(&RexxTkData,czTclCommand,name,"grid slaves", argc, argv, retstr);
  1529. }
  1530.  
  1531. RFH_RETURN_TYPE TkVar
  1532.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1533. {
  1534.    FunctionPrologue( (char *)name, argc, argv );
  1535.  
  1536.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"set", argc, argv, retstr);
  1537. }
  1538.  
  1539. RFH_RETURN_TYPE TkSetFileType
  1540.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1541. {
  1542.    FunctionPrologue( (char *)name, argc, argv );
  1543.  
  1544.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"setFileTypes", argc, argv, retstr);
  1545. }
  1546.  
  1547. RFH_RETURN_TYPE TkFocus
  1548.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1549. {
  1550.    FunctionPrologue( (char *)name, argc, argv );
  1551.  
  1552.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"focus", argc, argv, retstr);
  1553. }
  1554.  
  1555. RFH_RETURN_TYPE TkFontActual
  1556.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1557. {
  1558.    FunctionPrologue( (char *)name, argc, argv );
  1559.  
  1560.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"font actual", argc, argv, retstr);
  1561. }
  1562.  
  1563. RFH_RETURN_TYPE TkFontConfig
  1564.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1565. {
  1566.    FunctionPrologue( (char *)name, argc, argv );
  1567.  
  1568.    return rtk_TypeE(&RexxTkData,czTclCommand,name,"font config", argc, argv, retstr);
  1569. }
  1570.  
  1571. RFH_RETURN_TYPE TkFontCreate
  1572.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1573. {
  1574.    FunctionPrologue( (char *)name, argc, argv );
  1575.  
  1576.    return rtk_TypeE(&RexxTkData,czTclCommand,name,"font create", argc, argv, retstr);
  1577. }
  1578.  
  1579. RFH_RETURN_TYPE TkFontDelete
  1580.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1581. {
  1582.    FunctionPrologue( (char *)name, argc, argv );
  1583.  
  1584.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"font delete", argc, argv, retstr);
  1585. }
  1586.  
  1587. RFH_RETURN_TYPE TkFontFamilies
  1588.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1589. {
  1590.    FunctionPrologue( (char *)name, argc, argv );
  1591.  
  1592.    if (RexxTkData.REXXTK_IntCode) ClearIntError(&RexxTkData);
  1593.  
  1594.    if ( my_checkparam( name, argc, 0, 2 ) )
  1595.       return 1;
  1596.  
  1597.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"font families", argc, argv, retstr);
  1598. }
  1599.  
  1600. RFH_RETURN_TYPE TkFontMeasure
  1601.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1602. {
  1603.    FunctionPrologue( (char *)name, argc, argv );
  1604.  
  1605.    if (RexxTkData.REXXTK_IntCode) ClearIntError(&RexxTkData);
  1606.  
  1607.    if ( my_checkparam( name, argc, 2, 4 ) )
  1608.       return 1;
  1609.  
  1610.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"font measure", argc, argv, retstr);
  1611. }
  1612.  
  1613. RFH_RETURN_TYPE TkFontMetrics
  1614.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1615. {
  1616.    FunctionPrologue( (char *)name, argc, argv );
  1617.  
  1618.    if (RexxTkData.REXXTK_IntCode) ClearIntError(&RexxTkData);
  1619.  
  1620.    if ( my_checkparam( name, argc, 1, 0 ) )
  1621.       return 1;
  1622.  
  1623.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"font metrics", argc, argv, retstr);
  1624. }
  1625.  
  1626. RFH_RETURN_TYPE TkFontNames
  1627.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1628. {
  1629.    FunctionPrologue( (char *)name, argc, argv );
  1630.  
  1631.    if (RexxTkData.REXXTK_IntCode) ClearIntError(&RexxTkData);
  1632.  
  1633.    if ( my_checkparam( name, argc, 0, 0 ) )
  1634.       return 1;
  1635.  
  1636.    strcpy(czTclCommand, "font names");
  1637.  
  1638.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkFontNames) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1639.    
  1640.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  1641.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1642.    }
  1643.  
  1644.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1645. }
  1646.  
  1647. RFH_RETURN_TYPE TkCget
  1648.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1649. {
  1650.    FunctionPrologue( (char *)name, argc, argv );
  1651.  
  1652.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1653.  
  1654.    if ( my_checkparam( name, argc, 2, 2 ) )
  1655.       return 1;
  1656.  
  1657.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"cget", argc, argv, retstr);
  1658. }
  1659.  
  1660. RFH_RETURN_TYPE TkCheckButton
  1661.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1662. {
  1663.    FunctionPrologue( (char *)name, argc, argv );
  1664.  
  1665.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1666.  
  1667.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"checkbutton", argc, argv, retstr);
  1668. }
  1669.  
  1670. RFH_RETURN_TYPE TkRadioButton
  1671.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1672. {
  1673.    FunctionPrologue( (char *)name, argc, argv );
  1674.  
  1675.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1676.  
  1677.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"radiobutton", argc, argv, retstr);
  1678. }
  1679.  
  1680. RFH_RETURN_TYPE TkIndex
  1681.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1682. {
  1683.    FunctionPrologue( (char *)name, argc, argv );
  1684.  
  1685.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1686.  
  1687.    if ( my_checkparam( name, argc, 2, 2 ) )
  1688.       return 1;
  1689.  
  1690.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"index", argc, argv, retstr);
  1691. }
  1692.  
  1693. RFH_RETURN_TYPE TkSee
  1694.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1695. {
  1696.    FunctionPrologue( (char *)name, argc, argv );
  1697.  
  1698.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1699.  
  1700.    if ( my_checkparam( name, argc, 2, 2 ) )
  1701.       return 1;
  1702.  
  1703.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"see", argc, argv, retstr);
  1704. }
  1705.  
  1706. RFH_RETURN_TYPE TkScan
  1707.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1708. {
  1709.    FunctionPrologue( (char *)name, argc, argv );
  1710.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"scan", argc, argv, retstr);
  1711. }
  1712. RFH_RETURN_TYPE TkSelection
  1713.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1714. {
  1715.    FunctionPrologue( (char *)name, argc, argv );
  1716.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"selection", argc, argv, retstr);
  1717. }
  1718. RFH_RETURN_TYPE TkEntry
  1719.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1720. {
  1721.    FunctionPrologue( (char *)name, argc, argv );
  1722.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"entry", argc, argv, retstr);
  1723. }
  1724. RFH_RETURN_TYPE TkEvent
  1725.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1726. {
  1727.    FunctionPrologue( (char *)name, argc, argv );
  1728.    return rtk_TypeF(&RexxTkData,czTclCommand,name,"event", argc, argv, retstr);
  1729. }
  1730. RFH_RETURN_TYPE TkError
  1731.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1732. {
  1733.    FunctionPrologue( (char *)name, argc, argv );
  1734.    return RxReturnString( retstr, RexxTkData.REXXTK_ErrMsg ) ;
  1735. }
  1736. RFH_RETURN_TYPE TkListBox
  1737.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1738. {
  1739.    FunctionPrologue( (char *)name, argc, argv );
  1740.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"listbox", argc, argv, retstr);
  1741. }
  1742. RFH_RETURN_TYPE TkScrollBar
  1743.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1744. {
  1745.    FunctionPrologue( (char *)name, argc, argv );
  1746.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"scrollbar", argc, argv, retstr);
  1747. }
  1748. RFH_RETURN_TYPE TkImageBitmap
  1749.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1750. {
  1751.    FunctionPrologue( (char *)name, argc, argv );
  1752.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"image create bitmap", argc, argv, retstr);
  1753. }
  1754. RFH_RETURN_TYPE TkImagePhoto
  1755.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1756. {
  1757.    FunctionPrologue( (char *)name, argc, argv );
  1758.    return rtk_TypeA(&RexxTkData,czTclCommand,name,"image create photo", argc, argv, retstr);
  1759. }
  1760. RFH_RETURN_TYPE TkPopup
  1761.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1762. {
  1763.    FunctionPrologue( (char *)name, argc, argv );
  1764.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1765.    if ( my_checkparam( name, argc, 3, 4 ) )
  1766.       return( 1 );
  1767.    return rtk_TypeB(&RexxTkData,czTclCommand,name,"tk_popup", argc, argv, retstr);
  1768. }
  1769. RFH_RETURN_TYPE TkConfig
  1770.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1771. {
  1772.    FunctionPrologue( (char *)name, argc, argv );
  1773.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1774.    czTclCommand[0] = '\0';
  1775.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1776.    strcat(czTclCommand, " configure");
  1777.    if (argc >= 2) 
  1778.    {
  1779.       if ( rtk_procOptArgs(name, czTclCommand,argc,argv,1) )
  1780.          return 1;
  1781.    }
  1782.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkConfig) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1783.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  1784.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1785.    }
  1786.    return RxReturnString( retstr, "" ) ;
  1787. }
  1788. RFH_RETURN_TYPE TkGet
  1789.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1790. {
  1791.    FunctionPrologue( (char *)name, argc, argv );
  1792.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"get", argc, argv, retstr);
  1793. }
  1794. RFH_RETURN_TYPE TkGetConfig
  1795.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1796. {
  1797.    FunctionPrologue( (char *)name, argc, argv );
  1798.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1799.    if ( my_checkparam( name, argc, 1, 2 ) )
  1800.       return( 1 );
  1801.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"configure", argc, argv, retstr);
  1802. }
  1803. RFH_RETURN_TYPE TkCurSelection
  1804.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1805. {
  1806.    FunctionPrologue( (char *)name, argc, argv );
  1807.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1808.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"curselection", argc, argv, retstr);
  1809. }
  1810. RFH_RETURN_TYPE TkSet
  1811.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1812. {
  1813.    FunctionPrologue( (char *)name, argc, argv );
  1814.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"set", argc, argv, retstr);
  1815. }
  1816. RFH_RETURN_TYPE TkDelete
  1817.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1818. {
  1819.    FunctionPrologue( (char *)name, argc, argv );
  1820.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"delete", argc, argv, retstr);
  1821. }
  1822. RFH_RETURN_TYPE TkInsert
  1823.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1824. {
  1825.    FunctionPrologue( (char *)name, argc, argv );
  1826.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"insert", argc, argv, retstr);
  1827. }
  1828. RFH_RETURN_TYPE TkNearest
  1829.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1830. {
  1831.    FunctionPrologue( (char *)name, argc, argv );
  1832.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1833.    if ( my_checkparam( name, argc, 2, 2 ) )
  1834.       return( 1 );
  1835.    return rtk_TypeC(&RexxTkData,czTclCommand,name,"nearest", argc, argv, retstr);
  1836. }
  1837. RFH_RETURN_TYPE TkAfter
  1838.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1839. {
  1840.    FunctionPrologue( (char *)name, argc, argv );
  1841.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1842.    czTclCommand[0] = '\0';
  1843.       
  1844.    strcat(czTclCommand, "after ");
  1845.    /* check if "cancel" or not */
  1846.    if (argv[0].strptr[0] == 'c') {
  1847.       strcat(czTclCommand, "cancel ");
  1848.       strcat(czTclCommand, argv[1].strptr);
  1849.    } else {
  1850.       strcat(czTclCommand, argv[0].strptr);
  1851.       if (argc > 1) {
  1852.          strcat(czTclCommand, " {setRexxtk ");
  1853.          strcat(czTclCommand, argv[1].strptr);
  1854.          strcat(czTclCommand, "}");
  1855.       }
  1856.    }
  1857.       
  1858.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkAfter) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1859.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  1860.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1861.    }
  1862.    
  1863.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1864. }
  1865. RFH_RETURN_TYPE TkChooseColor
  1866.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1867. {
  1868.    FunctionPrologue( (char *)name, argc, argv );
  1869.    return rtk_TypeH(&RexxTkData,czTclCommand,name,"tk_chooseColor", argc, argv, retstr);
  1870. }
  1871. RFH_RETURN_TYPE TkMessageBox
  1872.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1873. {
  1874.    FunctionPrologue( (char *)name, argc, argv );
  1875.    return rtk_TypeH(&RexxTkData,czTclCommand,name,"tk_messageBox", argc, argv, retstr);
  1876. }
  1877. RFH_RETURN_TYPE TkGetSaveFile
  1878.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1879. {
  1880.    FunctionPrologue( (char *)name, argc, argv );
  1881.    return rtk_TypeH(&RexxTkData,czTclCommand,name,"tk_getSaveFile -filetypes $rtFileTypes", argc, argv, retstr);
  1882. }
  1883. RFH_RETURN_TYPE TkGetOpenFile
  1884.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1885. {
  1886.    FunctionPrologue( (char *)name, argc, argv );
  1887.    return rtk_TypeH(&RexxTkData,czTclCommand,name,"tk_getOpenFile -filetypes $rtFileTypes", argc, argv, retstr);
  1888. }
  1889. RFH_RETURN_TYPE TkChooseDirectory
  1890.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1891. {
  1892.    FunctionPrologue( (char *)name, argc, argv );
  1893.    return rtk_TypeH(&RexxTkData,czTclCommand,name,"tk_chooseDirectory", argc, argv, retstr);
  1894. }
  1895. RFH_RETURN_TYPE TkPack
  1896.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1897. {
  1898.    FunctionPrologue( (char *)name, argc, argv );
  1899.    return rtk_TypeF(&RexxTkData,czTclCommand,name,"pack", argc, argv, retstr);
  1900. }
  1901. /*
  1902.  * winfo command ?arg?
  1903.  * TkWinfo(command [,arg,...])
  1904.  */
  1905. RFH_RETURN_TYPE TkWinfo
  1906.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1907. {
  1908.    int i;
  1909.    FunctionPrologue( (char *)name, argc, argv );
  1910.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1911.    if ( my_checkparam( name, argc, 1, 0 ) )
  1912.       return 1;
  1913.    czTclCommand[0] = '\0';
  1914.    strcpy( czTclCommand, "winfo " );
  1915.    strncat(czTclCommand, argv[0].strptr, argv[0].strlength);
  1916.    for ( i = 1; i < argc; i++ )
  1917.    {
  1918.       strcat(czTclCommand, " ");
  1919.       strncat(czTclCommand, argv[i].strptr, argv[i].strlength);
  1920.    }
  1921.       
  1922.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkWinfo) command: %s\n",__FILE__,__LINE__,czTclCommand);)
  1923.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) != TCL_OK) {
  1924.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1925.    }
  1926.    
  1927.    return RxReturnString( retstr, RexxTkData.RexxTkInterp->result ) ;
  1928. }
  1929. RFH_RETURN_TYPE TkWait
  1930.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  1931. {
  1932.    char *cmd=czTclCommand;
  1933.    int state=0,len,i;
  1934.    int word2_start=0;
  1935.    int word1_length=0;
  1936.    FunctionPrologue( (char *)name, argc, argv );
  1937.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  1938.    /*
  1939.     * Need to copy the static string "rexxtk_setrexxtk" to a piece of
  1940.     * memory that is writeable, because Tcl updates this data :-( Grrrr.
  1941.     * Tcl 8.1 broke this.
  1942.     */
  1943.    strcpy( czTclCommand, rexxtk_setrexxtk);
  1944.    if (Tcl_Eval(RexxTkData.RexxTkInterp, czTclCommand) !=TCL_OK)
  1945.    {
  1946.       DEBUGDUMP(fprintf(stderr,"%s-%d: (TkWait) error: %s at %d\n",__FILE__,__LINE__,RexxTkData.RexxTkInterp->result, RexxTkData.RexxTkInterp->errorLine);)
  1947.       return ReturnError(&RexxTkData, retstr, -1, RexxTkData.RexxTkInterp->result );
  1948.    }
  1949.    /*
  1950.     * TkWait returns the Rexx function to be called as the first word,
  1951.     * followed by optional parameters. When using the standard method
  1952.     * of calling TkWait; ie 
  1953.     *   RexxTkData.RexxTkInterpret 'call' Tkwait()
  1954.     * any optional parameters will always be uppercased.
  1955.     * We need to split the return from Tcl_Eval() into the Rexx
  1956.     * function, and then the optional parameters. The value returned to
  1957.     * the Rexx program will have quotes around the optional parameters
  1958.     * to ensure they are NOT uppercased.
  1959.     */
  1960.    len = strlen( RexxTkData.RexxTkInterp->result ) ;
  1961.    if ( len > TCLCOMMANDLEN + 2)
  1962.    {
  1963.       cmd = malloc( len + 3 );
  1964.    }
  1965.    for (i = 0; i < len; i++ )
  1966.    {
  1967.       if ( state == 0 )
  1968.       {
  1969.          if ( RexxTkData.RexxTkInterp->result[i] == ' ' )
  1970.          {
  1971.             state = 1;
  1972.             word1_length = i;
  1973.          }
  1974.       }
  1975.       else
  1976.       {
  1977.          if ( RexxTkData.RexxTkInterp->result[i] != ' ' )
  1978.          {
  1979.             word2_start = i;
  1980.             break;
  1981.          }
  1982.       }
  1983.    }
  1984.    if ( word2_start == 0 )
  1985.    {
  1986.       /*
  1987.        * No parameters...
  1988.        */
  1989.       strcpy( cmd, RexxTkData.RexxTkInterp->result );
  1990.    }
  1991.    else
  1992.    {
  1993.       strncpy( cmd, RexxTkData.RexxTkInterp->result, word1_length );
  1994.       cmd[word1_length] = '\0';
  1995.       strcat( cmd, " \"");
  1996.       strcat( cmd, RexxTkData.RexxTkInterp->result+word2_start );
  1997.       strcat( cmd, "\"");
  1998.    }
  1999.    DEBUGDUMP(fprintf(stderr,"%s-%d: (TkWait) result: %s\n",__FILE__,__LINE__,cmd);)
  2000.    /*
  2001.     * Free cmd if it was allocated by us.
  2002.     */
  2003.    return RxReturnStringAndFree( retstr, cmd, (cmd!=czTclCommand) ) ;
  2004. }
  2005. RFH_RETURN_TYPE TkDropFuncs
  2006.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  2007. {
  2008.    ULONG rc=0;
  2009.    int unload=0;
  2010.    if ( my_checkparam(name, argc, 0, 1 ) )
  2011.       return( 1 );
  2012.    if ( argv[0].strlength == 6
  2013.    &&   memcmpi( argv[0].strptr, "UNLOAD", 6 ) == 0 )
  2014.       unload = 1;
  2015.    (void)TermRxPackage( RxPackageName, unload );
  2016.    return RxReturnNumber( retstr, rc );
  2017. }
  2018. RFH_RETURN_TYPE TkVariable
  2019.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  2020. {
  2021.    ULONG rc = 0L;
  2022.    char buf[50];
  2023.    FunctionPrologue( (char *)name, argc, argv );
  2024.    if (RexxTkData.REXXTK_IntCode) ClearIntError( &RexxTkData);
  2025.    if ( my_checkparam( name, argc, 1, 2 ) )
  2026.       return( 1 );
  2027.    if ( memcmp( "DEBUG", argv[0].strptr, argv[0].strlength ) == 0 )
  2028.    {
  2029.       if ( argc == 1 )
  2030.       {
  2031.          sprintf( buf, "%d", RxGetRunFlags( ) );
  2032.          return RxReturnString( retstr, buf );
  2033.       }
  2034.       else
  2035.       {
  2036.          RxSetRunFlags ( atoi( (char *)argv[1].strptr ) );
  2037.          return RxReturnNumber( retstr, 0 );
  2038.       }
  2039.    }
  2040.    else if ( memcmp( "VERSION", argv[0].strptr, argv[0].strlength ) == 0 )
  2041.    {
  2042.       if ( argc == 1 )
  2043.       {
  2044.          sprintf( buf, "%s %s %s", RxPackageName, REXXTK_VERSION, REXXTK_DATE );
  2045.          return RxReturnString( retstr, buf );
  2046.       }
  2047.       else
  2048.          return RxReturnString( retstr, "ERROR: Cannot set variable; VERSION" );
  2049.    }
  2050.    else if ( memcmp( "DEBUGFILE", argv[0].strptr, argv[0].strlength ) == 0 )
  2051.    {
  2052.       if ( argc == 1 )
  2053.          return RxReturnString( retstr, RxGetTraceFile() );
  2054.       else
  2055.       {
  2056.          rc = RxSetTraceFile( (char *)argv[1].strptr );
  2057.          return RxReturnNumber( retstr, rc );
  2058.       }
  2059.    }
  2060.    sprintf( buf, "ERROR: Invalid variable; %s", argv[0].strptr );
  2061.    return RxReturnString( retstr, buf );
  2062. }
  2063.  
  2064. RFH_RETURN_TYPE TkLoadFuncs
  2065.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  2066. {
  2067.    ULONG rc = 0L;
  2068. #if defined(DYNAMIC_LIBRARY)
  2069.    if ( !QueryRxFunction( "TKWAIT" ) )
  2070.    {
  2071.       rc = InitRxPackage( NULL );
  2072.       /* 
  2073.        * Register all external functions
  2074.        */
  2075.       if ( !rc )
  2076.       {
  2077.          rc = RegisterRxFunctions( );
  2078.       }
  2079.    }
  2080. #endif
  2081.    return RxReturnNumber( retstr, rc );
  2082. }
  2083.    
  2084. /*
  2085.  * The following functions are used in rxpackage.c
  2086.  */
  2087. /*-----------------------------------------------------------------------------
  2088.  * Print a usage message.
  2089.  *----------------------------------------------------------------------------*/
  2090. void usage
  2091. #ifdef HAVE_PROTO
  2092.    (void)
  2093. #else
  2094.    ()
  2095. #endif
  2096. {
  2097.    (void)fprintf(stderr,
  2098.       "\nVersion: %s %s %s\n\nUsage:   %s [-h]\n         %s [-idvf<trace file>] [Rexx program name]\n\n",
  2099.       RxPackageName,
  2100.       REXXTK_VERSION,
  2101.       REXXTK_DATE,
  2102.       RxPackageName,
  2103.       RxPackageName);
  2104.    exit( 1 );
  2105. }
  2106. /*-----------------------------------------------------------------------------
  2107.  * Execute any initialisation
  2108.  *----------------------------------------------------------------------------*/
  2109. int InitialisePackage
  2110. #ifdef HAVE_PROTO
  2111.    ( void )
  2112. #else
  2113.    ( )
  2114. #endif
  2115. {
  2116.    int rc;
  2117.    InternalTrace( "InitialisePackage", NULL );
  2118.    ClearIntError( &RexxTkData);
  2119. #if defined(WIN32) || defined(OS2_DYN)
  2120.    /*
  2121.     * Get the entry points in the tlc and tk libraries
  2122.     */
  2123.    if ( GetTclTkLibraries() )
  2124.    {
  2125.       fprintf(stderr, "Could not find any supported Tcl/Tk DLLs.\n");
  2126.       return 1;
  2127.    }
  2128. #endif
  2129.    /*
  2130.     * create the tcl RexxTkData.RexxTkInterperator
  2131.     */
  2132.    RexxTkData.RexxTkInterp = Tcl_CreateInterp();
  2133.    Tcl_FindExecutable("rexxtk");
  2134.    DEBUGDUMP(fprintf(stderr,"%s-%d: After Tcl_CreateInterp()\n",__FILE__,__LINE__);)
  2135.    /*
  2136.     * Init the tcl RexxTkData.RexxTkInterp and the tk stuff, too.
  2137.     */
  2138.    if (( rc = Tcl_Init(RexxTkData.RexxTkInterp)) != TCL_OK )
  2139.    {
  2140.       fprintf(stderr, "Tcl_Init failed miserably. rc: %d.", rc );
  2141.       if ( RexxTkData.RexxTkInterp && RexxTkData.RexxTkInterp->result )
  2142.          fprintf(stderr, " Result: %s\n", RexxTkData.RexxTkInterp->result);
  2143.       else
  2144.          fprintf(stderr, "\n" );
  2145.       return(1);
  2146.    }
  2147.    DEBUGDUMP(fprintf(stderr,"%s-%d: After Tcl_Init()\n",__FILE__,__LINE__);)
  2148.    if (( rc = Tk_Init(RexxTkData.RexxTkInterp)) != TCL_OK )
  2149.    {
  2150.       fprintf(stderr, "Tk_Init failed miserably. rc: %d.", rc );
  2151.       if ( RexxTkData.RexxTkInterp && RexxTkData.RexxTkInterp->result )
  2152.          fprintf(stderr, " Result: %s\n", RexxTkData.RexxTkInterp->result);
  2153.       else
  2154.          fprintf(stderr, "\n" );
  2155.       return(1);
  2156.    }
  2157.    DEBUGDUMP(fprintf(stderr,"%s-%d: After Tk_Init()\n",__FILE__,__LINE__);)
  2158.    /*
  2159.     * Install the root window destroy binding and
  2160.     * a proceedure for handling the return value for the
  2161.     * rexx/tk commands and setting the rtFileTypes var
  2162.     * for the tk_getOpenFile filetypes option.
  2163.     */
  2164.    if (Tcl_Eval(RexxTkData.RexxTkInterp,
  2165.       "bind . <Destroy> {setRexxtk Quit %W}\n"
  2166.       "set rtFileTypes {}\n"
  2167.       "set rexxtkcommandlist {}\n"
  2168.       "set rexxtkcommandcount 0\n"
  2169.       "proc setRexxtk {args} {\n"
  2170.          "global rexxtkcommandlist\n"
  2171.          "global rexxtkcommandcount\n"
  2172.          "if {[llength $args] == 2} {\n"
  2173.          "   set arg0 [lindex $args 0]\n"
  2174.          "   set arg1 [lindex $args 1]\n"
  2175.          "   if {[string compare $arg0 \"Quit\"] == 0} {\n"
  2176.          "      if {[string compare $arg1 \".\"] == 0} {\n"
  2177.          "         set args {Quit}\n"
  2178.          "      } else {return}\n"
  2179.          "   }\n"
  2180.          "}\n"
  2181.          "set rexxtkcommandlist [linsert $rexxtkcommandlist 0 $args]\n"
  2182.          "set rexxtkcommandcount [expr $rexxtkcommandcount+1]\n"
  2183.       "}\n"
  2184.       "proc setFileTypes {type args} {\n"
  2185.          "global rtFileTypes\n"
  2186.          "if {$type == {clear}} {\n"
  2187.             "set rtFileTypes {}\n"
  2188.             "return\n"
  2189.          "}\n"
  2190.          "lappend rtFileTypes [list $type $args]\n"
  2191.       "}\n"
  2192.       ) !=TCL_OK) {
  2193.       fprintf(stderr, "Tk_Eval failed miserably at line %d: %s\n", RexxTkData.RexxTkInterp->errorLine, RexxTkData.RexxTkInterp->result);
  2194.       return 1;
  2195.    }
  2196.    DEBUGDUMP(fprintf(stderr,"%s-%d: After Tcl_Eval()\n",__FILE__,__LINE__);)
  2197.    return 0;
  2198. }
  2199. /*-----------------------------------------------------------------------------
  2200.  * Execute any termination
  2201.  *----------------------------------------------------------------------------*/
  2202. int TerminatePackage
  2203. #ifdef HAVE_PROTO
  2204.    ( void )
  2205. #else
  2206.    ( )
  2207. #endif
  2208. {
  2209.    Tcl_DeleteInterp( RexxTkData.RexxTkInterp );
  2210.    return 0;
  2211. }
  2212. /*
  2213.  * This function is used to expose the base Rexx/Tk environment
  2214.  * include the Tcl interpreter
  2215.  * to other Rexx/Tk external function libraries
  2216.  */
  2217. RFH_RETURN_TYPE TkGetBaseData
  2218.    (RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr)
  2219. {
  2220.    FunctionPrologue( (char *)name, argc, argv );
  2221.    return RxReturnNumber( retstr, (long)&RexxTkData );
  2222. }
  2223. #if defined(USE_REXX6000)
  2224. /*
  2225.  * This function is used as the entry point for the REXX/6000
  2226.  * Rexx Interpreter
  2227.  * If you change this table, don't forget to change the table at the
  2228.  * start of this file.
  2229.  */
  2230. USHORT InitFunc( RXFUNCBLOCK **FuncBlock )
  2231. {
  2232.    static RXFUNCBLOCK funcarray[] =
  2233.    {
  2234.       { "TKACTIVATE"            ,TkActivate           ,NULL },
  2235.       { "TKADD"                 ,TkAdd                ,NULL },
  2236.       { "TKAFTER"               ,TkAfter              ,NULL },
  2237.       { "TKBBOX"                ,TkBBox               ,NULL },
  2238.       { "TKBIND"                ,TkBind               ,NULL },
  2239.       { "TKBUTTON"              ,TkButton             ,NULL },
  2240.       { "TKCANVAS"              ,TkCanvas             ,NULL },
  2241.       { "TKCANVASADDTAG"        ,TkCanvasAddTag       ,NULL },
  2242.       { "TKCANVASARC"           ,TkCanvasArc          ,NULL },
  2243.       { "TKCANVASBIND"          ,TkCanvasBind         ,NULL },
  2244.       { "TKCANVASBITMAP"        ,TkCanvasBitmap       ,NULL },
  2245.       { "TKCANVASCANVASX"       ,TkCanvasCanvasx      ,NULL },
  2246.       { "TKCANVASCANVASY"       ,TkCanvasCanvasy      ,NULL },
  2247.       { "TKCANVASCGET"          ,TkCanvasCget         ,NULL },
  2248.       { "TKCANVASCOORDS"        ,TkCanvasCoords       ,NULL },
  2249.       { "TKCANVASDCHARS"        ,TkCanvasDChars       ,NULL },
  2250.       { "TKCANVASDTAG"          ,TkCanvasDTag         ,NULL },
  2251.       { "TKCANVASDELETE"        ,TkCanvasDelete       ,NULL },
  2252.       { "TKCANVASFIND"          ,TkCanvasFind         ,NULL },
  2253.       { "TKCANVASFOCUS"         ,TkCanvasFocus        ,NULL },
  2254.       { "TKCANVASIMAGE"         ,TkCanvasImage        ,NULL },
  2255.       { "TKCANVASLINE"          ,TkCanvasLine         ,NULL },
  2256.       { "TKCANVASOVAL"          ,TkCanvasOval         ,NULL },
  2257.       { "TKCANVASPOLYGON"       ,TkCanvasPolygon      ,NULL },
  2258.       { "TKCANVASPOSTSCRIPT"    ,TkCanvasPostscript   ,NULL },
  2259.       { "TKCANVASRECTANGLE"     ,TkCanvasRectangle    ,NULL },
  2260.       { "TKCANVASTEXT"          ,TkCanvasText         ,NULL },
  2261.       { "TKCANVASTYPE"          ,TkCanvasType         ,NULL },
  2262.       { "TKCANVASWINDOW"        ,TkCanvasWindow       ,NULL },
  2263.       { "TKCGET"                ,TkCget               ,NULL },
  2264.       { "TKCHECKBUTTON"         ,TkCheckButton        ,NULL },
  2265.       { "TKCHOOSECOLOR"         ,TkChooseColor        ,NULL },
  2266.       { "TKCHOOSEDIRECTORY"     ,TkChooseDirectory    ,NULL },
  2267.       { "TKCONFIG"              ,TkConfig             ,NULL },
  2268.       { "TKCURSELECTION"        ,TkCurSelection       ,NULL },
  2269.       { "TKDELETE"              ,TkDelete             ,NULL },
  2270.       { "TKDESTROY"             ,TkDestroy            ,NULL },
  2271.       { "TKDROPFUNCS"           ,TkDropFuncs          ,NULL },
  2272.       { "TKENTRY"               ,TkEntry              ,NULL },
  2273.       { "TKERROR"               ,TkError              ,NULL },
  2274.       { "TKEVENT"               ,TkEvent              ,NULL },
  2275.       { "TKFOCUS"               ,TkFocus              ,NULL },
  2276.       { "TKFONTACTUAL"          ,TkFontActual         ,NULL },
  2277.       { "TKFONTCONFIG"          ,TkFontConfig         ,NULL },
  2278.       { "TKFONTCREATE"          ,TkFontCreate         ,NULL },
  2279.       { "TKFONTDELETE"          ,TkFontDelete         ,NULL },
  2280.       { "TKFONTFAMILIES"        ,TkFontFamilies       ,NULL },
  2281.       { "TKFONTMEASURE"         ,TkFontMeasure        ,NULL },
  2282.       { "TKFONTMETRICS"         ,TkFontMetrics        ,NULL },
  2283.       { "TKFONTNAMES"           ,TkFontNames          ,NULL },
  2284.       { "TKFRAME"               ,TkFrame              ,NULL },
  2285.       { "TKGET"                 ,TkGet                ,NULL },
  2286.       { "TKGETCONFIG"           ,TkGetConfig          ,NULL },
  2287.       { "TKGETOPENFILE"         ,TkGetOpenFile        ,NULL },
  2288.       { "TKGETSAVEFILE"         ,TkGetSaveFile        ,NULL },
  2289.       { "TKGRAB"                ,TkGrab               ,NULL },
  2290.       { "TKGRID"                ,TkGrid               ,NULL },
  2291.       { "TKGRIDBBOX"            ,TkGridBbox           ,NULL },
  2292.       { "TKGRIDCOLUMNCONFIG"    ,TkGridColumnConfig   ,NULL },
  2293.       { "TKGRIDCONFIG"          ,TkGridConfig         ,NULL },
  2294.       { "TKGRIDFORGET"          ,TkGridForget         ,NULL },
  2295.       { "TKGRIDINFO"            ,TkGridInfo           ,NULL },
  2296.       { "TKGRIDLOCATION"        ,TkGridLocation       ,NULL },
  2297.       { "TKGRIDPROPAGATE"       ,TkGridPropagate      ,NULL },
  2298.       { "TKGRIDROWCONFIG"       ,TkGridRowConfig      ,NULL },
  2299.       { "TKGRIDREMOVE"          ,TkGridRemove         ,NULL },
  2300.       { "TKGRIDSIZE"            ,TkGridSize           ,NULL },
  2301.       { "TKGRIDSLAVES"          ,TkGridSlaves         ,NULL },
  2302.       { "TKIMAGEBITMAP"         ,TkImageBitmap        ,NULL },
  2303.       { "TKIMAGEPHOTO"          ,TkImagePhoto         ,NULL },
  2304.       { "TKINDEX"               ,TkIndex              ,NULL },
  2305.       { "TKINSERT"              ,TkInsert             ,NULL },
  2306.       { "TKITEMCONFIG"          ,TkItemConfig         ,NULL },
  2307.       { "TKLABEL"               ,TkLabel              ,NULL },
  2308.       { "TKLISTBOX"             ,TkListBox            ,NULL },
  2309.       { "TKLOADFUNCS"           ,TkLoadFuncs          ,NULL },
  2310.       { "TKLOWER"               ,TkLower              ,NULL },
  2311.       { "TKMENU"                ,TkMenu               ,NULL },
  2312.       { "TKMENUCLONE"           ,TkMenuClone          ,NULL },
  2313.       { "TKMENUENTRYCGET"       ,TkMenuEntryCget      ,NULL },
  2314.       { "TKMENUENTRYCONFIG"     ,TkMenuEntryConfig    ,NULL },
  2315.       { "TKMENUINVOKE"          ,TkMenuInvoke         ,NULL },
  2316.       { "TKMENUPOST"            ,TkMenuPost           ,NULL },
  2317.       { "TKMENUPOSTCASCADE"     ,TkMenuPostCascade    ,NULL },
  2318.       { "TKMENUTYPE"            ,TkMenuType           ,NULL },
  2319.       { "TKMENUUNPOST"          ,TkMenuUnPost         ,NULL },
  2320.       { "TKMENUYPOSITION"       ,TkMenuYPosition      ,NULL },
  2321.       { "TKMESSAGEBOX"          ,TkMessageBox         ,NULL },
  2322.       { "TKNEAREST"             ,TkNearest            ,NULL },
  2323.       { "TKPACK"                ,TkPack               ,NULL },
  2324.       { "TKPOPUP"               ,TkPopup              ,NULL },
  2325.       { "TKRADIOBUTTON"         ,TkRadioButton        ,NULL },
  2326.       { "TKRAISE"               ,TkRaise              ,NULL },
  2327.       { "TKSCALE"               ,TkScale              ,NULL },
  2328.       { "TKSCAN"                ,TkScan               ,NULL },
  2329.       { "TKSEE"                 ,TkSee                ,NULL },
  2330.       { "TKSELECTION"           ,TkSelection          ,NULL },
  2331.       { "TKSCROLLBAR"           ,TkScrollBar          ,NULL },
  2332.       { "TKSET"                 ,TkSet                ,NULL },
  2333.       { "TKSETFILETYPE"         ,TkSetFileType        ,NULL },
  2334.       { "TKTCL"                 ,TkTcl                ,NULL },
  2335.       { "TKTEXT"                ,TkText               ,NULL },
  2336.       { "TKTEXTIMAGECREATE"     ,TkTextImageCreate    ,NULL },
  2337.       { "TKTEXTTAGBIND"         ,TkTextTagBind        ,NULL },
  2338.       { "TKTEXTTAGCONFIG"       ,TkTextTagConfig      ,NULL },
  2339.       { "TKTOPLEVEL"            ,TkTopLevel           ,NULL },
  2340.       { "TKVAR"                 ,TkVar                ,NULL },
  2341.       { "TKVARIABLE"            ,TkVariable           ,NULL },
  2342.       { "TKWAIT"                ,TkWait               ,NULL },
  2343.       { "TKWINFO"               ,TkWinfo              ,NULL },
  2344.       { "TKWM"                  ,TkWm                 ,NULL },
  2345.       { "TKXVIEW"               ,TkXView              ,NULL },
  2346.       { "TKYVIEW"               ,TkYView              ,NULL },
  2347.       { NULL, NULL, NULL }
  2348.    } ;
  2349.    *FuncBlock = funcarray;
  2350.    return (USHORT)0;
  2351. }
  2352. #endif
  2353. #if defined(WIN32)
  2354. int GetTclTkLibraries(void)
  2355. {
  2356.    HINSTANCE tcl_handle=NULL,tk_handle;
  2357.    int i;
  2358.    for ( i = 0; tcllibs[i] != NULL; i++ )
  2359.    {
  2360.       tcl_handle = LoadLibrary( tcllibs[i] );
  2361.       if ( tcl_handle != NULL )
  2362.       {
  2363.          tk_handle = LoadLibrary( tklibs[i] );
  2364.          if ( tk_handle == NULL )
  2365.          {
  2366.             return 1;
  2367.          }
  2368.          if (( RexxTkData.Dyn_TclInit = (TclInitType*)GetProcAddress( (HMODULE)tcl_handle, "Tcl_Init" )) == NULL )
  2369.          {
  2370.             return 1;
  2371.          }
  2372.          if (( RexxTkData.Dyn_TclEval = (TclEvalType*)GetProcAddress( (HMODULE)tcl_handle, "Tcl_Eval" )) == NULL )
  2373.          {
  2374.             return 1;
  2375.          }
  2376.          if (( RexxTkData.Dyn_TclCreateInterp = (TclCreateInterpType*)GetProcAddress( (HMODULE)tcl_handle, "Tcl_CreateInterp" )) == NULL )
  2377.          {
  2378.             return 1;
  2379.          }
  2380.          if (( RexxTkData.Dyn_TclDeleteInterp = (TclDeleteInterpType*)GetProcAddress( (HMODULE)tcl_handle, "Tcl_DeleteInterp" )) == NULL )
  2381.          {
  2382.             return 1;
  2383.          }
  2384.          if (( RexxTkData.Dyn_TclFindExecutable = (TclFindExecutableType*)GetProcAddress( (HMODULE)tcl_handle, "Tcl_FindExecutable" )) == NULL )
  2385.          {
  2386.             return 1;
  2387.          }
  2388.          if (( RexxTkData.Dyn_TkInit = (TkInitType*)GetProcAddress( (HMODULE)tk_handle, "Tk_Init" )) == NULL )
  2389.          {
  2390.             return 1;
  2391.          }
  2392.          break;
  2393.       }
  2394.    }
  2395.    if ( tcl_handle == NULL )
  2396.       return 1;
  2397.    return 0;
  2398. }
  2399. #endif
  2400. #if defined(OS2_DYN)
  2401. int GetTclTkLibraries(void)
  2402. {
  2403.    CHAR LoadError[256];
  2404.    APIRET rc=0L;
  2405.    HMODULE tcl_handle=NULL,tk_handle=NULL;
  2406.    int i;
  2407.    for ( i = 0; tcllibs[i] != NULL; i++ )
  2408.    {
  2409.       rc = DosLoadModule( LoadError, sizeof(LoadError),
  2410.                           tcllibs[i], &tcl_handle ) ;
  2411.       if ( rc == 0 )
  2412.       {
  2413.          rc = DosLoadModule( LoadError, sizeof(LoadError),
  2414.                              tklibs[i], &tk_handle ) ;
  2415.          if ( rc != 0 )
  2416.          {
  2417. fprintf(stderr, "Unable to DosLoadModule: %s rc %d <%s>\n", tklibs[i], rc, LoadError );
  2418.             return 1;
  2419.          }
  2420.          rc = DosQueryProcAddr( tcl_handle, 0L, "Tcl_Init", &RexxTkData.Dyn_TclInit );
  2421.          if ( rc != 0 )
  2422.          {
  2423. fprintf(stderr, "Unable to DosQueryProcAddr: %s rc %d <%s>\n", "Tcl_Init", rc, LoadError );
  2424.             return 1;
  2425.          }
  2426.          rc = DosQueryProcAddr( tcl_handle, 0L, "Tcl_Eval", &RexxTkData.Dyn_TclEval );
  2427.          if ( rc != 0 )
  2428.          {
  2429. fprintf(stderr, "Unable to DosQueryProcAddr: %s rc %d <%s>\n", "Tcl_Eval", rc, LoadError );
  2430.             return 1;
  2431.          }
  2432.          rc = DosQueryProcAddr( tcl_handle, 0L, "Tcl_CreateInterp", &RexxTkData.Dyn_TclCreateInterp );
  2433.          if ( rc != 0 )
  2434.          {
  2435. fprintf(stderr, "Unable to DosQueryProcAddr: %s rc %d <%s>\n", "Tcl_CreateInterp", rc, LoadError );
  2436.             return 1;
  2437.          }
  2438.          rc = DosQueryProcAddr( tcl_handle, 0L, "Tcl_DeleteInterp", &RexxTkData.Dyn_TclDeleteInterp );
  2439.          if ( rc != 0 )
  2440.          {
  2441. fprintf(stderr, "Unable to DosQueryProcAddr: %s rc %d <%s>\n", "Tcl_DeleteInterp", rc, LoadError );
  2442.             return 1;
  2443.          }
  2444.          rc = DosQueryProcAddr( tcl_handle, 0L, "Tcl_FindExecutable", &RexxTkData.Dyn_TclFindExecutable );
  2445.          if ( rc != 0 )
  2446.          {
  2447. fprintf(stderr, "Unable to DosQueryProcAddr: %s rc %d <%s>\n", "Tcl_FindExecutable", rc, LoadError );
  2448.             return 1;
  2449.          }
  2450.          rc = DosQueryProcAddr( tk_handle, 0L, "Tk_Init", &RexxTkData.Dyn_TkInit );
  2451.          if ( rc != 0 )
  2452.          {
  2453. fprintf(stderr, "Unable to DosQueryProcAddr: %s rc %d <%s>\n", "Tk_Init", rc, LoadError );
  2454.             return 1;
  2455.          }
  2456.          break;
  2457.       }
  2458.    }
  2459.    if ( tcl_handle == NULL )
  2460.       return 1;
  2461.    return 0;
  2462. }
  2463. #endif
  2464.