;+ ; Project : SOHO - CDS ; ; Name : REGISTER ; ; Purpose : View of SOHO-CDS SFDU Registation Packets ; ; Explanation : Produces an SFDU template picture for the registration packets ; for the SOHO-CDS data archive. ; ; Use : REGISTER, INSTRUMENT ; ; Inputs : None. ; ; Opt. Inputs : INSTRUMENT: The name of the SOHO instrument for which the ; registration packet template is drawn. Note that ; there must exist a file that contains the registration ; information, i.e., for 'CDS', a file "register.cds" ; would have to exist in the current directory, likewise ; for 'SUMER', the file "register.sumer" must exist. ; ; Outputs : None. ; ; Opt. Outputs: None. ; ; Keywords : OUTPUT: 'PS': The output is a standard postscript file. ; ; 'EPS': The output is an encapsulated postscript file. ; The default is to make both a PS and an EPS ; file. ; ; ADATE: If set, print the date passed in the form "20-Nov-1995" ; instead of determining today's date from the system. ; ; ERRMSG: If defined and passed, then any error messages will ; be returned to the user in this parameter rather than ; being handled by the IDL MESSAGE utility. If no ; errors are encountered, then a null string is ; returned. In order to use this feature, the string ; ERRMSG must be defined first, e.g., ; ; ERRMSG = '' ; REGISTER, 'cds', OUTPUT='EPS', ERRMSG=ERRMSG ; IF ERRMSG(0) NE '' THEN ... ; ; Calls : DATATYPE, ROTPIC ; ; Common : None. ; ; Restrictions: None. ; ; Side effects: None. ; ; Category : Data Handling, I/O, FITS, SFDU, Generic ; ; Prev. Hist. : None. ; ; Written : Donald G. Luttermoser, GSFC/ARC, 23 October 1995 ; ; Modified : Version 1, Donald G. Luttermoser, GSFC/ARC, 23 October 1995 ; Initial program. ; ; Version : Version 1, 23 October 1995. ; ;- ; PRO REGISTER, INSTRUMENT, OUTPUT=OUTPUT, ADATE=ADATE, ERRMSG=ERRMSG ; ON_ERROR, 2 ; Return to caller if error is encountered. MESSAGE = '' ; Set to non-null string if error is encountered. ; ; Check input. ; IF N_PARAMS() GT 1 THEN BEGIN MESSAGE = 'Syntax: REGISTER, INSTRUMENT' GOTO, HANDLE_ERROR ENDIF ; IF N_PARAMS() EQ 1 THEN BEGIN IF DATATYPE(INSTRUMENT, 1) NE 'String' THEN BEGIN MESSAGE = 'INSTRUMENT must be a string (e.g., "CDS", "SUMER").' GOTO, HANDLE_ERROR ENDIF ENDIF ELSE BEGIN INSTRUMENT = 'UNKNOWN' READ, 'Enter the SOHO instrument name for the template: ', INSTRUMENT PRINT, ' ' ENDELSE INSTRUMENT = STRUPCASE(INSTRUMENT) ; HARDCOPY = ['PS', 'EPS'] IF KEYWORD_SET(OUTPUT) $ THEN HCOPY = WHERE(HARDCOPY EQ STRTRIM(STRUPCASE(OUTPUT),2)) > 0 $ ELSE HCOPY = 2 ; Default is for REGISTER to produce both types. ; ; Define internal parameters. ; ASK = 'Y' ATEXT = 'Readin text' MAXLINES = 10 ; Maximum number of lines per box. NB = 0 ; Number of boxes on template. TERM = STRUPCASE(!D.NAME) TALKTEXT = ['.', ' and back to the original box.'] ; ; Get today's date. ; IF KEYWORD_SET(ADATE) THEN BEGIN TDATE = '!17'+STRTRIM(ADATE,2) ENDIF ELSE BEGIN ADATE = SYSTIME() DATLEN = STRLEN(ADATE) BLK1 = STRPOS(ADATE, ' ') BLK2 = STRPOS(ADATE, ' ', BLK1+1) BLK3 = STRPOS(ADATE, ' ', BLK2+1) ADAY = STRMID(ADATE, BLK2+1, BLK3-BLK2-1) AMONTH = STRMID(ADATE, BLK1+1, BLK2-BLK1-1) AYEAR = STRMID(ADATE, DATLEN-4, 4) TDATE = '!17'+ADAY+'-'+AMONTH+'-'+AYEAR ENDELSE ; ; Arrowheads. ; UARR = FLTARR(2,4) & DARR = UARR & RARR = UARR & LARR = UARR UARR(0,*) = [0., -2.5, 2.5, 0.] & UARR(1,*) = [0., -5., -5., 0.] DARR(0,*) = [0., -2.5, 2.5, 0.] & DARR(1,*) = [0., 5., 5., 0.] RARR(0,*) = [0., -5., -5., 0.] & RARR(1,*) = [0., 2.5, -2.5, 0.] LARR(0,*) = [0., 5., 5., 0.] & LARR(1,*) = [0., 2.5, -2.5, 0.] SCARR = 0.7 UARR = UARR*SCARR & DARR = DARR*SCARR RARR = RARR*SCARR & LARR = LARR*SCARR ; ; Read in the box text data. Note that the input filename must be in the form ; "register.instrument" where "instrument" is one of the SOHO instruments, ; i.e., cds, sumer, etc. ; FILENAME = 'register.' + STRLOWCASE(STRTRIM(INSTRUMENT, 2)) ; OPENR, URD, FILENAME, /GET_LUN READF, URD, NB ; ; Define box arrays. ; X_YBOX = FLTARR(2, NB) XBOX = FLTARR(4, NB) & YBOX = XBOX XBSZ = 10. & YBSZ = 15. TEXT = STRARR(NB, MAXLINES) & TEXTTYPE = TEXT NUML = INTARR(NB) & Q3L = NUML ; NEXTLINE: READF, URD, ATEXT & ATEXT = STRTRIM(ATEXT,2) LENTEXT = STRLEN(ATEXT) BOXPOS = STRPOS(STRLOWCASE(ATEXT), 'box:') TITPOS = STRPOS(STRLOWCASE(ATEXT), 'title:') FILPOS = STRPOS(STRLOWCASE(ATEXT), 'file:') ADIPOS = STRPOS(STRLOWCASE(ATEXT), 'adidname:') TALPOS = STRPOS(STRLOWCASE(ATEXT), 'talk:') ASTPOS = STRPOS(STRLOWCASE(ATEXT), '***') ; IF BOXPOS EQ 0 THEN BEGIN IB = FIX(STRMID(ATEXT, 5, LENTEXT-5))-1 IL = -1 ENDIF ELSE BEGIN IF IL GE MAXLINES THEN BEGIN PRINT, 'Increase MAXLINES and rerun, IL = ', IL RETURN ENDIF IF TITPOS EQ 0 THEN BEGIN TEXTTYPE(IB, IL) = 'Title' TEXT(IB, IL) = STRMID(ATEXT, 7, LENTEXT-7) ENDIF ELSE BEGIN IF FILPOS EQ 0 THEN BEGIN TEXTTYPE(IB, IL) = 'File' TEXT(IB, IL) = 'File: ' + STRMID(ATEXT, 6, LENTEXT-6) ENDIF ELSE BEGIN IF ADIPOS EQ 0 THEN BEGIN TEXTTYPE(IB, IL) = 'ADIDNAME' TEXT(IB, IL) = 'ADIDNAME: ' + $ STRMID(ATEXT, 10, LENTEXT-10) ENDIF ELSE BEGIN IF (TALPOS EQ -1) AND (ASTPOS EQ -1) THEN BEGIN TEXTTYPE(IB, IL) = 'Additional' TEXT(IB, IL) = STRMID(ATEXT, 0, LENTEXT) ENDIF ENDELSE ENDELSE ENDELSE ENDELSE IL = IL + 1 IF TALPOS EQ 0 THEN TALK = ATEXT ELSE GOTO, NEXTLINE FREE_LUN, URD ; ; Find number of text lines in each box. ; FOR I = 0, NB-1 DO BEGIN LCT = 0 FOR J = 0, MAXLINES-1 DO IF TEXT(I, J) NE '' THEN LCT = LCT + 1 NUML(I) = LCT IF NUML(I) LE 3 THEN Q3L(I) = 1 ELSE BEGIN IF NUML(I) GE 7 THEN Q3L(I) = -2 ELSE Q3L(I) = 0 ENDELSE ENDFOR ; ; Open window. ; IF TERM EQ 'X' THEN BEGIN WINDOW, 0, TITLE='SFDU Registration for the SOHO - '+INSTRUMENT, $ XSIZE=733, YSIZE=567 PLOT, [0.,100.], [0.,100.], XSTYLE=1+4+8, YSTYLE=1+4+8, $ BACKGROUND=255, /NODATA COL = 0 ENDIF ELSE BEGIN PLOT, [0.,100.], [0.,100.], XSTYLE=1+4+8, YSTYLE=1+4+8, /NODATA COL = 255 ENDELSE ; MTITLE = '!17View of the SOHO-'+INSTRUMENT+' SFDU Registration Packets' XYOUTS, 50., 100., MTITLE, ALIGN=0.5, SIZE=1.3, COLOR=COL XYOUTS, 50., 96., TDATE, ALIGN=0.5, SIZE=0.9, COLOR=COL ; ; Figure out the communication paths. ; IPATH = 0 & COMMA = 0 TALK = STRMID(TALK, 6, STRLEN(TALK)-6) TALK = ' ' + STRTRIM(TALK,2) + ',' NEXTTALK: COMMA = STRPOS(TALK, ',', COMMA+1) IF COMMA NE -1 THEN BEGIN IPATH = IPATH + 1 GOTO, NEXTTALK ENDIF IF IPATH EQ 0 THEN BEGIN IF STRLEN(TALK) GT 1 THEN IPATH = 1 ENDIF IF IPATH GT 0 THEN BEGIN XPATH = FLTARR(3, IPATH) & YPATH = XPATH TALKPATH = INTARR(2, IPATH) & TALKBACK = STRARR(IPATH) TALKREG = INTARR(IPATH) XARROW = FLTARR(4, IPATH) & YARROW = XARROW XBARROW = XARROW & YBARROW = YARROW ; COMMA = 0 & IP = -1 WHILE IP LT IPATH DO BEGIN IP = IP + 1 COMOLD = COMMA COMMA = STRPOS(TALK, ',', COMMA+1) IF COMMA NE -1 THEN BEGIN BOTHPOS = STRPOS(TALK, '<>', COMOLD) IF BOTHPOS EQ -1 THEN BEGIN LTPOS = STRPOS(TALK, '<', COMOLD) IF LTPOS EQ -1 THEN BEGIN GTPOS = STRPOS(TALK, '>', COMOLD) IF GTPOS EQ -1 THEN BEGIN PRINT, 'Unknown path descriptor!' RETURN ENDIF ELSE BEGIN TALKPATH(0, IP) = FIX(STRMID(TALK, $ COMOLD+1, GTPOS-COMOLD-1)) TALKPATH(1, IP) = FIX(STRMID(TALK, $ GTPOS+1, COMMA-GTPOS-1)) TALKBACK(IP) = 0 ENDELSE ENDIF ELSE BEGIN TALKPATH(1, IP) = FIX(STRMID(TALK, COMOLD+1, $ LTPOS-COMOLD-1)) TALKPATH(0, IP) = FIX(STRMID(TALK, LTPOS+1, $ COMMA-LTPOS-1)) TALKBACK(IP) = 0 ENDELSE ENDIF ELSE BEGIN TALKPATH(0, IP) = FIX(STRMID(TALK, COMOLD+1, $ BOTHPOS-COMOLD-1)) TALKPATH(1, IP) = FIX(STRMID(TALK, BOTHPOS+2, $ COMMA-BOTHPOS-2)) TALKBACK(IP) = 1 ENDELSE ENDIF ENDWHILE ENDIF ; FOR I = 0, NB-1 DO BEGIN PRINT, 'Move cursor to desired box location and depress right mouse '+$ 'button.' PRINT, ' >>>>> This box is the ' + TEXT(I, 0) CURSOR, XC, YC WAIT, 1 X_YBOX(0, I) = XC & X_YBOX(1, I) = YC ; Box height scale: YSC = FLOAT(NUML(I))/4. ; Box width scale: XSC = MAX(STRLEN(STRTRIM(TEXT(I, *),2)))/8. ; Lower left box: XBOX(0, I) = XC - XSC*XBSZ/2. & YBOX(0, I) = YC - YSC*YBSZ/2. ; Upper left box: XBOX(1, I) = XC - XSC*XBSZ/2. & YBOX(1, I) = YC + YSC*YBSZ/2. ; Upper right box: XBOX(2, I) = XC + XSC*XBSZ/2. & YBOX(2, I) = YC + YSC*YBSZ/2. ; Lower right box: XBOX(3, I) = XC + XSC*XBSZ/2. & YBOX(3, I) = YC - YSC*YBSZ/2. ; OPLOT, [XBOX(*,I), XBOX(0,I)], [YBOX(*,I), YBOX(0,I)], THICK=2, $ COLOR=COL, /NOCLIP ; ; Print the text: ; TOP = X_YBOX(1,I) + FLOAT(NUML(I))*1. - 1.0*Q3L(I) YSEP = 3. FOR J = 0, NUML(I)-1 DO BEGIN CASE TEXTTYPE(I, J) OF 'Title': BEGIN PRTEXT = '!6' + STRTRIM(TEXT(I,J),2) END 'ADIDNAME': BEGIN PRTEXT = '!6' + STRTRIM(TEXT(I,J),2) END 'File': BEGIN PRTEXT = '!5' + STRTRIM(TEXT(I,J),2) END ELSE: BEGIN PRTEXT = '!5' + STRTRIM(TEXT(I,J),2) END ENDCASE XYOUTS, X_YBOX(0,I), TOP-YSEP*J, PRTEXT, SIZE=0.8, ALIGN=0.5, $ COLOR=COL ENDFOR ; ; Include the Box ID for help in drawing the paths. ; XYOUTS, XBOX(0, I)+0.3, YBOX(0, I)+0.7, '!3(' + $ STRTRIM(STRING(I+1),2) + ')', COLOR=COL, SIZE=0.6 ENDFOR PRINT, ' ' ; FOR I = 0, IPATH-1 DO BEGIN PRINT, 'Talk path #' + STRTRIM(STRING(I+1),2) + ' is box ' + $ STRTRIM(STRING(TALKPATH(0,I)),2) + $ ' to box ' + STRTRIM(STRING(TALKPATH(1,I)),2) + $ TALKTEXT(TALKBACK(I)) PRINT, 'Move cursor to desired "knee" location of path and hit left '+$ 'button.' PRINT, ' (Depress right button for "straight" path!)' CURSOR, XC, YC WAIT, 1 PRINT, '*************************************************************' IF !ERR EQ 1 THEN BEGIN ; ; Origin of the talk line. ; IF (XC GE XBOX(0, TALKPATH(0, I)-1)) AND $ (XC LE XBOX(3, TALKPATH(0, I)-1)) THEN BEGIN XPATH(0, I) = XC IF YC LE YBOX(0, TALKPATH(0, I)-1) THEN BEGIN YPATH(0, I) = YBOX(0, TALKPATH(0, I)-1) XBARROW(*, I) = UARR(0, *) YBARROW(*, I) = UARR(1, *) ENDIF ELSE BEGIN YPATH(0, I) = YBOX(1, TALKPATH(0, I)-1) XBARROW(*, I) = DARR(0, *) YBARROW(*, I) = DARR(1, *) ENDELSE ENDIF ELSE BEGIN IF (YC GE YBOX(0, TALKPATH(0, I)-1)) AND $ (YC LE YBOX(1, TALKPATH(0, I)-1)) THEN BEGIN YPATH(0, I) = YC IF XC LE XBOX(0, TALKPATH(0, I)-1) THEN BEGIN XPATH(0, I) = XBOX(0, TALKPATH(0, I)-1) XBARROW(*, I) = RARR(0, *) YBARROW(*, I) = RARR(1, *) ENDIF ELSE BEGIN XPATH(0, I) = XBOX(3, TALKPATH(0, I)-1) XBARROW(*, I) = LARR(0, *) YBARROW(*, I) = LARR(1, *) ENDELSE ENDIF ELSE BEGIN PRINT, 'Error in determining path origin.' PRINT, 'Rerun and place cursor within ' + $ 'input & output box UNION area.' RETURN ENDELSE ENDELSE ; ; Destination of the talk line. ; IF (XC GE XBOX(0, TALKPATH(1, I)-1)) AND $ (XC LE XBOX(3, TALKPATH(1, I)-1)) THEN BEGIN XPATH(2, I) = XC IF YC LE YBOX(0, TALKPATH(1, I)-1) THEN BEGIN YPATH(2, I) = YBOX(0, TALKPATH(1, I)-1) XARROW(*, I) = UARR(0, *) YARROW(*, I) = UARR(1, *) ENDIF ELSE BEGIN YPATH(2, I) = YBOX(1, TALKPATH(1, I)-1) XARROW(*, I) = DARR(0, *) YARROW(*, I) = DARR(1, *) ENDELSE ENDIF ELSE BEGIN IF (YC GE YBOX(0, TALKPATH(1, I)-1)) AND $ (YC LE YBOX(1, TALKPATH(1, I)-1)) THEN BEGIN YPATH(2, I) = YC IF XC LE XBOX(0, TALKPATH(1, I)-1) THEN BEGIN XPATH(2, I) = XBOX(0, TALKPATH(1, I)-1) XARROW(*, I) = RARR(0, *) YARROW(*, I) = RARR(1, *) ENDIF ELSE BEGIN XPATH(2, I) = XBOX(3, TALKPATH(1, I)-1) XARROW(*, I) = LARR(0, *) YARROW(*, I) = LARR(1, *) ENDELSE ENDIF ELSE BEGIN PRINT, 'Error in determining path origin.' PRINT, 'Rerun and place cursor within ' + $ 'input & output box UNION area.' RETURN ENDELSE ENDELSE ; ; "Knee" of the talk line. ; XPATH(1, I) = XC & YPATH(1, I) = YC ENDIF ELSE BEGIN ; ; Find region that "talkee" is in with respect to "talker". ; TALKREG(I) = -1 IF XBOX(0, TALKPATH(1, I)-1) GE XBOX(0, TALKPATH(0, I)-1) $ THEN BEGIN IF XBOX(0, TALKPATH(1, I)-1) LE XBOX(3, TALKPATH(0, I)-1) $ THEN BEGIN IF YBOX(1, TALKPATH(1, I)-1) LT YBOX(0, TALKPATH(0, I)-1) $ THEN TALKREG(I) = 2 ELSE TALKREG(I) = 1 ENDIF ELSE BEGIN IF YBOX(1, TALKPATH(1, I)-1) LE YBOX(0, TALKPATH(0, I)-1) $ THEN TALKREG(I) = 6 $ ELSE BEGIN IF YBOX(0, TALKPATH(1, I)-1) GE $ YBOX(1, TALKPATH(0, I)-1) THEN TALKREG(I) = 5 $ ELSE TALKREG(I) = 3 ENDELSE ENDELSE ENDIF ELSE BEGIN IF YBOX(1, TALKPATH(1, I)-1) LE YBOX(0, TALKPATH(0, I)-1) $ THEN TALKREG(I) = 7 $ ELSE BEGIN IF YBOX(0, TALKPATH(1, I)-1) GE YBOX(1, TALKPATH(0, I)-1) $ THEN TALKREG(I) = 8 ELSE TALKREG(I) = 4 ENDELSE ENDELSE ; CASE TALKREG(I) OF 1: BEGIN ; Origin. XPATH(0, I) = (XBOX(0, TALKPATH(0, I)-1) + $ XBOX(3, TALKPATH(0, I)-1))/2. YPATH(0, I) = YBOX(1, TALKPATH(0, I)-1) XBARROW(*, I) = DARR(0, *) YBARROW(*, I) = DARR(1, *) ; Destination. XPATH(2, I) = XPATH(0, I) YPATH(2, I) = YBOX(0, TALKPATH(1, I)-1) XARROW(*, I) = UARR(0, *) YARROW(*, I) = UARR(1, *) END 2: BEGIN ; Origin. XPATH(0, I) = (XBOX(0, TALKPATH(0, I)-1) + $ XBOX(3, TALKPATH(0, I)-1))/2. YPATH(0, I) = YBOX(0, TALKPATH(0, I)-1) XBARROW(*, I) = UARR(0, *) YBARROW(*, I) = UARR(1, *) ; Destination. XPATH(2, I) = XPATH(0, I) YPATH(2, I) = YBOX(1, TALKPATH(1, I)-1) XARROW(*, I) = DARR(0, *) YARROW(*, I) = DARR(1, *) END 3: BEGIN ; Origin. XPATH(0, I) = XBOX(3, TALKPATH(0, I)-1) YPATH(0, I) = (YBOX(0, TALKPATH(0, I)-1) + $ YBOX(1, TALKPATH(0, I)-1))/2. XBARROW(*, I) = LARR(0, *) YBARROW(*, I) = LARR(1, *) ; Destination. XPATH(2, I) = XBOX(0, TALKPATH(1, I)-1) YPATH(2, I) = YPATH(0, I) XARROW(*, I) = RARR(0, *) YARROW(*, I) = RARR(1, *) END 4: BEGIN ; Origin. XPATH(0, I) = XBOX(0, TALKPATH(0, I)-1) YPATH(0, I) = (YBOX(0, TALKPATH(0, I)-1) + $ YBOX(1, TALKPATH(0, I)-1))/2. XBARROW(*, I) = RARR(0, *) YBARROW(*, I) = RARR(1, *) ; Destination. XPATH(2, I) = XBOX(3, TALKPATH(1, I)-1) YPATH(2, I) = YPATH(0, I) XARROW(*, I) = LARR(0, *) YARROW(*, I) = LARR(1, *) END 5: BEGIN ; Origin. XPATH(0, I) = XBOX(2, TALKPATH(0, I)-1) YPATH(0, I) = YBOX(2, TALKPATH(0, I)-1) ; Destination. XPATH(2, I) = XBOX(0, TALKPATH(1, I)-1) YPATH(2, I) = YBOX(0, TALKPATH(1, I)-1) END 6: BEGIN ; Origin. XPATH(0, I) = XBOX(3, TALKPATH(0, I)-1) YPATH(0, I) = YBOX(3, TALKPATH(0, I)-1) ; Destination. XPATH(2, I) = XBOX(1, TALKPATH(1, I)-1) YPATH(2, I) = YBOX(1, TALKPATH(1, I)-1) END 7: BEGIN ; Origin. XPATH(0, I) = XBOX(0, TALKPATH(0, I)-1) YPATH(0, I) = YBOX(0, TALKPATH(0, I)-1) ; Destination. XPATH(2, I) = XBOX(2, TALKPATH(1, I)-1) YPATH(2, I) = YBOX(2, TALKPATH(1, I)-1) END 8: BEGIN ; Origin. XPATH(0, I) = XBOX(1, TALKPATH(0, I)-1) YPATH(0, I) = YBOX(1, TALKPATH(0, I)-1) ; Destination. XPATH(2, I) = XBOX(3, TALKPATH(1, I)-1) YPATH(2, I) = YBOX(3, TALKPATH(1, I)-1) END ENDCASE ; Knee. XPATH(1, I) = (XPATH(0,I) + XPATH(2, I))/2. YPATH(1, I) = (YPATH(0,I) + YPATH(2, I))/2. ; ; Assign the arrow values for cases 5 through 8 above. ; IF TALKREG(I) GE 5 THEN BEGIN ; Get the arrows. THETA = ATAN(XPATH(2,I)-XPATH(0,I), $ YPATH(2,I)-YPATH(0,I)) * !RADEG ROTPIC, UARR(0,*), UARR(1,*), THETA, XTO, YTO ROTPIC, DARR(0,*), DARR(1,*), THETA, XFR, YFR XBARROW(*, I) = XFR(*) YBARROW(*, I) = YFR(*) XARROW(*, I) = XTO(*) YARROW(*, I) = YTO(*) ENDIF ENDELSE ; ; Draw the talk line and arrowhead. ; OPLOT, XPATH(*,I), YPATH(*,I), THICK=2, LINE=2, COLOR=COL, /NOCLIP POLYFILL, XARROW(*,I)+XPATH(2,I), YARROW(*,I)+YPATH(2,I), COLOR=COL IF TALKBACK(I) EQ 1 THEN $ POLYFILL, XBARROW(*,I)+XPATH(0,I), YBARROW(*,I)+YPATH(0,I), $ COLOR=COL ENDFOR ; PRINT, ' ' READ, 'Do you wish to make a hard copy of this template (Y/N)? [Y] ', ASK PRINT, ' ' ; IF STRUPCASE(ASK) NE 'N' THEN BEGIN ; ; Set the postscript fonts. ; PASS = 0 SET_PLOT, 'PS' AGAIN: IF HCOPY NE 2 THEN $ OUT = HARDCOPY(HCOPY) $ ELSE BEGIN IF PASS EQ 0 THEN OUT = HARDCOPY(0) ELSE OUT = HARDCOPY(1) ENDELSE IF OUT EQ 'EPS' THEN $ DEVICE, /ENCAPSULATE, /LANDSCAPE, FILENAME='register.eps' $ ELSE DEVICE, ENCAPSULATE=0, /LANDSCAPE, FILENAME='register.ps' DEVICE, /SCHOOLBOOK, /BOLD, FONT_INDEX=17 DEVICE, /TIMES, /BOLD, FONT_INDEX=6 DEVICE, /COURIER, /BOLD, FONT_INDEX=5 PLOT, [0.,100.], [0.,100.], XSTYLE=1+4+8, YSTYLE=1+4+8, /NODATA XYOUTS, 50., 100., MTITLE, ALIGN=0.5, SIZE=1.3, FONT=0, COLOR=COL XYOUTS, 50., 96., TDATE, ALIGN=0.5, SIZE=0.9, FONT=0, COLOR=COL FOR I = 0, NB-1 DO BEGIN OPLOT, [XBOX(*,I), XBOX(0,I)], [YBOX(*,I), YBOX(0,I)], $ THICK=3, COLOR=COL, /NOCLIP FOR J = 0, NUML(I)-1 DO BEGIN CASE TEXTTYPE(I, J) OF 'Title': BEGIN PRTEXT = '!17' + STRTRIM(TEXT(I,J),2) TSIZE = 0.9 END 'ADIDNAME': BEGIN PRTEXT = '!6' + STRTRIM(TEXT(I,J),2) TSIZE = 0.8 END 'File': BEGIN PRTEXT = '!5' + STRTRIM(TEXT(I,J),2) TSIZE = 0.8 END ELSE: BEGIN PRTEXT = '!5' + STRTRIM(TEXT(I,J),2) TSIZE = 0.8 END ENDCASE ; TOP = X_YBOX(1,I) + FLOAT(NUML(I))*1. - 1.0*Q3L(I) XYOUTS, X_YBOX(0,I), TOP-YSEP*J, PRTEXT, SIZE=TSIZE, $ FONT=0, ALIGN=0.5, COLOR=COL ENDFOR ENDFOR ; FOR I = 0, IPATH-1 DO BEGIN OPLOT, XPATH(*,I), YPATH(*,I), THICK=3, LINE=2, COLOR=COL, $ /NOCLIP POLYFILL, XARROW(*,I)+XPATH(2,I), YARROW(*,I)+YPATH(2,I), $ COLOR=COL IF TALKBACK(I) EQ 1 THEN POLYFILL, XBARROW(*,I)+XPATH(0,I), $ YBARROW(*,I)+YPATH(0,I), COLOR=COL ENDFOR ; ; Close postscript file. ; PRINT, 'Template is now stored in file: register.' + STRLOWCASE(OUT) PRINT, ' ' DEVICE, /CLOSE ; PASS = PASS + 1 IF (HCOPY EQ 2) AND (PASS EQ 1) THEN GOTO, AGAIN ; SET_PLOT, TERM ENDIF ; IF MESSAGE NE '' THEN GOTO, HANDLE_ERROR IF N_ELEMENTS(ERRMSG) GT 0 THEN ERRMSG=MESSAGE RETURN ; ; Error handling portion of the procedure. ; HANDLE_ERROR: ; IF N_ELEMENTS(ERRMSG) EQ 0 THEN MESSAGE, MESSAGE ERRMSG = MESSAGE RETURN ; END