10 REM *****************
   20 REM Pattern Generator
   30 REM  By Robin Nixon
   40 REM *****************
   50 REM NC100/200 Version
   60 REM Downloaded from Tim's Amstrad NC Users' Site
   70 REM http://www.ncus.org.uk
   80 ON ERROR REPORT:PRINT" at line ";ERL
   90 PROCmenu
  100 DEF PROCgeo
  110 CLS
  120 DIMX(1000):DIMY(1000)
  130 CLS
  140 PRINT:PRINT
  150 INPUT"Input the number of sides. ",N
  160 IF N<3 OR N>100000 GOTO 120
  170 FOR P=0 TO N-1
  180   X(P)=240+67*SIN(P*2*PI/N)
  190   Y(P)=63+60*COS(P*2*PI/N)
  200 NEXT:CLS
  210 FOR J=1 TO N/2
  220   FOR P=0 TO N-1
  230     MOVE X(P),Y(P)
  240     K=(P+J) MOD N
  250     DRAW X(K),Y(K)
  260   NEXT:NEXT
  270 PRINT "Press N for next or Q for quit."
  280 A$=GET$
  290 IF A$="N" THEN 130
  300 IF A$="Q" THEN PROCmenu
  310 DEF PROCpol
  320 CLS
  330 D=30:R=60
  340 INPUT"Number of sides",N
  350 CLS
  360 INPUT"Number of revolutions",T
  370 CLS
  380 FOR K=1 TO T
  390   PROCpoly(40,30,R,R,N,D)
  400   D=D+5:R=R*0.95
  410 NEXT K
  420 PRINT"Press N for next or Q for quit."
  430 A$=GET$
  440 IF A$="Q" THEN PROCmenu
  450 IF A$="N" THEN PROCpol
  460 GOTO 430
  470 END
  480 DEF PROCpoly(XC,YC,XR,YR,N,D)
  490 PROCorigin(XC,YC)
  500 A=2*PI/N:DR=D*PI/180
  510 MOVE XR*COS(DR),YR*SIN(DR)
  520 FOR P=1 TO N
  530   X=XR*COS(P*A+DR)
  540   Y=YR*SIN(P*A+DR)
  550   DRAW X,Y
  560 NEXT P
  570 ENDPROC
  580 DEFPROCorigin(XC,YC)
  590 VDU 29,XC*4;YC*2;
  600 ENDPROC
  610 DEF PROClis
  620 CLS
  630 xc=200:yc=62
  640 INPUT"Type a 3 number combination. (e.g. 13,65,32)",A%,B%,C%
  650 CLS
  660 VDU 29,xc;yc;
  670 FOR angle=0 TO 180 STEP 0.1
  680   :
  690   x=45*SIN(RAD(A%*angle))*COS(RAD(B%*angle))
  700   y=45*SIN(RAD(A%*angle))*SIN(RAD(C%*angle))
  710   IF angle=0 THEN MOVE x,y ELSE DRAW x,y
  720 NEXT angle
  730 PRINT "Press N for next or Q for quit."
  740 A$=GET$
  750 IF A$="N" THEN PROClis
  760 IF A$="Q" THEN PROCmenu
  770 DEF PROCmenu
  780 CLS
  790 PRINT "                MENU OF PROGRAMS."
  800 PRINT
  810 PRINT
  820 PRINT "<1> GEOMETRIC PATTERNS"
  830 PRINT
  840 PRINT "<2> POLYGON PATTERNS"
  850 PRINT
  860 PRINT "<3> LISSAJOUS PATTERNS"
  870 A$=GET$
  880 IF A$="1" THEN PROCgeo
  890 IF A$="2" THEN PROCpol
  900 IF A$="3" THEN PROClis