(islam) .dup .where (.pop .pop) (100 .dict .def) .ifelse .cvx .exec
islam .begin

(stararray1)
((starrad) .exch .def .pushdc 100 0 .translate starline -100 100 3 .5 .exp .mul .translate starline .popdc) .cvx .def

(starline)(.pushdc 12 (starpattern 200 0 .translate) .cvx .rept .popdc ) .cvx .def

(stararray)(.pushdc (!str) .exch .def !str stararray1 0 200 3 .5 .exp .mul .translate !str stararray1 .popdc).cvx .def


(starpattern)(12 4 starrad stargen).cvx .def
 
(outlinestar)
(minit white .color 0 .texture .startpath -8.5 72 .mul  11 72 .mul .enterpoint 8.5 72 .mul  11 72 .mul .enterpoint 8.5 72 .mul -11 72 .mul .enterpoint -8.5 72 .mul -11 72 .mul  .enterpoint .drawarea 12 3dxrotate -15 3dyrotate
m11 m12 m13 m21 m22 m23 m31 m32 m33 .entermatrix 
replace .paint 
(pass 1) =
-1 .texture  black .color 116 stararray
(pass 2) =
0 .texture  white .color 106 stararray
(pass 3) =
-1 .texture black .color 94 stararray
(pass 4) =
0 .texture  white .color 84 stararray).cvx .def

(stargen)
(stargen  takes 3 parameters: No. of points, skip Number,  radius)
(.pushdc
(!nr) .exch .def (!ni) .exch .def (!np) .exch .def (!nc) 1 .def
!np !ni .cvr .div !np !ni .div .cvr .eq 
((!na) 360 !np .cvr .div .def
(!np) .dup .load !ni .div .store 
(!nc) !ni .store (!ni) 1 .store).cvx .if
360 !ni .mul !np .cvr .div (!nd) .exch .def
!na .neg !nc(!na .add .dup (!flfrst) .true .def
.startpath !np (!nd .add .dup .dup .cos !nr .mul .exch .sin !nr .mul  linepts) .cvx .rept .pop linelast .drawarea ).cvx .rept .pop  .popdc)/xdef

(linepts)
(!flfrst 
((!flfy) .exch .def 
 (!flfx) .exch .def
 (!flnx) !flfx .def
 (!flny) !flfy .def (!flfrst) .false .def)
((!floy) !flny .def
 (!flox) !flnx .def
 (!flny) .exch .def
 (!flnx) .exch .def
 (!fldx) !flnx !flox .sub !flnc .div .def
 (!fldy) !flny !floy .sub !flnc .div .def
 !flox !floy !flnc .cvi ( 2 .copy transform .enterpoint !fldx !fldy v2add).cvx .rept .pop .pop)/ifelse).cvx .def

(linelast)
((!floy) !flny .def
 (!flox) !flnx .def
 (!fldx) !flfx !flox .sub !flnc .div .def
 (!fldy) !flfy !floy .sub !flnc .div .def
 !flox !floy !flnc .cvi ( 2 .copy transform .enterpoint !fldx !fldy v2add).cvx .rept .pop .pop).cvx .def

(!flnc) 7. .def
(white)(0 0 255) .cvx .def
(black)(0 0 0) .cvx .def

(centerstar)
( (!strdel) .exch 100 .sub .def 
.startpath 0 strpnt 4 strpnt 8 strpnt .drawarea
.startpath 1 strpnt 5 strpnt 9 strpnt .drawarea
.startpath 2 strpnt 6 strpnt 10 strpnt .drawarea
.startpath 3 strpnt 7 strpnt 11 strpnt .drawarea).cvx .def

(strpnt)(200 .mul !hght !strdel .sub transform .enterpoint).cvx .def


(.translate)((!ty) .exch !ty .add .def (!tx) .exch !tx .add .def).cvx .def

(.pushdc)(!stk !ix .aget .dup 0 !tx .aput  1 !ty .aput (!ix) !ix 1 .add .def !stk !ix .aget .dup 0 !tx .aput  1 !ty .aput).cvx .def

(.popdc)( (!ix) !ix 1 .sub .def !stk !ix .aget .cvx .exec (!ty) .exch .def (!tx) .exch .def).cvx .def
 
(transform)((!yy) .exch !ty .add  .def (!xx) .exch !tx .add  .def 
!sr 
!xx !sclx .mul .sin 
!yy !scly .mul .cos .mul .mul
!sr 
!xx !sclx .mul  .cos 
!yy !scly .mul  .cos .mul .mul
!sr 
!yy !scly .mul .sin .mul .tdtransform .tdpersp).cvx .def

(islaminit)((!ix) 0 .def
(!hght) 300 3 .5 .exp .mul 100 .add .def
(!stk) .dup .where (.pop .pop) 
	( [
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		[ 0 0 ]
		]  .def) .ifelse .cvx .exec
(!sclx) 360 2400. .div .def
(!scly) 80 1000. .div .def
(!sr) 300 .def
(!tx) 0 .def
(!ty) 300 .def
).cvx .def
islaminit
.end