Copyright: Nugget Software 1997 (  Monday, November 03, 1997 22:09:09)


General Introduction
Ltrack 3.2 General Introduction

Ltrack is a program for tracking one or more football league tables. It will only run under Windows 95 and Windows NT 3.51 and above. A Windows 3.1 version of Ltrack (version 1.6) is also available with less function. Version 3.2 will read version 1.6 files. It will not read files from versions older than 1.6.

Ltrack does not, and probably will not, support the American MLS. It is designed to support tables conforming to the English rules of the game and does not understand strange things such as shoot-outs.

Once you have created a league table (or used one of the samples provided), you can enter information about match results and future games, and use Ltrack to interrogate the information entered.

Ltrack is freeware. That is you may use the program without charge, and may freely distribute the program to others. However, you must not make a charge for distributing Ltrack, and you should distribute Ltrack in it’s original form.

Ltrack is written in Borlands excellent Delphi.

Obtaining the Latest Version of Ltrack

Ltrack is regularly updated to add new features suggested by users, and to fix the occasional bug. To obtain the latest version, I suggest you visit the Ziff Davis software library on the web. Go to www.zdnet.com, follow the link to the software library or Downloads (or go directly to www.hotfiles.com), and search for Ltrack.

Getting Help

You can get help at any time by pressing the F1 key. The help is context sensitive and will relate to the panel you are currently viewing.

Entering Data into Ltrack

Ltrack is flexible in allowing you to decide how much data you enter. However, the more you put in to Ltrack, the more you can get out.

You can enter the following information into Ltrack:

*	Information about future league matches. This can include the date of the match, and your prediction of the score. You can then use predicted scores to display how the League table might look in the future.
*	Match results. At the very least, you should enter the final scores of matches. In addition, you can also enter the crowd attendance’s.
*	Information about Goals. You can enter the goal scorer, the goal time, and whether the goal was a penalty or an own-goal.
*	Information about the Squads for a particular game, including the names of players in the starting line-up, substitutes, and yellow/red card information.
*	In addition to league games, you can enter information about non-league games, such as Cup matches (See Below)

You don’t have to enter all this information at the same time. You can also enter some information, for example squad details, only for the club you support.

Note: You can also import data into Ltrack from an external Comma Separated Values (CSV) file. For example, at the beginning of the season, you can import players from the previous seasons table.

Non League Games

With version 3.0 and above of Ltrack, in addition to entering information about league games, you can also record details of non-league games, such as cup matches. Ltrack uses the non-league information to allow you to display more complete statistics, such as goals scored by a player during a season. However, Ltrack is and remains, primarily a program for tracking football leagues, and should not be thought of as a program for tracking cup competitions.

Saving Changes

When you open a table file, Ltrack reads the entire file into memory. Any changes that you make are made to the in-memory copy. The original file is not changed until you save the changes. Optionally, Ltrack will save the previous file with a BAK extension allowing you to undo the changes at a later date.

You can save changes in two ways:

First, if you have made a change, when you press an Exit button Ltrack will tell you that changes have been made and ask if you want to save the changes, close without saving any changes, or cancel the exit. To save the changes, click the Yes button.

Second, at any time after making a change, you can save the file by right-clicking on the league table. A popup menu will be displayed, selecting Save will save any changes.

Getting Information Out

Primarily, information is presented by Ltrack visually, that is displayed in a tabular form, or as a graph. You can also obtain some information in printed form (such as the League Table). Data can also be exported, either to the clipboard or to a file, for further processing, for example by a spreadsheet or for inclusion in a web page.


Whats New
What's New

Below is a summary of changes to Ltrack by version number.

Version 3.2

*	Predefined Queries added
*	Teams may now play each other three times
*	Home and Away teams may be swapped on prediction panel
*	Query results and Ltrack data can be exported as HTML tables
*	Tweaked the auto prediction feature
*	A couple of bug fixes
Version 3.1

*	Squad size increased to allow more substitutes
*	Points can now be added to a team as well as being deducted
*	Match summary lists players who have been sent off
*	Enter Results dialog highlights matches scheduled for the date being entered
*	Minor other changes and bug fixes
Version 3.0

*	You can now record and display information about non-league matches
*	Enter results dialog changed to support cup results
*	Automatic result prediction feature
*	Squad information can now include a performance rating
*	Results in Table Maintenance can be viewed for a single team
*	Additional fields have been added to the Query facility
*	Query fields used for selection and sorting can be excluded from the Query result display
*	Increased maximum number of teams in a table from 24 to 26
*	Added new ‘Number of Wins’ table sort rule
*	Players statistics goal table can be sorted by clicking column headers
*	Expanded Setup Dialog
*	Main form size is saved between executions
*	A comment can be saved with each result
*	All known bugs have been fixed
Version 2.4

*	An adhoc query feature has been added that allows you to extract information from Ltrack based on a selection criteria. The resulting information can then be exported for further processing, or for inclusion in reports, WEB pages etc.
*	The player statistics view has been expanded to include more information, such as the type of appearance for each game, starter, sub etc.
*	You can delete the date assigned to a scheduled match, for example if the match gets snowed off !
*	Players names now need only be unique within a team.
*	Fixed player import bug
*	The squad clone button and sort order now work as advertised (OK Mr B !)
Version 2.3

*	For each player, you can now enter the Squad number and position (Goal Keeper etc.)
*	You can export information in two formats. Comma Separated (CSV) or fixed.
*	A new table sort rule (Aggregate Points) has been added. Useful for Spanish users.
*	Teams can now play each other eight times (Asked for by a Hockey Fan)
*	When Entering a goal scorer, the dropdown list of players is now ordered by goals scored (I.E. Shearer comes first)
*	The Table Maintenance Goals grid can be displayed for All Teams
*	The Attendance statistics on the team statistics page now display the team names along with the highest and lowest attendance figures
*	An option is available to make an automatic backup of Ltrack files before any changes are saved.
*	The squad for a game can be copied (cloned) from a previous match, speeding up the entry of squad details.
*	A couple of minor bug fixes.
Bug Alert !

I have had one report of an Ltrack file being corrupted after being saved. I have been unable to find a bug in Ltrack that caused this, and after more than two year of using Ltrack myself, I have never experienced such a problem. However to be on the safe side, a new option on the Setup dialog requests that Ltrack make a backup copy of league files every time they are changed.

