Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.
IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The application supports PalmOS’s find feature. You can lookup a record by its label only.
Turing uses a database in which it can store multiple machine sets. A set has a label, an initial machine space, state and cursor position, and an instruction set that operates upon the machine space (Ken’s explanations are much better than mine, I’m afraid).
Of course, if you feel some feature is missing or should be improved/redesigned, please let me know.
![]() | When Turing is launched, it displays this form: It is a list of all records that were found in the database. A new record can be created with the " new " button. An existing record can be selected by tapping it. In both cases, you will be taken to the main form, where the Turing machine can be operated. |
![]() | There is also a menu for this form. From this menu the preferences form can be invoked: |
![]() | When ‘execution
updates display’ is checked, the main form will update the machine space after each step of the execution. Of course it
slows down the execution a bit. If not checked, the whole form is redrawn when execution stops. It is possible to remove, save or restore the current record from the database (in the main form). For each checked related box, an alert dialog is popped up. When the cursor moves towards a border of the machine space, it is possible either to enable or forbid cursor wrapping. The frame rate is not very accurate. In, fact, this is used to compute a delay to wait for an event in the main loop. If none is received, a step of the engine is performed. Not all values are possible (the preferences do not store this value, but the integer part of 100 / <value>. Values above 50 are not allowed, and I think that values above 10 won’t change the execution speed very much. |
![]() | Once a record is selected, the main form is opened to edit it: The upper-right circle is in fact a button that closes the form (returns to the list of machines). If the machine space was hand-modified, a save popup dialog may appear, if the preferences require a save confirmation. The top-left field is the name of the current record. You can change it at will (duplicate names are allowed). The top-right field displays the current state of the machine. It can be modified when the program executes, or you can modify it manually to set up the machine before it is run. The right field contains the instructions of the machine. Each instruction is a 5 characters string. When
the instruction set is not syntaxically correct, the lower-left corner displays this symbol: The large bordered area is a representation of the machine space. It is of course finite, and does not wrap (a left move on the left border will do nothing). The highlighted symbol is the current position of the cursor. When no field has the focus, any entered character will replace the symbol under the cursor. It is thus possible to edit your own initial machine space. The menu also offers a command to fill the machine space with the symbol unde the cursor, to reset it easily. Note that the current record will not change until you save your changes (use the save command in the menu). From left to right, the bottom
buttons run, stop and step the machine. The little field contains the step count (1 is the default is the field is
empty). When the machine is being run, the lower-left area displays a busy symbol: |
The actions menu offers the following self-evident commands, with associated confirmation dialogs:
‘Duplicate’ will create a copy of the current record before recording the current machine space. ‘Archive’ will remove the record from the database, but a copy will be archived on the PC by the next HotSync.
Add/substract two integers in various notations (binary, decimal, etc.)
Find the exit of a labyrinth
An interesting (and opened if I remember well) problem is to find the machine with a finite number of states that will fill the most positions in the machine space, and then stop. (It is easy to fill an infinite number of positions with a one-state machine). Of course it is difficult to try in a finite space…
When invoking menu commands through shortcuts, the invoked menu
entry name ()that is displayed does not disappear after a while. I don’t
know if this disappearance is subject to a PalmOS message, and did not find any information about it in the USR
programming guides.
The indexes displayed in the main form may not be consecutive (they are the indexes of the valid records – archived ones will not appear in the list, but their indexes will be skipped). The main list is not yet sorted alphabetically.