; ;------------------------------------------------------------------- ; function psopen,flnm,encap set_plot,'ps' on_ioerror,bad device,/color,bits_per_pixel=8,filename=flnm,xsize=7.,ysize=7.,$ yoffset=3.,/inches,/portrait,encapsul=encap print,' ' if encap then $ print,'Opened ENCAPSULATED postscript device: flnm=',flnm $ else $ print,'Opened (non-encapsulated) postscript device: flnm=',flnm set_plot,'X' return,0 ; bad: print,' ' print,'>>> Error opening postscript file ',flnm print,' IDL error msg: ',!err_string set_plot,'X' return,-1 end ; ;------------------------------------------------------------------- ; pro trunc_event, ev common trunc, oktotrunc widget_control,ev.id,get_uvalue=uval case uval of "OPEN": oktotrunc = 1 "NO OPEN": oktotrunc = 0 else: print,'trunc_event: unknown user value=',uval endcase widget_control,/destroy,ev.top ; quit button return end ; ;------------------------------------------------------------------- ; pro popup_trunc,flnm common trunc, oktotrunc truncbase = widget_base(title='FILE TRUNCATION WARNING',/column,$ xoffset=400,yoffset=400) base = widget_base(truncbase,/frame,/column) wtxt_warning = widget_text(base,xsize=40,ysize=3,value=string(format=$ "('WARNING:',/,'FILE ',a,/'WILL BE TRUNCATED IF OPENED')",flnm)) base = widget_base(truncbase,/frame,column=2) wbut_ok = widget_button(base,value="OPEN (TRUNCATE)",uvalue="OPEN") wbut_cancel = widget_button(base,value="DO NOT OPEN FILE",uvalue="NO OPEN") widget_control,truncbase,/realize widget_control,wbut_cancel,/input_focus xmanager,'trunc',truncbase,/modal return end ; ;------------------------------------------------------------------- ; pro ps_event, ev @pltdat.h common com_mkps, wtxt_psname,wbgp_openps,wbgp_wrps common trunc, oktotrunc ; widget_control,ev.id,get_uvalue=uval case uval of ; ; Open or close a file: ; "BGP_OPENPS": begin case ev.value of 0: begin ; open file files = findfile(psdev.psname,count=nf) if nf gt 1 then begin print,'>>> too many file names -- must specify unique file name' print,' The following file names match ',psdev.psname,':' for i=0,nf-1 do print,files(i) widget_control,wbgp_openps,set_value=1 widget_control,wbgp_wrps,set_value=1 widget_control,wtxt_psname,set_value=psdev.psname return endif if nf eq 1 then begin oktotrunc = 0 popup_trunc,psdev.psname if oktotrunc le 0 then begin print,'Did NOT open postscript file ',psdev.psname widget_control,wbgp_openps,set_value=1 ; set close widget_control,wbgp_wrps,set_value=1 ; set no-write return endif endif stat = psopen(psdev.psname,psdev.encap) if stat eq 0 then begin ; opened file psdev.openps = 1 & psdev.writeps = 1 widget_control,wbgp_wrps,set_value=0 ; set open psdev.ifrps = 1 endif else begin ; failed to open file widget_control,wbgp_openps,set_value=1 ; set close widget_control,wbgp_wrps,set_value=1 ; set no-write endelse return end 1: begin ; close stat = psclose(psdev.psname) psdev.openps = 0 & psdev.writeps = 0 widget_control,wbgp_wrps,set_value=1 return end else: endcase end ; ; Write or no write to file: ; "BGP_WRPS": begin case ev.value of 0: begin ; write if psdev.openps le 0 then begin print,'>>> Must open a postscript file first' widget_control,wbgp_wrps,set_value=1 return endif psdev.writeps = 1 print,'Will write each frame to postscript file ',psdev.psname end 1: begin ; no write psdev.writeps = 0 print,'Will NOT write frames to postscript file' end endcase return end ; ; Encapsulated? ; "BGP_ENCAP": begin widget_control,wtxt_psname,get_value=psfile if psdev.encap le 0 then begin psdev.encap = 1 print,'Will make encapsulated postscript file' pspos = strpos(psdev.psname,'.ps') print,'pspos=',pspos,' len=',strlen(psdev.psname) if pspos+2 eq strlen(psdev.psname)-1 then begin name = psdev.psname strput,name,'.ep',pspos & name = name+'s' psdev.psname = name widget_control,wtxt_psname,set_value=psdev.psname print,'Note: changed suffix of postscript file from ps to eps' print,' new ps file name = ',psdev.psname endif endif else begin psdev.encap = 0 print,'Will NOT make encapsulated postscript file' epspos = strpos(psdev.psname,'.eps') print,'epspos=',epspos,' len=',strlen(psdev.psname) if epspos+3 eq strlen(psdev.psname)-1 then begin name = psdev.psname strput,name,'.ps ',epspos psdev.psname = strcompress(name,/remove_all) widget_control,wtxt_psname,set_value=psdev.psname print,'Note: changed suffix of postscript file name from eps to ps' print,' new ps file name = ',psdev.psname endif endelse return end ; ; File spec has been entered for new postscript file: ; "TXT_PSNAME": begin widget_control,ev.id,get_value=value tmpname = value(0) files = findfile(tmpname,count=nf) if nf gt 1 then begin print,'>>> too many file names -- must specify unique file name' print,' The following file names match ',psdev.psname,':' for i=0,nf-1 do print,files(i) widget_control,wbgp_openps,set_value=1 widget_control,wbgp_wrps,set_value=1 widget_control,ev.id,set_value=psdev.psname return endif ; ; Specified file exists -- get permission to truncate, or else return: ; if nf eq 1 then begin oktotrunc = 0 popup_trunc,tmpname if oktotrunc le 0 then begin print,'Did NOT open postscript file ',tmpname widget_control,wbgp_openps,set_value=1 widget_control,wbgp_wrps,set_value=1 return endif endif stat = psopen(tmpname,psdev.encap) if stat eq 0 then begin psdev.psname = tmpname psdev.openps = 1 & psdev.writeps = 1 psdev.ifrps = 1 widget_control,wbgp_openps,set_value=0 widget_control,wbgp_wrps,set_value=0 return endif else begin widget_control,wbgp_openps,set_value=1 widget_control,wbgp_wrps,set_value=1 return endelse end else: print,'ps_event: unknown user value = ',uval endcase return end