9-nov-97tri-ada '971 tash an alternative to the windows api tri-ada ‘97 terry j. westley...
TRANSCRIPT
![Page 1: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/1.jpg)
9-Nov-97 Tri-Ada '97 1
TASHAn Alternative to the Windows
API
TRI-Ada ‘97Terry J. Westley
[email protected]://www.ocsystems.com/xada/tash
![Page 2: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/2.jpg)
9-Nov-97 Tri-Ada '97 2
Premise
Through a binding to Tcl/Tk, TASH provides the Ada programmer with an alternative to using the Windows 95 API:
A free, platform-independent, graphical user interface development toolkit
Supports native “look and feel” for the X Window System (Unix), Windows 95, and Macintosh.
![Page 3: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/3.jpg)
9-Nov-97 Tri-Ada '97 3
Outline
• What is TASH?• What is Tcl/Tk?• Why would I want to use TASH?• Example of a using TASH to develop a
GUI application in Windows 95
![Page 4: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/4.jpg)
9-Nov-97 Tri-Ada '97 4
What is TASH?
• TASH stands for Tcl Ada SHell• An Ada 95 binding to Tcl/Tk 8.0• A layered approach:
– Complete thin binding– Experimental thick binding
![Page 5: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/5.jpg)
9-Nov-97 Tri-Ada '97 5
What is Tcl/Tk?
• Tcl is a simple, powerful, and extensible scripting language similar to Unix shell scripting languages
• Tk is a GUI toolkit extension of Tcl• Tk was originally targeted to X
Window System, but now also supports Windows 95 and Macintosh native “look and feel”
• There is also a Tcl/Tk plugin for Web browsers
![Page 6: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/6.jpg)
9-Nov-97 Tri-Ada '97 6
Why use Tcl/Tk?
• Rapid development– Tcl is an interpreted language– Tk is a specialized extension for writing GUIs
• Platform independence• System integration
– Scripting languages, especially Tcl, are excellent for gluing together several programs and applications
• End-user programming– Tcl is an interpreted language– Tcl has a very simple syntax
![Page 7: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/7.jpg)
9-Nov-97 Tri-Ada '97 7
What does TASH do?
• Most importantly, it is a binding from Ada 95
• Allows a Tcl program to use Ada in place of C to implement Tcl commands
• Makes the Tcl library functions available to an Ada program:– string and list handling– regular expression matching– hash tables– and, GUI development
![Page 8: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/8.jpg)
9-Nov-97 Tri-Ada '97 8
Why use TASH?
• Together with GNAT, it provides a free GUI development environment for Windows 95
• Your code and interface design are completely portable to Unix and Macintosh
![Page 9: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/9.jpg)
9-Nov-97 Tri-Ada '97 9
Sample GUI Application
• A simple GUI application for computing future value of a series of fixed monthly investments will be demonstrated
• Future Value =
• where M = monthly investment
i = interest rate per month
n = number of months
M *1 i n 1
i
![Page 10: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/10.jpg)
9-Nov-97 Tri-Ada '97 10
Sample Screenshot
![Page 11: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/11.jpg)
9-Nov-97 Tri-Ada '97 11
Pattern of a TASH Program
• Start Tcl Interpreter• Initialize Tcl and Tk• Create new Tcl commands• Create GUI components• Bind event handlers• Start Tk event loop
![Page 12: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/12.jpg)
9-Nov-97 Tri-Ada '97 12
Create GUI Components
Window Manager
Entry
Button
Frame
Label
![Page 13: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/13.jpg)
9-Nov-97 Tri-Ada '97 13
Create GUI ComponentsFrame, Label and Entry
Tcl.Tk.Create (Frame, ".amt", "-bd 2");
Tcl.Tk.Pack (Frame, "-side top -fill x");
Tcl.Tk.Create (Amt_Entry, ".amt.entry",
"-width 20 -bg white");
Tcl.Tk.Pack (Amt_Entry, "-side right");
Tcl.Tk.Create (Label, ".amt.label",
"-text {Monthly Savings Amount:}");
Tcl.Tk.Pack (Label, "-side right");
![Page 14: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/14.jpg)
9-Nov-97 Tri-Ada '97 14
Create GUI ComponentsFrame, Button, and Label
Tcl.Tk.Create (Frame, ".fv", "-bd 2");
Tcl.Tk.Pack (Frame, "-side top -fill x");
Tcl.Tk.Create (Result, ".fv.result",
"-width 20 -relief sunken");
Tcl.Tk.Pack (Result, "-side right");
Tcl.Tk.Create (Button, ".fv.button",
"-text {Compute Future Value:} " &
"-command computeFutureValue");
Tcl.Tk.Pack (Button, "-side right");
![Page 15: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/15.jpg)
9-Nov-97 Tri-Ada '97 15
Create GUI ComponentsWindow Title and Focus
-- Add a window title
Tcl.Ada.Tcl_Eval (Interp,
"wm title . {Future Value of Savings}");
-- Set focus to the first entry field
Tcl.Ada.Tcl_Eval (Interp, "focus .amt.entry");
![Page 16: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/16.jpg)
9-Nov-97 Tri-Ada '97 16
Create New Tcl Command
declare
package CreateCommands is new
Tcl.Ada.Generic_Command (Integer);
Command : Tcl.Tcl_Command;
begin
-- Create a new Tcl command to compute
-- future value.
Command := CreateCommands.Tcl_CreateCommand (
Interp, "computeFutureValue",
Compute_Future_Value_Command'access,
0, NULL);
![Page 17: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/17.jpg)
9-Nov-97 Tri-Ada '97 17
Create New Tcl Command Tcl calls Ada Subprogram
function Compute_Future_Value_Command (
ClientData : in Integer;
Interp : in Tcl.Tcl_Interp;
Argc : in C.Int;
Argv : in CArgv.Chars_Ptr_Ptr
) return C.Int;
pragma Convention (C, Compute_Future_Value_Command);
-- Declare a procedure, suitable for creating a
-- Tcl command, which will compute the Future Value.
![Page 18: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/18.jpg)
9-Nov-97 Tri-Ada '97 18
Create New Tcl Command Get the “Monthly Savings Amount”
begin -- Compute_Future_Value_Command
-- get the monthly investment amount from its text entry
-- field, evaluate it in case it is an expression,
-- and make sure it is not less than zero
Amount := Money (
Tcl.Ada.Tcl_ExprDouble (Interp, Tcl.Tk.Get (Amt_Entry)));
if Amount < 0.0 then
return Tcl.TCL_OK;
end if;
![Page 19: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/19.jpg)
9-Nov-97 Tri-Ada '97 19
Create New Tcl Command Get the “Annual Interest Rate”
-- get the annual interest rate from its text entry
-- field, evaluate it in case it is an expression,
-- and make sure it is not less than zero
Annual_Rate := Float (
Tcl.Ada.Tcl_ExprDouble (Interp, Tcl.Tk.Get (Rate_Entry)));
if Annual_Rate < 0.0 then
return Tcl.TCL_OK;
end if;
![Page 20: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/20.jpg)
9-Nov-97 Tri-Ada '97 20
Create New Tcl Command Computing and Displaying Computed
Future Value
-- compute the monthly interest rate
Rate := Annual_Rate / 1200.0;
-- compute the number of months
Months := Years * 12;
-- compute future value
Future_Value :=
Money (Float (Amount) * ((1.0 + Rate)**Months - 1.0)/Rate);
-- put the future value into the result label
Tcl.Tk.Configure (Result, "-text " & Money'image (Future_Value));
![Page 21: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/21.jpg)
9-Nov-97 Tri-Ada '97 21
Bind Event Handlers
-- Bind Return to the button command.
-- If Button has focus, pressing Return will
-- execute Tcl command, computeFutureValue
Tcl.Tk.Bind (Button, "<Return>", "computeFutureValue");
![Page 22: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/22.jpg)
9-Nov-97 Tri-Ada '97 22
Start Tcl Interpreter andInitialize Tcl and Tk
-- Create Tcl interpreter
Interp := Tcl.Tcl_CreateInterp;
-- Initialize Tcl
if Tcl.Tcl_Init (Interp) = Tcl.TCL_ERROR then
Text_IO.Put_Line ("FutureValue: Tcl_Init failed: " &
Tcl.Ada.Tcl_GetResult (Interp));
return;
end if;
-- Initialize Tk
if Tcl.Tk.Init (Interp) = Tcl.TCL_ERROR then
Text_IO.Put_Line ("FutureValue: Tcl.Tk.Init failed: " &
Tcl.Ada.Tcl_GetResult (Interp));
return;
end if;
![Page 23: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/23.jpg)
9-Nov-97 Tri-Ada '97 23
Start Tk Event Loop
-- Loop inside Tk, waiting for events to occur and
-- thus commands to be executed.
-- When there are no windows left or when we execute
-- “exit” command, Tcl.Tk.MainLoop returns.
Tcl.Tk.MainLoop;
![Page 24: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/24.jpg)
9-Nov-97 Tri-Ada '97 24
TASH GUI ComponentsInheritance Hierarchy
Widget(abstract)
Frame
Toplevel Label Entry Button
Radiobutton
![Page 25: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/25.jpg)
9-Nov-97 Tri-Ada '97 25
Tcl Interpreter Interaction
1. Create Interpreter2. Initialize Tcl and Tk3. Create new Tcl Commands4. Create GUI Components5. Bind Event Handlers6. Start Tk Event Loop
Tcl Interpreter
Tcl Utilities
Built-inCommands
Application-specificCommands andUtilities
Tcl Interpreter Ada Program
![Page 26: 9-Nov-97Tri-Ada '971 TASH An Alternative to the Windows API TRI-Ada ‘97 Terry J. Westley twestley@acm.org](https://reader036.vdocument.in/reader036/viewer/2022070415/5697bfae1a28abf838c9c674/html5/thumbnails/26.jpg)
9-Nov-97 Tri-Ada '97 26
Summary
• TASH provides an alternative to using the Windows API for GUI development on Windows 95
• Additional benefit: Tcl, a powerful, extensible scripting language– registry searching and editing tool– full set of file handling utilities– network programming, including http protocols
• Additional benefit: platform independence