home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG080.ARK / TRADE.STB < prev    next >
Text File  |  1984-04-29  |  19KB  |  464 lines

  1.  
  2.    10   Rem Star Traders
  3.    20   Rem For Cromemco Structured Basic
  4.    30   Rem Version 06/23/81
  5.    35   Imode : I=1.23 : If I=1.23 Then Run
  6.    40   Integer No'players,Player,Move,I,J,K,L,M,Bad,A(4)
  7.    44   Integer Loser,Survivor,X,Y,Legal'x(6),Legal'y(6)
  8.    45   Integer Map(10,13),Company'branches(6),Shares(5,4)
  9.    50   Long Net'worth(6),Cash(6),Share'price(6),Rand
  10.    60   Dim Companies$(5*18),Company$(18),Players$(5*10),L$(8),M$(12)
  11.    61   Dim Player$(10)
  12.    65   Randomize
  13.    70   Gosub Title
  14.    90   Gosub Initialize'galaxy
  15.   100   Gosub Setup'players
  16.   110     Repeat
  17.   115       For Player=1 To No'players
  18.   120       Gosub Print'map
  19.   130       Gosub Select'legal'moves
  20.   140       Gosub Print'moves
  21.   150       Gosub Enter'move
  22.   170       Gosub Check'move
  23.   190       Gosub Dividends
  24.   191       Gosub Buy'stock
  25.   195       Move=Move+1
  26.   196       Next Player
  27.   200     Until Move>=48
  28.   210   Gosub Calculate'winner
  29.   220   End
  30.   222 *Title
  31.   223   Call .Screen'erase 
  32.   224   @"              **********   Star Traders   **********" : @ : @ : @
  33.   226   Return
  34.   230 *Initialize'galaxy
  35.   235   Local I,J
  36.   240     For I=1 To 5
  37.   250     Read Companies$((I-1)*18,I*18-1)
  38.   260     Next I
  39.   270   Data"Altair Starways","Betelgeuse, Ltd.","Capella Freight co."
  40.   280   Data"Denebola Shippers","Eridani Expediters"
  41.   310   Mat Shares=0 : Mat Company'branches=0 : Mat Share'price=0
  42.   315   Mat Net'worth=0 : Mat Map=1 : Mat Cash=6000
  43.   320   L$=".+*ABCDE"
  44.   330   M$=" ABCDEFGHIJKL"
  45.   335   Move=0
  46.   400     For I=1 To 9
  47.   410       For J=1 To 12
  48.   420       Rand=10*Rnd(0)+1
  49.   440       If Int(Rand)=10 Then Map(I,J)=3
  50.   450       Next J
  51.   460     Next I
  52.   465   Return
  53.   470 *Setup'players
  54.   480   @
  55.   485     Repeat
  56.   490     Input"How many players (1-4)? ",Command$
  57.   493     If Command$="" Then Command$="0"
  58.   494     No'players=Val(Command$)
  59.   495     Until No'players>0 And No'players<5
  60.   500   @ : @
  61.   501     Repeat
  62.   510     Input"Does any player need instructions (Y/N)? ",Command$
  63.   515     Call .Capitalize (Command$)
  64.   519     Until Command$(0,0)="Y" Or Command$(0,0)="N"
  65.   520   If Command$(0,0)="Y" Then Gosub Instructions
  66.   530   Call .Screen'erase 
  67.   540     For I=1 To No'players
  68.   545     @
  69.   546       Repeat
  70.   550       @"Player",I,
  71.   560       Input"What is your name? ",Player$
  72.   561       Until Player$<>""
  73.   562     Players$((I-1)*10,I*10-1)=Player$
  74.   570     Next I
  75.   590   Player=Int(No'players*Rnd(0)+1)
  76.   600   @ : @ Players$((Player-1)*10,Player*10-1);" is the first player to move."
  77.   610   @ : Gosub Press'return
  78.   630   Return
  79.   660 *Select'legal'moves
  80.   665   Local I,J,Bad,Rand
  81.   670     For I=1 To 5
  82.   675       Repeat
  83.   676       Bad=0
  84.   680       Legal'x(I)=Int(9*Rnd(0)+1)
  85.   690       Legal'y(I)=Int(12*Rnd(0)+1)
  86.   695       If Map(Legal'x(I),Legal'y(I))>1 Then Bad=1
  87.   700         For J=I-1 To 0 Step-1
  88.   710         If Legal'x(I)=Legal'x(J) And Legal'y(I)=Legal'y(J) Then Bad=1
  89.   720         Next J
  90.   738       J=0
  91.   740         Repeat
  92.   750         J=J+1
  93.   760         Until J>5 Or Company'branches(J)=0
  94.   761       Call .Surrounding'squares (Legal'x(I),Legal'y(I))
  95.   765       If J>5 Then  Do
  96.   770         If(A(1)<4) And(A(2)<4) And(A(3)<4) And(A(4)<4) Then  Do
  97.   850           If(A(1)=2 Or A(1)=3) And A(2)<4 And A(3)<4 And A(4)<4 Then Bad=1
  98.   860           If(A(2)=2 Or A(2)=3) And A(1)<4 And A(3)<4 And A(4)<4 Then Bad=1
  99.   870           If(A(3)=2 Or A(3)=3) And A(1)<4 And A(2)<4 And A(4)<4 Then Bad=1
  100.   880           If(A(4)=2 Or A(4)=3) And A(1)<4 And A(2)<4 And A(3)<4 Then Bad=1
  101.   883           Enddo
  102.   884         Enddo
  103.   885       Until Bad=0
  104.   930     Next I
  105.   940   Return
  106.   960 *Print'moves
  107.   965   Local I
  108.   966   Call .Erase'bottom (16)
  109.   970   @ Players$((Player-1)*10,Player*10-1);" here are your legal moves for this turn:" : @
  110.   990     For I=1 To 5
  111.  1000     @ Legal'x(I);M$(Legal'y(I),Legal'y(I));" ";
  112.  1010     Next I
  113.  1020   @ : @
  114.  1025   Return
  115.  1026 *Enter'move
  116.  1027     Repeat
  117.  1028     Call .Erase'bottom (20)
  118.  1029     Bad=1
  119.  1030     Input"What is your move? ",Command$
  120.  1035     Call .Capitalize (Command$)
  121.  1040     If Command$(0,0)="M" Then Gosub Print'map : Gosub Print'moves
  122.  1050     If Command$(0,0)="S" Then Gosub Display'holdings : Gosub Print'moves
  123.  1060     If Command$(0,1)="HE" Then Gosub Instructions : Gosub Print'map : Gosub Print'moves
  124.  1120     X=Val(Command$(0,0))
  125.  1130     Y=Asc(Command$(1,1))-64
  126.  1140       For I=1 To 5
  127.  1150       If X=Legal'x(I) And Y=Legal'y(I) Then Bad=0
  128.  1160       Next I
  129.  1170     Until Bad=0
  130.  1185   Return
  131.  1190 *Check'move
  132.  1200   Call .Surrounding'squares (X,Y)
  133.  1230   If A(1)<=1 And A(2)<=1 And A(3)<=1 And A(4)<=1 Then Map(X,Y)=2 : Return
  134.  1260   If A(1)>3 And A(2)>3 And A(2)<>A(1) Then Call .Merger (A(1),A(2)) : Return
  135.  1270   If A(1)>3 And A(3)>3 And A(3)<>A(1) Then Call .Merger (A(1),A(3)) : Return
  136.  1280   If A(1)>3 And A(4)>3 And A(4)<>A(1) Then Call .Merger (A(1),A(4)) : Return
  137.  1290   If A(2)>3 And A(3)>3 And A(3)<>A(2) Then Call .Merger (A(2),A(3)) : Return
  138.  1300   If A(2)>3 And A(4)>3 And A(4)<>A(2) Then Call .Merger (A(2),A(4)) : Return
  139.  1310   If A(3)>3 And A(4)>3 And A(4)<>A(3) Then Call .Merger (A(3),A(4)) : Return
  140.  1320   If A(1)<4 And A(2)<4 And A(3)<4 And A(4)<4 Then  Do
  141.  1321     Gosub New'company
  142.  1322     Else
  143.  1323     Gosub Old'company
  144.  1324     Enddo
  145.  1325   Return
  146.  1330 *Old'company
  147.  1340   Local I,J
  148.  1350     For J=1 To 4
  149.  1360     If A(J)>3 Then I=A(J)-3
  150.  1370     Next J
  151.  1380   Company'branches(I)=Company'branches(I)+1
  152.  1390   Share'price(I)=Share'price(I)+100
  153.  1400   Map(X,Y)=I+3
  154.  1405   Call .Change'price (I)
  155.  1410   Return
  156.  1415 *New'company
  157.  1416   Local I
  158.  1420     Repeat
  159.  1425     I=I+1
  160.  1430     Until I>5 Or Company'branches(I)=0
  161.  1435   If I>5 Then  Do
  162.  1450     If Map(X,Y)<3 Then Map(X,Y)=2
  163.  1460     Else
  164.  1470     Call .Screen'erase 
  165.  1480     Gosub Special'announcement
  166.  1490     @"A new shipping company has been formed !"
  167.  1500     @"It's name is ";Companies$((I-1)*18,(I*18)-1)
  168.  1510     Shares(I,Player)=Shares(I,Player)+5
  169.  1520     Company'branches(I)=1
  170.  1525     Map(X,Y)=I+3
  171.  1530     @ : @ : @ : @
  172.  1532     Call .Change'price (I)
  173.  1533     Enddo
  174.  1534   Return
  175.  1535 Procedure .Change'price (I)
  176.  1540   Local J
  177.  1550     For J=1 To 4
  178.  1560     If A(J)=3 Then Share'price(I)=Share'price(I)+500
  179.  1570     Next J
  180.  1590     For J=1 To 4
  181.  1600     If A(J)=2 Then  Do
  182.  1610       Share'price(I)=Share'price(I)+100
  183.  1620       Company'branches(I)=Company'branches(I)+1
  184.  1630       If J=1 Then Map(X-1,Y)=I+3
  185.  1631       If J=2 Then Map(X+1,Y)=I+3
  186.  1632       If J=3 Then Map(X,Y-1)=I+3
  187.  1633       If J=4 Then Map(X,Y+1)=I+3
  188.  1640       Enddo
  189.  1650     Next J
  190.  1655   If Share'price(I)>3000 Then Call .Stock'split (I)
  191.  1774   Endproc 
  192.  1775 *Dividends
  193.  1776   Local I,J
  194.  1780     For I=1 To 5
  195.  1790     Cash(Player)=Cash(Player)+Int(0.05*Shares(I,Player)*Share'price(I))
  196.  1800     Next I
  197.  1801   Return
  198.  1802 *Buy'stock
  199.  1810     For I=1 To 5
  200.  1815       Repeat
  201.  1816       Bad=0
  202.  1820       If Company'branches(I)>0 And Cash(Player)>200 Then  Do
  203.  1825         Call .Erase'bottom (16)
  204.  1830         @ : @"Your current cash= $";Cash(Player);"."
  205.  1850         @"You now own shares ";Shares(I,Player);" of ";Companies$((I-1)*18,I*18-1)
  206.  1860         @"Buy how many shares at $";Share'price(I);" per share? ";
  207.  1870         Input"",Command$
  208.  1880         If Command$(0,0)="M" Then Gosub Print'map : Bad=1
  209.  1920         If Command$(0,0)="S" Then Gosub Display'holdings : Bad=1
  210.  1940         If Command$(0,1)="HE" Then Gosub Instructions : Gosub Print'map : Bad=1
  211.  1950         If Command$="" Then Command$="0"
  212.  1960         J=Val(Command$(0))
  213.  1980         If(J*Share'price(I)<=Cash(Player)) And J>0 Then  Do
  214.  2020           Shares(I,Player)=Shares(I,Player)+J
  215.  2030           Cash(Player)=Cash(Player)-(J*Share'price(I))
  216.  2034           Else
  217.  2035           If J>0 Then @"You don't have that much money!" : Gosub Press'return : Bad=1
  218.  2036           Enddo
  219.  2037         Enddo
  220.  2038       Until Bad=0
  221.  2040     Next I
  222.  2050   Return
  223.  2051 Procedure .Surrounding'squares (I,J)
  224.  2052   A(1)=Map(I-1,J)
  225.  2053   A(2)=Map(I+1,J)
  226.  2054   A(3)=Map(I,J-1)
  227.  2055   A(4)=Map(I,J+1)
  228.  2056   Endproc 
  229.  2060 *Print'map : Call .Screen'erase 
  230.  2065   @"Move: ";Move
  231.  2070   @ Tab(22);"Map of the Galaxy"
  232.  2080   @ Tab(21);"*******************" : @
  233.  2090   @ Tab(11);" A  B  C  D  E  F  G  H  I  J  K  L"
  234.  2095   Local I,J,K
  235.  2100     For I=1 To 9
  236.  2110     @"         ";I;" ";
  237.  2120       For J=1 To 12
  238.  2130       @" ";
  239.  2140       K=Map(I,J)
  240.  2150       If K=0 Then K=K+1
  241.  2160       @ L$(K-1,K-1);" ";
  242.  2170       Next J
  243.  2180     @
  244.  2190     Next I
  245.  2195   @ : @
  246.  2200   Return
  247.  2210 Procedure .Merger (L,M)
  248.  2215   Local I,J,K
  249.  2216   L=L-3 : M=M-3
  250.  2220   If Company'branches(L)>=Company'branches(M) Then Survivor=L : Loser=M
  251.  2230   If Company'branches(M)>Company'branches(L) Then Loser=L : Survivor=M
  252.  2500   Call .Screen'erase 
  253.  2510   Gosub Special'announcement
  254.  2520   @ Companies$((Loser-1)*18,Loser*18-1);" has just been merged into ";
  255.  2530   @ Companies$((Survivor-1)*18,Survivor*18-1);"!"
  256.  2540   @"Please note the following transactions."
  257.  2550   @
  258.  2560   @ Tab(3);"Old stock = ";Companies$((Loser-1)*18,Loser*18-1);
  259.  2570   @"      New stock = ";Companies$((Survivor-1)*18,Survivor*18-1)
  260.  2580   @
  261.  2590   @"Player";Tab(10);"Old stock";Tab(22);"New stock";
  262.  2600   @ Tab(34);"Total Holdings";Tab(53);"Bonus Paid"
  263.  2610     For I=1 To No'players
  264.  2615     Player$=Players$((I-1)*10,I*10-1)
  265.  2630     @ Player$;Tab(10);Shares(Loser,I);Tab(22);Int((0.5*Shares(Loser,I))+0.5);
  266.  2640     @ Tab(34);Shares(Survivor,I)+Int((0.5*Shares(Loser,I))+0.5);
  267.  2650     K=0
  268.  2660       For J=1 To No'players
  269.  2670       K=K+Shares(Loser,J)
  270.  2680       Next J
  271.  2690     @ Tab(53);" $";Int(10*((Shares(Loser,I)/K)*Share'price(Loser)))
  272.  2700     Next I
  273.  2710     For I=1 To No'players
  274.  2720     Shares(Survivor,I)=Shares(Survivor,I)+Int((0.5*Shares(Loser,I))+0.5)
  275.  2730     Cash(I)=Cash(I)+Int(10*((Shares(Loser,I)/K)*Share'price(Loser)))
  276.  2740     Next I
  277.  2750     For I=1 To 9
  278.  2760       For J=1 To 12
  279.  2770       If Map(I,J)=Loser+3 Then Map(I,J)=Survivor+3
  280.  2780       Next J
  281.  2790     Next I
  282.  2880   Company'branches(Survivor)=Company'branches(Survivor)+Company'branches(Loser)
  283.  2890   Share'price(Survivor)=Share'price(Survivor)+Share'price(Loser)
  284.  2900   If Share'price(Survivor)>=3000 Then Call .Stock'split (Survivor)
  285.  2950   Share'price(Loser)=100
  286.  2960   Company'branches(Loser)=0
  287.  2970     For I=1 To No'players
  288.  2980     Shares(Loser,I)=0
  289.  2990     Next I
  290.  3000   @ : @
  291.  3010   Map(X,Y)=Survivor+3
  292.  3020   Endproc 
  293.  3030 Procedure .Stock'split (L)
  294.  3034   Local I
  295.  3035   Call .Erase'bottom (16)
  296.  3036   Gosub Special'announcement
  297.  3040   @"The stock of ";Companies$((L-1)*18,L*18-1);
  298.  3050   @" has split 2 for 1!"
  299.  3060   Share'price(L)=Int(Share'price(L)/2)
  300.  3070   @ : @
  301.  3080     For I=1 To No'players
  302.  3090     Shares(L,I)=2*Shares(L,I)
  303.  3100     Next I
  304.  3105   Gosub Press'return
  305.  3110   Endproc 
  306.  3120 *Display'holdings : Call .Screen'erase 
  307.  3125   Local I
  308.  3130   @
  309.  3140   @"Stock";Tab(30);"Price Per Share";
  310.  3150   @ Tab(50);"Your Holdings"
  311.  3160     For I=1 To 5
  312.  3180     Company$=Companies$((I-1)*18,I*18-1)
  313.  3190     @ Company$;Tab(36);Share'price(I);Tab(55);Shares(I,Player)
  314.  3200     Next I
  315.  3210   Return
  316.  3215 *Special'announcement
  317.  3220   @ Chr$(7)
  318.  3230   @ Tab(22);"Special Announcement !!!" : @ : @
  319.  3250   Return
  320.  3255 *Press'return
  321.  3260   Input"Press RETURN to go on. ",Command$
  322.  3270   Return
  323.  3280 *Instructions
  324.  3290   Call .Screen'erase 
  325.  3300   @"   Star lanes is a game of interstellar trading."
  326.  3310   @"The object of the game is to amass the greatest amount"
  327.  3320   @"of money.  This is accomplished by establishing vast,"
  328.  3330   @"interstellar shipping lanes, and purchasing stock in"
  329.  3340   @"the companies that control those trade routes.  During"
  330.  3350   @"the course of the game, stock appreciates in value as"
  331.  3360   @"the shipping companies become larger.  Also, smaller"
  332.  3370   @"companies can be merged into larger ones, and stock"
  333.  3380   @"in the smaller firm is converted into stock in the"
  334.  3390   @"larger one as described below." : @
  335.  3400   @"Each turn, the computer will present the player with"
  336.  3410   @"five prospective spaces to occupy on a 9x12 matrix"
  337.  3420   @"(rows 1-9, columns A-L).  The player, after examining"
  338.  3430   @"the map of the galaxy to decide which space he wishes"
  339.  3440   @"to occupy, responds with the row and column of that"
  340.  3450   @"space, i.e., 7E, 8A, etc.  There are four possible"
  341.  3460   @"moves a player can make." : @ : @
  342.  3470   @
  343.  3510   Gosub Press'return
  344.  3530   Call .Screen'erase 
  345.  3540   @"   1. He can establish an unattached outpost- if he"
  346.  3550   @"selects a space that is not adjacent to a star, another"
  347.  3560   @"unattached outpost, or an existing shipping lane, this"
  348.  3570   @"space will be designated with a '+'.  He will then proceed"
  349.  3580   @"with stock transactions, as listed below." : @
  350.  3590   @"   2. He can add to an existing lane- if he selects a"
  351.  3600   @"space that is adjacent to one - and only one existing"
  352.  3610   @"shipping lane, the space he selects will be added to"
  353.  3620   @"that shipping lane and will be designated with the first"
  354.  3630   @"letter of the company that owns that lane.  If there are"
  355.  3640   @"any stars or unattached outposts also adjacent to the"
  356.  3650   @"selected space, they, too, will be incorporated into the"
  357.  3660   @"existing lane.  Each new square adjacent to a star adds"
  358.  3670   @"$500 per share, and each new outpost adds $100 per share"
  359.  3680   @"to the market value of the stock of that company."
  360.  3690   @ : @
  361.  3700   Gosub Press'return
  362.  3710   Call .Screen'erase 
  363.  3720   @"   3. He may establish a new shipping lane- if there"
  364.  3730   @"are five or less existing shipping lanes established,"
  365.  3740   @"the player may, given the proper space to play, establish"
  366.  3750   @"a new shipping lane.  He may do this by occupying a space"
  367.  3760   @"adjacent to a star or another unattached outpost, but"
  368.  3770   @"not adjacent to an existing shipping lane.  If he"
  369.  3780   @"establishes a new shipping lane, he is automatically"
  370.  3790   @"issued 5 shares in the new company as a reward.  He"
  371.  3800   @"may then proceed to buy stock in any active company,"
  372.  3810   @"including the one just formed, as described below."
  373.  3820   @"the market value of the new stock is established by"
  374.  3830   @"the number of stars and occupied spaces as described"
  375.  3840   @"in #2 above."
  376.  3850   @ : @
  377.  3860   Gosub Press'return
  378.  3870   Call .Screen'erase 
  379.  3880   @"   4.  He may merge two existing companies- if a player"
  380.  3890   @"selects a space adjacent to two existing shipping"
  381.  3900   @"lanes, a merger occurs.  The larger company takes over the"
  382.  3910   @"smaller company - (if both companies are the same size"
  383.  3920   @"prior to the merger, then the survivor is determined by"
  384.  3930   @"alphabetical order of the two company names - the earlier"
  385.  3940   @"survives).  The stock of the surviving company is"
  386.  3950   @"increased in value according to the number of spaces"
  387.  3960   @"and stars added to its lane.  Each player's stock in"
  388.  3970   @"the defunct company is exchanged for shares in the"
  389.  3980   @"survivor on a ratio of 2 for 1.  Also, each player"
  390.  3990   @"is paid a cash bonus proportional to the percentage"
  391.  4000   @"of outstanding stock he held in the defunct company."
  392.  4010   @"Note: After a company becomes defunct through the"
  393.  4020   @"merger process, it can reappear elsewhere on the"
  394.  4030   @"board when, and if, a new company is established."
  395.  4040   @ : @
  396.  4050   Gosub Press'return
  397.  4060   Call .Screen'erase 
  398.  4070   @"   Next the computer adds stock dividends to the player's"
  399.  4080   @"cash on hand (5% of the market value of the stock in his"
  400.  4090   @"possession), and offers him the opportunity to purchase"
  401.  4100   @"stock in any of the active companies on the board."
  402.  4110   @"Stock may not be sold, but the market value of each"
  403.  4120   @"player's stock is taken into account at the end of the"
  404.  4130   @"game to determine the winner. if the market value of a given"
  405.  4140   @"stock exceeds $3000 at any time during the game, that"
  406.  4150   @"stock splits 2 for 1.  The price is cut in half, and"
  407.  4160   @"the number of shares owned by each player is doubled."
  408.  4170   @
  409.  4180   @"Note:  The player may look at his portfolio at any time"
  410.  4190   @"during the course of his turn by responding with 'S'tock"
  411.  4200   @"to an input statement.  Likewise, he can review the map"
  412.  4210   @"of the galaxy by typing 'M'ap to an input statement."
  413.  4220   @ : @
  414.  4230   Gosub Press'return
  415.  4240   Call .Screen'erase 
  416.  4250   @ : @ : @ : @ : @ : @ : @ : @
  417.  4260   @ Tab(16);"** Game ends after 48 moves **"
  418.  4270   @ : @ : @ : @
  419.  4280   @"Player with the greatest net worth at that point is the winner."
  420.  4290   @ : @
  421.  4300   Gosub Press'return
  422.  4310   Return
  423.  4315 *Calculate'winner
  424.  4316   Local I,J
  425.  4320   Call .Screen'erase 
  426.  4330   Gosub Special'announcement
  427.  4360   @ Tab(10)," The game is over - here are the final standings"
  428.  4370   @ : @ : @ : @
  429.  4380   @ Chr$(7)
  430.  4390   @"Player";Tab(10);"Cash Value of Stock";Tab(33);"Cash on Hand";
  431.  4400   @ Tab(50);"Net Worth"
  432.  4410   @
  433.  4420     For I=1 To No'players
  434.  4430       For J=1 To 5
  435.  4440       Net'worth(I)=Net'worth(I)+(Share'price(J)*Shares(J,I))
  436.  4450       Next J
  437.  4460     Next I
  438.  4470     For I=1 To No'players
  439.  4480     Player$=Players$((I-1)*10,I*10-1)
  440.  4490     @ Player$;Tab(10);"$";Net'worth(I);Tab(33);"$";Cash(I);
  441.  4500     @ Tab(50);"$";Net'worth(I)+Cash(I)
  442.  4510     Next I
  443.  4520   @ : @ : @ : @
  444.  4530   Return
  445.  9000 Procedure .Capitalize (Command$)
  446.  9010   Local I
  447.  9020     For I=0 To Len(Command$)-1
  448.  9030     If Command$(I,I)>="a" And Command$(I,I)<="z" Then  Do
  449.  9040       Command$(I,I)=Chr$(Asc(Command$(I,I))-32)
  450.  9050       Enddo
  451.  9060     Next I
  452.  9070   Endproc 
  453. 10000 Procedure .Screen'erase 
  454. 10010   Out 1,126 : Out 1,28
  455. 10020   Endproc 
  456. 10030 Procedure .Cursor'address (X,Y)
  457. 10040   Out 1,126 : Out 1,17 : Out 1,X : Out 1,Y
  458. 10050   Endproc 
  459. 10060 Procedure .Erase'bottom (Y)
  460. 10070   Call .Cursor'address (0,Y)
  461. 10080   Out 1,126 : Out 1,24
  462. 10090   Endproc 
  463.