Also to help track down this possible bug, Ltrack now checks the validity of the league data before saving it to a file. If it detects an error, the file is not saved, and a message is displayed asking you to contact me. If this happens to you, please save the DIV file that caused the problem, and note down what you had done during the Ltrack session. Then contact me by email.


Getting Started

I hope that after using Ltrack for a short time, you will find it easy to find your way around and to create, update and track your football tables.

However to help speed up the process of learning Ltrack, set out below are some guides to some of the program operations. Remember that at all times in Ltrack, help for the specific section of the program you are using is available by pressing F1.

Starting the Program

If you have followed the installation instructions correctly, you should have an Icon for Ltrack on your Windows 95 desktop or in the list of programs available from the Start button . When you start Ltrack, after displaying the splash screen, Ltrack displays the Table Selection Window

From this Window, you can select one of the Ltrack functions. Normally, you will select Open to open an existing table, but you can select other functions, such as creating a new table, or displaying help.

When you exit from the selected function, the Table Selection Window will be redisplayed, allowing you to select a new function, or end the program.

Creating Your Own Table

Ltrack comes with the four English league tables already created, so if you plan to track one of those tables, you can get started straight away. However if you want to track another table, you have to create a league table first using the Create Table procedure.

During the creation process, you input details about the table such as, the number of teams, the name of each team, the number of points for a win etc. Many of the details you enter can be changed later, but some cannot, so make sure you correctly enter the details.

The final step of the creation process is to save the table as a file. All Ltrack files must have a file type of DIV, but the file name can be any name you choose. However as Ltrack uses the file name to sort the list of tables displayed in the Table Selection Window, you should choose the name with that in mind. You can always change the file name later if you need to.

Entering match results

The first thing you probably want to enter when you have created your league table, are match results, so you can start tracking the progress of your team. When you enter results, you have the choice of simply entering the scores, or you can include extra details, such as the goal scorers and crowd figures. Note that you can always add this extra information later.

To enter a set of results, first open the table you wish to update from the Table Selection Window. Then click the Enter Results tab at the bottom of the window.

Before you enter any results, select the date the matches were played by clicking the calendar button. Next, select the competition for which you want to enter results, for example ‘League Game’ or ‘FA Cup’. If you want to add goal scorer information at the same time as you enter the results, select the Track Goals select box, otherwise clear it.

Finally, enter all the results for the selected date. For details of this procedure, see Entering Results

Non-League Results

Although Ltrack is primarily designed to track league games, version 3.0 and above allows you to enter the results of non-league games, such as cup matches. The information entered for non-league games is then reflected in Ltrack statistics. For example player statistics will include both league and non-league goals.

Below is some information to assist you in entering non-league results.

*	Every result entered into Ltrack must now be assigned to a particular competition name. Each competition is assigned two names. A long name, such as ‘FA Cup’, and a short name, such as FAC. A predefined competition name for league matches is provided with a long name of League Game and a short name of LGE. Before you can start entering non-league results for a particular competition, you must add a name for the competition. This is done from the Enter Results dialog, by clicking the New button next to the competition selection listbox.
*	To enter a non-league result, select the competition name from the competition listbox, and then enter a result in the normal way.
*	You will often need to enter a result where one or both teams involved are not known to Ltrack, that is they are not teams from the currently opened league table. To allow you to do this, you can now add a team to Ltrack from the Enter Results dialog. Click the Add New Team button and fill in the resulting dialog box. This button is only available when entering a non-league result.

You should note that while Ltrack allows you to enter non-league results, it should not be considered as a Cup tracker. For example, Ltrack does not allow you to enter information about results decided by penalty shoot outs. It also does not understand matches decided over two legs. However, Ltrack 3.0 and above allows a short note to be assigned to each result which can be used to record such details. For example ‘Liverpool lost on penalties 5-3’.

Updating Goal Scorer Information

If you decide not to enter goal scorer information at the same time as you enter match results, you can do it later. To do this, first display the Table Maintenance panel by clicking the tab at the bottom of the window. Then select the goals page by clicking the Goals tab at the top of the table maintenance panel.

As an example, we will assume you want to update the goal details for the match Everton Vs Coventry, where the result was 1-1. First, select the goals for Everton by selecting Everton in the Goals For listbox. Ltrack will display a table listing all the goals scored by Everton. Goals that have not been assigned a scorer should be displayed at the top of the display. To update the details for a goal, double click the goal you want to update. The Update Goal Information Dialog box will be displayed from where you can enter details about the goal. After entering the details for Everton, repeat the process for Coventry.

Entering Squad Details

For each match that has been played, you can enter Squad details for one or both teams. The information entered can include the players in the squad, both starters and substitutes along with red and yellow card details. You can also assign a rating to each player in a squad, allowing you to rank players in a team or league. Because entering squad information involves substantial data input, you may choose to only enter squad details for your own team. The choice is up to you.

Squad information for a match is entered using the Squad dialog. You can display this dialog in two ways.

1.	Select the Games table from the Table Maintenance panel. Select the game for which you want to update squad details, and click the Squads button.
2.	Display the match details dialog box by double clicking on a match result in the Team Statistics panel. Then click the Squads button.
Transferring Players

When a player transfers to a different team within the same table, or to a team outside the current table, you should update the players details accordingly. To do this go to the Players view of Table Maintenance, double click on the player being transferred and change the team name to his new club or to ‘Transferred Out’ if the player is moving to a different table.


Table Selection Window

The table selection window is the first window that is displayed when you run Ltrack. The list box on the left of the window lists the names of currently defined league tables, and the buttons down the right, list the program options available:

	This buttons opens the table selected in the list box. You can also open a league table by double clicking its name in the list box.
	Select this button to create a new league table using a wizard like dialog.
	Select this button to display program version information.
	Use this option to display the setup dialog box. From there you can tailor certain aspects of Ltrack to suit your personal requirements.
	This option allows you to tell Ltrack where to look for league table files. By default, Ltrack looks in the folder from where it is being run.
	Displays the Ltrack help table of contents.
	Select this button to close Ltrack.


League Table

When you open a table from the Table Selection window, you are presented with the main Ltrack window. This window consists of three main areas.

The first and largest area contains information specific to the selected view. In the case of the League Table view this is a table displaying information about the current table in the traditional format.

To the right of the window is a second area containing buttons and controls that can be used to modify the information displayed. Exactly what is in this area is dependant on the current view, but this area always contains an Exit button which will close the window and redisplay the Table Selection window.

