home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / draco / draco-1.ark / SWITCH.TXT < prev    next >
Text File  |  1986-11-12  |  35KB  |  647 lines

  1.             The Game of SWITCH
  2.  
  3. Introduction
  4.  
  5.     SWITCH is a semi-graphical game which can be played on any CP/M computer
  6. system on which the terminal has an addressable cursor. It does not require
  7. any graphical output hardware. As it's name suggests, SWITCH simulates a
  8. railroad switching contest, in which contestants attempt to complete a set of
  9. switching tasks using a minimum number of operations. The generality of the
  10. program allows it to be used for other applications, however. One such is
  11. that of testing out proposed railroad layouts before they are actually built.
  12.  
  13.     In it's normal mode of operation (when the user just enters 'switch' as
  14. a CP/M command), SWITCH presents the user with a menu of the layouts
  15. available on the diskette in drive A:. The list can be quite long, so is
  16. paginated when necessary. The layout names are read from the files
  17. themselves, so a fair amount of disk I/O will occur. Methods of reducing
  18. this will be given later. The user enters the number of the layout he/she
  19. wishes to run, and the layout description will be read from disk and the
  20. layout (or a portion of a large one) will be displayed on the screen.
  21.  
  22.  
  23. The Layout Display
  24.  
  25.     Without using graphics, the display is not at all realistic, but it is
  26. completely understandable after a little practice. The bottom line of the
  27. screen is reserved for displaying prompts, informational messages, and the
  28. current score, which is the number of operations performed so far. As an
  29. example, consider the following display, which is similar to that of the
  30. layout called "Basic Switching Layout":
  31.  
  32.                         Basic Switching Layout
  33.  
  34.  
  35.                                    b/
  36.                    /
  37.                   /
  38.                  /
  39.                    2/----+
  40.                   0/      \
  41.                    *          /04      \        a
  42.            *--abcd------------------------
  43.                 01   \      03
  44.                  c    \
  45.               ---------\0
  46.                     \5
  47.                      \d
  48.                       \
  49.                        \
  50.  
  51. The lines drawn with '/', '-', '\' and '+' are track in the layout. Other
  52. layouts will also include '|'s. All layouts have a single '.', which is the
  53. origin or starting point of the layout. In this layout, it is under the lower
  54. '*', which is the engine. The 'abcd' on top of the '-'s are the four cars
  55. which must be switched. They must each be positioned directly under the
  56. corresponding letter which appears somewhere on the layout, but just above
  57. the track. E.g. the 'a' must be placed on the right-most piece of track,
  58. just under the other 'a'. When a car is in the correct place, the position-
  59. indicator letter will be capitalized. To complete the layout, the engine
  60. must also be returned to just under it's '*'.
  61.  
  62.     The numbers on the display indicate turnouts, where two sections of 
  63. track merge into one. For example, '01' indicates turnout number 1, which in 
  64. this layout is a left-hand turnout, with the branch heading upwards. The 
  65. turnout numbers are always two digits (01 - 99) and should be read from 
  66. left-to-right, or if the straight side of the turnout is vertical, from 
  67. top-to-bottom. All turnouts are initially positioned going straight, thus if 
  68. the engine (the upper '*') is moved to the right, it will push the four cars 
  69. straight through turnouts 01, 04 and 03, to the rightmost piece of track. 
  70. When a turnout is switched to the turn position, the character in the middle 
  71. of it will change to indicate the new position. 
  72.  
  73.  
  74. Basic Operation
  75.  
  76.     The basic operations in SWITCH are those of moving an engine, turning
  77. turnouts and uncoupling cars. All cars and engines which are initially
  78. adjacent are initially coupled. As in model trains, cars and engines couple
  79. automatically when they are pushed together. Moving an engine is best done
  80. using the keys of a numeric keypad, but the required keys are duplicated
  81. on the main keyboard. The 9 movement keys all move the engine in the
  82. direction corresponding to the direction of the key from the '5', 'j', 'J'
  83. key. The set of motions is as follows:
  84.  
  85.         7, y, Y        8, u, U        9, i, I
  86.             up-left           up          up-right
  87.         
  88.             4, h, H        5, j, J        6, k, K
  89.               left           wait          right
  90.         
  91.             1, b, B        2, n, N        3, m, M
  92.            down-left         down        down-right
  93.  
  94.     Thus, in the "Basic Switching Layout" shown above, typing the 'k' or '6' 
  95. key will move the engine (the lower '*') to the right one position. After 
  96. the second move, it will be coupled to the 'a' car. If 'h' or '4' is then 
  97. typed, the entire train will move left one position. The program is flexible 
  98. about which keys are used; e.g. on a piece of horizontal track, any movement 
  99. key except 'up' or 'down' will move the engine. Thus, on most small layouts, 
  100. which do not have any loops or vertical sections, the 'left' and 'right' 
  101. keys are the only movement keys needed. Note that the movement keys always 
  102. apply to the engine, not to an 'end' of the train. Thus, if a layout has a 
  103. loop on it, it is possible that typing 'left' ('4' or 'h') will actually 
  104. move one end of the train up, down or even to the right. 
  105.  
  106.     Turnouts are operated by 'toggling' them, that is by flipping them from
  107. their current position to their other position. This is done by typing a
  108. 't', and, following the prompt, the two-digit number of the turnout to
  109. be toggled. Turnouts cannot be toggled when there is a car or engine on top
  110. of the portion which changes. As mentioned before, cars and engines couple
  111. automatically when pushed together. They are uncoupled by typing a 'c', and,
  112. following the prompt, typing the letters (or symbol for an engine) of the
  113. two cars that are to be uncoupled.
  114.  
  115.     As an example, the 'd' car in the above layout could be put into it's
  116. final position (underneath the 'd' on the lower section of track) by the
  117. following sequence of moves:
  118.  
  119.             6,6,6,6,6,6,6,6    - move engine and cars right until
  120.                   or             they are just to the left of
  121.             k,k,k,k,k,k,k,k      turnout 04
  122.             t04               - toggle turnout 04, so that it now
  123.                          turns downward
  124.             6,6,6,6,6,6,6      - move train until the 'd' is
  125.                 or         correctly positioned
  126.             k,k,k,k,k,k,k
  127.             ccd    or cdc         - uncouple car 'd' from car 'c'
  128.             4,4,4,4,4,4        - move the remainder of the train
  129.                 or         back up to the main track
  130.             h,h,h,h,h,h
  131.  
  132. The sequence looks confusing when viewed this way, but it is quite natural
  133. after a few minutes of practice.
  134.  
  135.     A 'run' of a layout continues until the user gives up by typing a 'Q', or
  136. until all cars and engines have been positioned at their destinations. At
  137. this point, SWITCH will attempt to log the score of a successful run. To do
  138. this, it needs to know the user's name for the log entry. Users are
  139. encouraged to use their normal names for logging, and to use the same name
  140. at all times, so that redundant log entries are not created. Some of the
  141. supplied layouts do not have log files, so SWITCH will not log scores for
  142. those layouts. If logging is desired, it can be enabled by simply creating
  143. an empty file whose name is the base name of the layout file, with a file
  144. extension of '.LOG'. Files can be created by any text editor, such as the
  145. standard CP/M editor, 'ED.COM'.
  146.  
  147.  
  148. Getting Started
  149.  
  150.     SWITCH is supplied in the form of a CP/M file called 'SWITCH.SET'. This
  151. is a program file which must be configured to operate on the user's terminal
  152. before it can be used. This configuration is done using the CONFIG program,
  153. which is supplied on the diskette, and for which there is an accompanying
  154. writeup. After this is done, it is suggested that the user start by simply
  155. displaying the layouts, to see what they look like. Then try to solve the
  156. "Basic Switching Layout". Most people who don't have experience with
  157. operating trains (whether real or model) have trouble getting car 'c' into
  158. it's proper place. If you have this trouble, just keep trying, and think
  159. about what the situation would look like in real life.
  160.  
  161.     The "Basic Switching Layout" can be done using 160 operations.
  162. "Operations" are those listed above under "Basic Operation". Other operations
  163. exist, but they do not count towards the final score. Do not be disappointed
  164. if you cannot get down to 160 - most people get over 200 on their first
  165. try, even if they are being careful. Nothing has been proved, but it is
  166. thought that 160 is the minimum possible for this layout. The next layout
  167. you should consider is "Tricky Little Layout". This layout isn't much more
  168. complicated, but it is a tight squeeze in a couple of places. The minimum
  169. obtained on this layout is 100 moves, and it is thought that this is the
  170. lower limit, but if you find a better solution, please let us know.
  171.  
  172.     The remaining layouts are all considerably more complicated. "Messy
  173. Medium" is one of the most challenging, because it is fairly small and has
  174. lots of possibilities. I have in the past completed it in 172 moves, but I
  175. cannot at the moment remember how. This may be a minimum, but improvements
  176. are quite possible. Six of the supplied layouts are intended to roughly
  177. model a typical town. "Small Arrivals" and "Main-line Yard Arrivals" have
  178. a group of cars sitting on a delivery track (left there by a passing freight
  179. train) which must be positioned on the appropriate sidings. In the
  180. "departures" layouts, cars must be picked up from the sidings and collected
  181. into a group for pickup by the freight train. The two "mixed" layouts
  182. combine both sets of cars. "Small Mixed" in particular is challenging
  183. because there should be some fairly low-scored solutions to it.
  184.  
  185.     "Saw-by" is an example of a problem faced by the crews on real trains
  186. (although fairly rarely). Two trains meet head-on and must pass by each
  187. other. Unfortunately, neither train will fit on the siding, thus some
  188. "fiddling" will be required. The standard solution to this problem is called
  189. a "saw-by", hence the name of the layout. "Saw-by" has two engines in it,
  190. the '*' and the '@'. The user is initially controlling the '*', but can
  191. switch to another engine by typing an 'e' and the symbol of the engine to
  192. be controlled. This operation does not count towards the final score. The
  193. symbol of the engine currently in use is displayed on the bottom line of the
  194. screen, just to the left of the word "Score:".
  195.  
  196.  
  197. More Advanced Features
  198.  
  199.     When SWITCH is displaying the menu of available layouts, there is a lot
  200. of disk I/O. This is because the name of the layout is contained in the
  201. layout description file, hence all of the layout description files must be
  202. opened and partially read in order to extract the name. If, when this
  203. menu is being produced, the user types a key on the keyboard, SWITCH will
  204. switch to using a faster, but less informative menu in which the name of
  205. the layout file is displayed instead of the name of the layout. All other
  206. operation is the same. When SWITCH is initially run, it can be told to go
  207. initially to this faster mode by entering "switch -" instead of just
  208. "switch" following the "A>" prompt. Also, instead of the '-', a list of
  209. layout file names can be given, in which case SWITCH will go directly to
  210. running those layouts, one at a time. In these faster modes, the user is
  211. not asked if he/she wants to see the instructions, but the command summary
  212. can still be obtained by typing a '?' when playing the game.
  213.  
  214.     Switch has the ability to 'window' around in the layouts, that is, to
  215. change the point at which the layout is being viewed. When running a layout,
  216. the user can enter any of the following:
  217.  
  218.             < or , - window left 5 columns
  219.             > or . - window right 5 columns
  220.             ^      - window up 5 lines
  221.             v or V - window down 5 lines
  222.             w or W - general windowing
  223.             o or O - window to the origin
  224.  
  225. The only supplied layout which requires any windowing on a 24 x 80 screen
  226. is "Old EMRA Layout". The viewpoint can also be rotated in 90 degree
  227. chunks by using any of the bracket keys (use )]} to rotate clockwise, ([{ to
  228. rotate counter-clockwise). While the layout is being drawn, any of the
  229. simple windowing or rotation commands can be entered, and SWITCH will abort
  230. the display. This allows several such commands to be given quickly, without
  231. having to wait for the entire display (which can take a few seconds for
  232. large layouts). When windowing around, it is easy to get lost, i.e. to window
  233. to a position where none of the layout is visible, and you don't know which
  234. way to go to find it. The 'o' command comes to the rescue - it will window
  235. in such a way as to put the layout origin (the period) in the center of the
  236. screen.
  237.  
  238.     When working with large layouts, it is a nuisance to have to continually
  239. re-enter a sequence of commands which has been worked out. SWITCH lessens
  240. this problem by allowing such sequences (the basic operating commands only)
  241. to be recorded in a file, then "played back" at a later date. The
  242. distribution diskette includes two such "recordings", one for the "Saw-by"
  243. layout, and one for the EMRA layout. A recording is played back when running
  244. a layout by typing a 'p', followed by the name of the file to be played back.
  245. The two files are called 'SAWBY.REC' and 'EMRA.REC'. Thus, the pre-recorded
  246. solution to the "Saw-by" can be watched by entering the "Saw-by" layout,
  247. then typing a 'p' followed by "SAWBY" and a carriage return. The actual
  248. playing back can be done one step at a time by using the RETURN or LINEFEED
  249. keys once for each step, or it can be played back continuously by typing
  250. a space. When a playback is running continuously (with an effect similar to
  251. simple animation on a fast terminal), it can be stopped by typing any key.
  252.  
  253.     Recordings can be made when running a layout by typing an 'r' and then
  254. the name of a file to record into. Be sure to avoid overwriting a file which
  255. contains a recording that is needed. The recording can be stopped at any
  256. time by typing another 'r'. Similarly, a playback can be terminated by
  257. typing another 'p'. Both recording and playback can be going on at the same
  258. time, thus allowing a recording to be "edited". Do not attempt to record into
  259. a file which is currently being played back. This editing is aided by the
  260. 's' command, which skips the next operation in the file being played back.
  261. Similarly, the 'z' command allows a number of wait operations to be inserted
  262. into the file being recorded. When playing back, new commands can be entered
  263. directly from the keyboard; they are inserted into the recording file at
  264. the current position. When playing back a file, SWITCH processes the commands
  265. at full speed, i.e. with no delay. This is too fast to see any details when
  266. the terminal is running at 9600 baud or higher. The playback can be slowed
  267. down by using the 'd' command, which allows a playback delay to be entered.
  268. When trying to minimize the operations taken to solve a given layout,
  269. recording and then playing back the session can be quite useful, as it often
  270. points out where improvements can be made.
  271.  
  272.  
  273. The EMRA Layout and the SWMERGE Program
  274.  
  275.     Layout "Old EMRA Layout" in file 'EMRA.SWT' is a fairly complete model
  276. of an HO gauge model railroad built by the Edmonton Model Railroad
  277. Association. The layout no longer exists (the building was torn down), but it
  278. serves as a good example of how SWITCH can be used to model large layouts.
  279. The physical arrangement of the various towns, etc. is represented fairly
  280. accurately (probably not as accurately as possible). The only real problems
  281. encountered are related to the restricted way in which SWITCH displays the
  282. layout. In the actual model, the long sections of track between Lumby and
  283. Kalamalka, and between Lumby and Fire Valley were actually inside tunnels
  284. and thus were not visible. They are visible in SWITCH's representation, and
  285. can cause some confusion, especially where the Lumby-Fire Valley tunnel
  286. seems to overlap much of Armstrong. The second problem involves the use of
  287. the text descriptions. In some orientations (e.g. when viewing Vernon
  288. upside-down, i.e. inverted from it's original orientation) the text overlaps
  289. car and engine destination indicators. This has been minimized in the EMRA
  290. layout, but the user should be aware that some things can be hidden behind
  291. the text, and that rotation of the viewpoint may bring them into view.
  292.  
  293.     A "solution" to the EMRA layout has been included, in file 'EMRA.REC'.
  294. This is not intended to be an optimal solution. Rather, it is intended as an
  295. example of how the layout was actually used by the Edmonton Club. The first
  296. train to leave Vernon is a fast passenger train, heading north. The Vernon
  297. crew then makes up a southbound freight, which leaves with a road engine as
  298. soon as it is ready. Cars arriving at or departing from Thornton or Armstrong
  299. are left or picked up in Armstrong, and are switched by a local freight
  300. which operates only in those two towns. Actual operation by the club would
  301. have included a north-bound freight train, and a southbound passenger train,
  302. all running simultaneously. It is quite a lot of work to set up such a
  303. solution, so no more details were added.
  304.  
  305.     When setting up a run on a large layout such as the EMRA layout, it is
  306. best to break the task up into smaller pieces. It is very laborious to get
  307. two trains running at the same time by continually alternating between the
  308. two. SWMERGE presents a better method. It takes two or more .REC record
  309. files and merges them so that they operate in parallel. It is assumed that
  310. all but one of them will begin by identifying an engine besides '*' as the
  311. current engine. The movements of the several engines are intermixed in the
  312. resulting output .REC file. Up to seven input files can be merged into one
  313. output file. Waits, generated by the 'z' command, or by the '5', 'j' key,
  314. are not copied into the output file, but do serve as placeholders in the
  315. input files, allowing actions to be synchronized.
  316.  
  317.     As an example, consider setting up a combined .REC file for the EMRA
  318. layout. As a first step, all of the turnouts should be set to allow trains
  319. to pass unhindered around the layout. In particular, turnout 38 to the
  320. Edgewood Mine should be toggled. This initial .REC file would contain very
  321. few commands. Next, the passenger train, which must not be delayed by any
  322. of the freight operations, can be run around the layout, producing, say, a
  323. record file called 'PASS.REC'. Then the first part of the southbound freight
  324. can be recorded into file 'FREIGHT.REC'. To run the two in parallel, to see
  325. how they synchronize, it is necessary to use both SWMERGE and PIP (supplied
  326. with CP/M) to produce a combined .REC file. First, the command
  327.  
  328.     swmerge test1 pass freight
  329.  
  330. will produce a file 'TEST1.REC' which runs the two trains in parallel. Then,
  331. the command
  332.  
  333.     pip test2.rec=setup.rec,test1.rec
  334.  
  335. will produce a file called 'TEST2.REC' which contains the initialization
  336. commands recorded into 'SETUP.REC', followed by the merged run in file
  337. 'TEST1.REC'. The entire result can then be played back using SWITCH, to see
  338. how well it works. It is very difficult to edit a merged .REC file, since
  339. it continually switches engines, but the individual train records can be
  340. edited (operations deleted via 's', waits added via 'z', and operations
  341. inserted by entering them from the keyboard) and then re-merged. In this way,
  342. more realistic runs can be produced. It is not very useful to actually do
  343. this with the EMRA layout, since the user has no control over initial and
  344. final car positions, but doing it for layouts the user has created is an
  345. excellent way to see how they would work in real life.
  346.  
  347.  
  348. Using SWCREATE to Build New Layouts
  349.  
  350.     The few layouts supplied with SWITCH by no means exhaust the
  351. possibilities of the game. Thus, it is useful for users to be able to create
  352. their own layouts. Also, if SWITCH is to be used to model real layouts, it
  353. must be possible to specify those layouts. The program 'SWCREATE.COM'
  354. supplied on the distribution diskette is a layout 'compiler' which translates
  355. a text file describing a layout into a binary description of the layout.
  356. Describing a layout textually is not the easiest way of doing so, but the
  357. alternative of having a graphical layout editor would have entailed far more
  358. programming than SWITCH itself did.
  359.  
  360.     Like most compilers, most of the work done by SWCREATE involves not
  361. translating the text form to the internal form, but checking the validity
  362. of the layout specification. SWCREATE checks to make sure that the layout
  363. is connected up correctly, that the various pieces meet where they are
  364. supposed to, that cars aren't put on top of other cars, etc. In use, SWCREATE
  365. is run from CP/M as follows:
  366.  
  367.     swcreate layout1 layout2 ... layoutn
  368.  
  369. where the various 'layoutx' files are the base names of files containing
  370. the textual description of layouts. Normally, only one layout is compiled
  371. at a time, but SWCREATE can do several with one run. Each layout input file
  372. is expected to exist with file extension .SWS (SWitch Source), and a
  373. corresponding layout file with file extension .SWT is produced. Thus, the
  374. command
  375.  
  376.     swcreate newone
  377.  
  378. would expect a file called 'NEWONE.SWS' to exist on the disk, and would
  379. create a corresponding file called 'NEWONE.SWT'. When a new layout is
  380. successfully created, it will automatically be available for use with
  381. SWITCH. (SWITCH scans the disk for files with extension .SWT.) Score logging
  382. for a new layout is enabled by simply creating a log file for it, which is an
  383. empty file with the same base name, but with extension .LOG. Log files are
  384. just ASCII files, and can be edited to remove unwanted scores.
  385.  
  386.     Each layout consists of several pieces of track, which can be straight
  387. track, turnouts (left or right-hand), corners, or the special home track.
  388. Each piece of track is named, so that tracks which connect to it can mention
  389. it by name. Other components of layouts are the cars and engines on the
  390. track, and textual names, etc. displayed along with the track. Each layout
  391. can have upto 99 turnouts, 255 pieces of track, 7 engines, 26 cars and
  392. 50 textual items. Input lines to SWCREATE consist of several 'words',
  393. separated by spaces. Track specifications consist of the name of the track,
  394. an equals sign, and the description of the track. Here is a short sample
  395. layout description:
  396.  
  397.     NAME Sample Layout
  398.     VIEWPOINT 5 10
  399.     ORIENTATION DOWN
  400.     ; Now we specify the track:
  401.     home = HOME vertical-track 0 0
  402.     vertical-track = STRAIGHT 10 home turnout-track
  403.     turnout-track = LEFT vertical-track left-bottom-track right-bottom-track
  404.     left-bottom-track = STRAIGHT 10 turnout-track NIL
  405.     right-bottom-track = STRAIGHT 5 turnout-track NIL
  406.     ; And now the engine and cars:
  407.     ENGINE home 0 home 0
  408.     CAR vertical-track 5 left-bottom-track 3
  409.     CAR vertical-track 6 right-bottom-track 2
  410.     ; And finally some descriptive text:
  411.     TEXT 30 -5 HORIZONTAL This is some text at the
  412.     TEXT 31 -5 HORIZONTAL bottom of the layout.
  413.  
  414. In the sample description, the keywords known to SWCREATE have been entered
  415. in all capital letters, but this is not necessary. SWCREATE knows all of
  416. it's keywords in either all capitals, or all lower-case letters. The keywords
  417. are not reserved words, they can also be used as track names.
  418.  
  419.     The first line in the above sample provides the name of the layout. It is
  420. this name which will appear in the layout menu of SWITCH. The order of the
  421. lines given is not important, but it is suggested that NAME, VIEWPOINT and
  422. ORIENTATION be the first three lines of any description. Any lines in the
  423. description which start with semicolons are ignored - they are comments only.
  424. The second line specifies the initial viewpoint into the layout, i.e. which
  425. portion of the layout will be displayed when it is initially drawn by SWITCH.
  426. For most layouts, this is selected so that the entire layout is centered
  427. on a 24 x 80 display screen. The numbers given (5, 10) specify that the
  428. initial viewpoint is centered on the fifth line below the origin, and at the
  429. 10th column to the right of the origin. Negative numbers specify locations
  430. above and to the left of the origin. The third line specifies the ORIENTATION
  431. of the the home track, i.e. which direction to move to draw the track it
  432. connects to ("vertical-track" in this case). Here, the orientation is DOWN,
  433. meaning that the track called "vertical-track" will start just below the
  434. home track, and will head downwards.
  435.  
  436.     The five track sections in this layout are defined next. "home" is the
  437. single required home track. It is located at the origin (this is common
  438. practice, as it makes the origin easy to locate, since each layout has one
  439. and only one period as part of its track). The one track connected to "home"
  440. is "vertical-track". "Vertical-track" is a piece of straight track, 10 units
  441. long, which connects "home" to "turnout-track". "turnout-track" is a
  442. left-hand turnout on the lower end of "vertical-track". One branch from it,
  443. the one that continues straight through, is "left-bottom-track", a straight
  444. track of length 10, which goes nowhere else (connects to 'NIL'). The turning
  445. branch from "turnout-track" heads down and to the right, and connects to
  446. "right-bottom-track", a straight track of length 5 which goes nowhere else.
  447.  
  448.     The layout's single engine starts on the home track, and also must end
  449. up there. The two cars start together on "vertical-track", 5 and 6 units
  450. down from it's top, and must end up on the left and right bottom tracks,
  451. 3 and 2 units down from their tops, respectively. The final portion of the
  452. description specifies some text that is to be displayed with the layout. The
  453. second is just under the first, which is located 30 lines below the origin,
  454. and 5 columns to the right of it. Both text items will be displayed
  455. horizontally in the initial view.
  456.  
  457.     In more detail, the various specification lines are as follows:
  458.  
  459. NAME <text>
  460.  
  461.     This line must appear exactly once, and gives the name of the layout
  462.     as it will appear in SWITCH's layout menu.
  463.  
  464. VIEWPOINT <line> <column>
  465.  
  466.     This line must appear exactly once, and gives the coordinates of the
  467.     initial window into the layout, i.e. gives the layout coordinates of
  468.     the center of the screen for the first display of the layout.
  469.  
  470. ORIENTATION {LEFT | RIGHT | UP | DOWN}
  471.  
  472.     This line must appear exactly once, and gives the direction relative to
  473.     the home track in which the track it connects to heads.
  474.  
  475. <track-name> = <track-description>
  476.  
  477.     This is the general form used to describe track. The specific forms of
  478.     <track-description> are:
  479.  
  480.     HOME <track-name> <line> <column>
  481.  
  482.     There must be exactly one HOME track in each layout. Given with it
  483.     are the name of the track it connects to, and the line and column
  484.     relative to the layout origin, where the HOME track is located. The
  485.     home track must be the first track defined for the layout.
  486.  
  487.     STRAIGHT <length> <end-1-track-name> <end-2-track-name>
  488.  
  489.     A straight track of length <length> (whether horizontal, vertical
  490.     or diagonal) is built, connecting from <end-1-track-name> to
  491.     <end-2-track-name>. When cars or engines are being positioned on
  492.     a straight track, the position is measured relative to the first
  493.     segment at the <end-1-track-name> end. The numbering starts with
  494.     0, thus in the example above, the valid positions on the straight
  495.     track called "vertical-track" range from 0 at the top to 9 at the
  496.     bottom.
  497.  
  498.     CORNER {LEFT | RIGHT} <end-1-track-name> <end-2-track-name>
  499.  
  500.     Corner tracks are represented on the layout display by '+'s. They
  501.     represent a 45 degree corner. The direction of the corner (left or
  502.     right) is the turn direction when looking at the corner from the
  503.     track connected as <end-1-track-name>.
  504.  
  505.     {LEFT | RIGHT} <point-track-name> <straight-track-name> <frog-track-name>
  506.  
  507.     Turnout tracks use naming taken from railroading practice. The part
  508.     of a real turnout which moves, and is a piece of rail which tapers
  509.     to a point which sits beside another piece of rail, is called a
  510.     'point'. The place in a turnout where the rails of the opposite sides
  511.     of the two diverging tracks cross, is called the 'frog'. The points
  512.     are towards the single track end of the turnout, so SWITCH calls this
  513.     end the 'point' end. Similarly, the track which branches off from the
  514.     straight portion is called the 'frog' connection, and the track which
  515.     simply goes straight through the turnout is called the 'straight'
  516.     connection. In SWCREATE, the three connecting tracks are named in the
  517.     order given above. The direction of a turnout (left or right) is as
  518.     viewed from the point end of the turnout. The numbering of turnouts
  519.     starts at 01, and is simply the order in which the turnouts appear in
  520.     the layout description. The only real limitation on the number of
  521.     turnouts in a layout is the requirement that their numbers be two
  522.     digits, thus the current version of SWITCH supports 99 turnouts. When
  523.     displayed, the turnout will be three units long along its axis (from
  524.     'point' end to 'straight' end), and 2 units wide (the 'frog' end will
  525.     extend just as far as the 'straight' end.) The number will be beside
  526.     the flat side of the turnout.
  527.  
  528. ENGINE <start-track-name> <start-position> <end-track-name> <end-position>
  529. CAR <start-track-name> <start-position> <end-track-name> <end-position>
  530.  
  531.     The ENGINE 'statement' adds an engine to the layout. There can be up to 
  532.     7 engines in a layout. The engines are indicated on the layout by the 
  533.     characters '*', '@', '#', '$', '%', '&', and '?'. Similarly, the CAR 
  534.     'statement' adds a car to the layout. Cars are represented by letters, 
  535.     starting with 'a' and ending with 'z'. Cars and engines can have their 
  536.     start and end positions only on straight tracks and the home track (the 
  537.     display can get too messy otherwise). The start position is where the 
  538.     car or engine will initially appear, and the end position is where it 
  539.     must be placed to successfully complete the layout in SWITCH. 
  540.  
  541. TEXT <line> <column> {HORIZONTAL | VERTICAL} <text>
  542.  
  543.     The TEXT statement allows descriptive information to be added to the
  544.     layout. <line> and <column> give the coordinates of the start of the
  545.     text relative to the layout origin. The orientation is relative to the
  546.     initial viewing orientation. Spaces, etc. in the text will be preserved
  547.     as is. Text is displayed last when a layout is displayed, so it will
  548.     overlay any track display at the same position. This includes any blanks
  549.     in the text string.
  550.  
  551.     There are a variety of error messages that can be produced by SWCREATE.
  552. Some of the more common, and what they mean are:
  553.  
  554. Name buffer overflow.
  555.     SWCREATE allocates 5000 characters for storing track-names. This limit
  556.     has been exceeded - shorten some of your track names.
  557.  
  558. Missing XXX track name.
  559.     A variety of names can appear for XXX. This is a syntax error - the input
  560.     line is not correctly formed.
  561.  
  562. Missing YYY.
  563.     A numeric value, described by YYY, is missing. Again, a syntax error.
  564.  
  565. Text buffer overflow.
  566.     SWCREATE and SWITCH allocate 1000 characters for textual messages on the
  567.     layout display. This limit has been exceeded.
  568.  
  569. Car/engine is on top of another.
  570. Car/engine's home is on top of another's.
  571.  
  572.     Each car or engine must have it's own unique starting and destination
  573.     position. A duplicate position was found.
  574.  
  575. Track 'X' doesn't meet track 'Y'. (l1,c1) v.s. (l2,c2)
  576.  
  577.     SWCREATE attempts to 'display' the layout internally. When doing so, two
  578.     pieces of track which the description says are to be joined, did not
  579.     physically meet. For each such occurrence, there will be two messages.
  580.     The difference in the line and column numbers gives the amount by which
  581.     the two pieces did not join. If the problem is hard to find, disconnect
  582.     the offending tracks (substitute NIL for the name of the other track in
  583.     both places), recompile the layout, and display it using SWITCH. It will
  584.     then be possible to see where the two tracks don't meet, and to decide
  585.     what to change to make them meet. It is a good idea to build large
  586.     layouts in portions, using SWITCH to check the construction along the
  587.     way.
  588.  
  589. Track name already in use.
  590.     Each track must have a unique name - the indicated name has already been
  591.     used and now is being used again.
  592.  
  593. Track 'X' has no backlink to track 'Y'.
  594.     Track 'Y' has referenced track 'X', but track 'X' has not referenced
  595.     track 'Y'. This is likely to be a spelling mistake in one of the
  596.     references.
  597.  
  598. Track 'X' has been used but not defined.
  599.     Some track, car or engine has referenced a track named 'X', but the
  600.     layout description doesn't have a definition for such a track. Again,
  601.     this is likely to be a spelling mistake, but could actually be a
  602.     forgotten piece of track.
  603.  
  604. Track 'X' has duplicate ends.
  605. Track 'X' has duplicate branches.
  606.     Both of the ends of a straight or corner track, or two of the branches
  607.     of a turnout, reference the same other piece of track. This doesn't make
  608.     sense.
  609.  
  610. First track is not the home track.
  611.     The home track must be the first track defined.
  612.  
  613.  
  614. Files Included on the Distribution Diskette
  615.  
  616.     The following files are included on the distribution diskette:
  617.  
  618. SWITCH.SET - configurable version of the main SWITCH program. It must be run
  619.     through CONFIG.COM, creating file SWITCH.COM, before it can be used.
  620. SWCREATE.COM - layout 'compiler', used for creating new layouts.
  621. SWMERGE.COM - program to merge .REC files for parallel train running.
  622. CONFIG.COM - general-purpose configuration program, which is used to set up
  623.     SWITCH (and other games from Northware) to run on specific terminals.
  624. CONFIG.DAT - database of terminal definitions used by CONFIG.COM.
  625. BASIC.SWT - layout file for 'Basic Switching Layout'.
  626. BASIC.LOG - score log file for 'Basic Switching Layout'.
  627. TRICKY.SWT - layout file for 'Tricky Little Layout'.
  628. TRICKY.LOG - score log file for 'Tricky Little Layout'.
  629. MESSY.SWT - layout file for 'Messy Medium' layout.
  630. MESSY.LOG - score log file for 'Messy Medium' layout.
  631. SMALLA.SWT - layout file for 'Small Arrivals' layout.
  632. SMALLA.LOG - score log file for 'Small Arrivals' layout.
  633. SMALLD.SWT - layout file for 'Small Departures' layout.
  634. SMALLD.LOG - score log file for 'Small Departures' layout.
  635. SMALLM.SWT - layout file for 'Small Mixed' layout.
  636. SMALLM.LOG - score log file for 'Small Mixed' layout.
  637. MAINA.SWT - layout file for 'Main-Line Yard Arrivals' layout.
  638. MAIND.SWT - layout file for 'Main-Line Yard Departures' layout.
  639. MAINM.SWT - layout file for 'Main-Line Yard Mixed' layout.
  640. SAWBY.SWT - layout file for '"Saw-by"' layout.
  641. SAWBY.REC - playback file to solve '"Saw-by"' layout.
  642. EMRA.SWT - layout file for 'Old EMRA Layout'.
  643. EMRA.REC - playback file for a run of 'Old EMRA Layout'.
  644.  
  645.     SWITCH, SWCREATE, SWMERGE, CONFIG and the CRT I/O routines were all
  646. written entirely in the Draco systems programming language.
  647.