home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 601-625 / apd602 / twilight_zone.amos / twilight_zone.amosSourceCode < prev   
AMOS Source Code  |  1993-02-25  |  16KB  |  370 lines

  1. '                            The TWILIGHT ZONE 
  2. '                               Version 1.22 
  3. '                             Written By TEX!  
  4. '                             ï¿½1991 OSCARSoft  
  5. '   Ok, this was written to make the tedious task of defining screen zones!
  6. '        If you like setting them up then you are a sick, sick, sick!  
  7. '      When you run the program you will be presented with 3 options - 
  8. ' MAIN MENU - Takes you to the main part of the Twilight Zone. 
  9. '     ABOUT - Some garbage about this program! 
  10. '      QUIT - Like if this needs explaining then see a doctor, OK!?
  11. 'On the main screen there are 9 Gadgets (Zones - whatever!) they are - 
  12. ' LOAD ABK SCREEN - This loads a packed IFF screen that you are using in 
  13. '                   your program, just like this one!
  14. ' LOAD IFF SCREEN - Just like above, It loads an IFF picture and displays
  15. '                   it. A word of warning! Amos does some funny things when
  16. '                   asked to load some screens - like crash! 
  17. '     SAVE SOURCE - Selecting this option (After setting up your ZONES!) 
  18. '                   writes an ASCII program which you can merge into your  
  19. '                   own programs. More on this later!
  20. '     KILL SOURCE - This will erase all zones/data currently in the data 
  21. '                   banks, there is no confirmation and it is a one way  
  22. '                   trip for the data! Be carefull! The currently loaded 
  23. '                   screen will be kept. 
  24. '      START OVER - This will do the same as Kill Source but will allow you
  25. '                   you to load a new picture in and START OVER! Once you
  26. '                   load a picture and start editing, you cannot load a new
  27. '                   picture, even if you kill the source.
  28. '            QUIT - This of course QUITS. There is checking to see if you
  29. '                   have saved the data before you quit. 
  30. '        ADD ZONE - This allows you to draw your zones onto the picture  
  31. '                   you have previously loaded. You cannot start this without
  32. '                   first loading a picture. Position the pointer at the top 
  33. '                   left of the zone and press and hold the left mouse button
  34. '                   down to define your ZONE. Once defined you will be asked 
  35. '                   to give it a descriptive name. E.G. For the gadget we
  36. '                   are talking about we could write "ADDS ZONES TO SCREEN"
  37. '                   This is placed after the Set Zone command an is nothing
  38. '                   more than a reminder as to what that zone is there for.
  39. '                   You will next be asked for a Procedure/Label name. This
  40. '                   Must be an AMOS LEGAL NAME. This is the name of the
  41. '                   Procedure/Label you want your program to jump to when
  42. '                   the zone is hit. One last thing, there is no checking
  43. '                   for overlapping zones, so be carefull! 
  44. '                   You will be then returned to the main menu!  
  45. '      TEST ZONES - This brings up a small screen which will display the 
  46. '                   currently selected zone along with it's X&Y Co-Ordinates.
  47. '                   This feature allows you to test the accuracy of your 
  48. '                   Zones before you save the Source Code! 
  49. '                   Simply click on the screen with the left mouse button, 
  50. '                   A screen will display the hit zone (Accompanied by a bell
  51. '                   sound) along with the zones Co-Ordinates. You can reposition 
  52. '                   this small screen using the up and down arrows. To 
  53. '                   return to the main menu simply click the right mouse 
  54. '                   button.
  55. '      KILL ZONES - This allows you to kill off a zone, it then re-shuffles
  56. '                   all other zones so that there are no gaps in the list. 
  57. '                   It is similar to the TEST ZONE Function in that it uses  
  58. '                   the same screen to display current zone and Co-Ordinates.
  59. '                   You can hit the zones using the left mouse button, when
  60. '                   you have found the zone you want to delete, simply 
  61. '                   select it with the right mouse button. You will not be 
  62. '                   asked to confirm the deletion. It's gone as soon as you
  63. '                   hit it with the right mouse button! You will then be 
  64. '                   returned back to the main menu.
  65. '  Well that about wraps it up for the instructions. A quick note about
  66. '  the source code it generates. Below is a sample for this program. 
  67. '  The Rems are generated by the program, the "'"'s I put there so that you  
  68. '  don't get any errors when you run this program. 
  69. Rem                     Source Code Generated By 
  70. Rem                               The
  71. Rem                          TWILIGHT ZONE 
  72. Rem                         Written By TEX!
  73. Rem                        ï¿½ 1991 OSCARsoft
  74. Rem           THERE IS NO CHECKING FOR OVER-LAPPING ZONES! 
  75. Rem
  76. Rem           Change The  On  Statement To Procedures/Gosubs 
  77. Rem                       Or Whatever Yo Like! 
  78. '  As you can see it's dead simple to use!It even writes a routine for 
  79. '  checking the zones and the mouse! 
  80. '  I hope someone can put this to some use, I know that I will because   
  81. '  thats why I wrote the stupid thing in the first place! There are  
  82. '  probably heaps of bugs but, what the heck it's only a quick program!
  83. '                      Let me know if you do find a BUG! 
  84. '                          THE TWILIGHT ZONE ITSELF! 
  85. Set Buffer 40
  86. MY=140 : MXG=130
  87. Dim MG(MXG,4),MG$(MXG,1),TMP(MXG,4),TMP$(MXG,1)
  88. Global MY,Q,DM,DS,CZ,NZ,MG(),ZX1,ZX2,ZY1,ZY2,SL,MG$(),TMP(),TMP$()
  89. Screen Open 0,354,290,2,Lowres : Cls 0 : Unpack 10 To 1 : Change Mouse 2
  90. Limit Mouse 0,0 To 800,450 : Get Rom Fonts 
  91. L:
  92. Reserve Zone 3
  93. Set Zone 1,491,28 To 622,42
  94. Set Zone 2,491,48 To 622,62
  95. Set Zone 3,491,8 To 622,22
  96. Repeat : MZ=Mouse Zone : MC=Mouse Click : Until MZ>0 and MC=1
  97. On MZ Proc ABOUT,QUIT,MENU
  98. Goto L
  99. Procedure ABOUT
  100.    For Y=0 To 138 : Screen Offset 1,,Y : Wait 1 : Next Y
  101.    Repeat : Until Mouse Click>0
  102.    For Y=138 To 0 Step -1 : Screen Offset 1,,Y : Wait 1 : Next Y
  103. End Proc
  104. Procedure MENU
  105.    For Y=0 To 69 : Screen Offset 1,,Y : Wait 1 : Next Y
  106.    MAIN:
  107.    Screen 1
  108.    Reserve Zone 9
  109.    Set Zone 1,122,106 To 237,116 : Rem ABK SCREEN 
  110.    Set Zone 2,122,120 To 237,130 : Rem IFF SCREEN 
  111.    Set Zone 3,248,106 To 363,116 : Rem SAVE SOURCE
  112.    Set Zone 4,248,120 To 363,130 : Rem KILL SOURCE  
  113.    Set Zone 5,374,106 To 489,116 : Rem START OVER 
  114.    Set Zone 6,374,120 To 489,130 : Rem QUIT 
  115.    Set Zone 7,500,92 To 615,102 : Rem  ADD ZONE  
  116.    Set Zone 8,500,106 To 615,116 : Rem TEST ZONE
  117.    Set Zone 9,500,120 To 615,130 : Rem KILL ZONE
  118.    Gosub USD : Gosub UCD
  119.    Repeat 
  120.       LL:
  121.       MZ=Mouse Zone : MC=Mouse Click
  122.       A$=Inkey$ : A=Scancode
  123.       If A=77 Then Gosub MSD
  124.       If A=76 Then Gosub MSU
  125.       If MC=2 and SH=0 Then Screen To Back 1 : SH=1 : MC=0 : Goto LL
  126.       If MC=2 and SH=1 Then Screen To Front 1 : SH=0 : MC=0 : Goto LL
  127.    Until MZ>0 and MC=1
  128.    On MZ Goto BK,FF,SS,KS,SO,QUIT,AZ,TZ,KZ
  129.    BK:
  130.    If SL=1 Then Bell : Goto MAIN
  131.    F$=Fsel$("*.ABK","","SELECT AN .ABK PICTURE FILE","The TWILIGHT ZONE ï¿½ 1991 OSCARsoft")
  132.    If F$="" Then Goto MAIN
  133.    '        IF YOU WANT TO CHECK WHAT .ABK FILE YOU ARE ABOUT TO LOAD 
  134.    '                    THEN EXAMINE THESE LINES OF CODE!   
  135.    '          THEY CHECK FOR EVERY TYPE OF BANK POSSIBLE WITH AMOS
  136.    Open In 1,F$
  137.    D$=Input$(1,30)
  138.    Close 1
  139.    If Left$(D$,4)="AmSp" Then Bell : INFOSCREEN[3] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  140.    If Instr(D$,"Samples")>0 Then Bell : INFOSCREEN[4] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  141.    If Instr(D$,"Amal")>0 Then Bell : INFOSCREEN[5] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  142.    If Instr(D$,"Music")>0 Then Bell : INFOSCREEN[6] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  143.    If Instr(D$,"Datas")>0 Then Bell : INFOSCREEN[7] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  144.    If Instr(D$,"Work")>0 Then Bell : INFOSCREEN[8] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  145.    If Left$(D$,4)="AmIc" Then Bell : INFOSCREEN[9] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  146.    If Instr(D$,"Menu")>0 Then Bell : INFOSCREEN[10] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  147.    If Instr(D$,"Pac.Pic")=0 Then Bell : INFOSCREEN[11] : Bell : Wait 500 : Screen Close 7 : Goto MAIN
  148.    Load F$,15 : Unpack 15 To 2 : Erase 15 : Screen To Front 1 : SL=1 : Goto MAIN
  149.    FF:
  150.    If SL=1 Then Bell : Goto MAIN
  151.    F$=Fsel$("","","SELECT AN IFF PICTURE FILE","The TWILIGHT ZONE ï¿½ 1991 OSCARsoft")
  152.    If F$="" Then Goto MAIN
  153.    Load Iff F$,2 : Screen To Front 1 : SL=1 : Goto MAIN
  154.    SS:
  155.    If NZ=0 Then Goto MAIN
  156.    F$=Fsel$("*.ASC","","SELECT A SAVE NAME FOR THE SOURCE CODE","The TWILIGHT ZONE ï¿½ 1991 OSCARsoft")
  157.    If F$="" Then Goto MAIN
  158.    E$=Right$(F$,4) : E$=Upper$(E$) : If E$<>".ASC" Then F$=F$+".ASC"
  159.    Change Mouse 3
  160.    Open Out 1,F$
  161.    Print #1,"Rem"
  162.    Print #1,"Rem                     Source Code Generated By"
  163.    Print #1,"Rem                               The"
  164.    Print #1,"Rem                          TWILIGHT ZONE"
  165.    Print #1,"Rem                         Written By TEX!"
  166.    Print #1,"Rem                        ï¿½ 1991 OSCARsoft"
  167.    Print #1,"Rem"
  168.    Print #1,"Reserve Zone"+Str$(NZ)
  169.    Print #1,"Rem"
  170.    For X=1 To NZ
  171.       Print #1,"Set Zone"+Str$(X)+","+Mid$(Str$(MG(X,0)),2)+","+Mid$(Str$(MG(X,1)),2)+" to "+Mid$(Str$(MG(X,2)),2)+","+Mid$(Str$(MG(X,3)),2)+": Rem "+MG$(X,0)
  172.    Next X
  173.    Print #1,"Rem"
  174.    Print #1,"Rem           THERE IS NO CHECKING FOR OVER-LAPPING ZONES!"
  175.    Print #1,"Rem"
  176.    Print #1,"Repeat"
  177.    Print #1,"MZ=Mouse Zone : MC=Mouse Click"
  178.    Print #1,"Until MZ>0 and MC=1"
  179.    For X=1 To NZ
  180.       N$=N$+MG$(X,1)+","
  181.    Next X
  182.    N=Len(N$) : N$=Left$(N$,N-1)
  183.    Print #1,"On MZ Goto "+N$
  184.    Print #1,"Rem"
  185.    Print #1,"Rem           Change The "+Chr$(32)+"On"+Chr$(32)+" Statement To Procedures/Gosubs"
  186.    Print #1,"Rem                       Or Whatever Yo Like!"
  187.    Close 1
  188.    Change Mouse 2
  189.    DS=1
  190.    Goto MAIN
  191.    KS:
  192.    For X=1 To NZ
  193.       MG(X,0)=0 : MG(X,1)=0 : MG(X,2)=0 : MG(X,3)=0
  194.    Next X
  195.    NZ=0 : CZ=0
  196.    Goto MAIN
  197.    SO:
  198.    If NZ>0 and SL=1 Then SL=0 : Screen Close 2
  199.    Goto KS
  200.    AZ:
  201.    If SL=0 Then Bell : INFOSCREEN[1] : Bell : Wait 400 : Screen Close 7 : Goto MAIN
  202.    CZ=NZ+1
  203.    Wait 10
  204.    Screen Hide 1 : Screen To Front 2 : Screen 2
  205.    Gr Writing 2 : Ink 1
  206.    Repeat : Until Mouse Key=0
  207.    Repeat 
  208.       If Mouse Key=1
  209.          GX1=X Screen(X Mouse) : GY1=Y Screen(Y Mouse) : GX2=GX1 : GY2=GY1
  210.          While Mouse Key=1
  211.             Box GX1,GY1 To GX2,GY2
  212.             GX2=X Screen(X Mouse) : GY2=Y Screen(Y Mouse)
  213.             Box GX1,GY1 To GX2,GY2
  214.          Wend 
  215.          Box GX1,GY1 To GX2,GY2 : GRABBED=1
  216.          If GX1>GX2 : T=GX1 : GX1=GX2 : GX2=T : End If 
  217.          If GY1>GY2 : T=GY1 : GY1=GY2 : GY2=T : End If 
  218.       End If 
  219.    Until GRABBED=1
  220.    MG(CZ,0)=GX1 : MG(CZ,1)=GY1 : MG(CZ,2)=GX2 : MG(CZ,3)=GY2 : MG(CZ,4)=1
  221.    Gr Writing 0 : Screen Show 1 : Screen To Front 1
  222.    Gosub USD : Gosub UCD : Inc NZ : GRABBED=0 : GX1=0 : GY1=0 : GX2=0 : GY2=0
  223.    Screen Open 7,672,40,2,Hires
  224.    Colour 1,$FFF
  225.    Centre "The TWILIGHT ZONE By TEX ï¿½1991 OSCARSoft" : Cdown 
  226.    Locate 0,2 : Print "Please Enter A Name For This Zone:";
  227.    Input MG$(CZ,0)
  228.    Locate 0,3 : Print "Enter A Label/Procedure Name For This Zone To GOTO, MAKE IT LEGAL!:";
  229.    Input MG$(CZ,1)
  230.    Screen Close 7
  231.    Goto MAIN
  232.    TZ:
  233.    If NZ=0 Then Bell : INFOSCREEN[12] : Bell : Wait 400 : Screen Close 7 : Goto MAIN
  234.    Screen Hide 1 : Screen To Front 2
  235.    INFOSCREEN[13] : Amal Off 
  236.    Screen 2 : Set Font 2
  237.    Reserve Zone NZ
  238.    For X=1 To NZ
  239.       Set Zone X,MG(X,0),MG(X,1) To MG(X,2),MG(X,3)
  240.    Next X
  241.    Repeat 
  242.       Do 
  243.          MZ=Mouse Zone : MC=Mouse Click : A$=Inkey$ : A=Scancode
  244.          If A=77 Then Screen Display 7,,280,, : A$="" : A=0
  245.          If A=76 Then Screen Display 7,,40,, : A$="" : A=0
  246.          Exit If MZ>0 and MC=1 or MC=2
  247.       Loop 
  248.       Bell 
  249.       Screen 7 : Ink 3 : Bar 375,118 To 408,126 : Set Font 2 : Gr Writing 0 : Ink 1 : Text 380,125,Str$(MZ)
  250.       Ink 3 : Bar 432,118 To 460,126 : Ink 1 : Text 434,125,Mid$(Str$(MG(MZ,0)),2)
  251.       Ink 3 : Bar 480,118 To 506,126 : Ink 1 : Text 482,125,Mid$(Str$(MG(MZ,1)),2)
  252.       Ink 3 : Bar 529,118 To 555,126 : Ink 1 : Text 529,125,Mid$(Str$(MG(MZ,2)),2)
  253.       Ink 3 : Bar 577,118 To 603,126 : Ink 1 : Text 577,125,Mid$(Str$(MG(MZ,3)),2)
  254.       Screen 2
  255.    Until MC=2
  256.    Screen Close 7 : Screen Show 1 : Screen To Front 1
  257.    Goto MAIN
  258.    KZ:
  259.    If NZ=0 Then Bell : INFOSCREEN[12] : Bell : Wait 400 : Screen Close 7 : Goto MAIN
  260.    Screen Hide 1
  261.    INFOSCREEN[13] : Amal Off 
  262.    Screen 2 : Set Font 2
  263.    Reserve Zone NZ
  264.    For X=1 To NZ
  265.       Set Zone X,MG(X,0),MG(X,1) To MG(X,2),MG(X,3)
  266.    Next X
  267.    Repeat 
  268.       Do 
  269.          MZ=Mouse Zone : MC=Mouse Click : A$=Inkey$ : A=Scancode
  270.          If A=77 Then Screen Display 7,,280,, : A$="" : A=0
  271.          If A=76 Then Screen Display 7,,40,, : A$="" : A=0
  272.          Exit If MZ>0 and MC=1 or MC=2
  273.       Loop 
  274.       Bell 
  275.       Screen 7 : Ink 3 : Bar 375,118 To 408,126 : Set Font 2 : Gr Writing 0 : Ink 1 : Text 380,125,Str$(MZ)
  276.       Ink 3 : Bar 432,118 To 460,126 : Ink 1 : Text 434,125,Mid$(Str$(MG(MZ,0)),2)
  277.       Ink 3 : Bar 480,118 To 506,126 : Ink 1 : Text 482,125,Mid$(Str$(MG(MZ,1)),2)
  278.       Ink 3 : Bar 529,118 To 555,126 : Ink 1 : Text 529,125,Mid$(Str$(MG(MZ,2)),2)
  279.       Ink 3 : Bar 577,118 To 603,126 : Ink 1 : Text 577,125,Mid$(Str$(MG(MZ,3)),2)
  280.       Screen 2
  281.    Until MC=2
  282.    MG(MZ,4)=0 : CTR=0
  283.    For X=1 To NZ
  284.       If MG(X,4)=1
  285.          Inc CTR
  286.          TMP(CTR,0)=MG(X,0) : TMP(CTR,1)=MG(X,1) : TMP(CTR,2)=MG(X,2) : TMP(CTR,3)=MG(X,3)
  287.          TMP$(CTR,0)=MG$(X,0) : TMP$(CTR,1)=MG$(X,1) : TMP(CTR,4)=1
  288.       End If 
  289.    Next X
  290.    NZ=NZ-1
  291.    For X=1 To NZ
  292.       MG(X,0)=TMP(X,0) : MG(X,1)=TMP(X,1) : MG(X,2)=TMP(X,2) : MG(X,3)=TMP(X,3)
  293.       MG$(X,0)=TMP$(X,0) : MG$(X,1)=TMP$(X,1) : MG(X,4)=1
  294.    Next X
  295.    If NZ>0 Then CZ=1 Else CZ=0
  296.    Screen Close 7 : Screen Show 1 : Screen To Front 1
  297.    Goto MAIN
  298.    QUIT:
  299.    Proc QUIT
  300.    Goto MAIN
  301.    MSU:
  302.    MY=MY-2 : If MY<=30 Then MY=30
  303.    Screen Display 1,,MY,,
  304.    Return 
  305.    MSD:
  306.    MY=MY+2 : If MY>=230 Then MY=230
  307.    Screen Display 1,,MY,,
  308.    Return 
  309.    USD:
  310.    Screen 1
  311.    Set Font 1
  312.    CZ$=Mid$(Str$(CZ),2) : NZ$=Mid$(Str$(NZ),2) : Gr Writing 0
  313.    Ink 4 : Bar 245,74 To 279,83
  314.    Ink 6 : Text 245,82,NZ$
  315.    Ink 4 : Bar 395,74 To 429,83
  316.    Ink 7 : Text 395,82,CZ$
  317.    Return 
  318.    UCD:
  319.    Screen 1
  320.    Set Font 2
  321.    ZX1$=Mid$(Str$(MG(CZ,0)),2) : ZY1$=Mid$(Str$(MG(CZ,1)),2)
  322.    ZX2$=Mid$(Str$(MG(CZ,2)),2) : ZY2$=Mid$(Str$(MG(CZ,3)),2)
  323.    Gr Writing 0
  324.    Ink 4 : Bar 460,74 To 484,83
  325.    Bar 505,74 To 529,83
  326.    Bar 554,74 To 578,83
  327.    Bar 599,74 To 623,83
  328.    Ink 7
  329.    Text 461,82,ZX1$
  330.    Text 506,82,ZY1$
  331.    Text 554,82,ZX2$
  332.    Text 600,82,ZY2$
  333.    Return 
  334.    MYSCREEN:
  335.    Screen Open 7,320,10,2,Lowres : Colour 1,$F00 : Curs Off : Return 
  336. End Proc
  337. Procedure QUIT
  338.    If DS=0 and NZ>0
  339.       Bell 
  340.       INFOSCREEN[2]
  341.       Gosub W
  342.    End If 
  343.    If Q=1 Then Goto R
  344.    If Q=2 or Q=0 Then Screen Close 0 : Screen Close 1 : If SL=1 Then Screen Close 2
  345.    If Q=2 or Q=0 Then End 
  346.    W:
  347.    Repeat : A$=Inkey$
  348.    Until A$<>""
  349.    A$=Upper$(A$) : If A$="Q" Then Q=2 Else Q=1
  350.    Amal Off 1 : Screen Close 7
  351.    Return 
  352.    R:
  353. End Proc
  354. Procedure INFOSCREEN[T]
  355.    Unpack 11 To 7 : Screen Hide 7 : Screen Display 7,,30,,19
  356.    If T=1 Then Screen Offset 7,,1 : Screen Show 7 : Screen To Front 7
  357.    If T=2 Then Screen Offset 7,,19 : Screen Show 7 : Screen To Front 7
  358.    If T=3 Then Screen Offset 7,,38 : Screen Show 7 : Screen To Front 7
  359.    If T=4 Then Screen Offset 7,,57 : Screen Show 7 : Screen To Front 7
  360.    If T=5 Then Screen Offset 7,,76 : Screen Show 7 : Screen To Front 7
  361.    If T=6 Then Screen Offset 7,,95 : Screen Show 7 : Screen To Front 7
  362.    If T=7 Then Screen Offset 7,,133 : Screen Show 7 : Screen To Front 7
  363.    If T=8 Then Screen Offset 7,,152 : Screen Show 7 : Screen To Front 7
  364.    If T=9 Then Screen Offset 7,,171 : Screen Show 7 : Screen To Front 7
  365.    If T=10 Then Screen Offset 7,,190 : Screen Show 7 : Screen To Front 7
  366.    If T=11 Then Screen Offset 7,,209 : Screen Show 7 : Screen To Front 7
  367.    If T=12 Then Screen Offset 7,,228 : Screen Show 7 : Screen To Front 7
  368.    If T=13 Then Screen Offset 7,,114 : Screen Show 7 : Screen To Front 7
  369.    Channel 1 To Screen Display 7 : Amal 1,"L: M 0,20,20; M 0,-20,20; J L" : Amal On 1
  370. End Proc