The final area is a strip of tabs at the bottom of the window. These tabs are used to select the required view.

League Table	This View is used to display the league table. A number of options are available to modify the display and select the matches that are included
Team Statistics	This view displays information about a selected team.
Goal Statistics	Displays statistics about goals and goal scorers
Division Statistics	Displays statistics about all teams in the table
Enter Results	Select this view to record the results of matches
Predict Results	Used to enter your predictions of the results of future matches
Table Maintenance	Provides a number of panels where previously entered information can be displayed and, if necessary, corrected.
Modifying the League Table View

The League Table display can be modified in a number of ways, for example to include only home matches, or to include only those matches played before a particular date. These options are set by using the check boxes and buttons on the right side of the window.

Content of Table

This option box is used to select which matches will be used to calculate the League Table display.

Played Games:	Only matches that have been played are to be included
Played+Predicted:	Both matches that have been played and matches whose results have been predicted are to be included
Current Form:	Only recently played matches are to be included. The number of matches to include can be set from the Setup dialog.

Type of Games

This option box is used to select the type of games, home, away, or both home and away, that are to be included in the table display.

Selecting by Date

This set of controls is used to set the date, up to which matches are to be included. The date can be set in two ways:

1.	Click the calendar button and select the required end date from the pop-up calendar.
2.	Scroll forward through match dates by clicking the up or down button. Only dates on which a match has been played can be selected.

Setting the table format

These check boxes can be used to modify the appearance of the league table:

Short Format displays the table grouping home and away results in one set of columns.

Show Poss Points adds an extra column to the table containing the maximum number of points each team can obtain, assuming that they win all their remaining matches. This can be useful towards the end of a season to help determine possible final positions.

Other Options

You can select other options from the League Table view by selecting the buttons at the bottom of the right hand pane, or by right clicking on the league table display.

	Perform adhoc queries on Ltrack data
	Displays a dialog box from where you can import data from an external file.
	Displays a dialog box from where you can export data to the clipboard or to an external file for processing by another application.
	Displays a cross-reference grid of results and scheduled matches. This option is only available when teams play each other two or four times.
	Prints the currently displayed league table.

Right clicking on the League Table will result in a popup menu. From there you can select Save, to save any changes you have made, or Setup to display the setup dialog box.


Team Statistics

This view displays statistics relating to a particular team. The team to display can be chosen from the dropdown list box at the top of the window. Double clicking a team in the League Table view is also a quick way of displaying the statistics for a particular team.

If the Include Cup Games checkbox is selected, then the statistics displayed include both League and Cup matches. Otherwise, the statistics are for league matches only.

The display is presented in two portions. At the top of the window are a number of boxes containing static information about the team, including such things as highest scores. Also displayed is a graph depicting the accumulation of points match by match. This graph can be enlarged by double clicking it.

Note:  Throughout Ltrack, you can often display additional information by double clicking on an item. For example, double clicking on a players name will display additional information about that player, e.g. his goal scoring record. You are therefore encouraged to try double clicking to see what happens !

The bottom half of the window contains a tabbed box, where additional information can be displayed about the team, such as matches played, and player information.

The buttons on this form perform the following:

	Displays a panel that allows a number of graphs to be displayed that depict the performance of the selected team. Double clicking the graph results in the same display.
	Prints a summary of the selected teams performance
	Exits back to the table selection window


Goal Statistics

This view display statistics about the goals scored so far during the season. This includes the list of top scorers and information about Hat Tricks, penalties and own-goals.

If the Include Cup Games checkbox is selected, then the statistics displayed include both League and Cup goals. Otherwise, the statistics are for league goals only.

This information is only available if you have entered goal scorer information.


Division Statistics

This view displays statistics that relate to all of the teams within a table or division. Double clicking on either of the highest goals list boxes will display details about the matches concerned.


Entering Results
Enter Results

This view is used to enter the results of matches after they have been played. To enter predicted results you should use the Predict Results view.

Use the following procedure to enter results :

*	If you want to enter goal scorer details, ensure that the Track Goals checkbox is checked.
*	Set the date of the results you are about to enter by clicking the date button at the top of the window.
*	Select the competition for which you want to enter results. For League matches, select League Game. For Cup games, select the cup name from the drop down list. If you are entering the first result for a new competition, create the competition by clicking the New button next to the competition drop-down box.
*	Enter the result for each match on the same date, including the attendance if required. When you have entered a complete result, click Record. To enter a result, first select the home team by double clicking the team name in the Teams listbox. Next select the away team by double clicking the team name from the Team listbox. After selecting the two teams, enter the score, crowd size and optional comment.
*	If Track Goals is checked, you will be prompted to enter details for each goal scored in the match, first the home goals and then each away goal.

Notes :

*	After starting to enter a result, you must complete the operation before Ltrack will let you switch to another view.
*	You can clear any input for the current result by clicking Cancel
*	Ltrack will not let you enter a result for a league match that has been played. To changed a previously entered result, use the Table Maintenance view.
*	You do not have to enter goal details at the same time as the match results are entered. You can add goal details later using the Table Maintenance view.
*	When entering a result for a league where teams play each other once or three times, the home team is picked by Ltrack at table creation time. You can swap home and away teams from the Predict Results panel.
*	If you have set the date of scheduled matches, Ltrack will highlight home and away teams in the Team listbox for matches that are scheduled for the result date selected.


Predict Results

This view is used to predict the results of future league matches. It can also be used to enter the date when matches are scheduled to be played. You cannot enter predictions for non-league matches.

When you select this view, Ltrack displays a tabular list of all outstanding matches:

The first column, a tick, indicates if the result has been predicted. The other columns are the date of the match, the home and away team, and the predicted score. Like most tables in Ltrack, it can be sorted by clicking the appropriate column heading.

You can enter a predicted result in two ways.

*	Select a match by clicking on it, and then click the Set Score button. You will be presented with a dialog box from where you can enter the match date and predicted score.
*	Enter the predicted score directly into the table. Simply click on the score you wish to change. A spin button will be displayed. Select the score by clicking on the up or down arrow as appropriate.

To predict a 0-0 draw, simply click on the arrow column of the required match. Clicking a second time will clear the tick.

