home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 401-425 / apd425 / sources / ampp2.amos / ampp2.amosSourceCode next >
AMOS Source Code  |  1991-09-09  |  52KB  |  2,390 lines

  1. ' This is the sequel To AmPP 
  2. Auto View Off 
  3. Dim CLRS(32)
  4. Global CLRS(),SPR
  5. SPR=True
  6.  
  7. MAIN_LOOP
  8.  
  9. Procedure MAIN_LOOP
  10.    
  11.    GO=False : FIN=False : TTOOL=1 : PPEN=2 : BAK=0 : RAD=5
  12.    Break Off 
  13.    REGISTER=GO
  14.    SCLOSE
  15.    _SMALL_COPYRIGHT[140]
  16.    ABOUT
  17.    SCR_MODE
  18.    Get Rom Fonts 
  19.    Set Font 1
  20.    
  21.    Change Mouse 2
  22.    
  23.    On Error Proc ERR
  24.    Repeat 
  25.       
  26.       Repeat 
  27.       Until Mouse Key=0
  28.       
  29.       If GO
  30.          Show On 
  31.       Else 
  32.          If TTOOL=17
  33.             Hide On 
  34.          Else 
  35.             Show On 
  36.          End If 
  37.       End If 
  38.       
  39.       Repeat 
  40.          Repeat 
  41.             Multi Wait 
  42.             KYS=Mouse Key
  43.          Until Not(KYS=0)
  44.       Until Amos Here
  45.       
  46.       If GO
  47.          Z=Mouse Zone
  48.          GO= Not GO
  49.          ICONS[GO]
  50.          
  51.          Repeat 
  52.          Until Mouse Key=0
  53.          
  54.          IMMEDIATE[Z,TTOOL]
  55.          Change Mouse 2
  56.          TTOOL=Param
  57.          If TTOOL=17
  58.             If Length(1)>5
  59.                Bob 1,X Screen(X Mouse),Y Screen(Y Mouse),6
  60.                Channel 1 To Bob 1
  61.                Bob Update On 
  62.                G$="AU (I R0<>XS(0,XM) J U I R1<>YS(0,YM) J U X U:"
  63.                G$=G$+"L R0=XS(0,XM);"
  64.                G$=G$+"L R1=YS(0,YM); D M) M: M R0-X,R1-Y,1 W;"
  65.                Amal 1,G$
  66.                Amal On 
  67.             End If 
  68.          End If 
  69.          FIN=(TTOOL=40)
  70.       Else 
  71.          If KYS<3
  72.             If KYS=2
  73.                GO=True
  74.                Bob Off 
  75.                ICONS[GO]
  76.                Show On 
  77.                Change Mouse 1
  78.             Else 
  79.                D0_DRAW[TTOOL]
  80.             End If 
  81.          End If 
  82.       End If 
  83.       
  84.    Until FIN
  85.    
  86.    SCLOSE
  87.    
  88. End Proc
  89.  
  90. Procedure ERR
  91.    REQ["An error has Occured",Str$(Errn),"Please Tell ","The Author "]
  92.    Direct 
  93. End Proc
  94.  
  95. Procedure PAL
  96.    
  97.    Def Fn RED(TTUM)=TTUM/256
  98.    Def Fn GREEN(TTUM)=(TTUM/16) mod 16
  99.    Def Fn BLUE(TTUM)=TTUM mod 16
  100.    On Error Proc ERR
  101.    IND=0 : STT=0
  102.    Screen 0
  103.    C=Screen Colour
  104.    HAM=(Screen Colour=4096)
  105.    EHB=(Screen Colour=64)
  106.    CL=C
  107.    If HAM
  108.       C=32
  109.       CL=32
  110.    Else 
  111.       If EHB
  112.          C=64
  113.          CL=32
  114.       End If 
  115.    End If 
  116.    FYN=CL-1
  117.    
  118.    Unpack 9 To 1
  119.    _APPEAR[1,1]
  120.    INIT_SPRITES
  121.    Screen Open 2,320,10,C,Lowres
  122.    Flash Off : Curs Off : WD=320/C
  123.    For T=0 To CL-1
  124.       Colour T,CLRS(T)
  125.    Next T
  126.    For T=0 To C-1
  127.       Ink T
  128.       Bar T*WD,0 To T*WD+WD,9
  129.    Next T
  130.    Screen Display 2,,201,,
  131.    _APPEAR[1,0]
  132.    Screen 1
  133.    
  134.    CLR=PPEN : FINI=False : OKAY=False
  135.    SPC=22 : XSPR1=146 : YS=176 : S=8
  136.    
  137.    XSPR2=XSPR1+SPC : XSPR3=XSPR2+SPC : YPTR=195 : XDSP=128
  138.    
  139.    Repeat 
  140.       
  141.       Repeat 
  142.       Until Mouse Key=0
  143.       
  144.       Screen 2
  145.       CLT=Colour(CLR)
  146.       Y1=YS-S* Fn RED(CLT) : Y2=YS-S* Fn GREEN(CLT) : Y3=YS-S* Fn BLUE(CLT)
  147.       Screen 1
  148.       
  149.       If IND=0
  150.          Sprite Off 14
  151.       Else 
  152.          Sprite 14,332+28*IND,118,2
  153.       End If 
  154.       
  155.       Sprite 8,XSPR1,Y1,1
  156.       Sprite 9,XSPR2,Y2,1
  157.       Sprite 10,XSPR3,Y3,1
  158.       Sprite 11,STT*WD+XDSP,YPTR,3
  159.       Sprite 12,FYN*WD+XDSP+WD-4,YPTR,3
  160.       
  161.       Repeat 
  162.       Until Mouse Key=1
  163.       
  164.       Bell 
  165.       Screen 2
  166.       R= Fn RED(CLT)
  167.       G= Fn GREEN(CLT)
  168.       B= Fn BLUE(CLT)
  169.       X=X Mouse
  170.       Y=Y Mouse
  171.       VL=(182-Y)/8
  172.       
  173.       If Y>54
  174.          If Y<182
  175.             If X<158
  176.                If X>144
  177.                   R=VL
  178.                End If 
  179.             Else 
  180.                If X<180
  181.                   If X>165
  182.                      G=VL
  183.                   End If 
  184.                Else 
  185.                   If X<202
  186.                      If X>188
  187.                         B=VL
  188.                      End If 
  189.                   End If 
  190.                End If 
  191.             End If 
  192.          End If 
  193.       End If 
  194.       
  195.       If Y<106
  196.          If X>238
  197.             If Y>60
  198.                If X<390
  199.                   If Y<80
  200.                      If X<292
  201.                         '
  202.                         ' Okay 
  203.                         FINI=True
  204.                         OKAY=True
  205.                      Else 
  206.                         If X>322
  207.                            ' Cancel 
  208.                            FINI=True
  209.                         End If 
  210.                      End If 
  211.                   Else 
  212.                      If Y>92
  213.                         If X<292
  214.                            STT=CLR
  215.                            If Max(STT,FYN)=STT
  216.                               Swap STT,FYN
  217.                            End If 
  218.                         Else 
  219.                            If X>322
  220.                               FYN=CLR
  221.                               If Max(STT,FYN)=STT
  222.                                  Swap STT,FYN
  223.                               End If 
  224.                            End If 
  225.                         End If 
  226.                      End If 
  227.                   End If 
  228.                End If 
  229.             End If 
  230.          End If 
  231.       End If 
  232.       
  233.       If Y>119
  234.          If Y<139
  235.             If X>360
  236.                If X<444
  237.                   If X<385
  238.                      If IND=1
  239.                         IND=0
  240.                      Else 
  241.                         IND=1
  242.                      End If 
  243.                   End If 
  244.                   If X>420
  245.                      If IND=3
  246.                         IND=0
  247.                      Else 
  248.                         IND=3
  249.                      End If 
  250.                   End If 
  251.                   If X>389
  252.                      If X<416
  253.                         If IND=2
  254.                            IND=0
  255.                         Else 
  256.                            IND=2
  257.                         End If 
  258.                      End If 
  259.                   End If 
  260.                End If 
  261.             End If 
  262.          End If 
  263.       End If 
  264.       
  265.       Screen 2
  266.       Colour CLR,R*256+G*16+B
  267.       
  268.       If Y>201
  269.          If Y<210
  270.             X=X-128
  271.             CLR=(X*C)/320
  272.             If CLR=C
  273.                CLR=CLR-1
  274.             End If 
  275.             If EHB
  276.                If CLR>31
  277.                   CLR=CLR-32
  278.                   Bell 20
  279.                End If 
  280.             End If 
  281.          End If 
  282.       End If 
  283.       
  284.       If Not(IND=0)
  285.          If Y>119
  286.             If Y<138
  287.                If X>221
  288.                   If Not(FYN-STT)=0
  289.                      If X<356
  290.                         If X<245
  291.                            Screen 2
  292.                            STP=Sgn(FYN-STT)
  293.                            For T=STT To FYN Step STP
  294.                               V=Colour(T)
  295.                               R= Fn RED(V)
  296.                               G= Fn GREEN(V)
  297.                               B= Fn BLUE(V)
  298.                               V=(15*(T-STT))/(FYN-STT)
  299.                               If IND=1
  300.                                  R=V
  301.                               Else 
  302.                                  If IND=2
  303.                                     G=V
  304.                                  Else 
  305.                                     B=V
  306.                                  End If 
  307.                               End If 
  308.                               TP=R*256+G*16+B
  309.                               Colour T,TP
  310.                            Next T
  311.                         End If 
  312.                         If X>332
  313.                            Screen 2
  314.                            CPS=Colour(STT)
  315.                            CPF=Colour(FYN)
  316.                            If IND=1
  317.                               VS= Fn RED(CPS)
  318.                               VF= Fn RED(CPF)
  319.                            Else 
  320.                               If IND=2
  321.                                  VS= Fn GREEN(CPS)
  322.                                  VF= Fn GREEN(CPF)
  323.                               Else 
  324.                                  VS= Fn BLUE(CPS)
  325.                                  VF= Fn BLUE(CPF)
  326.                               End If 
  327.                            End If 
  328.                            STP=Sgn(FYN-STT)
  329.                            For T=STT To FYN Step STP
  330.                               V=Colour(T)
  331.                               R= Fn RED(V)
  332.                               G= Fn GREEN(V)
  333.                               B= Fn BLUE(V)
  334.                               V=((VF-VS)*(T-STT))/(FYN-STT)+VS
  335.                               If IND=1
  336.                                  R=V
  337.                               Else 
  338.                                  If IND=2
  339.                                     G=V
  340.                                  Else 
  341.                                     B=V
  342.                                  End If 
  343.                               End If 
  344.                               TP=R*256+G*16+B
  345.                               Colour T,TP
  346.                            Next T
  347.                         End If 
  348.                      End If 
  349.                   End If 
  350.                End If 
  351.             End If 
  352.          End If 
  353.       End If 
  354.       
  355.       If FYN>STT
  356.          If Y>119
  357.             If Y<139
  358.                If(X>249) and(X<273)
  359.                   Screen 2
  360.                   TEMP=Colour(FYN)
  361.                   For T=FYN To STT+1 Step -1
  362.                      Colour T,Colour(T-1)
  363.                   Next T
  364.                   Colour STT,TEMP
  365.                End If 
  366.                If(X>276) and(X<300)
  367.                   Screen 2
  368.                   TEMP=Colour(STT)
  369.                   For T=STT To FYN-1
  370.                      Colour T,Colour(T+1)
  371.                   Next T
  372.                   Colour FYN,TEMP
  373.                End If 
  374.                If(X>304) and(X<328)
  375.                   Screen 2
  376.                   T=STT-1
  377.                   Repeat 
  378.                      T=T+1
  379.                      TEMP=Colour(T)
  380.                      TEMP2=Colour(FYN-T+STT)
  381.                      Colour T,TEMP2
  382.                      Colour STT+FYN-T,TEMP
  383.                      Wait Vbl 
  384.                   Until(T>(STT+FYN-T-2))
  385.                End If 
  386.             End If 
  387.          End If 
  388.       End If 
  389.       Screen 0
  390.    Until FINI
  391.    
  392.    If OKAY
  393.       For T=0 To CL-1
  394.          Screen 2
  395.          CLRS(T)=Colour(T)
  396.          If Not HAM
  397.             Screen 0
  398.             Colour T,CLRS(T)
  399.          End If 
  400.       Next T
  401.    End If 
  402.    Sprite Off : Bob Off 
  403.    Screen 2 : Fade 1 : Wait 10 : Screen 1 : Fade 1
  404.    Wait 5 : Screen Close 2 : Wait 10 : Screen Close 1
  405.    Screen 0
  406.    
  407. End Proc
  408.  
  409. Procedure SCR_MODE
  410.    
  411.    Shared PPEN,BAK,RAD
  412.    On Error Proc ERR
  413.    RAD=10
  414.    CL=16
  415.    PL=False
  416.    R=0 : Bob Update On 
  417.    Unpack 8 To 1
  418.    _APPEAR[1,0]
  419.    INIT_SPRITES
  420.    
  421.    FIN=False
  422.    YSC=103
  423.    YSM=YSC+25
  424.    If CL=2 Then C=0
  425.    If CL=4 Then C=1
  426.    If CL=8 Then C=2
  427.    If CL=16 Then C=3
  428.    If CL=32 Then C=4
  429.    If CL=64 Then C=5
  430.    If CL=4096 Then C=6
  431.    View 
  432.    
  433.    Repeat 
  434.       
  435.       Repeat 
  436.       Until Mouse Key=0
  437.       
  438.       Sprite 8,195+C*32,YSC,4
  439.       Sprite 9,168+R*60,YSM,5
  440.       Bob 1,225+PL*60,78,5
  441.       
  442.       Repeat 
  443.       Until Not(Mouse Key=0)
  444.       X=X Mouse : Y=Y Mouse
  445.       
  446.       Bell 
  447.       
  448.       If Y>134
  449.          If Y<145
  450.             If X<284
  451.                If X>170
  452.                   If X>235
  453.                      R=1
  454.                      If C>3
  455.                         C=3
  456.                      End If 
  457.                   End If 
  458.                   If X<223
  459.                      R=0
  460.                   End If 
  461.                End If 
  462.             End If 
  463.             If X>306
  464.                If X>361
  465.                   PL=False
  466.                End If 
  467.                If X<336
  468.                   PL=True
  469.                End If 
  470.             End If 
  471.          End If 
  472.       End If 
  473.       
  474.       If Y<123
  475.          If Y>112
  476.             If X>205
  477.                If X<419
  478.                   If X<219
  479.                      C=0
  480.                   End If 
  481.                   If X>235
  482.                      If X<248
  483.                         C=1
  484.                      End If 
  485.                      If X>266
  486.                         If X<282
  487.                            C=2
  488.                         End If 
  489.                         If X>300
  490.                            If X<314
  491.                               C=3
  492.                            End If 
  493.                            If R=0
  494.                               If X>330
  495.                                  If X<346
  496.                                     C=4
  497.                                  End If 
  498.                                  If X>355
  499.                                     If X<384
  500.                                        C=5
  501.                                     End If 
  502.                                     If X>388
  503.                                        C=6
  504.                                     End If 
  505.                                  End If 
  506.                               End If 
  507.                            End If 
  508.                         End If 
  509.                      End If 
  510.                   End If 
  511.                End If 
  512.             End If 
  513.          End If 
  514.       End If 
  515.       
  516.       If Y>167
  517.          If Y<179
  518.             If X>403
  519.                If X<427
  520.                   FIN=True
  521.                End If 
  522.             End If 
  523.          End If 
  524.       End If 
  525.       
  526.       If C=6
  527.          Bell 20 : Rem Take Out when Ham is implemented 
  528.          C=5
  529.       End If 
  530.       
  531.    Until FIN
  532.    
  533.    If C=0 Then CL=2
  534.    If C=1 Then CL=4
  535.    If C=2 Then CL=8
  536.    If C=3 Then CL=16
  537.    If C=4 Then CL=32
  538.    If C=5 Then CL=64
  539.    If C=6 Then CL=4096
  540.    
  541.    If PL
  542.       HT=256
  543.    Else 
  544.       HT=200
  545.    End If 
  546.    
  547.    If R=0
  548.       Screen Open 0,320,HT,CL,Lowres
  549.    Else 
  550.       Screen Open 0,640,HT,CL,Hires
  551.    End If 
  552.    Limit Mouse 120,40 To 460+Screen Width-320,300
  553.    Flash Off : Curs Off : Cls 0
  554.    
  555.    Sprite Off 
  556.    Screen 1
  557.    Fade 1 : Wait 15
  558.    Screen Close 1
  559.    Screen 0
  560.    SPR=True
  561.    INIT_CLRS[True]
  562.    View 
  563. End Proc
  564.  
  565. Procedure INIT_SPRITES
  566.    On Error Proc ERR
  567.    Colour 17,Colour(1)
  568.    Colour 18,Colour(1)
  569.    Colour 19,Colour(7)
  570.    For S=1 To 3
  571.       For T=1 To 3
  572.          Colour T*4+S+16,Colour(16+S)
  573.       Next T
  574.    Next S
  575. End Proc
  576.  
  577. Procedure INIT_CLRS[FL]
  578.    
  579.    Shared PPEN,BAK
  580.    On Error Proc ERR
  581.    Screen 0
  582.    If FL
  583.       If SPR
  584.          If Length(2)=64
  585.             Copy Start(2),Start(2)+Length(2) To Screen Base+98
  586.          Else 
  587.             Get Sprite Palette 
  588.          End If 
  589.       End If 
  590.    End If 
  591.    CL=Screen Colour
  592.    If CL>32
  593.       STP=32
  594.    Else 
  595.       STP=CL
  596.    End If 
  597.    
  598.    If CL<4096
  599.       For T=0 To STP-1
  600.          CLRS(T)=Colour(T)
  601.       Next T
  602.    Else 
  603.       ' Do Summat else for HAM 
  604.    End If 
  605.    PPEN=2
  606.    BAK=0
  607.    PPEN=Min(PPEN,CL-1)
  608.    
  609. End Proc
  610.  
  611. Procedure ABOUT
  612.    
  613.    On Error Proc ERR
  614.    Hide On 
  615.    Unpack 11 To 2
  616.    Repeat 
  617.    Until Mouse Key=0
  618.    
  619.    SPLERGE[1,2,1]
  620.    
  621.    Repeat 
  622.    Until Not(Mouse Key=0)
  623.    
  624.    Repeat 
  625.    Until(Mouse Key=0)
  626.    
  627.    Show On 
  628.    Screen 1 : Fade 1 : Wait 15 : Screen Close 1
  629. End Proc
  630.  
  631. Procedure ICONS[FLG]
  632.    
  633.    On Error Proc ERR
  634.    Shared REGISTER
  635.    
  636.    Repeat 
  637.    Until Mouse Key=0
  638.    
  639.    If FLG
  640.       
  641.       Hide On 
  642.       EHB=False : HAM=False
  643.       Screen 0
  644.       C=Screen Colour
  645.       CLU=C
  646.       CL=C
  647.       If C>32
  648.          CL=32
  649.          If C=64
  650.             EHB=True
  651.          Else 
  652.             HAM=True
  653.             CLU=32
  654.          End If 
  655.       End If 
  656.       
  657.       Screen Open 4,320,10,C,Lowres
  658.       Screen Display 4,,83,,
  659.       Flash Off : Curs Off 
  660.       
  661.       For T=0 To CL-1
  662.          Colour T,CLRS(T)
  663.       Next T
  664.       WD=320/CLU
  665.       For T=0 To CLU-1
  666.          Ink T
  667.          Bar T*WD,0 To T*WD+WD,9
  668.       Next T
  669.       Unpack 10 To 3
  670.       _APPEAR[0,0]
  671.       
  672.       Screen 0
  673.       If Screen Height>250
  674.          OFF=8
  675.       Else 
  676.          OFF=0
  677.       End If 
  678.       SC=1
  679.       If Screen Width=640
  680.          SC=2
  681.       End If 
  682.       Reserve Zone 40+CLU
  683.       For T=1 To 20
  684.          For S=1 To 2
  685.             Set Zone T*2+S-2,SC*(T*16-16),S*16-16+OFF To SC*(T*16-1),S*16-1+OFF
  686.          Next S
  687.       Next T
  688.       For T=0 To CLU-1
  689.          Set Zone T+41,SC*T*WD,33+OFF To SC*(T*WD+WD-1),43+OFF
  690.       Next T
  691.       Show On 
  692.       
  693.    Else 
  694.       If REGISTER
  695.          Hide On 
  696.          WIPE[4,0]
  697.          WIPE[3,0]
  698.          Reserve Zone 
  699.          Screen 0
  700.          Show On 
  701.       End If 
  702.    End If 
  703.    REGISTER=True
  704. End Proc
  705.  
  706. Procedure IMMEDIATE[Z,TTOOL]
  707.    
  708.    Shared PPEN,BAK,RAD
  709.    On Error Proc ERR
  710.    PS=False
  711.    
  712.    Amal Off 
  713.    Bob Update Off 
  714.    Bob Clear 
  715.    If Z=0
  716.       PS=True
  717.    End If 
  718.    If(Z=16) or(Z=18) or(Z=20)
  719.       SPR=False
  720.       A$="This will Remove ALL the "
  721.       If Z=16
  722.          M$="Red"
  723.       Else 
  724.          If Z=18
  725.             M$="Green"
  726.          Else 
  727.             M$="Blue"
  728.          End If 
  729.       End If 
  730.       A$=A$+M$
  731.       PS=True
  732.       REQ["Are you Sure?",A$,"Forget it then.","Do it NOW"]
  733.       If Param=2
  734.          RMOVECL[Z/2-7]
  735.       End If 
  736.       INIT_CLRS[False]
  737.    End If 
  738.    If Z=15
  739.       Z=17
  740.       CUT
  741.    End If 
  742.    If Z=22
  743.       PS=True
  744.       Screen 0
  745.       SET_PATTERN[Colour(PPEN),Colour(BAK)]
  746.    End If 
  747.    If Z=23
  748.       PS=True
  749.       ZZOOM
  750.    End If 
  751.    If Z=24
  752.       PS=True
  753.       PAL
  754.    End If 
  755.    If(Z=25) or(Z=26)
  756.       PS=True
  757.       FILE_PAL[26-Z]
  758.    End If 
  759.    If Z=28
  760.       SPRAY[1]
  761.       Z=27
  762.    End If 
  763.    If Z=31
  764.       PS=True
  765.       REQ["Not implemented, I tried using","Screenswaps & Double Buffer","But had Bob troubles","With Paste"]
  766.    End If 
  767.    If Z=32
  768.       Z=19
  769.       FONTS
  770.    End If 
  771.    If Z=33
  772.       PS=True
  773.       REQ["Draw a Grid?","(Useful for Sprites etc.)","No Way","Yes Please"]
  774.       If Param=2
  775.          REQ["What Grid Size?","","16 x 16","32 x 32"]
  776.          If Param=1
  777.             SZ=16
  778.          Else 
  779.             SZ=32
  780.          End If 
  781.          GRID[SZ]
  782.       End If 
  783.    End If 
  784.    If Z=34
  785.       PS=True
  786.       CYCLE
  787.    End If 
  788.    If(Z=35) or(Z=36)
  789.       PS=True
  790.       FILE_PIC[Z-35]
  791.    End If 
  792.    If Z=37
  793.       PS=True
  794.       Screen 0
  795.       Repeat 
  796.       Until Not(Mouse Key=0)
  797.       PPN=Point(X Screen(X Mouse),Y Screen(Y Mouse))
  798.       If BAK=(PPN)
  799.          Swap BAK,PPEN
  800.       Else 
  801.          If Not(PPEN=PPN)
  802.             BAK=PPEN
  803.             PPEN=PPN
  804.          End If 
  805.       End If 
  806.    End If 
  807.    If Z=38
  808.       PS=True
  809.       REQ["Clear The Screen?!","You sure??","Erm, actually..","Of Course!!"]
  810.       If Param=2
  811.          REQ["Change Screen Mode?","","Naah.","Okay Then"]
  812.          If Param=2
  813.             SCR_MODE
  814.          Else 
  815.             Cls 0
  816.          End If 
  817.       End If 
  818.    End If 
  819.    If Z=39
  820.       PS=True
  821.       ABOUT
  822.       Screen 0
  823.    End If 
  824.    If Z=40
  825.       PS=True
  826.       REQ["Are you sure","you want to leave AmPP2?","No","Yes"]
  827.       If Param=2
  828.          PS=False
  829.       End If 
  830.    End If 
  831.    If Z>40
  832.       If BAK=(Z-41)
  833.          Swap BAK,PPEN
  834.       Else 
  835.          If Not(PPEN=Z-41)
  836.             BAK=PPEN
  837.             PPEN=Z-41
  838.          End If 
  839.       End If 
  840.       PS=True
  841.    End If 
  842.    
  843.    If PS
  844.       Z=TTOOL
  845.    End If 
  846.    
  847. End Proc[Z]
  848.  
  849. Procedure REQ[MESS$,MESS2$,RP1$,RP2$]
  850.    '   Shift Off  
  851.    '   Set Rainbow 0,0,50,"(10,1,5)","","(1,5,1)(10,-1,5)"
  852.    On Error Proc ERR
  853.    EXTEND[MESS$] : MESS$=Param$
  854.    EXTEND[MESS2$] : MESS2$=Param$
  855.    EXTEND[RP1$] : RP1$=Param$
  856.    EXTEND[RP2$] : RP2$=Param$
  857.    If GO=1
  858.       ICONS[0]
  859.    End If 
  860.    S=True
  861.    R1=Asc(Left$(RP1$,1))
  862.    R2=Asc(Left$(RP2$,1))
  863.    If R1=R2
  864.       S=False
  865.    End If 
  866.    Screen Open 3,640,50,4,Hires
  867.    Curs Off 
  868.    Screen Display 3,,100,,
  869.    '   Rainbow 0,1,100,50 
  870.    Palette $6,$BB2,$FF3,$BB2
  871.    Cls 0 : Pen 2 : Paper 0
  872.    Flash 3,"(ff0,5)(ee0,5)(cc0,5)(aa0,5)(880,5)(aa0,5)(cc0,5)(ee0,5)"
  873.    Flash 1,"(880,5)(aa0,5)(cc0,5)(ee0,5)(ff0,5)(ee0,5)(cc0,5)(aa0,5)"
  874.    Ink 2
  875.    Draw 0,0 To 640,0
  876.    Draw 0,49 To 640,49
  877.    Print 
  878.    Centre MESS$
  879.    Print 
  880.    Centre MESS2$
  881.    Locate 4,3
  882.    Pen 2
  883.    Print "L e f t"
  884.    Locate 4,4
  885.    Pen 3
  886.    Print RP1$
  887.    Locate 65,3
  888.    Pen 2
  889.    Print "R i g h t"
  890.    Pen 1
  891.    Locate 76-Len(RP2$),4
  892.    Print RP2$
  893.    View 
  894.    Repeat 
  895.       Clear Key 
  896.       Repeat 
  897.          KYS=Mouse Key
  898.          If S
  899.             KY=Asc(Inkey$)
  900.             If(R1=KY) or(R2=KY)
  901.                If RP1=KY
  902.                   Z=1
  903.                Else 
  904.                   Z=2
  905.                End If 
  906.                KYS=Z
  907.             End If 
  908.          End If 
  909.       Until Not(KYS=0)
  910.       If KYS>2
  911.          KYS=0
  912.       End If 
  913.       Z=KYS
  914.    Until Not(Z=0)
  915.    Screen Close 3
  916.    '   Rainbow 0,0,0,0
  917.    View 
  918.    Repeat 
  919.    Until Mouse Key=0
  920.    If GO=1
  921.       ICONS[1]
  922.    End If 
  923. End Proc[Z]
  924.  
  925. Procedure EXTEND[MESS$]
  926.    On Error Proc ERR
  927.    TEMP$=MESS$
  928.    OP$=" "
  929.    For T=1 To 2*Len(TEMP$)
  930.       OP$=OP$+" "
  931.    Next T
  932.    For T=1 To Len(TEMP$)
  933.       For S=1 To 2
  934.          P=2*T-1
  935.          If S=1
  936.             Mid$(OP$,P,P+1)=Mid$(TEMP$,T,T+1)
  937.          Else 
  938.             Mid$(OP$,P+1,P+2)=" "
  939.          End If 
  940.       Next S
  941.    Next T
  942. End Proc[OP$]
  943.  
  944. Procedure D0_DRAW[CH]
  945.    
  946.    On Error Proc ERR
  947.    Shared PPEN,BAK
  948.    Shared RAD
  949.    Ink PPEN,BAK
  950.    If(CH=1) or(CH=2)
  951.       SKETCH[CH]
  952.    End If 
  953.    If CH=3
  954.       LINE
  955.    End If 
  956.    If CH=4
  957.       RAY
  958.    End If 
  959.    If(CH=5) or(CH=7)
  960.       ELIPSE[CH]
  961.    End If 
  962.    If(CH=6) or(CH=8)
  963.       SIRCLE[CH]
  964.    End If 
  965.    If(CH=9) or(CH=11)
  966.       BBOX[CH]
  967.    End If 
  968.    If(CH=10) or(CH=12)
  969.       PARA[CH]
  970.    End If 
  971.    If(CH=13) or(CH=14)
  972.       TRIANGLE[CH]
  973.    End If 
  974. If CH=17
  975. PPASTE
  976. End If 
  977.    If CH=19
  978.       TXT
  979.    End If 
  980.    If CH=21
  981.       FYLL
  982.    End If 
  983.    If(CH=27) or(CH=29) or(CH=30)
  984.       SPRAY[CH-27]
  985.    End If 
  986.    
  987. End Proc
  988.  
  989. Procedure SKETCH[TYPE]
  990.    
  991.    On Error Proc ERR
  992.    X1=X Screen(X Mouse)
  993.    Y1=Y Screen(Y Mouse)
  994.    Repeat 
  995.       Wait Vbl 
  996.       X2=X Mouse : Y2=Y Mouse
  997.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  998.       If TYPE=1
  999.          Plot X2,Y2
  1000.       Else 
  1001.          Draw X1,Y1 To X2,Y2
  1002.          X1=X2
  1003.          Y1=Y2
  1004.       End If 
  1005.    Until Mouse Key=0
  1006.    
  1007. End Proc
  1008.  
  1009. Procedure LINE
  1010.    
  1011.    On Error Proc ERR
  1012.    Gr Writing 2
  1013.    Screen 0
  1014.    X=X Screen(X Mouse)
  1015.    Y=Y Screen(Y Mouse)
  1016.    X2=X Mouse : Y2=Y Mouse
  1017.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1018.    Draw X,Y To X2,Y2
  1019.    Repeat 
  1020.       Draw X,Y To X2,Y2
  1021.       X2=X Mouse : Y2=Y Mouse
  1022.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1023.       OLX2=X2
  1024.       OLY2=Y2
  1025.       Draw X,Y To OLX2,OLY2
  1026.       Wait Vbl 
  1027.    Until Mouse Key=0
  1028.    Gr Writing 1
  1029.    Draw X,Y To OLX2,OLY2
  1030.    
  1031. End Proc
  1032.  
  1033. Procedure RAY
  1034.    
  1035.    On Error Proc ERR
  1036.    Screen 0
  1037.    X=X Screen(X Mouse)
  1038.    Y=Y Screen(Y Mouse)
  1039.    Repeat 
  1040.       X2=X Mouse : Y2=Y Mouse
  1041.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1042.       Draw X,Y To X2,Y2
  1043.    Until Mouse Key=0
  1044.    
  1045. End Proc
  1046.  
  1047. Procedure ELIPSE[C]
  1048.    
  1049.    On Error Proc ERR
  1050.    Gr Writing 2
  1051.    Screen 0
  1052.    X=X Screen(X Mouse)
  1053.    Y=Y Screen(Y Mouse)
  1054.    X2=X Mouse : Y2=Y Mouse
  1055.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1056.    Repeat 
  1057.       R1=Abs(X2-X) : R2=Abs(Y2-Y)
  1058.       R1=Max(1,R1) : R2=Max(R2,1)
  1059.       Ellipse X,Y,R1,R2
  1060.       X2=X Mouse : Y2=Y Mouse
  1061.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1062.       OLR1=R1
  1063.       OLR2=R2
  1064.       Ellipse X,Y,OLR1,OLR2
  1065.       Wait Vbl 
  1066.    Until Mouse Key=0
  1067.    Gr Writing 1
  1068.    R1=OLR1 : R2=OLR2
  1069.    Ellipse X,Y,R1,R2
  1070.    If C=7
  1071.       If Max(R1,R2)=R1
  1072.          Draw X-R1,Y To X+R1,Y
  1073.          For T=1 To R2
  1074.             Ellipse X,Y,R1,T
  1075.          Next T
  1076.       Else 
  1077.          Draw X,Y-R2 To X,Y+R2
  1078.          For T=1 To R1
  1079.             Ellipse X,Y,T,R2
  1080.          Next T
  1081.       End If 
  1082.    End If 
  1083.    
  1084. End Proc
  1085.  
  1086. Procedure SIRCLE[C]
  1087.    
  1088.    On Error Proc ERR
  1089.    Gr Writing 2
  1090.    Screen 0
  1091.    X=X Screen(X Mouse)
  1092.    Y=Y Screen(Y Mouse)
  1093.    X2=X Mouse : Y2=Y Mouse
  1094.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1095.    Repeat 
  1096.       R=Sqr((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y))
  1097.       R=Max(1,R)
  1098.       Circle X,Y,R
  1099.       X2=X Mouse : Y2=Y Mouse
  1100.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1101.       OLR=R
  1102.       Circle X,Y,OLR
  1103.       Wait Vbl 
  1104.    Until Mouse Key=0
  1105.    Gr Writing 1
  1106.    R=OLR
  1107.    Circle X,Y,R
  1108.    If C=8
  1109.       Draw X-R,Y To X+R,Y
  1110.       For T=1 To R
  1111.          Ellipse X,Y,R,T
  1112.       Next T
  1113.    End If 
  1114.    
  1115. End Proc
  1116.  
  1117. Procedure CUT
  1118.    
  1119.    On Error Proc ERR
  1120.    Gr Writing 2
  1121.    SPR=False
  1122.    Screen 0
  1123.    Change Mouse 2
  1124.    Repeat 
  1125.    Until Mouse Key=0
  1126.    Repeat 
  1127.    Until Not(Mouse Key=0)
  1128.    X=X Screen(X Mouse)
  1129.    Y=Y Screen(Y Mouse)
  1130.    X2=X Mouse : Y2=Y Mouse
  1131.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1132.    Plot X,Y
  1133.    Box X,Y To X2,Y2
  1134.    Repeat 
  1135.       Box X,Y To X2,Y2
  1136.       X2=X Mouse : Y2=Y Mouse
  1137.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1138.       If X=X2
  1139.          If OLX2>X2
  1140.             Dec X2
  1141.          Else 
  1142.             Inc X2
  1143.          End If 
  1144.       End If 
  1145.       If Y=Y2
  1146.          If OLY2>Y2
  1147.             Dec Y2
  1148.          Else 
  1149.             Inc Y2
  1150.          End If 
  1151.       End If 
  1152.       OLX2=X2
  1153.       OLY2=Y2
  1154.       Box X,Y To OLX2,OLY2
  1155.       Wait Vbl 
  1156.    Until Mouse Key=0
  1157.    Box X,Y To OLX2,OLY2
  1158.    Gr Writing 1
  1159.    If OLX2<X
  1160.       Swap X,OLX2
  1161.    End If 
  1162.    If OLY2<Y
  1163.       Swap Y,OLY2
  1164.    End If 
  1165.    Get Bob 6,X,Y To OLX2,OLY2
  1166. End Proc
  1167.  
  1168. Procedure PPASTE
  1169.    
  1170.    Bob Off 
  1171.    Repeat 
  1172.       X=X Mouse : Y=Y Mouse
  1173.       X=X Screen(X) : Y=Y Screen(Y)
  1174.       Paste Bob X,Y,6
  1175.    Until Mouse Key=0
  1176.    Wait Vbl : Bob 1,X Screen(X Mouse),Y Screen(Y Mouse),6
  1177.    Channel 1 To Bob 1
  1178.    Bob Update On 
  1179.    G$="AU (I R0<>XS(0,XM) J U I R1<>YS(0,YM) J U X U:"
  1180.    G$=G$+"L R0=XS(0,XM);"
  1181.    G$=G$+"L R1=YS(0,YM); D M) M: M R0-X,R1-Y,1 W;"
  1182.    Amal 1,G$
  1183.    Amal On 
  1184.    
  1185. End Proc
  1186.  
  1187. Procedure BBOX[C]
  1188.    
  1189.    On Error Proc ERR
  1190.    Gr Writing 2
  1191.    Screen 0
  1192.    X=X Screen(X Mouse)
  1193.    Y=Y Screen(Y Mouse)
  1194.    X2=X Mouse : Y2=Y Mouse
  1195.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1196.    Box X,Y To X2,Y2
  1197.    Repeat 
  1198.       Box X,Y To X2,Y2
  1199.       X2=X Mouse : Y2=Y Mouse
  1200.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1201.       OLX2=X2
  1202.       OLY2=Y2
  1203.       Box X,Y To OLX2,OLY2
  1204.       Wait Vbl 
  1205.    Until Mouse Key=0
  1206.    Gr Writing 1
  1207.    X2=OLX2 : Y2=OLY2
  1208.    If C=9
  1209.       Box X,Y To X2,Y2
  1210.    Else 
  1211.       If(X=X2) or(Y=Y2)
  1212.          Draw X,Y To X2,Y2
  1213.       Else 
  1214.          If X>X2
  1215.             Swap X,X2
  1216.          End If 
  1217.          If Y>Y2
  1218.             Swap Y,Y2
  1219.          End If 
  1220.          Bar X,Y To X2,Y2
  1221.       End If 
  1222.    End If 
  1223.    
  1224. End Proc
  1225.  
  1226. Procedure PARA[C]
  1227.    
  1228.    On Error Proc ERR
  1229.    Gr Writing 2
  1230.    Screen 0
  1231.    X=X Screen(X Mouse)
  1232.    Y=Y Screen(Y Mouse)
  1233.    X2=X Mouse : Y2=Y Mouse
  1234.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1235.    Draw X,Y To X2,Y2
  1236.    Repeat 
  1237.       Draw X,Y To X2,Y2
  1238.       X2=X Mouse : Y2=Y Mouse
  1239.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1240.       OLX2=X2
  1241.       OLY2=Y2
  1242.       Draw X,Y To OLX2,OLY2
  1243.       Wait Vbl 
  1244.    Until Mouse Key=0
  1245.    Gr Writing 1
  1246.    X2=OLX2 : Y2=OLY2
  1247.    Draw X,Y To X2,Y2
  1248.    
  1249.    X3=X Mouse : Y3=Y Mouse
  1250.    X3=X Screen(X3) : Y3=Y Screen(Y3)
  1251.    Gr Writing 2
  1252.    X4=X+X3-X2 : Y4=Y+Y3-Y2
  1253.    Polyline X,Y To X4,Y4 To X3,Y3 To X2,Y2
  1254.    Repeat 
  1255.       Polyline X,Y To X4,Y4 To X3,Y3 To X2,Y2
  1256.       X3=X Mouse : Y3=Y Mouse
  1257.       X3=X Screen(X3) : Y3=Y Screen(Y3)
  1258.       X4=X+X3-X2 : Y4=Y+Y3-Y2
  1259.       OLX3=X3 : OLY3=Y3 : OLX4=X4 : OLY4=Y4
  1260.       Polyline X,Y To OLX4,OLY4 To OLX3,OLY3 To X2,Y2
  1261.       Wait Vbl 
  1262.    Until Mouse Key=1
  1263.    X3=OLX3 : Y3=OLY3 : X4=OLX4 : Y4=OLY4
  1264.    Gr Writing 1
  1265.    If C=10
  1266.       Polyline X,Y To X2,Y2 To X3,Y3 To X4,Y4 To X,Y
  1267.    Else 
  1268.       Polygon X,Y To X2,Y2 To X3,Y3 To X4,Y4 To X,Y
  1269.    End If 
  1270.    
  1271. End Proc
  1272.  
  1273. Procedure TRIANGLE[C]
  1274.    
  1275.    On Error Proc ERR
  1276.    Gr Writing 2
  1277.    Screen 0
  1278.    X=X Screen(X Mouse)
  1279.    Y=Y Screen(Y Mouse)
  1280.    X2=X Mouse : Y2=Y Mouse
  1281.    X2=X Screen(X2) : Y2=Y Screen(Y2)
  1282.    Draw X,Y To X2,Y2
  1283.    Repeat 
  1284.       Draw X,Y To X2,Y2
  1285.       X2=X Mouse : Y2=Y Mouse
  1286.       X2=X Screen(X2) : Y2=Y Screen(Y2)
  1287.       OLX2=X2
  1288.       OLY2=Y2
  1289.       Draw X,Y To OLX2,OLY2
  1290.       Wait Vbl 
  1291.    Until Mouse Key=0
  1292.    Gr Writing 1
  1293.    Draw X,Y To X2,Y2
  1294.    
  1295.    X3=X Mouse : Y3=Y Mouse
  1296.    X3=X Screen(X3) : Y3=Y Screen(Y3)
  1297.    Gr Writing 2
  1298.    Polyline X,Y To X3,Y3 To X2,Y2
  1299.    Repeat 
  1300.       Polyline X,Y To X3,Y3 To X2,Y2
  1301.       X3=X Mouse : Y3=Y Mouse
  1302.       X3=X Screen(X3) : Y3=Y Screen(Y3)
  1303.       OLX3=X3 : OLY3=Y3
  1304.       Polyline X,Y To OLX3,OLY3 To X2,Y2
  1305.       Wait Vbl 
  1306.    Until Mouse Key=1
  1307.    X3=OLX3 : Y3=OLY3
  1308.    Gr Writing 1
  1309.    If C=14
  1310.       Polygon X,Y To X2,Y2 To X3,Y3 To X,Y
  1311.    Else 
  1312.       Polyline X,Y To X2,Y2 To X3,Y3 To X,Y
  1313.    End If 
  1314.    
  1315. End Proc
  1316.  
  1317. Procedure FYLL
  1318.    
  1319.    On Error Proc ERR
  1320.    Shared PPEN,BAK
  1321.    Screen 0
  1322.    Change Mouse 3
  1323.    Ink PPEN,BAK
  1324.    Paint X Screen(X Mouse),Y Screen(Y Mouse),0
  1325.    Change Mouse 2
  1326.    
  1327. End Proc
  1328.  
  1329. Procedure SET_PATTERN[C,C2]
  1330.    
  1331.    On Error Proc ERR
  1332.    Change Mouse 3
  1333.    Screen Open 1,320,64,4,Lowres
  1334.    Flash Off : Curs Off 
  1335.    Palette C2,C,C-16,0
  1336.    Reserve Zone 35
  1337.    Cls 3
  1338.    For T=0 To 9
  1339.       For S=1 To 4
  1340.          If(T*4+S-1)<35
  1341.             Ink 2
  1342.             Box T*32,S*16-16 To T*32+31,S*16-1
  1343.             Set Zone T*4+S,T*32,S*16-16 To T*32+31,S*16-1
  1344.             Set Pattern T*4+S-1
  1345.             Ink 1,0
  1346.             Paint T*32+1,S*16-15,0
  1347.          End If 
  1348.       Next S
  1349.    Next T
  1350.    View 
  1351.    Change Mouse 1
  1352.    Repeat 
  1353.       Repeat 
  1354.          Z=Mouse Zone
  1355.       Until Not(Z=0)
  1356.    Until Not(Mouse Key=0)
  1357.    Screen Close 1
  1358.    Screen 0
  1359.    Set Pattern Z-1
  1360.    Ink PPEN
  1361.    
  1362. End Proc[Z-1]
  1363.  
  1364. Procedure ZZOOM
  1365.    
  1366.    Shared PPEN,BAK
  1367.    On Error Proc ERR
  1368.    Def Fn RED(TMP)=TMP/256
  1369.    Def Fn GREEN(TMP)=(TMP/16) mod 16
  1370.    Def Fn BLUE(TMP)=TMP mod 16
  1371.    
  1372.    Repeat 
  1373.    Until Mouse Key=0
  1374.    
  1375.    Hide On 
  1376.    Gr Writing 2
  1377.    BX=128
  1378.    Screen 0
  1379.    XMX=Screen Width
  1380.    YMX=Screen Height
  1381.    SZ=4
  1382.    X=X Mouse : Y=Y Mouse
  1383.    X=X Screen(X) : Y=Y Screen(Y)
  1384.    X2=X+BX/SZ-1 : Y2=Y+BX/SZ-1
  1385.    Bar X,Y To X2,Y2
  1386.    Repeat 
  1387.       Bar X,Y To X2,Y2
  1388.       X=X Mouse : Y=Y Mouse
  1389.       X=X Screen(X) : Y=Y Screen(Y)
  1390.       X2=X+BX/SZ-1 : Y2=Y+BX/SZ-1
  1391.       OLX=X : OLX2=X2
  1392.       OLY=Y : OLY2=Y2
  1393.       Bar OLX,OLY To OLX2,OLY2
  1394.       Wait Vbl 
  1395.    Until Mouse Key=1
  1396.    Bar X,Y To X2,Y2
  1397.    Gr Writing 1
  1398.    
  1399.    Screen 0
  1400.    C=Screen Colour
  1401.    HAM=(Screen Colour=4096)
  1402.    EHB=(Screen Colour=64)
  1403.    CL=C
  1404.    If HAM
  1405.       C=32
  1406.       CL=32
  1407.    Else 
  1408.       If EHB
  1409.          C=64
  1410.          CL=32
  1411.       End If 
  1412.    End If 
  1413.    FYN=CL-1
  1414.    
  1415.    Screen Open 2,320,10,C,Lowres
  1416.    Flash Off : Curs Off : WD=320/C : PAUSE=True
  1417.    For T=0 To CL-1
  1418.       Colour T,CLRS(T)
  1419.    Next T
  1420.    For T=0 To C-1
  1421.       Screen 2
  1422.       Ink T
  1423.       Bar T*WD,0 To T*WD+WD,9
  1424.    Next T
  1425.    HT=158
  1426.    Screen Open 1,320,HT,C,Lowres
  1427.    Screen Display 1,,60,,
  1428.    Flash Off : Curs Off 
  1429.    MX=0
  1430.    MN=4096
  1431.    For T=0 To CL-1
  1432.       Colour T,CLRS(T)
  1433.       TMP= Fn RED(CLRS(T))+ Fn GREEN(CLRS(T))+ Fn BLUE(CLRS(T))
  1434.       If Min(TMP,MN)=TMP
  1435.          BK=T
  1436.          MN=TMP
  1437.       End If 
  1438.       If Max(TMP,MX)=TMP
  1439.          FG=T
  1440.          MX=TMP
  1441.       End If 
  1442.    Next T
  1443.    FINI=False : XS=10 : YS=15 : XF=XS+BX : YF=YS+BX
  1444.    XS2=XF+10 : YS2=YS : XF2=XS2+BX/2 : YF2=YS2+BX/2 : FIRST=True
  1445.    UP$=Border$("  UP  ",1) : DWN$=Border$(" DOWN ",1)
  1446.    LFT$=Border$(" LEFT ",1) : RT$=Border$("RIGHT ",1)
  1447.    OK$=Border$(" OKAY ",1) : CNC$=Border$("CANCEL",1)
  1448.    Change Mouse 2
  1449.    Show On 
  1450.    
  1451.    DX=BX/SZ
  1452.    DY=BX/SZ
  1453.    If X<0
  1454.       X=0
  1455.    End If 
  1456.    If Y<0
  1457.       Y=0
  1458.    End If 
  1459.    
  1460.    If(X+DX>XMX)
  1461.       X=XMX-DX
  1462.    End If 
  1463.    If(Y+DX>YMX)
  1464.       Y=YMX-DY
  1465.    End If 
  1466.    
  1467.    Repeat 
  1468.       
  1469.       If Not FIRST
  1470.          Screen Copy 1,XS2,YS2,XS2+64,YS2+64 To 0,OX-ODD,OY-ODD
  1471.       End If 
  1472.       
  1473.       Cls BK : Paper BK
  1474.       Ink FG : Pen FG : C=FG
  1475.       Box 0,0 To 319,HT-1
  1476.       Locate 30,2 : Print OK$ : Locate 30,5 : Print CNC$
  1477.       Locate 30,8 : Print UP$ : Locate 30,11 : Print DWN$
  1478.       Locate 30,14 : Print LFT$ : Locate 30,17 : Print RT$
  1479.       Locate 20,11 : Print "2" : Locate 23,11 : Print "4"
  1480.       Locate 20,14 : Print "8" : Locate 22,14 : Print "16"
  1481.       Locate 19,17 : Print "32" : Locate 22,17 : Print "64"
  1482.       Box XS-2,YS-2 To XF+1,YF+1
  1483.       Box XS2-2,YS2-2 To XF2+1,YF2+1
  1484.       
  1485.       DX=BX/SZ : DY=DX : D=DX/2 : DD=32-DX/2
  1486.       
  1487.       OX=X : OY=Y : ODD=DD
  1488.       Zoom 0,X,Y,X+DX,Y+DY To 1,XS,YS,XF,YF
  1489.       Screen Copy 0,X-DD,Y-DD,X+DX+DD,Y+DY+DD To 1,XS2,YS2
  1490.       View 
  1491.       REFRESH=False
  1492.       FIRST=False
  1493.       Ink PPEN
  1494.       
  1495.       Repeat 
  1496.          
  1497.          If PAUSE
  1498.             Repeat 
  1499.             Until Mouse Key=0
  1500.          End If 
  1501.          
  1502.          Repeat 
  1503.          Until Not(Mouse Key=0)
  1504.          XM=X Mouse : YM=Y Mouse : PAUSE=True
  1505.          
  1506.          If YM<59
  1507.             If YM>50
  1508.                If XM>127
  1509.                   If XM<448
  1510.                      C=(XM-127)/WD
  1511.                      PAUSE=False
  1512.                      If BAK=C
  1513.                         Swap BAK,PPEN
  1514.                      Else 
  1515.                         If Not(PPEN=C)
  1516.                            BAK=PPEN
  1517.                            PPEN=C
  1518.                         End If 
  1519.                      End If 
  1520.                      PS=True
  1521.                   End If 
  1522.                End If 
  1523.             End If 
  1524.          End If 
  1525.          
  1526.          If XM<265
  1527.             If XM>136
  1528.                If YM>73
  1529.                   If YM<202
  1530.                      H=XM-137 : H=H/SZ
  1531.                      V=YM-74 : V=V/SZ
  1532.                      PAUSE=False
  1533.                      Ink PPEN
  1534.                      SSX=XS+H*SZ : SSY=SY+V*SZ+15
  1535.                      Bar SSX,SSY To SSX+SZ-1,SSY+SZ-1
  1536.                      Plot XS2+DD+H,YS2+DD+V
  1537.                   End If 
  1538.                End If 
  1539.             End If 
  1540.          End If 
  1541.          
  1542.          If XM>364
  1543.             If XM<420
  1544.                If YM>70
  1545.                   If YM<208
  1546.                      If YM>190
  1547.                         X=X+D
  1548.                         REFRESH=True
  1549.                      Else 
  1550.                         If YM>167
  1551.                            If YM<183
  1552.                               X=X-D
  1553.                               REFRESH=True
  1554.                            End If 
  1555.                         Else 
  1556.                            If YM>144
  1557.                               If YM<159
  1558.                                  Y=Y+D
  1559.                                  REFRESH=True
  1560.                               End If 
  1561.                            Else 
  1562.                               If YM>119
  1563.                                  If YM<135
  1564.                                     Y=Y-D
  1565.                                     REFRESH=True
  1566.                                  End If 
  1567.                               Else 
  1568.                                  If YM>95
  1569.                                     If Y<111
  1570.                                        REFRESH=True
  1571.                                        FINI=True
  1572.                                        OKAY=False
  1573.                                     End If 
  1574.                                  Else 
  1575.                                     If YM<87
  1576.                                        REFRESH=True
  1577.                                        FINI=True
  1578.                                        OKAY=True
  1579.                                     End If 
  1580.                                  End If 
  1581.                               End If 
  1582.                            End If 
  1583.                         End If 
  1584.                      End If 
  1585.                   End If 
  1586.                End If 
  1587.             End If 
  1588.          Else 
  1589.             If XM<320
  1590.                If XM>280
  1591.                   If YM>145
  1592.                      If YM<205
  1593.                         If YM<155
  1594.                            If XM<300
  1595.                               SZ=2
  1596.                               REFRESH=True
  1597.                            Else 
  1598.                               SZ=4
  1599.                               REFRESH=True
  1600.                            End If 
  1601.                         Else 
  1602.                            If YM>170
  1603.                               If YM<180
  1604.                                  If XM<300
  1605.                                     SZ=8
  1606.                                     REFRESH=True
  1607.                                  Else 
  1608.                                     SZ=16
  1609.                                     REFRESH=True
  1610.                                  End If 
  1611.                               Else 
  1612.                                  If YM>195
  1613.                                     If YM<205
  1614.                                        If XM<300
  1615.                                           SZ=32
  1616.                                           REFRESH=True
  1617.                                        Else 
  1618.                                           REFRESH=True
  1619.                                           SZ=64
  1620.                                        End If 
  1621.                                     End If 
  1622.                                  End If 
  1623.                               End If 
  1624.                            End If 
  1625.                         End If 
  1626.                      End If 
  1627.                   End If 
  1628.                End If 
  1629.             End If 
  1630.          End If 
  1631.          
  1632.          If X<0
  1633.             X=0
  1634.          End If 
  1635.          If Y<0
  1636.             Y=0
  1637.          End If 
  1638.          
  1639.          If(X+DX>XMX)
  1640.             X=XMX-DX
  1641.          End If 
  1642.          If(Y+DX>YMX)
  1643.             Y=YMX-DY
  1644.          End If 
  1645.          
  1646.       Until REFRESH
  1647.       
  1648.    Until FINI
  1649.    
  1650.    If OKAY
  1651.       Screen Copy 1,XS2,YS2,XS2+64,YS2+64 To 0,OX-ODD,OY-ODD
  1652.    End If 
  1653.    
  1654.    Screen Close 2
  1655.    Screen Close 1
  1656.    Screen 0
  1657.    Reserve Zone 
  1658.    
  1659. End Proc
  1660.  
  1661. Procedure SPRAY[C]
  1662.    
  1663.    On Error Proc ERR
  1664.    Shared RAD
  1665.    
  1666.    If C=1
  1667.       SPRAYPRMS
  1668.    Else 
  1669.       Degree 
  1670.       Screen 0
  1671.       Repeat 
  1672.          R=Rnd(RAD)
  1673.          T=Rnd(359)
  1674.          X1=R*Cos(T)
  1675.          Y1=R*Sin(T)
  1676.          X=X Mouse : Y=Y Mouse
  1677.          X=X Screen(X) : Y=Y Screen(Y)
  1678.          
  1679.          If C=0
  1680.             Plot X+X1,Y+Y1
  1681.          Else 
  1682.             
  1683.             If C=2
  1684.                Draw X,Y To X+X1,Y+Y1
  1685.             Else 
  1686.                
  1687.                P1=Point(X+X1,Y+Y1) : P2=Point(X-X1,Y-Y1)
  1688.                If Max(P1,0)=P1
  1689.                   If Max(P2,0)=P2
  1690.                      Ink P2 : Plot X+X1,Y+Y1
  1691.                      Ink P1 : Plot X-X1,Y-Y1
  1692.                   End If 
  1693.                End If 
  1694.                
  1695.             End If 
  1696.          End If 
  1697.       Until Mouse Key=0
  1698.       Ink PPEN
  1699.    End If 
  1700.    
  1701. End Proc
  1702.  
  1703. Procedure SPRAYPRMS
  1704.    
  1705.    On Error Proc ERR
  1706.    Shared RAD
  1707.    Hide On 
  1708.    Gr Writing 2
  1709.    TT=0
  1710.    Ink 1
  1711.    Repeat 
  1712.    Until Mouse Key=0
  1713.    Repeat 
  1714.       Clear Key 
  1715.       Repeat 
  1716.          Text 50,50,"Spraysize :"+Str$(TT)
  1717.          Repeat 
  1718.             K$=Inkey$ : S=Scancode
  1719.          Until S>0
  1720.          Text 50,50,"Spraysize :"+Str$(TT)
  1721.          If S<11
  1722.             T=S mod 10
  1723.             TT=10*TT+T
  1724.             TT=TT mod 1000
  1725.          Else 
  1726.             If S=65
  1727.                TT=TT/10
  1728.             End If 
  1729.          End If 
  1730.       Until Not(S=65)
  1731.    Until S>10
  1732.    Gr Writing 0
  1733.    TT=Max(TT,5)
  1734.    RAD=TT
  1735.    Show On 
  1736.    
  1737. End Proc
  1738.  
  1739. Procedure FILE_PIC[C]
  1740.    
  1741.    On Error Goto ERR
  1742.    SAV=(C=0)
  1743.    Screen 0
  1744.    PATH$="**.**"
  1745.    DEF$=""
  1746.    MESS$="Select a File"
  1747.    If SAV
  1748.       MESS2$="to Save."
  1749.    Else 
  1750.       MESS2$="to Load."
  1751.    End If 
  1752.    F$=Fsel$(PATH$,DEF$,MESS$,MESS2$)
  1753.    If Not(F$=DEF$)
  1754.       If SAV
  1755.          If Not(Upper$(Right$(F$,4))=".IFF")
  1756.             F$=F$+".IFF"
  1757.          End If 
  1758.       End If 
  1759.       DISK=Exist(F$)
  1760.       If SAV
  1761.          If DISK
  1762.             REQ["File Exists","Overwrite File??","No","Yes, Kill it!!"]
  1763.             SAV=(Param=2)
  1764.          End If 
  1765.          If SAV
  1766.             Save Iff F$
  1767.          End If 
  1768.       Else 
  1769.          If DISK
  1770.             Load Iff F$,0
  1771.             INIT_CLRS[False]
  1772.             If Screen Width<320
  1773.                Screen Open 1,Screen Width,Screen Height,Screen Colour,Lowres
  1774.                Screen Copy 0 To 1
  1775.                Screen Open 0,320,Screen Height,Screen Colour,Lowres
  1776.                Screen Copy 1,0,0,Screen Width,Screen Height To 0,0,0
  1777.                Screen Close 1
  1778.             End If 
  1779.             If Screen Height<200
  1780.                Screen Open 1,320,Screen Height,Screen Colour,Lowres
  1781.                Screen Copy 0 To 1
  1782.                Screen Open 0,320,200,Screen Colour,Lowres
  1783.                Screen Copy 1,0,0,320,Screen Height To 0,0,0
  1784.                Screen Close 1
  1785.             End If 
  1786.             If Not Screen Colour=4096
  1787.                ' in case messed about with resolutions
  1788.                C=Screen Colour
  1789.                If C=64
  1790.                   C=32
  1791.                End If 
  1792.                Dec C
  1793.                For T=0 To C
  1794.                   Colour T,CLRS(T)
  1795.                Next T
  1796.             End If 
  1797.             _APPEAR[2,1]
  1798.             View 
  1799.          Else 
  1800.             REQ["No Such File","Cannot Load","Okay","Okay"]
  1801.          End If 
  1802.       End If 
  1803.    End If 
  1804.    Goto HERE
  1805.    ERR: E=Errn
  1806.    MESS$="Error Number "
  1807.    MESS$=MESS$+Str$(E)
  1808.    M2$="Please Alert Author."
  1809.    M$="Oh" : M2$="No!!!"
  1810.    If E=88
  1811.       M2$="Disk Full"
  1812.    End If 
  1813.    If E=83
  1814.       M2$="Disk not Validated"
  1815.    End If 
  1816.    If E=84
  1817.       M2$="Disk Write Protected"
  1818.    End If 
  1819.    If(E=89) or(E=90) or(E=91)
  1820.       M2$="File is Protected"
  1821.    End If 
  1822.    If E=31
  1823.       M2$="Dodgy IFF Compression"
  1824.    End If 
  1825.    If E=93
  1826.       M2$="Insert Disk"
  1827.    End If 
  1828.    If E=92
  1829.       M2$="Not AmigaDOS"
  1830.    End If 
  1831.    REQ[MESS$,M2$,M$,M1$]
  1832.    Resume HERE : 
  1833.    HERE:
  1834. End Proc
  1835.  
  1836. Procedure RMOVECL[CL]
  1837.    
  1838.    Shared PPEN,BAK
  1839.    On Error Proc ERR
  1840.    Def Fn RED(TTUM)=TTUM/256
  1841.    Def Fn GREEN(TTUM)=(TTUM/16) mod 16
  1842.    Def Fn BLUE(TTUM)=TTUM mod 16
  1843.    
  1844.    Screen 0
  1845.    C=Screen Colour
  1846.    C=C-1
  1847.    If C<4095
  1848.       C=C mod 32
  1849.       For T=0 To C
  1850.          TMP=Colour(T)
  1851.          R= Fn RED(TMP)
  1852.          G= Fn GREEN(TMP)
  1853.          B= Fn BLUE(TMP)
  1854.          If CL=1
  1855.             R=0
  1856.          Else 
  1857.             If CL=2
  1858.                G=0
  1859.             Else 
  1860.                B=0
  1861.             End If 
  1862.          End If 
  1863.          TMP=R*256+G*16+B
  1864.          Colour T,TMP
  1865.       Next T
  1866.    End If 
  1867.    
  1868. End Proc
  1869.  
  1870. Procedure GRID[S]
  1871.    
  1872.    On Error Proc ERR
  1873.    Shared PPEN
  1874.    
  1875.    Screen 0
  1876.    Ink PPEN
  1877.    WD=Screen Width
  1878.    HT=Screen Height
  1879.    For T=0 To WD Step S
  1880.       Draw T,0 To T,HT
  1881.    Next T
  1882.    
  1883.    For T=0 To HT Step S
  1884.       Draw 0,T To WD,T
  1885.    Next T
  1886.    
  1887. End Proc
  1888.  
  1889. Procedure FILE_PAL[C]
  1890.    
  1891.    Screen 0
  1892.    SAV=(C=1)
  1893.    PATHS$="**.**"
  1894.    DEF$=""
  1895.    MESS$="Select a Filename to"
  1896.    If SAV
  1897.       MESS2$="save palette as."
  1898.    Else 
  1899.       MESS2$="load palette as."
  1900.    End If 
  1901.    F$=Fsel$(PATH$,DEF$,MESS$,MESS2$)
  1902.    OK= Not(F$=DEF$)
  1903.    If OK
  1904.       If SAV
  1905.          If Not(Upper$(Right$(F$,4))=".PAL")
  1906.             F$=F$+".PAL"
  1907.          End If 
  1908.       End If 
  1909.       EXT=Exist(F$)
  1910.       If SAV
  1911.          If EXT
  1912.             OK=False
  1913.             REQ["File Already exists","Overwrite?","No","Yes"]
  1914.             OK=(Param=2)
  1915.          End If 
  1916.       Else 
  1917.          If Not EXT
  1918.             OK=False
  1919.             REQ["File Doesn't exist","","Oh","No!!"]
  1920.          End If 
  1921.       End If 
  1922.       If OK
  1923.          If SAV
  1924.             PAL_SAVE[0,F$]
  1925.          Else 
  1926.             PAL_LOAD[0,F$]
  1927.             INIT_CLRS[False]
  1928.             View 
  1929.          End If 
  1930.       End If 
  1931.    End If 
  1932.    
  1933. End Proc
  1934.  
  1935. Procedure PAL_SAVE[SCR,NAME$]
  1936.    TEMP=Screen
  1937.    Screen SCR
  1938.    Bsave NAME$,Screen Base+98 To Screen Base+162
  1939.    Screen TEMP
  1940. End Proc
  1941.  
  1942. Procedure PAL_LOAD[SCR,NAME$]
  1943.    TEMP=Screen
  1944.    Screen SCR
  1945.    Bload NAME$,Screen Base+98
  1946.    Screen TEMP
  1947. End Proc
  1948.  
  1949. Procedure FONTS
  1950.    
  1951.    Hide On 
  1952.    Get Fonts 
  1953.    Show On 
  1954.    Screen Open 1,320,100,2,Lowres
  1955.    Palette 0,$FFF
  1956.    Curs Off 
  1957.    
  1958.    C=0
  1959.    Set Text 0
  1960.    Repeat 
  1961.       Inc C
  1962.       A$=Font$(C)
  1963.    Until A$=""
  1964.    Dec C
  1965.    
  1966.    If C>0
  1967.       PTR=1 : ITALIC=0 : BOLD=0 : UNDER=0
  1968.       View 
  1969.       Repeat 
  1970.          
  1971.          Repeat 
  1972.          Until Mouse Key=0
  1973.          
  1974.          F$=Font$(PTR)
  1975.          F=Instr(F$,".font")
  1976.          If F>0
  1977.             Mid$(F$,F,5)="     "
  1978.          End If 
  1979.          NM$="Name :"+Left$(F$,29)
  1980.          SZ$="Size :"+Mid$(F$,30,4)
  1981.          Cls 0
  1982.          Pen 1 : Locate 1,1 : Print NM$ : Locate 1,2 : Print SZ$
  1983.          Locate 1,4 : Print "<" : Locate 4,4 : Print ">"
  1984.          Locate 7,4 : Print "Okay" : Locate 15,4 : Print "Italic"
  1985.          Locate 25,4 : Print "Bold" : Locate 19,5 : Print "UnderLine"
  1986.          Set Font PTR : Set Text STY : Ink 1
  1987.          Text 20,90,"Aa 123 Ss Mm ?"
  1988.          
  1989.          Repeat 
  1990.          Until Not(Mouse Key=0)
  1991.          
  1992.          X=X Mouse : Y=Y Mouse
  1993.          
  1994.          If Y>80
  1995.             If Y<92
  1996.                If X>134
  1997.                   If X<214
  1998.                      
  1999.                      If X<146
  2000.                         Dec PTR
  2001.                      Else 
  2002.                         If X>157
  2003.                            If X<169
  2004.                               Inc PTR
  2005.                            Else 
  2006.                               If X>182
  2007.                                  FIN=True
  2008.                               End If 
  2009.                            End If 
  2010.                         End If 
  2011.                      End If 
  2012.                      
  2013.                   End If 
  2014.                End If 
  2015.             End If 
  2016.             
  2017.             If Y<98
  2018.                If X>247
  2019.                   If X<360
  2020.                      If Y>90
  2021.                         If X>279
  2022.                            If X<352
  2023.                               UNDER=1-UNDER
  2024.                            End If 
  2025.                         End If 
  2026.                      Else 
  2027.                         If Y>81
  2028.                            If X<295
  2029.                               ITALIC=1-ITALIC
  2030.                            Else 
  2031.                               If X>325
  2032.                                  BOLD=1-BOLD
  2033.                               End If 
  2034.                            End If 
  2035.                         End If 
  2036.                      End If 
  2037.                   End If 
  2038.                End If 
  2039.             End If 
  2040.          End If 
  2041.          
  2042.          STY=ITALIC*4+BOLD*2+UNDER
  2043.          
  2044.          If PTR<1
  2045.             Inc PTR
  2046.          End If 
  2047.          If PTR>C
  2048.             Dec PTR
  2049.          End If 
  2050.          
  2051.       Until FIN
  2052.       
  2053.       Screen Close 1
  2054.       Screen 0
  2055.       Set Font PTR
  2056.       Set Text STY
  2057.       
  2058.    End If 
  2059.    
  2060. End Proc
  2061.  
  2062. Procedure TXT
  2063.    
  2064.    Repeat 
  2065.    Until Mouse Key=0
  2066.    
  2067.    Hide On 
  2068.    Clear Key 
  2069.    TX$="" : X=X Mouse : Y=Y Mouse
  2070.    X=X Screen(X) : Y=Y Screen(Y)
  2071.    Gr Writing 2
  2072.    P=1
  2073.    Repeat 
  2074.       
  2075.       Text X,Y,TX$
  2076.       
  2077.       Repeat 
  2078.          K$=Inkey$
  2079.          OK= Not(K$="")
  2080.       Until OK or Not(Mouse Key=0)
  2081.       
  2082.       Text X,Y,TX$
  2083.       
  2084.       If Not OK
  2085.          X=X Mouse : Y=Y Mouse
  2086.          X=X Screen(X) : Y=Y Screen(Y)
  2087.          FIN=(TX$="")
  2088.       Else 
  2089.          FIN=(K$=Chr$(13))
  2090.          If Not FIN
  2091.             If K$=Chr$(8)
  2092.                If P>0
  2093.                   Dec P
  2094.                   TX$=Left$(TX$,P)
  2095.                End If 
  2096.             Else 
  2097.                TX$=TX$+K$
  2098.                Inc P
  2099.             End If 
  2100.          End If 
  2101.       End If 
  2102.       
  2103.    Until FIN
  2104.    Gr Writing 0
  2105.    Show On 
  2106.    Text X,Y,TX$
  2107.    
  2108. End Proc
  2109.  
  2110. Procedure CYCLE
  2111.    
  2112.    Shared PPEN,BAK
  2113.    
  2114.    A=Min(PPEN,BAK)
  2115.    B=Max(PPEN,BAK)
  2116.    Clear Key 
  2117.    DEL=5
  2118.    UP=True : GO=True : F=False
  2119.    Hide On 
  2120.    REQ["Rotate Colours","","Stop it!","Start it!"]
  2121.    Repeat 
  2122.    Until Mouse Key=0
  2123.    
  2124.    If Param=2
  2125.       Repeat 
  2126.          If Not GO
  2127.             Repeat 
  2128.                K$=Inkey$
  2129.                F=(Mouse Key=0)
  2130.                F= Not F
  2131.             Until F or Not(K$="")
  2132.             S=Scancode
  2133.          End If 
  2134.          
  2135.          If Not F
  2136.             
  2137.             If(S=76) or(S=62)
  2138.                UP=True : GO=True
  2139.             End If 
  2140.             
  2141.             If(S=77) or(S=46)
  2142.                UP=False : GO=True
  2143.             End If 
  2144.             
  2145.             If(S=74) or(S=11)
  2146.                Inc DEL : GO=True
  2147.             End If 
  2148.             
  2149.             If(S=94) or(S=12)
  2150.                If DEL>1
  2151.                   Dec DEL : GO=True
  2152.                End If 
  2153.             End If 
  2154.             
  2155.             If GO
  2156.                GO=False
  2157.                Shift Off 
  2158.                If UP
  2159.                   Shift Up DEL,A,B,1
  2160.                Else 
  2161.                   Shift Down DEL,A,B,1
  2162.                End If 
  2163.             End If 
  2164.          End If 
  2165.          
  2166.       Until(K$=Chr$(13)) or F
  2167.       
  2168.    Else 
  2169.       Shift Off 
  2170.       For T=0 To Screen Colour-1
  2171.          Colour T,CLRS(T)
  2172.       Next T
  2173.    End If 
  2174.    Show On 
  2175.    
  2176. End Proc
  2177.  
  2178. ' You may find the following general purpose procedures useful.
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187. ' Splerge pours on a screen from the top, Source is the number of the  
  2188. ' Screen to be poured from. Dest is the unopened screen to be poured to.   
  2189. ' Speed is obiously the speed of the effect. the faster the messier though!
  2190. ' Autoview should be off before the source screen is loaded, unpacked
  2191. ' or whatever. the source will be closed after the pour. 
  2192. Procedure SPLERGE[SPEED,SOURCE,DEST]
  2193.    If Not SOURCE=DEST
  2194.       Screen SOURCE
  2195.       V=Screen Height : H=Screen Width
  2196.       C=Screen Colour : R=Lowres
  2197.       If C<4096
  2198.          If H>320
  2199.             R=Hires
  2200.          End If 
  2201.          If V>256
  2202.             R=R+Laced
  2203.          End If 
  2204.          Repeat 
  2205.          Until Mouse Key=0
  2206.          Screen Open DEST,H,V,C,R
  2207.          Flash Off : Curs Off 
  2208.          For T=0 To C-1
  2209.             Screen SOURCE : CT=Colour(T)
  2210.             Screen DEST : Colour T,CT
  2211.          Next T
  2212.          View 
  2213.          For LOP=V-SPEED To 0 Step -SPEED
  2214.             For LOP1=0 To LOP Step SPEED
  2215.                If Mouse Key>0
  2216.                   Goto OUCH
  2217.                End If 
  2218.                Screen Copy SOURCE,0,LOP,H,LOP+SPEED To DEST,0,LOP1
  2219.             Next LOP1
  2220.          Next LOP
  2221.       End If 
  2222.    End If 
  2223.    Goto BACK
  2224.    OUCH: Screen Copy SOURCE To DEST
  2225.    Repeat 
  2226.    Until Mouse Key=0
  2227.    BACK:
  2228.    If C<4096
  2229.       Screen Close SOURCE
  2230.    End If 
  2231.    View 
  2232. End Proc
  2233.  
  2234. ' _Appear is a procedure Which I wrote and have submitted to the Amiga 
  2235. ' Shopper AMOS professional Contest. Del is the delay time, type can either
  2236. ' be 0 or 1. 
  2237. Procedure _APPEAR[DEL,TYPE]
  2238.    On Error Goto OHNO
  2239.    Def Fn RED(CLR)=CLR/256
  2240.    Def Fn GREEN(CLR)=(CLR/16) mod 16
  2241.    Def Fn BLUE(CLR)=CLR mod 16
  2242.    If TYPE>0
  2243.       TYPE=1
  2244.    Else 
  2245.       TYPE=0
  2246.    End If 
  2247.    CLRS=Screen Colour
  2248.    If CLRS=4096
  2249.    Else 
  2250.       If CLRS=64
  2251.          CLRS=32
  2252.       End If 
  2253.       CLRS=CLRS-1
  2254.       Dim CRED(CLRS),CGRN(CLRS),CBLU(CLRS)
  2255.       For T=0 To CLRS
  2256.          CLR=Colour(T)
  2257.          CRED(T)= Fn RED(CLR)
  2258.          CGRN(T)= Fn GREEN(CLR)
  2259.          CBLU(T)= Fn BLUE(CLR)
  2260.          Colour T,0
  2261.       Next T
  2262.       View 
  2263.       STAGE=0
  2264.       If TYPE=0
  2265.          STAGE=3
  2266.       End If 
  2267.       Repeat 
  2268.          For S=0 To 15
  2269.             For T=0 To CLRS
  2270.                CLR=Colour(T)
  2271.                R= Fn RED(CLR)
  2272.                G= Fn GREEN(CLR)
  2273.                B= Fn BLUE(CLR)
  2274.                If TYPE=0
  2275.                   If R<CRED(T)
  2276.                      Inc R
  2277.                   End If 
  2278.                   If G<CGRN(T)
  2279.                      Inc G
  2280.                   End If 
  2281.                   If B<CBLU(T)
  2282.                      Inc B
  2283.                   End If 
  2284.                Else 
  2285.                   If STAGE=0
  2286.                      If R<CRED(T)
  2287.                         Inc R
  2288.                      End If 
  2289.                   Else 
  2290.                      If STAGE=1
  2291.                         If G<CGRN(T)
  2292.                            Inc G
  2293.                         End If 
  2294.                      Else 
  2295.                         If B<CBLU(T)
  2296.                            Inc B
  2297.                         End If 
  2298.                      End If 
  2299.                   End If 
  2300.                End If 
  2301.                CLR=R*256+G*16+B
  2302.                Colour T,CLR
  2303.             Next T
  2304.             T=0
  2305.             While T<DEL
  2306.                Wait Vbl 
  2307.                T=T+1
  2308.             Wend 
  2309.          Next S
  2310.          STAGE=STAGE+1
  2311.       Until STAGE>2
  2312.    End If 
  2313.    Goto HERE
  2314.    OHNO: Resume HERE
  2315.    HERE:
  2316. End Proc
  2317.  
  2318. ' From the AMOS Compiler disk. Shows the AMOS message. I have slightly   
  2319. ' changed it to fit in with my program. This is invisible to the user. 
  2320. Procedure _SMALL_COPYRIGHT[YDISPLAY]
  2321.    '
  2322.    '  
  2323.    Hide 
  2324.    Break Off 
  2325.    Screen Open 7,320,24,16,0 : Curs Off : Flash Off : Cls 0
  2326.    Screen Display 7,,-100,,
  2327.    Paste Bob 260,3,6
  2328.    Paper 0 : Pen 7 : Print At(1,1);"This program was written using"
  2329.    Get Sprite Palette 
  2330.    View : Wait Vbl 
  2331.    '
  2332.    For Y=1 To Screen Height/2
  2333.       Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
  2334.       Screen Offset 7,,Screen Height/2-Y
  2335.       View : Wait Vbl 
  2336.    Next 
  2337.    '
  2338.    Wait 100
  2339.    '
  2340.    For Y=Screen Height/2 To 0 Step -1
  2341.       Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
  2342.       Screen Offset 7,,Screen Height/2-Y
  2343.       View : Wait Vbl 
  2344.    Next 
  2345.    '
  2346.    Screen Close 7
  2347.    Break On 
  2348.    Show 
  2349.    '
  2350. End Proc
  2351.  
  2352. ' Wipes the screen s by drawing smaller and smaller boxes of colour 0. 
  2353. ' Then closing the screen. DEL is a delay
  2354. Procedure WIPE[S,DEL]
  2355.    
  2356.    Screen S : Ink 0
  2357.    W=Screen Width : H=Screen Height
  2358.    X1=0 : X2=W
  2359.    Y1=0 : Y2=H
  2360.    DL= Not(DEL=0)
  2361.    Dec DEL
  2362.    Repeat 
  2363.       Box X1,Y1 To X2,Y2
  2364.       If DL
  2365.          For T=0 To DEL
  2366.             Wait Vbl 
  2367.          Next T
  2368.       End If 
  2369.       Inc X1 : Inc Y1
  2370.       Dec X2 : Dec Y2
  2371.       FIN=(Min(X1-1,X2)=X2) or(Min(Y1-1,Y2)=Y2)
  2372.       If Mouse Key>0
  2373.          FIN=True
  2374.       End If 
  2375.    Until FIN
  2376.    Screen Close S
  2377. End Proc
  2378.  
  2379. ' Closes all screens. Used at start to close default screen, and discovered
  2380. ' errors in other procedures which would hav flummoxed me when I compiled
  2381. ' without the default screen option. Closes screens using wipe.
  2382. Procedure SCLOSE
  2383.    
  2384.    S=Screen
  2385.    While S>-1
  2386.       WIPE[S,1]
  2387.       S=Screen
  2388.    Wend 
  2389.    
  2390. End Proc