Viewing contents of file '../idllib/astron/contrib/landsman/allpro/man.pro'
;+
; NAME:
; MAN
; PURPOSE:
; Provides online documentation for IDL topics. If the current
; graphics device supports widgets, a graphical user interface
; is used. Otherwise, a more basic version which is a cross
; between Unix man pages and VMS online help is used.
; This routine can emulate the V3.x online help system in V4.x and later.
; CATEGORY:
; Help, documentation .
; CALLING SEQUENCE:
; MAN [, REQUEST]
; INPUTS:
; REQUEST = A scalar string containing the procedure name or topic
; for which help is desired. MAN first tries to interpret
; the string as a topic, and if not found then searches the
; !PATH for the procedure.
; OUTPUTS:
; The widget version uses a text widget to display the help
; text. The basic version sends help text to the standard output.
;
; EXAMPLES:
;
; IDL> man,'rebin' ;Display help on intrinisic IDL REBIN function
; IDL> man,'hrebin' ;Display help on Astronomy Library HREBIN procedure
; IDL> man,'astron' ;Display all astronomy library procedures
; NOTES:
; To install the MAN procedure
;
; 1. Place the procedures in the /contrib/landsman directory in one's
; !PATH.
;
; 2. Define the !HELP_PATH sytem prior to entering IDL, to point to a
; directoryto contain the help files. This can be done either by
; setting the environment variable IDL_HELP_PATH or by assigning
; !HELP_PATH in a startup file,
;
; 3. Place any IDL help files (such ASTRON.HELP from the Astronomy
; Library) in the !HELP_PATH directory. Also place the file
; ROUTINES.HELP from IDL V3.6 into this directory. This information
; in the ROUTINES.HELP file will be somewhat obsolete, but it is the
; only way to get online help for intrinsic procedures.
;
; RESTRICTIONS:
; The help text for intrinsic is derived from the LaTeX files used to
; produce the V3.6 reference manual. However, it is not possible to
; produce exactly the same output as found in the manual due to
; limitations of text oriented terminals. The text used is therefore
; considerably abbreviated. Always check the manual if the online help is
; insufficient.
;
; MAN cannot locate procedures in a VMS text library
; MODIFICATION HISTORY:
; Adapted from MAN_PROC, W. Landsman February, 1996
;-
;
PRO MAN, REQUEST
; lv1_files recieves all help files found through !HELP_PATH.
lv1_dirs = EXPAND_PATH(!HELP_PATH, /ARRAY, COUNT=cnt)
if (cnt eq 0) then begin
message,'No online help files found.',/CONT
return
endif
for i = 0, cnt-1 do begin
tmp = STRLOWCASE(findfile(filepath('*.help', root_dir=lv1_dirs(i))))
if (i eq 0) then lv1_files = TEMPORARY(tmp) $
else lv1_files=[lv1_files, TEMPORARY(tmp)]
endfor
; lv1_topics gets uppercase version of just the names.
lv1_topics = STRUPCASE(lv1_files)
stlen = strlen(lv1_topics)
if !version.os eq 'windows' then begin
tail = STRPOS(lv1_topics, '.HEL')
endif else if !version.os eq 'vms' then begin
tail = STRPOS(lv1_topics, '.HELP;')
endif else $
tail = STRPOS(lv1_topics, '.HELP')
n = n_elements(lv1_topics)
for i = 0, n-1 do $
lv1_topics(i) = strmid(lv1_topics(i), 0, tail(i))
for i = 0, n-1 do begin ; Strip path part off lv1_topics
case !version.os of
'vms': begin
j = STRPOS(lv1_topics(i), ']')
while (j ne -1) do begin
lv1_topics(i) = strmid(lv1_topics(i), j+1, 32767)
j = STRPOS(lv1_topics(i), ']')
endwhile
end
'windows': begin
j = STRPOS(lv1_topics(i), '\')
while (j ne -1) do begin
lv1_topics(i) = strmid(lv1_topics(i), j+1, 32767)
j = STRPOS(lv1_topics(i), '\')
endwhile
end
'MacOS': begin
j = STRPOS(lv1_topics(i), ':')
while (j ne -1) do begin
lv1_topics(i) = strmid(lv1_topics(i), j+1, 32767)
j = STRPOS(lv1_topics(i), ':')
endwhile
end
else: begin ; Unix otherwise
j = STRPOS(lv1_topics(i), '/')
while (j ne -1) do begin
lv1_topics(i) = strmid(lv1_topics(i), j+1, 32767)
j = STRPOS(lv1_topics(i), '/')
endwhile
end
endcase
endfor
; Sort the topics into alphabetical order.
tmp = sort(lv1_topics)
lv1_files = lv1_files(tmp)
lv1_topics = lv1_topics(tmp)
;Determine if a request is present. If a request is present, determine if it
;is a Level 1 topic (i.e. .HELP file) or a Level 2 topic (i.e. IDL routine).
;If the latter, call mpBasic, not widgets_olh.
if N_elements(Request) EQ 0 then Request = ''
SZREQ = size(Request)
lnreq = strlen(Request)
if SZREQ(0) ne 0 then begin
message,/inf,'Request must be a scalar'
return
endIF ELSE IF (szreq(1) ne 7) AND (szreq(1) ne 0) then BEGIN
message,/inf,'Request must be a string'
return
endIF ELSE IF (lnreq eq 0) then BEGIN ;No request present
IF ((!D.FLAGS and 65536) eq 65536) then $ ;Widgets present?
WIDGET_OLH, REQUEST $
ELSE MPBASIC, REQUEST
return
endIF ELSE BEGIN ;Request present.
;Is there a space? If yes, then the two-word request goes to MPBASIC.
IF ((strpos(request,string(32b)) gt 0) and $
(strpos(request,string(32b)) lt strlen(request)-1)) THEN BEGIN
MPBASIC, REQUEST
return
endIF
;Is the word a Level 1 topic?
IF (total(where(lv1_topics eq strupcase(strcompress(request,$
/REMOVE_ALL)))) GE 0) then BEGIN
IF ((!D.FLAGS and 65536) eq 65536) then $ ;Widgets present?
WIDGET_OLH, REQUEST $
ELSE MPBASIC, REQUEST
return
endIF ELSE $
MPBASIC, REQUEST
endELSE
end