The buttons on this panel perform the following functions:

	Clears the date of the selected match
	Displays the pop-up calendar to set the date of the currently selected match
	Swaps the home and away teams for the selected match. This button is only available for leagues where teams play each other once or three times.
	Displays a dialog box allowing the predicted score of the selected match to be set.
	Displays a dialog box from where you can automatically predict the result of remaining matches based on the current performance of the teams. This option is only available when all teams have played at least five home and five away matches.
Auto Prediction Details

Although the auto prediction feature is fairly (make that very) simplistic, it can be used to at least give an approximation of future results. For those interested, Ltrack makes the predictions using the following method:

*	For each match to be predicted the last five home matches for the home team and last five away matches for the away team are checked.
*	The home matches are awarded points for each win and each draw. The number of points awarded is decreased for each match. For example a recent win might get 18 points, while a win five matches ago would receive only 3 points.
*	The process is repeated for the away teams last five matches. However away results are awarded slightly more points than home results. For example a recent away win would be rewarded 24 points.
*	The home and away points awarded above are weighted according to the current league table position of the respective team.
*	The points awarded to each team is then compared. If both teams have a equal number of points (plus or minus 4) then the match is declared a draw. Otherwise the team with the highest points tally is awarded the win.
*	The number of goals each team is predicted to score is then calculated. This takes into consideration the difference in points calculated above and the number of goals conceded and scored by each team in the previous matches.


Table Maintenance - Table

The table maintenance view is used to make changes to data that has already been entered, either when the table was first created, or during subsequent use.

The view consists of a number of separate panels, selected by a tab at the top of the window.

The Table panel is used to make changes that relate to the entire table:

*	You can change the name of the table. This might be to correct a spelling mistake, or to add the year at the end of a season. Note that the name you change is not the file name, but the table name as recorded within the file. If you want to change the file name, do so outside of Ltrack, for example, using the Explorer.
*	You can select your own team. Ltrack makes use of this selection in a number of ways, for example highlighting it in table displays.
*	You can change the number of teams that are promoted, relegated, or involved in the playoffs. These numbers are used to highlight teams in the league table view.
*	You can change the number of points awarded for a win.


Table Maintenance - Results

The results panel of Table Maintenance is used to change match result data, or to delete a previously entered result. You can also enter Squad information for a particular game.

The display consists of a table containing all the results recorded so far, with a number of buttons at the bottom.

The table can be sorted by clicking on the appropriate column heading. Columns can also be resized by dragging the column heading separator.

To change data for a result, select the result you wish to change by clicking on it, and click the appropriate button.

	Displays a popup calendar from where you can change the data that the match was played.
	Displays a dialog box from where you can change the score and attendance of the game. Note that if you change the score, Ltrack deletes all goal information for that game, and you will have to enter that information again.
	Displays a dialog box from where you can add information about the squads for both teams involved in the game.
	Displays a dialog box requesting confirmation that you want to delete the selected result.

Note: You can also display the Set Score dialog box by double clicking a result.


Table Maintenance - Goals

This panel of Table Maintenance is used to update information about goals scored during a match.

The table lists all goals scored for the team selected in the dropdown list box. The total number of goals scored is displayed at the bottom of the table. The number of goals not yet been assigned to a player, if any, is also displayed.

To update information about a goal, either double click the appropriate goal, or select it and click the Update button. A dialog box will be displayed from where you can enter details about the goal and who scored it.


Table Maintenance - Players

This panel of Table Maintenance is used to change information about players, to add new players, or to delete players.

The display consists of a table listing the players for a particular club, or for all clubs:

Use the buttons at the bottom of the form to perform the following functions:

	To change a players name, or to transfer a player to a new club, either double click on the required player, or select the player and click the this button. A dialog box will be displayed from where you can change the players details.
	To add a new player, click the this button. A dialog box will be displayed from where you can add one or more players.
	To delete a player, select the player to be deleted, and click this button. A dialog will be displayed requesting confirmation of your delete request. Click the Yes button to proceed. Note that you can only delete players who have no goals accredited to them, including own-goals, and who are not assigned to a match squad.


Table Maintenance - Teams

This panel of Table Maintenance is used to change information about a team. You can change the team name, and add or deduct points from a team, for example for disciplinary reasons. To deduct points, enter a negative value. To add points, enter a positive value.

Note that when you create a table, the name you enter for a team at that time is used to sort the table, for example when two teams have the same number of points and goal difference. If you change the name of a team here, the original name is still used for sorting purposes. This allows you to use a nickname, The Hammers, The Seagulls etc. as a team name, without effecting the sort order.


Table Maintenance - Sort Order

This panel of Table Maintenance is used to change the rules used to sort the league table. Different leagues use different rules to do this. For example the English Premier division sorts by points, then goal difference, then goals scored and finally by the team name. While the Nationwide division sorts by points, then goals scored, then goal difference, and finally the team name.

The panel consists of two list boxes. The left box contains sort rules that are not currently being used. The right hand list box contains the sort rules currently being used, in the order that they are used, top to bottom.

You can move rules in the active list box up and down by selecting them, and clicking the up or down arrows. You can move rules from one list box to the other by selecting the rule to move and clicking the left or right arrow. You can also move rules by using drag and drop.

Most sort rules are obvious, however Aggregate Points needs more explanation. This rule compares the number of points obtained by two teams in matches against each other. The team with more points is sorted first.


Add or Change Player Details

The Add/Change player dialog box is used to add a new player, or change the name or team of an existing player.

The player's name must be unique within the team. When there is more than one player with the same name in a team, use the first name as well, for example, ‘Watson, Dave’.

For the team name, you can pick any of the teams in the league table, or ‘Transferred Out’ if a player is moving to a team outside the table.

You can also optionally specify the players position, Goal Keeper, Forward etc., and set the players squad number.

When adding a player, the OK button does not dismiss the dialog, allowing you to continue entering more players. Click Cancel to end the input sequence.


Popup Calendar

The popup calendar is used throughout Ltrack to allow the input of a date. To select a date, use the arrow keys to choose the month, and then click on the required date. Pressing Esc will cancel the operation leaving the original date unchanged.


Changing a score

This dialog box is used to change the score, attendance count and comment for a previously entered result. Note that if you change the score, you will lose any goal scorer information, and will have to enter goal scorer details again.


Setting the Location of Files

When Ltrack starts, it searches a folder (directory in DOS Speak), for files with the extension DIV. Any of these files that are valid Ltrack files, are then listed in the File Selection Window. The default folder that is searched, is the folder that contains the Ltrack program.

