-c, --color=BOOLEAN: Determines if color will be used (only usable if the terminal supports it). Defaults to using color if available.
-i, --interactive: Ignores all other args and goes into interactive mode, which asks for every possible option.
-m INTEGER: Selects one of the screensaver modes. 1=starfall, 2=flames. Defaults to 1.
The following is not necessary to run the program, but provides a background as to how the starfall screensaver works behind the scenes. In brief, this function is able to tile across the screen by continually incrementing the values of x and y by 1 each, and overflowing whenever x or y is greater than the maximum, and then adding a number when certain conditions occur to prevent problems. Normally, just adding 1 to both x and y infinitely to attempt to tile the screen would return back to the origin whenever lcm of x,y steps have been taken, as lcm%x==0 and lcm%y==0. This is problematic, as in order to tile the entire array, x*y steps must be taken. The only time this occurs is when x and y are relatively prime, as the lcm can be found by multiplying the prime factors of x and y that are not shared in common. This is a rather rare case, and with the most common screen size being 20x80 (with lcm of a mere 80 out of the total 1600 coordinates), a solution had to be found. As briefly mentioned above, the solution is to add a number every time the LCM is reached. It would be easiest to just add 1 each time, but that does not look visually appealing, so the section below describes how a better way of adding a number each time was determined.
x and y can be redefined as some coordinate space composed of the relatively prime factors of x and the relatively prime factors of y. For example, a 20x80 space would be reduced to a 1x4 space. This space must be able to be fully filled, as by definition these two numbers are relatively prime. The space may then be stretched by a common factor n of both x and y. In the example, the space could expand to (15)x(45). Thus there would be (n-1) empty spaces between any two filled spaces due to this stretch, as each coordinate is stretched by a factor of n, leading to the empty spaces between the old 0 and 1 being (0,n1) noninclusive. This process may be repeated, leading to the empty spaces being in (0,nm*...). In the example, this would be (0,4*5)=19 empty spaces between each point originally in the reduced space. In this program, we fill these empty spaces by creating two composites of the common prime factors of x and y, and use that to decide when to step into an empty space and which one to step into. x determines which of the (n-1) spaces to increment by whenever the function would repeat a cycle of coordinates, and then whenever a number of steps equal to the second composite is taken we shift x again by 1. This corresponds to first shifting the coordinate space by the first composite, and then the second composite.