home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 61 / af061a.adf / Macros / ColourC.clssa < prev    next >
Text File  |  1993-07-05  |  3KB  |  165 lines

  1. /***********************************************************************
  2.  GADGET: "'Colour Cycle'" "6" AUTO TYP: "?"
  3.  
  4.  $DAT >>ColourC.clssa<< 04 Jul 1993 - (C) ProDAD Holger Burkarth
  5. ************************************************************************/
  6.  
  7. Options Results
  8. Address clariSSA
  9.  
  10.   FailAt 10
  11.   AltFail=RESULT
  12.  
  13.   GetArea
  14.   PARSE VAR RESULT . "FROM" From "TO" To .
  15.  
  16.   Number=To-From
  17.   IF Number>1 THEN DO
  18.  
  19.     DO FOREVER
  20.       MSRequester "TITLE '*** Colour Cycle ***''Select Effect Mode'",
  21.                   "PTEXT 'Normal Colour Rotation'",
  22.                         "'Reversed Colour Rotation 1'",
  23.                         "'Reversed Colour Rotation 2'"
  24.       IF RC~=0 THEN LEAVE
  25.       Mode=RESULT
  26.  
  27.       COLRequest "FROM 0 TO 1 TITLE '*** Colour Cycle ***''Set Colour Range.'"
  28.       IF RC~=0 THEN LEAVE
  29.       ListG=RESULT
  30.       RevList=ListG
  31.       PARSE VAR ListG SColour ListG
  32.       EColour=SColour
  33.       DO UNTIL ListG=""
  34.         PARSE VAR ListG EColour ListG
  35.       END
  36.  
  37.       IF SColour = EColour THEN DO
  38.         Message "'Colour range must include''at least two colours.'"
  39.         LEAVE
  40.       END
  41.  
  42.       INTRequest "'*** Colour Cycle ***''Number of colour cycles which are'",
  43.                  "'to be created in the''Animation range.'",
  44.                  "'(1 cycle == "EColour-SColour")'"Number
  45.       IF RC~=0 THEN LEAVE
  46.       Red=RESULT
  47.       IF Red<1 THEN DO
  48.         Message "'Entered value is''not acceptable!'"
  49.         LEAVE
  50.       END
  51.  
  52.       IF Mode=2 THEN DO
  53.        RevList=RollRevList(TRUNC((EColour+SColour)/2),SColour,EColour)
  54.       END
  55.       ELSE IF Mode=3 THEN DO
  56.        RevList=RollRevList2(SColour,EColour)
  57.       END
  58.  
  59.  
  60.       ViewFrame COPS From
  61.       GetColor RevList
  62.       ListC=RESULT
  63.       Pos=1
  64.       M=0
  65.       DO UNTIL From>To
  66.         n=TRUNC(Pos*Red/Number+0.5)
  67.         ListG=RollList(n,SColour,EColour)
  68.  
  69.         List=""
  70.         DO UNTIL ListC=""
  71.           PARSE VAR ListG n ListG
  72.           PARSE VAR ListC x r g b ListC
  73.           List=List n r g b
  74.         END
  75.  
  76.         SetColor List
  77.         Record COPS
  78.         IF RC~=0 THEN LEAVE
  79.         From=From+1
  80.         Pos=Pos+1
  81.         ViewFrame COPS From
  82.         IF RC~=0 THEN LEAVE
  83.         GetColor RevList
  84.         ListC=RESULT
  85.       END
  86.  
  87.       LEAVE
  88.     END
  89.   END
  90.   ELSE Message "'At least 2 frames must be''chosen for Colour Cycling.'"
  91.  
  92.   FailAt AltFail
  93. exit
  94.  
  95.  
  96.  
  97. RollList: procedure
  98. DO
  99.   ARG n,Start,Last
  100.  
  101.   x=Start+n
  102.   n=Start
  103.   List=""
  104.   DO UNTIL n>Last
  105.     x=((x-Start+1) // (Last-Start+1)) + Start
  106.     List=List x
  107.     n=n+1
  108.   END
  109.  
  110.   RETURN (List)
  111. END
  112.  
  113.  
  114.  
  115. RollRevList: procedure
  116. DO
  117.   ARG n,Start,Last
  118.  
  119.   List=""
  120.   l=Start - n
  121.   x=Start
  122.   ad=1
  123.   DO UNTIL x > Last
  124.     f=Start+l
  125.     IF f > Last THEN  f=(f-Start) - (Last-Start) + Start
  126.     IF f < Start THEN f=(Last-Start) + (f-Start) + Start + 1
  127.     List=List f
  128.  
  129.     if l=0 THEN ad=-1
  130.     l=l+ad
  131.     x=x+1
  132.   END
  133.  
  134.   RETURN (List)
  135. END
  136.  
  137.  
  138.  
  139.  
  140. RollRevList2: procedure
  141. DO
  142.   ARG Start,Last
  143.  
  144.   List=""
  145.   n=Last-Start+1
  146.   l=Start
  147.  
  148.   DO UNTIL l > Last
  149.     List=List l
  150.     l=l+2
  151.     n=n-1
  152.   END
  153.  
  154.   IF l-2 = Last THEN l=l-3
  155.   ELSE               l=l-1
  156.  
  157.   DO UNTIL n<=0
  158.     List=List l
  159.     l=l-2
  160.     n=n-1
  161.   END
  162.  
  163.   RETURN (List)
  164. END
  165.