You might want to create more than one folder for storing Ltrack files, for example, you might set-up a folder for each season. This Dialog allow you to specify where Ltrack is to look for *.DIV files. This setting is saved across starts of Ltrack, and will be used the next time Ltrack is run.


Updating Goal Information

This dialog box is used to add or update information about a goal, including the player who scored the goal, the time of the goal, and whether it was a penalty or own-goal (I have never seen an own-goal penalty, but you can also indicate that !).

The player who scored the goal is selected from a dropdown list box. For an own goal this will contain players in the opposition team, so select own-goal before you select the player name. If a player scoring his/her first goal is not in the list box, you can add a new player by clicking the New Player button.

Player names in the list box are ordered by goals scored. The top scorer for a team coming first.


Result Details Display

This dialog box is presented when a result is double clicked in one of the Ltrack tables. The goal scorer information is only displayed if you have entered that information for the game. Clicking the Squads button will display the squad windows for the game, allowing you to make changes if required.

You can add or update the match comment by clicking the yellow note icon.


Updating a Squad Member

This dialog box is used to update information about a squad member for a particular match. You can enter the time on, time off, and any cards that were shown. Note that if you select Yellow card two, yellow card one and Red card will be selected as well.

You can also enter a rating for the squad member from 0 to 10, where 0 is not rated, 1 is awful, and 10 is brilliant.


Ltrack Setup Options

The setup dialog box is used to change some program options to meet your own requirements. The dialog can be opened by clicking the Setup button on the opening windows, or by right clicking on the league table and selecting ‘setup’.

The options are displayed on a number of tabbed pages:

The general options available fall into three groups.

The first group allows you to change the colours used to display the league table, and to highlight your own team.

The second option allows you to set the number of games taken into consideration when displaying the current form of teams in the league table.

Finally, a list of options are available for setting general defaults.

The Create backup files on save option, new in 2.3, automatically makes a backup copy of DIV files whenever they are changed. Backup files have a file extension of BAK.

Changed settings are saved across runs of Ltrack and are used on subsequent executions.

The squad options allow you to change how squads are sorted, and to add or change named player positions.

You can sort the squad by time on and squad order, or you can choose to sort the squad in the order that players are added.

The second squad option allows you to assign upto nine named squad positions, such as Forward or Defender. Note that changes you make effect players already assigned a position. Note that these positions are used for all Ltrack tables.


About Ltrack

Ltrack is a Freeware program for tracking football league tables. You can use Ltrack for as long as you like, on as many machines as you like, without charge. You are encouraged to pass Ltrack on to friends, but if you do, please pass on all the Ltrack files without change.

Ltrack was written in the first instance to replace an Access database I was using to track the downward plunge of my own team over two seasons (I am happy to say that we have stopped plunging, and are on the up again ! *). After completing the first version of Ltrack, I decided to make it available as freeware. Most of the changes made to the program since then have been at the suggestion of the growing number of users. My thanks for that.

This version (version 3.2) of Ltrack will only run under Windows 95 or NT. It will, however, read the files created by version 1.6 (for Windows 3.1), which is still available, but no longer being developed.

If you would like to make a comment on this program, or have any queries, please email me (Nigel Thomas) at nigelt@bigfoot.com

* Famous last words


Creating a New Table

When Ltrack starts, it searches its current folder for files with an extension of DIV. Any that it finds and that are valid Ltrack files are listed in the initial window. Ltrack comes with a number of pre-defined DIV files, including the four English league tables.

To create your own table, select New from the opening Ltrack window. You will be presented with a wizard-like dialog, which leads you through the table creation process.

The process consists of four initial steps to enter your definition, followed by a fifth step to save the table file to disk.

At the bottom of the dialog are the usual wizard buttons, Cancel, Back, Next and Finish:

Help	Displays this help page
Cancel	Cancels the table creation process and returns you to the Ltrack table selection window.
Back	Moves back to the previous table creation step
Next	Moves forward to the next step in the creation process. You can only move to the next step if you have completed the current step.
Finish	If all steps have been completed. Finish will display the save file dialog.
Step 1 - Enter initial Table information

In the first step, you enter initial information about the table:

Table Name	This is the name of the table, such as Premier Division, not the file name. This name can be up to 30 characters long. You can change this name later using Table Maintenance.
No. of Teams	The number of teams in the league. This can be from 4 to 26 and cannot be changed later.
Points for a win	The number of points awarded for a win. This can be two or three, and can be changed later.
Times teams play	The number of times that teams play each other. This can be 1, 2 (the default), 3  or 4 (Scottish Premier for example). This value cannot be changed later.

Note: Ltrack now allows you to specify that teams play each other once. This allows you to track tables such as the early stages of a World or European Cup. However, when teams only play each other once, a number of Ltrack statistics, particularly those dealing with home and away fixtures become somewhat meaningless. Previous versions of Ltrack allowed teams to play each other eight times. This has been removed in order to make room for recording cup games. My apologies to any Hockey fans !

Note that when teams play each other once or three times, Ltrack arbitrarily picks the home and away teams. You can swap, any home and away team later by using the swap button from the predict results panel.

Step 2 - Enter team names

In the second step, you must enter a name for each team in the table. Although you can change team names later, the name you enter at table creation time will be used for sorting the league table. You can however change the team name later, for example to use the teams nickname such as The Hammers.

Step 3 - Pick your own team

In the third step, you can optionally indicate which of the teams in the table you are creating you support. Any selection will be highlighted by Ltrack throughout the rest of the program. This selection can be changed later if required.

In this step, you also enter the number of teams that are promoted or relegated at the end of the season. Again, these values can be changed later.

Step 4 - Enter squad sizes

The final input step allows you to specify the number of players in a team (default 11), and the number of substitutes allowed (default 3). The values you enter here cannot be changed later.

Step 5 - Saving your new table

When you have completed the four steps above, you can finish the creation process by saving the table to disk. To do this, click Finish.

You will be presented with a save dialog, which allows you to specify the name of the file. You can use any name for the file, but you must use an extension of DIV. However, Ltrack displays the table names in the opening window, alphabetically by file name, so you should choose your file names with this in mind. For example TAB1.DIV, TAB2.DIV and TAB3.DIV.


Exporting Table Data

There may be times when you want to process the league table data in ways that are not supported by Ltrack. For example, to add the data to a spreadsheet, or to include the League Table in a document.

The Export facility allows you to export data from Ltrack, either to a file, or to the Windows clipboard.

