#!/bin/sh
#
# randslide: make random patterns
#
awk '

function abs(x) { return (x<0) ? x*-1 : x }


function randint(n) {
	return int(abs(n * rand()))
}
	
function randp() {
	return int(abs(rand()*100))
}

function randcolor() {
	return "color=\"rgb(" randint(255) "," randint(255) "," randint(255) ")\""
}

function randop() {
	return "opacity=\"" randp() "\""
}

function randshape(type, width, height) {
	printf "<%s xp=\"%d\" yp=\"%d\" wp=\"%d\" hp=\"%d\" %s %s />\n", 
		type, randp(), randp(), randint(width), randint(height), randcolor(), randop()
}

function randcircle(radius) {
	printf "<ellipse xp=\"%d\" yp=\"%d\" wp=\"%d\" hr=\"100\" %s %s />\n", 
		randp(), randp(), randint(radius), randcolor(), randop()
}

function randsquare(radius) {
	printf "<rect xp=\"%d\" yp=\"%d\" wp=\"%d\" hr=\"100\" %s %s />\n", 
		randp(), randp(), randint(radius), randcolor(), randop()
}

function randtext(textsize) {
	sp = randint(textsize)+1
	printf "<text xp=\"%d\" yp=\"%d\" sp=\"%d\" %s %s>%d</text>\n", 
		randp(), randp(), sp, randcolor(), randop(), sp
}

function randtriangle(tsize) {

	cx = randp()
	cy = randp()
	delta = randint(tsize)
	if (delta % 2 == 0) {
		delta = -delta
	}
	printf "<polygon xc=\"%g %g %g\" yc=\"%g %g %g\" %s %s/>\n", 
		cx-delta, cx, cx+delta, cy, cy+delta, cy, randcolor(), randop()
}

function randiamond(dsize) {
	cx = randp()
	cy = randp()
	delta = randint(dsize)
	printf "<polygon xc=\"%g %g %g %g\" yc=\"%g %g %g %g\" %s %s/>\n", 
		cx-(delta/2), cx, cx+(delta/2), cx, cy, cy+delta, cy, cy-delta, randcolor(), randop()
}

function randarc(asize) {
	radsize = randint(asize)
	printf "<arc xp=\"%g\" yp=\"%g\" wp=\"%g\" hp=\"%g\" a1=\"%g\" a2=\"%g\" %s %s/>\n", 
		randp(), randp(), radsize, radsize, randint(20), randint(300), randcolor(), randop()
}

function radial(radsize) {
	cx = randp()
	cy = randp()
	
	np = 5
	a = 0
	adiv = 360/np
	for (i=1; i <= np; i++) {
		t = a * (3.14159265/180)
		r = randint(radsize)
		rx[i] = (r * cos(t)) + cx
		ry[i] = (r * sin(t)) + cy
		a += adiv
	}
	np = 4
	printf "<polygon xc=\""
	for (i = 1; i < np; i++) {
		printf "%g ", rx[i]
	}
	printf "%g\" yc=\"", rx[np]
	for (i = 1; i < np; i++) {
		printf "%g ", ry[i]
	}
	printf "%g\" %s %s/>\n", ry[np], randcolor(), randop()
}

BEGIN {
	ntimes = 400
	bg="white"
	srand()
	print "<deck>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randshape("ellipse", 7, 10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randshape("rect", 7, 10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randcircle(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randsquare(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randtext(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randtriangle(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randiamond(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			randarc(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes; iter++) {
			radial(10)
	}
	print "</slide>"
	
	printf "<slide bg=\"%s\">", bg
	for (iter=0; iter < ntimes/3; iter++) {
		randarc(10)
		randiamond(10)
		randtriangle(10)
		randtext(10)
		randsquare(10)
		randshape("rect", 7, 10)
		randshape("ellipse", 7, 10)
		radial(10)
	}
	print "</slide>"

	print "</deck>"
}'
