glenda.party
term% ls -F
term% cat index.txt
MOTO(9.1)                                                            MOTO(9.1)



NAME
       moto - create animation scripts

SYNOPSIS
       fb/moto [ -fstart end ] [ -sskip ] [ file [ arg ...  ] ]

DESCRIPTION
       Moto  is a command generator tailored for an animator's needs.  Its in‐
       put is a concise description of the animation to be produced; its  out‐
       put  is  a  command file suitable for input to rc or some other command
       interpreter.  Its arguments are an optional file name containing a moto
       program  (default  standard  input) and list of numeric parameters that
       are made available to the program.

       A moto program consists of a list of groups of commands  guarded  by  a
       range  of  frames.   Groups  may  contain  parameter ranges enclosed in
       brackets [].  For each frame, moto  checks  each  group  and  processes
       those whose guards include the current frame number:
            1,6: clr 128
            1,4: clr -w [0,30] [0,30] [100,130] [100,130]
            3,6: clr -w [100,70] [100,70] [130,100] [130,100] 255
       This generates
            clr 128
            clr -w 0 0 100 100
            clr 128
            clr -w 10 10 110 110
            clr 128
            clr -w 20 20 120 120
            clr -w 100 100 130 130 255
            clr 128
            clr -w 30 30 130 130
            clr -w 90 90 120 120 255
            clr 128
            clr -w 80 80 110 110 255
            clr 128
            clr -w 70 70 100 100 255

       Two  special  guards, BEGIN and END, specify actions to be taken before
       and after processing frames.  Moto allows complex  computations  inside
       parameter brackets:
            1,10:     clr [127.5*(1-cos([0,360]))]
       This generates
            clr 0
            clr 29.82933350233
            clr 105.35985734747
            clr 191.25
            clr 247.3108091502
            clr 247.3108091502
            clr 191.25
            clr 105.35985734747
            clr 29.82933350233
            clr 0

       Expressions  may  include constants and variables.  All values are dou‐
       ble-precision floating point numbers.  The operators =, /, +,  -  (both
       unary and binary), <, >, <=, >=, ==, !=, ?: and !, all with their mean‐
       ings as in C, except that all results are coerced to double.   The  re‐
       sult  of  a%b is a-b*(int)(a/b).  The result of a&&b is a?b:a.  The re‐
       sult of a||b is a?a:b.  The exponentiation operator is ^, also  written
       **.   The  expression  [a,b]  varies from a to b, linearly as the frame
       number varies between the guards of the group  containing  the  expres‐
       sion.   The  expression  a[b,c]  has  the value a*b+(1-a)*c.  Its value
       varies from b to c as a varies from 0 to 1.  The expression $i has  the
       value  of  the i'th parameter following the file name on moto's command
       line.

       The precedence of operators is, from lowest to highest:
            =
            ? :
            ||
            &&
            < <= == != > >=
            + -
            * / %
            [ ]
            ^ **
            - (unary) ! $
       Expressions may be parenthesized to alter precedence.

       The following math functions are available:
            fabs floor ceil sqrt hypot sin cos tan
            asin acos atan exp log log10 sinh cosh tanh
       All math functions are as described in the C library, except  that  an‐
       gles  are  measured in degrees rather than radians for the trig and in‐
       verse trig functions.  In addition hypot may have two  or  three  argu‐
       ments,  atan  may  take  two  arguments instead of one, and may also be
       spelled atan2.

       For parameterization, and to allow even more complex computations, moto
       has  variables, assignment and computation groups.  A computation group
       causes no output; rather its body is a group of expressions to be eval‐
       uated for their side effects.  It is distinguished from a command group
       by having a double colon separating the guard and body:
            BEGIN::   n=5
            1,n::     x=512*sin([0,90])
            1,n: pcp -w 0 0 [x] 488 pic.[1,n] %0
       This generates
            pcp -w 0 0 0 488 pic.1 %0
            pcp -w 0 0 195.93391737093 488 pic.2 %0
            pcp -w 0 0 362.03867196751 488 pic.3 %0
            pcp -w 0 0 473.02632064578 488 pic.4 %0
            pcp -w 0 0 512 488 pic.5 %0

       Upon occasion it is useful to split moto's output into  several  files,
       under program control.  A group that is separated from its guards by an
       at-sign @ instead of a colon names a file into which subsequent  output
       is to be written.  For example,
            1,5@ file.[1,5]
            1,5: This is file.[1,5].
       creates  5 files, with names file.1, ..., file.5.  Each file's contents
       will announce its name.

       As is true for all sufficiently large programs, moto has  a  shell  es‐
       cape.   The text of a group separated from its guards by an exclamation
       point !  causes a copy of rc(1) to be started.   The  group's  text  is
       sent  to  rc's  standard  input,  and its standard output inserted into
       moto's output.

SOURCE
       /sys/src/fb/moto.y



                                                                     MOTO(9.1)