You can export in three formats, Comma Separated, fixed text or HTML The Comma Separated Values (CSV) format separates each value by a comma, and can be used to import data into other programs. The fixed text format outputs each value in fixed sized columns.

Data exported as HTML is formatted with HTML table mark-up controls. This data can then be included directly into a Web page for display.

To export data, first select what you want to export. Then, if required, specify the range of dates for which you want data exported. Select where you want the data to go, a file or the clipboard, select the format; comma separated or fixed, and finally, click the Export button.

If you are exporting to a file, you will be presented with a Save As dialog box, allowing you to specify the name of the file where the data is to be saved.


Importing Data

League data is usually entered into Ltrack regularly through the season. This is a manual process, using the keyboard and mouse.

Sometimes, you may want to input data that you already have in a computer file. For example, historic data for previous seasons or to import players from a previous season to avoid having to enter them again.

Ltrack provides an Import function that allows you to bring data into Ltrack from an external source, namely a Comma Separated Values (CSV) file.

Note: The file formats used for importing data are the same as the corresponding export files. This allows you to export from one table and import into another. As CSV files are text files, this allows you to email Ltrack data to another user so that he can import it into his table.

Import File Formats

Results:

The file containing the results must be in a comma delimited format, with each record containing a single result. Each record should contain the following five fields, in the order shown.

Date:	The date that the match was played. The date should be formatted according to your Windows settings for a short date. For the UK this is normally DD/MM/YY.
Home Team:	The name of the home team. The name should exactly match the name of the team as entered when the table was created.
Away Team:	The name of the away team.
Home Goals:	The number of goals scored by the home team
Away Goals:	The number of goals scored by the away team
Attendance	Optional field giving the crowd attendance for the match

An example section of a results import file follows:

   21/10/95,"Arsenal",'Aston Villa',2,0

   26/11/95,Arsenal,Blackburn Rovers, 0, 0,26870

   05/05/96,Arsenal,Bolton Wanderers,2,1

   16/12/95,Arsenal,Chelsea,1,1

   03/02/96,Arsenal,Coventry City,1,1

   20/01/96,Arsenal,Everton,1,2

Note: Quotes around text strings are optional

Players:

Each record contains information about a single player:

Name:	The name of the player
Team:	The name of the team he/she plays for.
Squad No.:	The players squad number (Optional)
Position:	The players position, Goal Keeper, defender, Midfield or Forward (Optional)

An example section of a Players import file follows:

   Newton,Chelsea

   “Watson, Dave”,Everton

   Shearer,Newcastle United,9,Forward

Note that if a players name contains a comma, it must be enclosed within quotes.

Goal Scorers

Each record contains information about the scorer of a single goal:

Player:	The name of the player who scored the goal
TeamFor:	The name of the team for whom the goal was scored. Note that for an Own Goal, this is not the same as the team the player plays for.
Home:	The name of the home team
Away:	The name of the away team.
Date:	The date of the match
Time:	The time (in Minutes) when the goal was scored
Penalty:	1 (the digit 1) if the goal was a penalty, o (zero) if not
OwnGoal:	1 if the goal was an own goal, 0 if not

An example of a goal scorer file follows:

  Scholes,Manchester United,Manchester United,West Ham United,23/08/95,50,0,0

  Keane,Manchester United,Manchester United,West Ham United,23/08/95,67,0,0

  Bruce,West Ham United,Manchester United,West Ham United,23/08/95,56,0,1

  Keane,Manchester United,Manchester United,Wimbledon,26/08/95,27,0,0

Fixtures

Each record contains information about a single fixture

Date	The date of the match
Home	The name of the home team
Away	The name of the away team

an example of a fixture file follows:

  28/12/96,Arsenal,Aston Villa

  19/04/97,Arsenal,Blackburn Rovers

  03/09/96,Arsenal,Chelsea

  19/10/96,Arsenal,Coventry City

Import Procedure

To import data into Ltrack, open the table you want to import into, and click the Import button. You are presented with the Import dialog box.

At the top of the dialog box is an option to choose what to import. You can choose Results,  Players or Goal Scorers.

In the middle of the dialog box is an edit box where you should enter the name and location of the file to be imported. Clicking the Browse button presents an open file dialog to assist in specifying the file name.

After selecting the file to import, click the Import button to start importing data.

The progress of the import will be displayed in the Status area of the dialog. The status includes the number of records read, how many were successfully  processed, and how many errors occurred.

Possible Errors

The error count, is the number of records that were not imported. This can be for a number of reasons:

*	The match date is invalid
*	The home or away team is not in the current table
*	The goals scored figures or Attendance are not numeric
*	The match being imported has already been entered into Ltrack
*	The home and away team names are the same
*	The Players name has already been entered into Ltrack
*	The Players team is not in the current table
*	Trying to import a goal scorer for a match that has not been played
*	Importing a goal scorer for a goal already assigned to a player
*	Importing a goal scorer for a player already assigned to a different team
Notes on importing data

Before you can import goal scorer information, you must have entered (or imported) the results for the matches for which they relate.

When importing Goal scorer information, if a player is included who is not already assigned to the team, Ltrack will add the player for you. However, there is one situation where this will not work. If a player is transferred during the season to a different team in the same table, you can only import goals for his currently assigned team. Goals scored by him for other teams will fail, and must be added manually.

In version 3.0, Import and Export has been extended to process non-league games. To support these games, the formats above have been extended to include information about the competition for which the data relates.


Team Performance Graph

The graph window is displayed by selecting the Graph button from Team Statistics, or by double clicking the points progress display on the same view.

The window can display two types of graph. The first, and default, is a plot of points accumulated against matches played. This graph also indicates the table position after each result. The colour of each bar in the graph indicates the match result, Red for a Loss, White for a draw, and Blue for a win. If the mouse is positioned over a bar, a ToolTip displays information about the corresponding match. Double clicking a bar will display the Result details window.

A second graph, either a bar or line graph, can be selected to show the points progress of the selected team relative to the teams at the top or bottom of the table.


Match Grid

The match grid is displayed by selecting the Matches button from the League Table View.

The grid contains the results of all matches played, and the dates (if entered) of scheduled matches. The grid can be printed by clicking Print. For best results, the grid should be printed in landscape mode.

If the teams in the league play each more than twice, the checkbox Second set of matches is enabled, allowing you to display the second grid covering the second set of home and away matches.


Entering Squad Information

