![]() |
Downloadable ATS Games and programs. Some third party freeware programs.
Gomoku - 17th September 2021
Popular and well known Gomoku paper game is also known as Dots and Crosses. Game is built over ready made component, written by Radu Buzea during years 1998 - 2001. Game belongs to download and drop programs. You copy executable and HTML help into same directory. Game starts with a double-click to dropped Gomoku.Exe file. Game builds and rebuilds all required files. Hope you have enjoyable moments with the game.
Downloadable file : gomoku10.zip ( 1 776 007 bytes )
- Game was written in Windows XP3 operating system. Seemed to work also in 32-bit Windows 8 Pro. Should work also in older Windows 9x and Windows 2k computers.
- Very first zip missed gomoku_rules.gif file. New zip with the missing file was uploaded few hours later on 17th September.
Engagement - 22nd April 2021 - Bug Fix 1
This weekends Bug fixes have Engagement20.Exe files. You replace existing Executable with it. Or you drop it into some directory, and start to play.
Bug fix 2 : Downloadable file : gEngagement_210422b.zip ( 433 995 bytes )
- Settings should work properly.Obsolete / archived zips
Bug fix 1 : Downloadable file : gEngagement_210422a.zip ( 433 798 bytes )
- Fixed order of shuffled deck removed. Names are longer. Slots opening system was fixed to next level.
Sudoku - 1st March 2021 - Unfinished game
Downloadable file : gSudoku_210301.zip ( 2 753 112 bytes )
- Unfinished ATS Sudoku is obviously the most sophisticated Sudoku ever made. In many computers, closing the game ignites a set of annoying, but harmless clean up error messages. If you change directory, where you keep the game copy, you must either delete Sudoku.Ini file or manually correct roots for paths in Sudoku.Ini file. Check ReadMe.Htm for some information about the game. You get to game screen with a click to splash screen, which opens first. When open game, you must manually set first, Games combo, to "* All Boards". Other selections end after first played game, and informs you, that next board doesn't exist.
Tetris - 28th February 2021 - Tetris and Engagement beta versions.
Downloadable file : gTetris_beta_210228_v1.zip ( 1 090 208 bytes )
- Engagement got memory for self made settings, maximum decks was raised to 8. Screens were cleaned from unused stuff.- Beta version from final Tetris game. This version uses binary attributes for selecting Sprites for the game in the settings. Binary attributes are always summed together. Available Sprite attributes are 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384, 32768, 65536, 131072. Original Tetris sprites forms a sum 127. When you set and save 127 to SpriteSet setting, you can play with original Tetris sprites. Beta version misses screens for setting used Sprites. After Original sprites there are Few easy and small sprites.
- Pack has also playable version from Engagement solitaire. You can set names for Bride and Groom. Game remembers the names you enter to the boxes. Game supports both drag dropping and and card clicking. Most settings works as they should. Card clicks must be enabled from settings. In many computers, game throws set of annoying, but meaningless clean up error messages, when you close the program.
Games do not need installation. After you have extracted games into some directory / folder, you can begin to play the games by double clicking the executable file. Both games worked in 32 bit Windows 2000, XP and Windows 8 Pro. Obviously also with other Windows XXX operating systems. Games should work also with Windows 98, 98SE and Me operating systems.
Earlier downloadable file : gTetris_beta_210228.zip ( 1 117 759 bytes )
Tetris - 27th January 2021
Downloadable file : gTetris_210127c.zip ( 396 375 bytes )
- Game got new, faster screener. Old got sometimes stuck, when screen was almost full of sprites. Faster screener makes game slightly more difficult. Screen updates doesn't fall from given update interval as much as before. New screener allowed to enable custom board sizes. Max board size is 100 x 100 boxes. Size can be adjusted in game settings.
- Stats got promised Sprite counts and column sort system. Cover girl was added to opening screen and about box.
- In game settings you can set the number of players and statistic records, you want the game to remember. Game settings are checked and fixed during the play. It allows you to safely adjust settings with Tetris.Ini file. In ini file, BoardWidth is always 5 numbers bigger than actual game size. 5 five additional columns are used by preview system. In game settings, you set game width, instead of total width.Game settings gives you a chance to load games, which have entries in stats. When saved, these settings always overwrites setting for current game. If current game misses statistic entries, you lose the settings.
? Although results in sample stats are real. Actresses in stats haven't played the games. Alphabetical list was taken from my movie systems actress list. If you want to, you can clear entries or alter the names from Tetris.Ini file. If something goes wrong, after rename or deletion, game creates new ini-file with default settings.
- - - -
Tetris is very commonly played game from 1990s. With the link, you can download fully functional ( not finalized ) version from the game. Putting the game aside, it is not getting improvements and better looks any day soon.
Game works in Finnish 64 bit Windows 7 Pro. 32 bit Windows 8 Pro is also capable of hosting the game. Game is naturally primarily made for Windows XP and Windows 2000 operating systems. In some computers, game ends to Runtime error 217. Officially, you should never get this error from Windows program. It is a close event for Console applications, which run in DOS screen.
Zip file has Tetris.Exe, Tetris.Ini and empty Putnamis.Ini files. First you extract these files into some directory. Them you double tap, Tetris.Exe file. Full removal needs, that you delete earlier three files. After removal computer is a match to the one, you had before you extracted and played the game.
If you want to build, for example Tertis version with settings for the youngest player, you can copy and rename Tetris.Exe file. Game uses R&Ds standard init and exit interface, this interface creates and uses setting files, whose names always matches exe-file's name. If you want to transport old settings and stats to new exe file, you can copy and rename Tetris.Ini file. Game files are in Ansi format, if you use text-editor for altering Tetris.Ini-file, you must make sure, that the file is saved as 8-bit Ansi text file. 16 and 8 bit Unicode files do not work with game. Game itself uses code page and language setting independent 7-Bit characters.
? Game uses Delphi's RandSeed variable for setting system time into randomizer. Before setting the time, game checks and corrects faulty system times. And also all tick-counts with 0 ms fraction.
Archived files :
Downloadable file : gTetris_210127b.zip ( 396 375 bytes )
- Game stats missed Game-end timer value. Game itself missed range check for Timer Interval. Interval range goes from 5 ms to 10 seconds. Under and overlapping values are fixed automatically to range.gTetris_210127.zip ( 395 615 bytes )
CPU Speed - 16th May 2020
CPU Speed is a simple program, that measures how fast some CPU actually is. Program executes loop, which has 7 assembler or CPU instructions. 3 lines performs multiplication for unsigned double word. 3 lines moves data to registers from CPU cache. After 10 000 loops program executes few additional for providing you a chance to close the program. This additional check is not included to measured frequency. Therefore the program gives slightly smaller frequencies than the CPU actually has.
In order to get the maximum speed, you cannot have any other active programs running. This rule depends on Windows version and chipset-cpu driver. If you move or resize the window, the speed falls dramatically. The interruption for checking the message queue and related actions takes so much time.
In single core CPU, the results are not CPUs actual speeds. Speed is downgraded with the time OS assigns to background tasks. When I tested, 2.8 GHz P4 reached 1.4 GHz processing speed in Windows XP. Test with Duo Core and iCore CPUs uses another core for background tasks and gives the nominal speed to active program.
Since the value is measured with the number of executed instructions, the additional bonus from multi core processing would come into results. This never happens. Super Fast Fujitsu Esprimo Desktops reached 3.6 GHz in turbo mode and 3.2 GHz when turbo mode was disabled. Super Fast could held the 3.6 GHz speed for an hour without any problems with over heating and crashes. My duo core laptop reached also the nominal 2.5 GHz speed in Windows 2000 SP4.
Downloadable file : CpuSpeed.zip ( 162 509 bytes )
CPU Speed is simple stand alone executable. It doesn't need any additional components, neither does it create any files to computer. Due to the nature, it doesn't give feedback to screen during the time it is active. The time you measure the speed is insignificant. After you click Stop, the program calculates the CPU speed from the time, program was active and in the simple loop. When program goes into measuring loop, it never comes out from CPU. It uses values, which are stored to CPUs own cache.
Program works with Windows 95 and later. Up to Windows 10.
1 While pMod <> 0 Do Begin Unit level variable, pMod stops the loop 2 wwTst := wwTst*2; wwTst is Doubleword, whose value is calculated and rolled over 3 Inc(wCnt); wCnt is Int64 counter for the number of loops 4 Inc(wSub); wSub is 32bit signed integer for checking the user input 5 If wSub < 10000 Then Continue; Loop is performed 10 000 times in between the user input checks 6 wSub := 0; Reset for user input counter 7 Application.ProcessMessages; Program control is interrupted for enabling Stop button clicks. And possible pMod variable update 8 End; CPU speed loop ends In the table you see the source for the loop. Right before and after the loop, the program checks current time.
Program lines 4 and 5 forms the variable conflict for multi core processing. This actual program loop must get the result from line 4 before executing line 5.
ROLLING LOOP
1=1 While pMod <> 0 Do Begin - SET WAIT 1 ON 2=4 Inc(wSub); + WAIT 1 OFF after finished 3=2 wwTst := wwTst*2; 4=3 Inc(wCnt); - CHECK WAIT 1 5=5 If wSub < 10000 Then Continue; 6=6 wSub := 0; 7=7 Application.ProcessMessages; 8=8 End;
SEQUENTIAL SYSTEM
1=1 While pMod <> 0 Do Begin 2=2 wwTst := wwTst*2; 3=3 Inc(wCnt); 4=4 Inc(wSub); - BREAK CYCLE 5=5 If wSub < 10000 Then Continue; 6=6 wSub := 0; 7=7 Application.ProcessMessages; 8=8 End; When you optimize program or compilation for native multi core system, you move line 4 to line 2.
When you do so, you get instructions in between variable change and variable usage.
With this swap, can use multiple cores for running the loop. Before stopping the CPU or ending the current cycle.In rolling loop you check the wait code, you set with Inc(wSub) instruction. In sequential system, you end the cycle, when you need calculated value.
In optimized rolling loop you have 3 program and 5 CPU instructions in between update and check. When so, you can use 5 cores for running the loop.
In the earlier programmed loop counter and check are right after each other, you can use only 1 core for check-part.Sequential loop doesn't need optimization, because current cycle is ended and values are calculated, before counter is checked.
In this system simple loop is better. When you have multiple variables and need for results from their manipulations, rolling loop is better.
These samples doesn't take notice to GOTO / JUMP instruction demands. GOTO / JUMP must always be executed alone, with only one core. You must finish the previous instructions, and read new instructions from the line you get from JUMP. All program flow commands .. If, Case, Do, For, While, Repeat, etc ... are actually GOTO-JUMP commands.
When you increase the number of cores, you might want to construct instruction, which waits for the preceding instructions to get into ready state. When so, JUMP is the last executed instruction in the cycle. You can drop the single core execution for jump.
InStrS Function for Delphi 5 and ANSI characters ( Beta version, you can get the final version from ATS site. After Boys are back in business )
InStrS is probably the first fully functional wildcard matching function after the DOS wildcard search function from the year X. Function has little over 450 program lines. Program flow is built with old GOTO commands. Cannot even dream of writing the function with IF and CASE commands. If I do not remember wrong, when I wrote first version, in average spent over one hour per line ( in final function ). Before making function available spent at least one day for adding 10 executable lines and two simple 10 line movers for the wildcard handler. The addition restarts the iteration after first char matches, but some other character doesn't.
InStrS supports :
+ DOS wild cards, "?" and "*". Asterisk has DOS's rollback system. It searches block, which matches the next character block. Not the next character only.
+ "§" is new wildcard, with what you can skip over spaces : "<§blockquote" matches to both "<blockquote" and "< blockquote"
+ Internally function uses chars 1 to 6 as wild cards. You can set user/caller wildcards freely. Before execution, search string parser converts user-chars to internal chars.
+ When you make * wildcard searches, you can always get the end position from the supplied ( optional ) result record. Need the end position for forwarding, creating a selection to text or replacing the text.+ With {acd} structure you can give multiple characters for one position.
+ With {word1,word_xx2, wordx5} structure you can give wordlists to one position. Wordlist can have embedded space chars and any chars. It cannot have alternative chars. Behavior '*' of wildcard is search next matching character. It does not search blocks like the '*' in primary string does. Word lengths in the list can vary. If you have two or more matching words in the list, the end position is counted with first matching word. Since the list can have blanks, the words are not trimmed, you cannot put spaces in between the words and separators.+ With attributes you can skip over "< html data >" blocks. Alternatively you can search from enclosed blocks only. It is easy to add custom enclosers to function. There is a simple block for enclosed char handling. With attributes you can skip over or search only from quoted blocks, too.
+ In Lines mode InStrS supports rectangled ranges. In principle all searches to TStrings are made in range. When there isn't a range, range is set to maximum. The caret / start position can be anywhere in the range. Start position do not have to be inside the given range. InStrS moves the given start position to closest inside the range.
+ In Lines mode InStrS can search strings from multiple lines. There are 3 options for the way InStrS connects the lines for matching, and one for cutting the search to line break. Wordwrap simply connects lines, Wordbreak adds one space in between. HTML adds exactly one space in between the lines. It "left trims" the next line ( without changing the contents ).
+ Function uses custom character sets. By default ignore case comes from Windows Western / ISO Latin-1 Character Set.
+ Besides upper-lower case, function has 4 special Dots character sets. When you assign characters into array and enable Dots, characters in the set matches to each other. You can for example create a set, where comma ',' and dot '.' and space ' ' are equal to each other.
+ First Dots set is reserved for '§' - trim space character. Trim space always skips over spaces, tabs, line breakers and other control characters.
+ There are two simple utility functions, SetToString and SetFromString, for creating user interface, etc. for sets. Set Of Char is 256 bit variable, which holds bits / attributes. Set variable is big meaningless number. Fast in execution. 4 bytes / 256 bits is the biggest possible set size.( in at least older Delphi ).
? In all old codepage character sets distance in between low-upper chars is 32 or H20. When A is actually a number 65, a is 65+32 = 97. Unicode character set - naturally - presents exceptions to the old simple upper-lower case standard. Most Unicode upper-lowercase chars have distance 32. There are also consequent up-low chars, with only 1 number distance.+ You can set start and end positions to search. Function supports common "Words only", "Ignore case" and "Wrap around" options.
+ In TStrings mode InStrS can search over multiple lines. You can set line range and also column-range for each line.
+ In text mode a negative position is calculated from the end of the text.? The primary loop can be set to forward or backward modes. Match loops always read chars from Left to Right.
+ In backward mode, the first position is start position, search goes to the beginning. Without positions, the line is iterated from end to beginning. Backward mode is handy when you search separation points for file extensions and filenames. Both are counted backwards. Search of beginning position to text block is common backward search, too.- InStrS works with Delphi strings and TStrings objects. For char-arrays, which begins from 0, you must create another version. Delphi string starts from 1, you must change position and length checks.
- I do not use wide strings, because they consume so much memory. It is easy to create a wide string copy from the function. Almost all you have to do is to change AnsiString defs into WideStrings. Delphi's compiler forwards string pointer with string type oriented position, not with bytes.Despite flexibility, function is fast. It is optimized for speed. In tests it scrolled through over 200 kB string system in less than 1 milli second. Function has system and tools for creating add-on blocks to it, without messing the speed of simple primary searches. You can never use procedure calls in low level, basic functions. When low level function is used and executed awful many times in overlying programs, performance penalty from procedure call is enormous.
InStrS belongs to base functions for text bases and text oriented programs.
Files :
2018-08-29 - InStrS ZipThere has been uninvited "when-i-am-away" guests. The zip misses exe file from sample program. The source must be compiled locally. You cannot embed "invisible" viruses into source code. This version compiled without errors ( Delphi 5 ) when it left. Earlier version seemed to miss data type definitions for set-conversion functions.
Too ambiguous search strings for InStrS :
*{jana,taylor}*.* word list is preceded by '*'. There must always be at least one real character after '*'. Word list, character list or any char will fail. You must "get out" from wildcard block, before you can use other special characters. Bugs :
Downloadable file has beta version from the function. There are few missing things, commented things and known issues. Original function InStrH missed ranges and word lists. Counter variables are used in all parts of function. First first you have to synchronize counters, then you have to keep the sync, regardless of the current state and where you jump in the function. Results and parameter list for calls are in the final form. The end position in the result is the last matching char.At some point, after Boys are back on-line, there will be another basic utility for Media Player. FilesToStrings allows you to create file lists into TStrings objects. You can also get events from each file and sub directory. Handy when you collect songs, photos and videos for the playlists. It has all the same and few extras when compared to standard Windows file search. It can be embedded into programs. Then there is a small utility, with what you can get events/messages from attached and detached USB disk-dongles, SD cards, etc. ( Undocumented feature )
FileComp, which is needed for synchronizing files will also become available after Boys are back. Wrote Filecomp for checking over one million file backup pool ( over 1 TB in size ) from the hacks and crashes. It is optimized for maximum speed. In common usage checks you have to do for sync, does not take long.
- - - -
- When you compile stand alone exe files with Delphi , Delphi takes all units which are declared in USES clauses into exe files. Useless units in uses clauses increases the size of exe file quite a lot. If the unused units have automated initiators the the program executes everything you have in Initialization and Finalization sections. Had to reconstruct the library system for ATS games, so that automated dataBase initializations, which manipulates windows settings, do not run every time you play ATS games.
- Media player programs introduces an idea from Hosted components. Hosted component is reusable 2nd level screening component. You can add hosted component to any other component with only one program line in WM_PAINT handler, and property entry for the add-on object. With hosted, reusable component you can easily get custom Bevels, Backgrounds, Captions, and other decorative effects to all your screening components. HTML, CSS and D-HTML have many decorative definitions and effects for the text. With reusable add-ons, you can enhance your programs / components with HTML compatibility without spending a lifetime with the required code. Hosted components are built over THost. Simple THost provides abstract functions and variables which are needed for synchronizing. You do not have to spend time with hosting. You concentrate to component and the things it is supposed to do, just like before.
- - - -
You are not restricting the modifications.
The restrictions in freeware, shareware and purchased components and add-ons are nominal. They hardly ever work in your programs without some changes. Remember when I purchased VB 3.0 DB Pro in 1993. Almost all pro-pack components had so many bugs, that it was impossible to use them. They crashed and caused memory leaks. Delphi is not very different.What do you get with new programming tech.
You get better programs. Goto blocks makes the errors and bugs easier to track. Simple structure makes more complicated functions, components and programs possible. InStrS is kind of a showcase from the potential of the goto blocks. There is a practical limit for the number of nestled if and case blocks. When you have difficulties in writing the nestled blocks, you can be sure, that no-one else can fix or modify your source. Could show you at least 500 examples from the case, where the nestled if-case system makes a mess from simple function. Delphi and its components sources are full of good examples from the awful if-case messes. All you need is one overlapping user option, and after that the source is a mess. Overlapping option, which needs special handling in more than one segment.Usually when I write programs, I start with common If-Case system. Convert the function into GoTo system, if it becomes too complicated. InStrS is 4th or 5th string search function, knew already in forehand, that it needs Goto blocks.
In commercial programming, especially in dataBase programming, readability of your code is important. Others must be capable of reading, fixing and modifying your code. Typical business database company sells or resells business applications. After that it provides help and modifications to it's customers, sold applications. The author of the program is almost always different from the consult, who serves customers. After all consults fail to assist you, you get into talks with the person, who wrote the program ...or makes major modifications to it.
What is InStrS good for ?
In programming it is a bit slow, if you do not need special features. It makes frustrating and vulnerable looping systems, which are always needed for processing string input from user. String input checker is usually bigger and more difficult to write than the actual function.