C Create postscript from circle center files C Author: Hugo Pfoertner http://www.pfoertner.org C Version history: C Nov 29 2005 Extended to KN's result files C with potentially omitted small circles C Nov 12 2005 Initial version C parameter ( MMAX=105, xm=310.0, ym=500.0, s=250.0 ) character fnam*11, onam*10 real x(MMAX), y(MMAX), r(MMAX) M = 0 write (*,*) ' N:' read (*,*) N if ( N .lt. 0 ) then M = -N write (*,*) ' M =', M, ' N:' read (*,*) N fnam = 'B_00_00.txt' onam = 'B_00_00.PS' write (fnam(3:4),1000) N write (onam(3:4),1000) N write (fnam(6:7),1000) M write (onam(6:7),1000) M else fnam = 'UCIC00.TXT' onam = 'UCIC00.PS' write (fnam(5:6),1000) N write (onam(5:6),1000) N endif 1000 format ( I2.2 ) open ( unit=10, file=fnam, form='formatted', & status='old', iostat=ios ) if ( ios .ne. 0 ) stop ' Check existence of UCICnn.TXT' if ( M .eq. 0 ) then read (10,*) n, a, c do 10 i = 1, n read (10,*) k, x(i), y(i) 10 continue else read (10,*) n, c a = 1.0 / c do 11 i = M+1, n read (10,*) k, x(i), y(i) x(i) = x(i) * a y(i) = y(i) * a 11 continue endif open ( unit=11, file=onam, form = 'formatted', & status='unknown', recl=120 ) C write prologue write (11,*) '%!PS-Adobe-3.0 EPSF-3.0' write (11,*) '%%Title: ', onam write (11,*) '%%BoundingBox: (atend)' write (11,*) '%%DocumentFonts: Courier' write (11,*) '%%+ Courier-Bold' write (11,*) '%%EndComments' write (11,*) '%%EndProlog' C write a few dictionary entries write (11,*) '20 dict begin' write (11,*) 'gsave' write (11,*) '/rgb { setrgbcolor } bind def' write (11,*) '/np { newpath } bind def' write (11,*) '/m { moveto } bind def' write (11,*) '/s { stroke } bind def' write (11,*) '/lc { setlinecap } bind def' write (11,*) '/lj { setlinejoin } bind def' write (11,*) '/lw { setlinewidth } bind def' write (11,*)'/font { findfont exch scalefont setfont } bind def' C Container circle write (11,*) & 'np 310.000 500.000 250.000 0.000 360.000 arc s' C Scaling do 20 i = M+1, n r(i) = float(i) * s * a x(i) = s * x(i) + xm y(i) = s * y(i) + ym 20 continue C Write filled disks C do 30 i = M+1, n C write (11,1001) x(i), y(i), x(i)+r(i), y(i), C & x(i), y(i), r(i), x(i), y(i) C1001 format ( 'np', 2F9.3, ' m', 2F9.3, ' l', C & 3F9.3, ' 0.0 360.0 arc', C & 2F9.3, ' l f' ) C30 continue C Write surrounding black circles write (11,*) ' 0 0 0 rgb' do 40 i = M+1, n write (11, 1002) x(i), y(i), r(i) 1002 format ( 'np', 3F9.3, ' 0.0 360.0 arc s' ) 40 continue C Write number=circle radius to center of circle C 1-digit numbers write (11,*) ' 12.0 /Courier-Bold font' C Start of tagging dependent on problem size if ( n .lt. 15 ) then nmin = 1 elseif ( n .lt. 30 ) then nmin = 2 elseif ( n .lt. 40 ) then nmin = 3 else nmin = 4 endif nmin = max ( nmin, M+1 ) C do 50 i = nmin, min(n,9) write (11,1003) x(i)-3.0, y(i)-3.0, i 1003 format ( 2F9.3, ' m (', I1,') show' ) 50 continue C 2-digit numbers (if n>9) do 60 i = max(M+1,10), n write (11,1004) x(i)-7.0, y(i)-3.0, i 1004 format ( 2F9.3, ' m (', I2, ') show' ) 60 continue C C Title write (11,*) '20.0 /Courier-Bold font' write (11,1005) n, 1.0/A 1005 format ( ' 50.000 789.000 m (', I2, & ' Circles, Container Radius =', F11.6, ') show' ) C Size of container circle C write (11,1006) 1/A C1006 format ( ' 13.0 /Courier-Bold font', /, C & ' 180.000 240.000 m (Container Radius =', F12.6, C & ') show' ) C Trailer write (11,1007) 1007 format ( 'showpage', /, & 'grestore end', /, '%%Trailer', / & '%%BoundingBox: 10 220 610 820',/,'%%EOF' ) C close ( unit = 11 ) end