The Squad Window is used to display and update information about squads for a particular game. Information can be entered for both teams or for a single team.

Note that unless you like typing, you will most likely only enter squad information for your own team. This is fine as Ltrack will only use information if you enter it. You can enter as little or as much as you like.

A squad in Ltrack consists of the players that start the match (usually 11) plus the substitutes (usually 3). It does not include other players who were not picked for a particular game.

The information you can enter includes:

*	The players in the squad, both those who start the match and substitutes. The number of players in a team is defined when the table is created.
*	The time that a player came on and left (was substituted or sent off) the field of play. If a player starts a match, the On-Time should be zero.
*	The number of yellow and red cards awarded to each player.
*	Performance ratings for each player

To enter squad information, first add the players who started the match, then add the substitutes. You can add players by double clicking a players name, or by selecting a player and clicking the button marked ‘>>‘. To remove a player, select the player in the squad grid and click the button marked ‘<<‘.

You can avoid some work by duplicating the squad from a previous match and then making any changes as required. To do this, click the Clone button. This button is only available if a squad has been entered for the same team for an earlier match.

Once you have entered the players, you can update specific player details, for example time-off, by double clicking a player in the squad grid, or by selecting a player and clicking Update. You will be presented with a dialog box from where you can make any changes.

Once you have finished entering Squad details, click OK to save them, or Cancel to discard any changes.

Squad Sort order

As you enter each player to the squad, or modify the details for a player (time on etc.), the players are sorted according to the following rules:

*	First players who start the match are sorted before substitutes
*	Secondly players who start the match are sorted by squad number (if given) or by player name
*	Thirdly substitutes are sorted by the time they came on
*	Finally, substitutes with the same Time-on are sorted by squad number or player name.

Optionally, you can choose to sort the squad in the order that you enter players. This option can be selected from the Setup dialog.


Adhoc Queries

The query feature of Ltrack allows you to extract information that meet your selection criteria, rather than rely on the data displays built into Ltrack. The resulting data, which is presented as a scrollable table, can be exported to the clipboard, or to a file.

If you have used a database application, particularly Microsoft’s Access, you should be able to use the query facility straight away. However, complete instructions are given below, followed by a short example tutorial. A number of pre-defined queries are also available. They can be used as provided, or serve as a starting point when creating your own query.

Getting Started

When you click on the Query button, you are presented with the query design form. On the left of the form are a number of controls and list boxes that are used to design the query. On the right are some buttons used to run the query, display this help, or close the query form.

The steps used to create a query are:

1.	Select the category of information that you wish to query. For example information about games played, or information about players.
2.	Select the specific bits of information (or Fields) that you want to display or select a pre-defined query.
3.	Specify an optional selection criteria and how you want the resulting information sorted.

The first control on the form is a row of buttons used to select the category of information that you wish to query:

To select a category, simply click on the appropriate button. When you select a category, the fields available in that category are presented in the available fields listbox :

Each available field is displayed in the listbox as a short field name, and a longer description of what the fields contains.

The final control on the query form is the query design grid:

Each column of the design grid is used to select a field for inclusion in the results table. Each column consists of five rows. The first row does not contain any information, but is used for operations involving the mouse. The other rows are:

Field:	This row contains the field name (taken from the listbox above) that is to appear in the results table.
Sort:	This row is used to specify how the contents of the column are to be sorted in the results table. This can be blank (not sorted), Ascending or Descending. If more than one column is sorted, then the sort rules are applied from left to right.
Include:	This row is used to select those columns that will be included in the results table. If a column is only required for selection or sort purposes, you can exclude it from the results table. The setting is set and unset by clicking the cell.
Criteria:	This row is used to define a criteria used to select the data contained in the selected field that will be included in the results table.
Or:	This row can be used to specify a second selection criteria.
Selecting Fields

There are three ways to select the field to be included in each column:

1.	Simply double-click the required field in the available fields listbox. The field will be added to the first free column in the design grid.
2.	Drag the field from the listbox and drop it on a column in the design grid. If the field is dropped on an occupied column, it will be inserted at that point, rather than replacing the existing field.
3.	Click on the field row of a column of the design grid. A list box will be displayed from where you can select the field you want in that column.
Sort Options

To set the sort requirements for a column, simply click on the sort row for the required column and select the sort option from the listbox that is displayed. To remove sorting for a column, select (not sorted) from the listbox.

Selection Criteria

The Criteria (and Or) row can be used to select information that meets one or more selection rules. For each field in the grid, you can select data that is equal to a specified value, or for dates and numbers, select data that is less than or greater than a specified date or value.

Equality:	To select data that is equal to a specified value, simply enter that value in the criteria row. For example to select a particular team, enter the teams name in the criteria row. If the string specified ends with an asterisk a partial match will be performed. For example, Bristol* matches both Bristol City and Bristol Rovers, and B* matches all values (teams, players etc) beginning with a ‘B’.
Less Than:	To select data that is less than a specified value, enter the less than symbol ‘<‘ followed by a date or number. For example to select players who have scored less than five times, enter <5 in the criteria row.
Greater Than:	To select data that is greater than a specified value, precede the value with the greater than sign ‘>‘.
Odds and Ends

To delete a column, right click on the column you want to delete and select Delete from the popup menu.

To move a column, click and hold the mouse on the first row (greyed) of the column you want to move and drag the column to its new location.

Example Query

To help you get started, presented below is a step by step example of a query:

You want to list all games where a team scored more than two goals, but still did not win.

1.	To query information about games played, you need to select the Games category. To do this, click the Games button in the Query What section:
2.	You now need to select those fields you wish to include in the query output. For this query, you want to see the date of the match, the home and away teams, and the score. To select these fields, double click on Date, HomeTeam, AwayTeam, HomeScore and AwayScore.
3.	You also need to include fields used to match your search criteria. In this example, you need to check the goals scored for each team, and if the home or away team won. You have already selected the goals scored in step 2. To include the other two fields, double click HomeWin and AwayWin.
4.	The next step is to specify how the output is to be sorted. In this example, we want to sort the results first by the date, and then by the home team. To do this, click on the sort row of the Date column and select Ascending. Then click on the sort row of the HomeTeam column and click Ascending.
5.	The final step is to specify a criteria to select only those matches that meet our requirements, that is those matches where a team scored more than two goals but did not win. We need to specify this criteria twice. Once for the home team, and again for the away team. First to select those games where the home team scored more than two goals, enter ‘>2’ (without the quotes) in the criteria row of the HomeScore column. Next, to select those games where the home team did not win specify ‘N’ (again without the quotes) in the criteria row of the HomeWin column. Now repeat this for the away team, enter ‘>2’ in the Or row of the AwayScore column, and ‘N’ in the Or row of the AwayWin column.

