|
|
1.1 ! root 1: # WORM(6) ! 2: # ! 3: # Random worm ! 4: # ! 5: # Stephen B. Wampler ! 6: # ! 7: # Last modified 8/14/84 ! 8: # ! 9: ! 10: # NOTE: This program requires the procedures in gpack.2. It ! 11: # should be translated as follows: ! 12: # ! 13: # icont worm.icn /usr/icon/ilib/gpack.u1 ! 14: # ! 15: global BLUE, WHITE ! 16: global VECTOR ! 17: ! 18: procedure main(args) ! 19: local colpt, bkcolr, count, length, r, arg, a, pt1, pt2 ! 20: ginit() ! 21: colpt := WHITE ! 22: bkcolr := BLUE ! 23: count := 1000 ! 24: length := 10 ! 25: r := 0 ! 26: every arg := !args do case arg[1+:2] of { ! 27: "-f" : colpt := integer(arg[3]) # foreground color ! 28: "-b" : bkcolr := integer(arg[3]) # background color ! 29: "-c" : count := integer(arg[3:0]) # duration of worm ! 30: "-l" : length := integer(arg[3:0]) # length of worm ! 31: "-r" : r := integer(arg[3:0]) # random number seed ! 32: "-h" : stop("usage: worm [-fn] [-bn] [-cn] [-ln] [-rn]") ! 33: } ! 34: ! 35: if colpt == bkcolr then { ! 36: colpt := WHITE ! 37: bkcolr := BLUE ! 38: } ! 39: ! 40: a := point(XMAX/2,YMAX/2) # start in screen center ! 41: ! 42: every (pt1|pt2) := create # two sequences of the same lines ! 43: 2(&random :=: r,|draw(line(.a,a := nextpt(a))),&random <-> r) ! 44: ! 45: bckgrnd(bkcolr) ! 46: erase() ! 47: ! 48: every _noroll() & _plot() do { ! 49: mode(VECTOR) ! 50: color(colpt) ! 51: every 1 to length do @pt1 ! 52: every 1 to count do {color(colpt);@pt1;color(bkcolr);@pt2} ! 53: color(bkcolr) ! 54: every 1 to length do @pt2 ! 55: movcur(20,20) ! 56: color(colpt) ! 57: } ! 58: ! 59: end ! 60: ! 61: procedure nextpt(pt) ! 62: local x,y ! 63: ! 64: repeat { ! 65: x := pt.x + (?32767\1)%21 - 10 ! 66: if 0 < x < XMAX then break ! 67: } ! 68: ! 69: repeat { ! 70: y := pt.y + (?32767\1)%21 - 10 ! 71: if 0 < y < YMAX then break ! 72: } ! 73: ! 74: return point(x,y) ! 75: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.