You should have a query grid like this:

Click the Run button to see the result of your query.


Create/Edit Competition Name

This dialog is used to create a new competition or edit the name of an existing competition. You must create a competition before you can enter results for it. A competition consists of two names. A long name, such as ‘FA Cup’, and a short name, such as FAC. Ltrack predefines the competition ‘League Game’ with short name ‘LGE’ for recording league games.

Note that both the long and short names must be unique.


Automatic Prediction

Automatic prediction allows you to automatically predict the results of remaining matches based on the previous performance of teams. You can predict the result of all remaining matches, or of only those matches for which you have not already predicted a result.

The prediction method is based on the performance of each team during their previous few matches, so for a more accurate predictions, you should repeat the process every few weeks to take in to consideration the current form of the teams.

The prediction process first decides on the result and then chooses the possible score. The score takes into consideration the number of goals teams tend to score and the vulnerability to letting in goals of the opponent. The final score is therefore sometimes somewhat wide of the mark and should not be treated too seriously. For similar reasons, the predictions are not likely to win you a fortune on the pools! However, should you win big, I would be only too happy to take on some of the burden of spending your winnings!


Techi Stuff

When I started to write Ltrack, I was faced with an initial choice. Do I use the built-in support for databases within Delphi, or do I create my own data structures in a standard sequential file. While it would certainly have been much easier to have used the first approach, in the end I rejected this because that would have meant distributing a whole bunch of support files with the product, making downloading, installing and running the product much harder work.

However, in designing the file structure for Ltrack, I have attempted to incorporate some of the design principles from relational database design.

Data Maximums

Below are the maximum sizes allowed for certain data elements:

Teams in a league table:	26
Non-League Teams	200
Cup Competitions:	20
Recorded Goals:	2000
Recorded Results:	2600
Players:	2520
File Structure

The layout of the file structure is presented below. You may find this useful for extracting information that is not available via Ltracks export function. However, this structure is subject to change, so beware.

The file consists of a header section, and one or more optional collections of league data in a pre defined order. The sections are listed below in the order that they appear in the file. They are described using standard Pascal record definitions.

File Header

HeaderRec = record

    VerString:  string[5] ;       { Contains the constant ‘DIVHD’ }

    Version:    byte ;            { File version (31 is latest)   }

    DivName :   string[30];       { Table Name                    }

    NumTeams:   Word ;            { Number of league teams in File}

    NumGames:   Word ;            { Number of Games in File       }

    NumGoals:   Word ;            { Number of Goals in File       }

    NumPlayers: Word ;            { Number of Players in File     }

    TrackGoals: boolean ;         { Track Goals Yes/No            }

    WinPoints:  Byte ;            { Points for a win (2/3)        }

    GoDown:     byte ;            { No. that are relegated        }

    GoUP:       byte ;            { No. that are promoted         }

    OwnTeam:    Byte ;            { Number of own team            }

    SortParm:   string[8] ;       { Current Sort rules            }

    PlayOff:    Byte ;            { Number in playoffs            }

    NumCups:    Byte ;            { Number of competitions        }

    NumCupGames: Word ;           { Number of Cup games           }

    NumSquads: Word ;             { Number of squads in File      }

    TeamSize:  Byte ;             { Number of Players in Team     }

    NumSubs:   Byte ;             { Number of subs allowed        }

    NumCupTeams: Word ;           { Number of Cup teams           }

    IncludeCups: boolean ;        { Include cup games in stats    }

  end ;

Teams

 TeamRec = record

   TeamName:   string[30] ; { Name of Team                 }

   TeamPlayed: Byte ;       { Number of games played       }

   TeamPoints: Smallint ;   { Number of Points             }

   TeamDeduct: Smallint ;   { Number of deducted points    }

 end ;

Games

GameRec = record

     GameID :     Word ;         { ID of Game (1..nnn)          }

     GamePlayed : boolean ;      { True if game has been played }

     HomeTeam :   Byte ;         { ID of Home team              }

     AwayTeam :   Byte ;         { ID of Away team              }

     ForGoals :   Byte ;         { No. of goals for Home team   }

     AwayGoals :  Byte ;         { No. of goals for away team   }

     PlayDate :   TDateTime ;    { Date of match                }

     Attendance: Longint ;       { Crowd attendance             }

     GamePredicted: boolean ;    { True if score is predicted   }

     HomeSquad: Word ;           { ID of home squad or zero     }

     AwaySquad: Word ;           { ID of away squad or zero     }

     CupID:      byte ;          { Competition ID (or zero)     }

     GameNote: string[50] ;      { Comment on result            }

  end ;

Goals

GoalRec = record

  GameID :   Word ;        { ID of Game goal scored in    }

  TeamID :   Word ;        { ID of team goal scored for   }

  PlayerID : Word ;        { ID of player who scored goal }

  GoalTime:  Word ;        { Time goal scored (minutes)   }

  OwnGoal :  boolean ;     { True if an own goal          }

  Penalty:   boolean ;     { True if a penalty            }

end ;

Players

PlayerRec = record

  PlayerName:  string[20]; { Players Name                 }

  PlayerTeam:  Byte ;      { Players current Team         }

  GoalsScored: Byte ;      { No. of League Goals scored   }

  PlayerPos:   Byte ;      { Players Position             }

  PlayerSquad: Byte ;      { Players Squad no. (or zero)  }

  PlayerCupGoals: byte ;   { No. of cup goals scored      }

end ;

Squads

SquadRec = record

  SquadGame: Word ;        { ID of Game squad is for     }

  SquadTeam: byte ;        { ID of Team squad is for     }

  SquadApp: Array [1..18] of AppRec ;

end ;

AppRec = record

  AppPlayer : Word ;       { ID of Player                }

  AppOn : byte ;           { Time Player on              }

  AppOff: byte ;           { Time Player Off             }

  AppYC1: Boolean ;        { True if Yellow Card 1       }

  AppYC2: Boolean ;        { True if Yellow card 2       }

  AppRC: Boolean ;         { True if Red Card            }

  AppRating: byte ;        { Rating of performance (0-10)}

end ;