MODULE AutoHtml_GLOBAL
USE FLIB !VERSION CONTROL INFORMATION CHARACTER(LEN=*), PARAMETER :: AutoHtml_VERSION='1.00B' CHARACTER(LEN=*), PARAMETER :: AutoHtml_DATE='12-JUN-1999' CHARACTER(LEN=*), PARAMETER :: AutoHtml_PROGNAME='AutoHtml' CHARACTER(LEN=*), PARAMETER :: AutoHtml_AUTHOR='RD Stewart (trebor@purdue.edu)' LOGICAL :: ECHO_AUTHOR = YES !COMPUTER DEPENDENT COMMANDS CHARACTER(LEN=*), PARAMETER :: ClearScreen='cls' !FILE I/O INTEGER(I4K), PARAMETER :: U4S=6 !device identificaion number for screen LOGICAL :: ECHO=YES !Run-time info on by default INTEGER(I4K) :: U4E=U4S !Print run-time info to screen by default CHARACTER(LEN=350) :: FNI = ' ' !Input filename !... PLACE GLOBAL PROGRAM VARIABLES HERE ... INTEGER(I4K) :: u4m = 0 !device id for macro file !AutoHtml Macros LOGICAL :: MakeHTML = Yes !Insert HTML Document Structure INTEGER(I4K) :: NMAC = 0 ! Number of macros CHARACTER(LEN=350) :: AutoHtml_Base =' ' CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: AutoHtml_Folder CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: AutoHtml_Text CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: AutoHtml_File CHARACTER(LEN=500), DIMENSION(:), ALLOCATABLE :: AutoHtml_URL CHARACTER(LEN=*), PARAMETER :: WebMaster_Name='RD Stewart' CHARACTER(LEN=*), PARAMETER :: WebMaster_Email='trebor@purdue.edu' CHARACTER(LEN=*), PARAMETER :: WebMaster_url='http://rh.healthsciences.purdue.edu/faculty/rds.html' END MODULE AutoHtml_GLOBALPROGRAM AutoHtml
! AutoHtml generates HTML-based documentation for a user code. Documentation ! can include hypertext links to the man pages for a code library, e.g., the ! the FLIB code library. AutoHtml can also be used to insert "mailto" HTML ! commands. ! ! AUTHOR: ! Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! USE AutoHtml_GLOBAL INTEGER(I4K) u4i,u4o,iflg REAL(R8K) T1,T2,TIM CHARACTER(LEN=25) :: EXT = 'html' !Default output filename extension !PROGRAM INITIALIZATION CALL TP_ETIME(t1) !Start program timer !OPEN INPUT FILE AND GENERATE OUTPUT FILE CALL AutoHtml_START(ext, u4i,u4o,iflg) IF (iflg < 0) THEN WRITE(unit=U4E,fmt='(1X,A,I3)',iostat=iflg) 'FATAL ERROR: ',iflg WRITE(unit=U4E,fmt='(1X,A)',iostat=iflg) 'BAD TROUBLE IN AutoHtml_start' STOP ELSEIF (iflg > 0) THEN !USER REQUESTED HELP STOP ENDIF IF (echo) THEN WRITE(unit=u4e,fmt='(1X,A,1PG15.7)',iostat=iflg) & 'PROCESSING SOURCE FILE... ' ENDIF IF (MakeHTML) THEN CALL AutoHtml_CopySource(u4i,u4o, iflg) ELSE CALL AutoHtml_AddLinks(u4i,u4o, iflg) ENDIF CLOSE(unit=u4i,status='KEEP') !CLOSE INPUT FILE !FINAL STEP(s) DEALLOCATE(AutoHtml_Folder,STAT = iflg) DEALLOCATE(AutoHtml_Text,STAT = iflg) DEALLOCATE(AutoHtml_File,STAT= iflg) DEALLOCATE(AutoHtml_URL,STAT = iflg) CALL TP_ETIME(t2) TIM=(t2-t1)/60.0D+00 IF (echo) THEN WRITE(unit=u4e,fmt='(/,A,1PG12.5)',iostat=iflg) & 'Total '// AutoHtml_PROGNAME // ' execution time (min): ',tim CALL AutoHtml_PRNVCI(u4e, iflg) ENDIF CLOSE(unit=u4o,status='KEEP') !Close output file IF (u4e.NE.u4s) THEN CLOSE(unit=u4e,status='KEEP') !Close/delete tmp-file ENDIF END !OF AutoHtmlSUBROUTINE AutoHtml_START(ext, u4i,u4o,iflg)
! Open input/output files and process command line options. ! ! INPUT: ! ext: name of extension for output filename [A*] ! ! OUTPUT: ! U4I: device identification number for input file [I4] ! U4O: device identification number for output file [I4] ! IFLG: error control flag [I4] ! 1: User requested program help ! 0: no problemo ! -1: cannot open input file ! -2: bad macro file ! -3: tmp file is locked or already open ! -4: cannot open tmp file. ! -5: output file is locked or already open ! -6: cannot open output file. ! ! AUTHOR: Robert D. Stewart ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 05-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! ! USE AutoHtml_GLOBAL CHARACTER(LEN=*) ext INTEGER(I4K) U4I,U4O,IFLG INTEGER(I4K) NARG,JFLG,ILEN CHARACTER(LEN=LEN(fni)) FNO !Output filename CHARACTER(LEN=LEN(fni)) FNT !tmp filename CHARACTER(LEN=LEN(fni)) FNM !macro filename CHARACTER(LEN=80) CLO !Command line options LOGICAL FileOpen INTENT(in) :: ext INTENT(out) :: u4i,u4o,iflg !INITIALIZE VARIABLES CLO=' ' FNI=' ' FNO=' ' FNT=' ' FNM=' ' CALL CAL_NARG(narg) IF (narg > 0) THEN !Process command line options CALL CAL_GETARG(1, fni) !Get input filename !Check for user requested program help CALL STR_ADD(fni,clo) CALL TRANUC(clo) CALL STRIP(clo) IF ((clo(:2).EQ.'-H').OR.(clo(:2).EQ.'/H')) THEN CALL AutoHtml_HELP(6, iflg) IFLG=1 RETURN ENDIF !open input file CALL CHANNEL(u4i) OPEN(unit=u4i,file=fni,iostat=jflg,status='OLD') IF (jflg.NE.0) THEN !BAD INPUT FILE WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNI: '//fni(:MAX(1,LENTRIM(fni))) CLOSE(unit=u4i,iostat=jflg) iflg=-1 u4i=0 RETURN ENDIF !Look for additional command line options IF (narg > 2) THEN CALL CAL_GETARG(3, CLO) CALL STRIP(clo) CALL TRANUC(clo) IF ((clo(:2).EQ.'-S').OR.(clo(:2).EQ.'/S')) THEN !SILENT PROGRAM EXECUTION ECHO=NO U4E=0 ELSEIF ((clo(:2).EQ.'-U').OR.(clo(:2).EQ.'/U')) THEN !PRINT RUN-TIME INFO TO SCREEN OR TMP-FILE ECHO=YES IF (clo(3:3).EQ.'6') THEN U4E=U4S !Print to screen ELSE !GENERATE TMP FILE CALL FN_SAVE(fni,jflg) !Save input filename and path CALL FN_SETFNX('tmp') !Change output file extension CALL FN_GETCFN(0, fnt) !Retrieve output filename INQUIRE(file=fnt,OPENED=FileOpen) IF (FileOpen) THEN WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNT: '//fnt(:MAX(1,LENTRIM(fnt))) IFLG=-2 RETURN ENDIF CALL CHANNEL(U4E) OPEN(unit=u4e,file=fnt,iostat=jflg) IF (jflg.NE.0) THEN IFLG=-3 WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNT: '//fnt(:MAX(1,LENTRIM(fnt))) RETURN ENDIF ENDIF ENDIF ENDIF !End of command line option processing IF (echo) THEN CALL AutoHtml_PRNVCI(u4e,jflg) ENDIF IF (narg > 1) THEN CALL CAL_GETARG(2, fnm) !Get name of macro file ENDIF ELSE !PROMPT USER FOR INPUT FILENAME AND OPTIONS !NOTE: Use fno as a temporary FNI variable CALL AutoHtml_MENU(fno,fnm, jflg) IF (jflg.EQ.1) THEN CALL CAL_SYSTEM(ClearScreen, iflg) CALL AutoHtml_HELP(6, iflg) IFLG=1 RETURN ELSEIF (jflg < 0) THEN iflg=-7 return ENDIF fni=' ' CALL STR_ADD(fno,fni) !open input file CALL CHANNEL(u4i) ilen=MAX(1,LENTRIM(fni)) OPEN(unit=u4i,file=fni(:ilen),iostat=jflg,status='OLD') IF (jflg.NE.0) THEN !BAD INPUT FILE WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNI: '//fni(:MAX(1,LENTRIM(fni))) CLOSE(unit=u4i,iostat=jflg) iflg=-1 u4i=0 RETURN ENDIF ENDIF IF (LENTRIM(fnm) > 0) THEN !OPEN MACRO FILE CALL AutoHtml_OpenMacro(fnm, jflg) IF (jflg < 0) THEN WRITE(unit=U4E,fmt='(1X,A,I3)',iostat=iflg) 'FATAL ERROR: ',iflg WRITE(unit=U4E,fmt='(1X,A)',iostat=iflg) 'BAD TROUBLE IN AutoHtml_OpenMacro' IFLG=-2 RETURN ENDIF ELSE !No macro file specified NMAC=0 ENDIF !GENERATE OUTPUT FILE CALL FN_SAVE(fni,jflg) !Save input filename and path CALL FN_GETFNX(fno) !use fno as a tmp variable CALL STRIP(fno) CALL TRANLC(fno) ilen=MAX(1,LENTRIM(fno)) IF (fno(:ilen).EQ.'html') THEN CALL FN_SETFNX('htm') MakeHTML=no ELSEIF (fno(:ilen).EQ.'htm') THEN CALL FN_SETFNX('html') MakeHTML=no ELSE CALL FN_SETFNX(ext) MakeHTML=yes ENDIF CALL FN_GETCFN(0, fno) !Retrieve output filename INQUIRE(file=fno,OPENED=FileOpen) IF (FileOpen) THEN WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNO: '//fno(:MAX(1,LENTRIM(fno))) iflg=-4 RETURN ELSE !OPEN OUTPUT FILE CALL CHANNEL(u4o) OPEN(unit=u4o,file=fno,iostat=jflg) IF (jflg.NE.0) THEN !Cannot create output file WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNO: '//fno(:MAX(1,LENTRIM(fno))) iflg=-5 RETURN ELSEIF (MakeHTML) THEN !Insert HTML Document Structure CALL FN_SAVE(fni, jflg) CALL AutoHtml_DocInfo(u4o, jflg) ENDIF ENDIF IF (echo) THEN WRITE(unit=u4e,fmt='(1X,A)',iostat=jflg) 'FNI: '//fni(:MAX(1,LENTRIM(fni))) WRITE(unit=u4e,fmt='(1X,A)',iostat=jflg) 'FNM: '//fnm(:MAX(1,LENTRIM(fnm))) IF (u4e.NE.u4s) WRITE(unit=u4e,fmt='(1X,A)',iostat=jflg) 'FNT: '//fnt(:MAX(1,LENTRIM(fnt))) WRITE(unit=u4e,fmt='(1X,A)',iostat=jflg) 'FNO: '//fno(:MAX(1,LENTRIM(fno))) WRITE(unit=u4e,fmt='(/,1X,A,1PG15.7)',iostat=iflg) & 'LOADING MACROS ... ' ENDIF !LOAD MACROS CALL AutoHtml_GetMacro(jflg) IF (jflg < 0) THEN iflg=-2 ELSEIF (nmac < 1) THEN iflg=1 ENDIF CLOSE(unit=u4m,status='KEEP') !CLOSE MACRO FILE u4m=0 IFLG=0 RETURN ENDSUBROUTINE AutoHtml_MENU(fn,fnm,iflg)
! Prompt user for with an interactive menu. ! ! INPUT: ! N/A ! ! OUTPUT: ! FN: Name of an input file [A*] ! FNM: Name of macro file [A*] ! IFLG: task completion flag [I4] ! 1: Use requested program help ! 0: task successful ! -1: task failed: invalid file/device handle ! -2: task failed while print to unit=io. ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 05-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL CHARACTER(LEN=*) FN,FNM CHARACTER(LEN=LEN(fn)) clo INTEGER(I4K) iflg INTENT(out) :: fn,iflg FN=' ' FNM=' ' CALL AutoHtml_PRNVCI(u4s, iflg) WRITE(unit=u4s,fmt='(/,A)',ADVANCE='NO',iostat=iflg) 'Enter name of ' & // 'HTML or Fortran' // ' input file (-h for help): ' READ(*,'(A)') FN !read from default input device CLO = ' ' CALL STR_ADD(fn,clo) CALL STRIP(clo) CALL TRANUC(clo) IF ((clo(:2).EQ.'-H').OR.(clo(:2).EQ.'/h')) THEN IFLG=1 RETURN ENDIF WRITE(unit=u4s,fmt='(A)',ADVANCE='NO',iostat=iflg) 'Enter name of ' & // AutoHtml_PROGNAME // ' macro file: ' READ(*,'(A)') FNM !read from default input device WRITE(unit=u4s,fmt='(A)') ' ' IFLG=0 RETURN ENDSUBROUTINE AutoHtml_OpenMacro(fnm, iflg)
! Open macro file = FNM. ! ! INPUT: ! FNM: name of a macro file [A*] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 1: Warning: number of valid macros = 0 ! 0: task successful ! -1: macro file not found ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 07-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL CHARACTER(LEN=*) FNM CHARACTER(LEN=LEN(fni)) dn INTEGER(I4K) iflg,jflg INTENT(in) :: fnm INTENT(out) :: iflg NMAC=0 !NMAC is a AutoHtml global variable CALL CHANNEL(u4m) !u4m is a AutoHtml global variable OPEN(unit=u4m,file=fnm,iostat=jflg,status='OLD') IF (jflg.NE.0) THEN !CHECK AutoHtml ENVIRONMENT VARIABLE FOR DEFAULT MACRO LOCATION CALL FN_SAVE(fnm,jflg) !Save name of macro file CALL CAL_GETENV('AutoHtml', dn) IF (LENTRIM(dn) > 0) THEN CALL FN_SETCWD(dn) !Change current work directory CALL FN_GETCFN(0, fnm) !Get macro filename with new path OPEN(unit=u4m,file=fnm,iostat=jflg,status='OLD') ELSE jflg=-1 ENDIF IF (jflg.NE.0) THEN !BAD MACRO FILE WRITE(unit=u4s,fmt='(1X,A)',iostat=jflg) 'FNM: '//fnm(:MAX(1,LENTRIM(fnm))) iflg=-1 CLOSE(unit=u4m,iostat=jflg) u4m=0 RETURN ENDIF ENDIF RETURN ENDSUBROUTINE AutoHtml_GetMacro(iflg)
! Load AutoHtml Macros from unit=u4m into active memory. ! The device identification number U4M is passed to the ! AutoHtml_GetMacro routine through the AutoHtml_GLOBAL ! module. ! ! INPUT: ! N/A ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: invalid input file device number ! -2: no macros found ! -3: memory allocation error ! -4: memory allocation error ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 05-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) IFLG,JFLG,N,NXT,I,ilen,jlen,M LOGICAL ok CHARACTER(LEN=LEN(AutoHtml_Base)) BUF,TMP CHARACTER(LEN=LEN(AutoHtml_Base)) fn INTENT(OUT) :: IFLG INQUIRE(unit=u4m, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF REWIND(unit=u4m,iostat=jflg) IF (jflg.NE.0) THEN iflg=-1 RETURN ENDIF !GET ROOT URL OR FOLDER AutoHtml_Base=' ' READ(unit=u4m,fmt='(A)',iostat=jflg) AutoHtml_Base CALL STR_TRIM('!',AutoHtml_Base) !Delete in-line comments IF (LENTRIM(AutoHtml_Base).EQ.0) THEN !Default to current directory AutoHtml_Base='./' ENDIF IF (echo.and.(u4s.NE.u4e)) THEN WRITE(unit=u4e,fmt='(A)',iostat=jflg) ' Base URL: '// AutoHtml_Base(:LENTRIM(AutoHtml_Base)) ENDIF !Create lowecase version of AutoHtml_Base TMP=' ' CALL STR_ADD(AutoHtml_Base,tmp) CALL TRANLC(tmp) CALL STRIP(tmp) !WRITE(unit=u4s,fmt='(A)') tmp(:LENTRIM(tmp)) !COUNT NUMBER OF MACROS NMAC=0 ok=yes DO WHILE(ok) READ(unit=u4m,fmt='(A)',iostat=jflg) BUF IF (jflg.EQ.0) THEN CALL STR_TRIM('!',buf) !Delete in-line comments CALL STRIP(buf) IF (buf(1:1).NE.' ') THEN NMAC=NMAC+1 ENDIF ELSE ok=no ENDIF ENDDO IF (NMAC < 1) THEN iflg=-2 RETURN ENDIF ALLOCATE(AutoHtml_Folder(NMAC),STAT = jflg) IF (jflg.NE.0) THEN iflg=-3 RETURN ENDIF ALLOCATE(AutoHtml_Text(NMAC),STAT = jflg) IF (jflg.NE.0) THEN iflg=-4 RETURN ENDIF ALLOCATE(AutoHtml_File(NMAC),STAT = jflg) IF (jflg.NE.0) THEN iflg=-4 RETURN ENDIF ALLOCATE(AutoHtml_URL(NMAC),STAT = jflg) IF (jflg.NE.0) THEN iflg=-4 RETURN ENDIF !Load macros into active memory ilen=LENTRIM(AutoHtml_Base) n=0 REWIND(unit=u4m,iostat=jflg) READ(unit=u4m,fmt='(A)',iostat=jflg) BUF !Skip 1st line of macro file. BUF=' ' ok=(jflg.EQ.0) DO WHILE(ok) READ(unit=u4m,fmt='(A)',iostat=jflg) BUF IF (jflg.EQ.0) THEN CALL STR_TRIM('!',buf) !Delete in-line comments IF (LENTRIM(buf) > 0) THEN n=n+1 IF (n.LE.NMAC) THEN AutoHtml_Folder(n)=' ' AutoHtml_Text(n)=' ' AutoHtml_File(n)=' ' nxt=1 IF (tmp(:6).EQ.'mailto') THEN !PROCESS EMAIL MACROS CALL TOKEN(0,', ()[]{};''''"',buf, nxt, AutoHtml_Text(n),jflg) CALL TOKEN(0,', ()[]{};''''"',buf, nxt, AutoHtml_file(n),jflg) ELSE !PROCESS HYPERTEXT LINKS CALL TOKEN(0,', ()[]{};''''"',buf, nxt, AutoHtml_Folder(n),jflg) M=SCAN(buf(nxt:),'([{''''"') IF (m > 0) THEN nxt=nxt+m-1 CALL TOKEN(0,',()[]{};''''"',buf, nxt, AutoHtml_Text(n),jflg) ELSE CALL TOKEN(0,', ()[]{};''''"',buf, nxt, AutoHtml_Text(n),jflg) ENDIF !Name of file CALL TOKEN(0,', ()[]{};''''"',buf, nxt, fn,jflg) IF (jflg.EQ.0) THEN CALL TRANLC(fn) CALL STR_ADD(fn,AutoHtml_file(n)) ELSE !Auto-generation of filename from text CALL STR_ADD(AutoHtml_Text(n),AutoHtml_file(n)) CALL STR_ADD('.html',AutoHtml_file(n)) ENDIF ENDIF ELSE !Normal termination iflg=0 ENDIF ok=(n < nmac) ENDIF ELSE !Bad trouble ok=no iflg=-5 ENDIF ENDDO !Generate URLs IF (echo.and.(u4s.NE.u4e)) THEN WRITE(unit=u4e,fmt='(/,A,I9)') ' Number of AutoHtml Macros: ',Nmac ENDIF DO i=1,NMAC jlen=LENTRIM(AutoHtml_Text(i)) AutoHtml_URL(i)='<A HREF="' CALL STR_ADD(AutoHtml_Base,AutoHtml_URL(i)) ilen=MAX(1,LENTRIM(AutoHtml_URL(i))) IF (tmp(:6).EQ.'mailto') THEN !PROCESS EMAIL MACROS IF (AutoHtml_url(i)(ilen:ilen).NE.':') THEN CALL STR_ADD(':',AutoHtml_URL(i)) ENDIF CALL STR_ADD(AutoHtml_Folder(i),AutoHtml_URL(i)) ELSE !PROCESS HYPERTEXT MACRO IF (AutoHtml_url(i)(ilen:ilen).NE.'/') THEN CALL STR_ADD('/',AutoHtml_URL(i)) ENDIF CALL STR_ADD(AutoHtml_Folder(i),AutoHtml_URL(i)) ilen=MAX(1,LENTRIM(AutoHtml_URL(i))) IF (AutoHtml_url(i)(ilen:ilen).NE.'/') THEN CALL STR_ADD('/',AutoHtml_URL(i)) ENDIF ENDIF CALL STR_ADD(AutoHtml_File(i),AutoHtml_url(i)) CALL STR_ADD('">',AutoHtml_url(i)) CALL STR_ADD(AutoHtml_Text(i)(:jlen)//'</A>',AutoHtml_url(i)) ilen=MAX(1,LENTRIM(AutoHtml_URL(i))) IF (echo.and.(u4s.NE.u4e)) THEN WRITE(unit=u4e,fmt='(I3,2X,A)') i,AutoHtml_url(i)(:LENTRIM(AutoHtml_url(i))) ENDIF ENDDO RETURN ENDSUBROUTINE AutoHtml_PRNVCI(io, iflg)
! Print version control information to unit=io. ! ! INPUT: ! io: a valid file or device handle [I4] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: task failed: invalid file/device handle ! -2: task failed while print to unit=io. ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 05-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) IO,IFLG,JFLG,ILEN LOGICAL ok CHARACTER(LEN=80) STAMP INTENT(IN) :: IO INTENT(OUT) :: IFLG IF (io.NE.u4s) THEN INQUIRE(unit=io, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF ENDIF !PROGRAM VERSION + DATE/TIME STAMP CALL TP_SetSys STAMP=' ' CALL SP_CATSTR(AutoHtml_PROGNAME,'',stamp) CALL SP_CATSTR(AutoHtml_VERSION,' ',stamp) CALL SP_CATSTR(AutoHtml_DATE,' ',stamp) ILEN=MAX(LENTRIM(stamp)+2,57) CALL TP_AddDat(stamp(ILEN:)) ILEN=LENTRIM(stamp)+2 CALL TP_AddTim(stamp(ilen:)) WRITE(unit=io,fmt='(A)',ADVANCE='NO',iostat=jflg) STAMP IF (jflg.NE.0) THEN IFLG=-1 RETURN ENDIF IF (ECHO_AUTHOR) THEN WRITE(unit=io,iostat=jflg,fmt='(A,/)') 'by '// AutoHtml_AUTHOR ECHO_AUTHOR=NO !Just print program author 1st time ENDIF RETURN ENDSUBROUTINE AutoHtml_DocInfo(io, iflg)
! Write AutoHtml HTML-style document information to the file ! open on unit=io, ! ! INPUT: ! IO: device number [I4] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: invalid input file device number ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 06-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) IO,IFLG,JFLG LOGICAL ok CHARACTER(LEN=LEN(AutoHtml_Base)) BUF CHARACTER(LEN=132) FNB INTENT(IN) :: IO INTENT(OUT) :: IFLG INQUIRE(unit=io, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF REWIND(unit=io,iostat=jflg) IF (jflg.NE.0) THEN iflg=-1 RETURN ENDIF WRITE(unit=io,fmt='(A)',iostat=jflg) & '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">' WRITE(unit=io,fmt='(A)',iostat=jflg) '<HTML><HEAD>' CALL FN_GETFNB(fnb) BUF=' ' CALL STR_ADD('<TITLE>', BUF) CALL STR_ADD('Documentation for', BUF) CALL STR_ADD(' '//fnb, BUF) CALL STR_ADD('</TITLE>', BUF) WRITE(unit=io,fmt='(A)',iostat=jflg) BUF(:LENTRIM(buf)) BUF='<META NAME="Generator" CONTENT="FLIB' CALL STR_ADD(' '//AutoHtml_PROGNAME, BUF) CALL STR_ADD(' Utility Version '// AutoHtml_VERSION, BUF) CALL STR_ADD(' '// AutoHtml_DATE, BUF) CALL STR_ADD('">', BUF) WRITE(unit=io,fmt='(A)',iostat=jflg) BUF(:LENTRIM(buf)) WRITE(unit=io,fmt='(A)',iostat=jflg) & '<META NAME="Keywords" CONTENT="AutoHtml, Fortran, Documentation">' BUF='<META NAME="Author" CONTENT="' CALL STR_ADD(AutoHtml_AUTHOR, BUF) CALL STR_ADD('">', BUF) WRITE(unit=io,fmt='(A)',iostat=jflg) BUF(:LENTRIM(buf)) WRITE(unit=io,fmt='(A)',iostat=jflg) & '</HEAD><BODY BGCOLOR="WHITE">' WRITE(unit=io,fmt='(A)',iostat=jflg) ' ' WRITE(unit=io,fmt='(A)',iostat=jflg) '<PRE>' RETURN ENDSUBROUTINE AutoHtml_CopySource(u4i,u4o, iflg)
! Copy source code from unit=u4i to unit=u4o in HTML format. ! ! INPUT: ! U4I: device number for input file [I4] ! U4O: device number for output file [I4] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: invalid input file device number ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 06-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) U4I,U4O,IFLG,JFLG LOGICAL ok,again,bold,comment,strong CHARACTER(LEN=LEN(AutoHtml_Base)) BUF,TMP INTENT(IN) :: U4I,U4O INTENT(OUT) :: IFLG INQUIRE(unit=u4i, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF INQUIRE(unit=u4o, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF REWIND(unit=u4i,iostat=jflg) again=(jflg.EQ.0) DO WHILE(again) READ(unit=u4i,fmt='(A)',iostat=iflg) BUF IF (iflg.EQ.0) THEN CALL AutoHtml_RunMacro(buf) !Check for additional HTML formating TMP=' ' CALL STR_ADD(buf,tmp) CALL TRANLC(tmp) CALL STRIP(tmp) comment=(tmp(1:1).EQ.'!') bold=no strong=no IF (.not.comment) THEN CALL STR_TRIM('!',tmp) !Remove comments IF (tmp(:7).EQ.'program ') THEN bold=yes ELSEIF (tmp(:10).EQ.'subroutine') THEN bold=yes ELSEIF (tmp(:8).EQ.'function') THEN bold=yes ELSEIF (tmp(:6).EQ.'module') THEN bold=yes ELSEIF (tmp(:9).EQ.'endmodule') THEN strong=yes ELSEIF (tmp(:3).EQ.'end') THEN IF (tmp(:5).NE.'endif') THEN strong=yes ENDIF ELSEIF (tmp(:4).EQ.'stop') THEN strong=yes ELSEIF (tmp(:6).EQ.'return') THEN strong=yes ELSE bold=no ENDIF ENDIF IF (comment.AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',ADVANCE='NO',iostat=iflg) & '<FONT COLOR="navy"><b>' ELSEIF (strong.AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',ADVANCE='NO',iostat=iflg) & '<FONT COLOR="red">' ELSEIF (bold.AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',ADVANCE='NO',iostat=iflg) & '<FONT COLOR="green" FACE="Arial"><p><hr><p><h3>' ENDIF IF ((comment.OR.bold.OR.strong).AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',ADVANCE='NO',iostat=iflg) buf(:MAX(1,LENTRIM(buf))) ELSE WRITE(unit=u4o,fmt='(A)',iostat=iflg) buf(:MAX(1,LENTRIM(buf))) ENDIF IF (comment.AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',iostat=iflg) '</FONT></b>' ELSEIF (strong.AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',iostat=iflg) '</FONT>' ELSEIF (bold.AND.MakeHTML) THEN WRITE(unit=u4o,fmt='(A)',iostat=iflg) '</FONT></h3>' bold=no ENDIF ELSE again=no !done! ENDIF ENDDO CALL AutoHtml_WebMaster(u4o, iflg) RETURN ENDSUBROUTINE AutoHtml_AddLinks(u4i,u4o, iflg)
! Add hypertext links to an existing HTML file. ! ! INPUT: ! U4I: device number for input file [I4] ! U4O: device number for output file [I4] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: invalid input file device number ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 06-JUN-1999 ! REVISIONS HISTORY: ! 12-JUN-1999 RD Stewart ! BUG FIX: Copy HTML header information when adding links to ! an existing HTML file. ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) U4I,U4O,IFLG,JFLG LOGICAL ok,again CHARACTER(LEN=LEN(AutoHtml_Base)) BUF INTENT(IN) :: U4I,U4O INTENT(OUT) :: IFLG INQUIRE(unit=u4i, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF INQUIRE(unit=u4o, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF REWIND(unit=u4i,iostat=jflg) !Move past HTML header information again=(jflg.EQ.0) DO WHILE (again) READ(unit=u4i,fmt='(A)',iostat=jflg) BUF IF (jflg.EQ.0) THEN WRITE(unit=u4o,fmt='(A)',iostat=iflg) buf(:MAX(1,LENTRIM(buf))) CALL TRANUC(buf) CALL STRIP(buf) again=(INDEX(buf,'</HEAD>').EQ.0) ENDIF ENDDO again=(jflg.EQ.0) DO WHILE(again) READ(unit=u4i,fmt='(A)',iostat=iflg) BUF IF (iflg.EQ.0) THEN CALL AutoHtml_RunMacro(buf) WRITE(unit=u4o,fmt='(A)',iostat=iflg) buf(:MAX(1,LENTRIM(buf))) ELSE again=no !done! ENDIF ENDDO RETURN ENDSUBROUTINE AutoHtml_RunMacro(buf)
! Execute the macro substitutions of the text in variable BUF. ! ! INPUT: ! U4I: device number for input file [I4] ! U4O: device number for output file [I4] ! ! OUTPUT: ! N/A ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 06-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) iflg,jflg,nspc,ilen,jlen,klen INTEGER(I4K) i,i1,j1,j2,k1,k2 LOGICAL again CHARACTER(LEN=*) BUF INTENT(INOUT) :: BUF ilen=LENTRIM(buf) IF (ilen < 1) THEN !Nothing to do RETURN ENDIF IF (MakeHTML) THEN !Replace greater than and less than symbols iflg=0 DO WHILE (iflg.eq.0) CALL STR_RAS('>','>', buf,iflg) !Replace greater than symbol ENDDO iflg=0 DO WHILE (iflg.EQ.0) CALL STR_RAS('<','<', buf,iflg) !Replace less than symbol ENDDO ENDIF !Insert hypertext links. Ignore (HTML) text between existing hypertext links DO i=1,NMAC !Loop over all macros ilen=LENTRIM(buf) jlen=MAX(1,LENTRIM(AutoHtml_Text(i))) klen=MAX(1,LENTRIM(AutoHtml_URL(i))) j1=1 j2=j1 again=(j2.LE.ilen) DO WHILE(again) !Check for link i1=INDEX(buf(j1:),'<A') !Start of link IF (i1 < 1) THEN !no hypertext links in rest of buf J2=ilen ELSE J2=j1+i1-1 !End of current link ENDIF CALL STR_FAM(AutoHtml_Text(i),buf(j1:j2), k1,k2,jflg) IF (jflg.EQ.0) THEN !Found a match nspc=k2-k1+1 i1=j1+k1-1 CALL STR_SHFT(-nspc, buf(i1:)) !Delete text from buf(j1:) CALL STR_INSERT(i1,AutoHtml_URL(i)(:klen), buf) !Insert URL with text ilen=LENTRIM(buf) !Compute new length of BUF ENDIF j1=J2+INDEX(buf(j2:),'</A')+3 again=((j1 < ilen).AND.(j2 < ilen)) ENDDO !Loop for ith macro ENDDO !Loop over all macros RETURN ENDSUBROUTINE AutoHtml_WebMaster(io, iflg)
! Print contact information for the webmaster to the file open ! on unit=io. ! ! INPUT: ! IO: device number [I4] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: invalid input file device number ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 06-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) IO,IFLG,JFLG,ilen LOGICAL ok CHARACTER(LEN=LEN(AutoHtml_Base)) BUF INTENT(IN) :: IO INTENT(OUT) :: IFLG INQUIRE(unit=io, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF WRITE(unit=io,fmt='(A)',iostat=jflg) ' ' WRITE(unit=io,fmt='(A)',iostat=jflg) '</PRE>' WRITE(unit=io,fmt='(A)',iostat=jflg) '<p>' WRITE(unit=io,fmt='(A)',iostat=jflg) '<hr>' WRITE(unit=io,fmt='(A)',iostat=jflg) '<p>' BUF='Webmaster: ' IF (LENTRIM(WebMaster_url) > 0) THEN CALL STR_ADD('<A HREF="', buf) CALL STR_ADD(WebMaster_url, buf) CALL STR_ADD('">', buf) ENDIF CALL STR_ADD(' '//WebMaster_Name, BUF) IF (LENTRIM(WebMaster_url) > 0) THEN CALL STR_ADD('</A>', BUF) ENDIF WRITE(unit=io,fmt='(A)',iostat=jflg) BUF(:LENTRIM(buf)) BUF='(<A HREF="mailto:'//WebMaster_Email CALL STR_ADD('">', BUF) CALL STR_ADD(WebMaster_Email, BUF) CALL STR_ADD('</A>)<br>', BUF) WRITE(unit=io,fmt='(A)',iostat=jflg) BUF(:LENTRIM(buf)) BUF='Last revised: ' CALL TP_SetSys ILEN=LENTRIM(buf)+2 CALL TP_AddDat(buf(ilen:)) CALL STR_ADD('<br>', BUF) WRITE(unit=io,fmt='(A)',iostat=jflg) BUF(:LENTRIM(buf)) WRITE(unit=io,fmt='(A)',iostat=jflg) '</BODY></HTML>' RETURN ENDSUBROUTINE AutoHtml_HELP(io, iflg)
! Print help on program usage to unit=io. ! ! INPUT: ! io: a valid file or device handle [I4] ! ! OUTPUT: ! IFLG: task completion flag [I4] ! 0: task successful ! -1: task failed: invalid file/device handle ! -2: task failed while print to unit=io. ! ! AUTHOR: Rob Stewart, Ph.D. ! Pacific Northwest National Laboratory (PNNL) ! PO Box 999, MSIN K3-55 ! Richland, WA 99352-0999 USA ! (509) 375-6851 Voice ! (509) 375-6936 Fax ! trebor@purdue.edu ! http://rh.healthsciences.purdue.edu/faculty/rds.html ! ! CREATION DATE: 05-JUN-1999 ! REVISIONS HISTORY: ! ! COMMENTS: ! USE AutoHtml_GLOBAL INTEGER(I4K) IO,IFLG,JFLG LOGICAL ok INTENT(IN) :: IO INTENT(OUT) :: IFLG IF (io.NE.u4s) THEN INQUIRE(unit=io, OPENED = ok) IF (.not.ok) THEN !Invalid device handle IFLG=-1 RETURN ENDIF ENDIF !PROGRAM VERSION + DATE/TIME STAMP CALL AutoHtml_PRNVCI(io, jflg) !PRINT VERSION INFO TO UNIT=IO WRITE(io,'(/,A)') 'PROGRAM USAGE: ' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' <source file> <AutoHtml macro file> -<command line option>' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' -H' WRITE(io,'(/,A)') 'OPTIONS: ' WRITE(io,'(2X,A)') ' S: silent program execution' WRITE(io,'(2X,A)') 'U6: echo program run-time information to screen' WRITE(io,'(2X,A)') ' U: echo program run-time information to tmp file' WRITE(io,'(2X,A)') ' H: program help' WRITE(io,'(/,A)') 'EXAMPLES: ' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' (interactive execution)' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' myapp.f90 FLIB.mac -S (silent execution)' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' myapp.f90 FLIB.mac -U6 (run-time info to screen)' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' myapp.f90 FLIB.mac -U (run-time info to tmp-file)' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' myapp.f90 FLIB.mac (run with default options)' WRITE(io,'(2X,A)') AutoHtml_PROGNAME // ' -H (program help)' WRITE(io,'(/,A)') 'COMMENT: ' WRITE(io,'(2X,A)') ' Specification of a macro file is optional. If a macro file is not' WRITE(io,'(2X,A)') ' input, then the input file is converted to HTML without adding any' WRITE(io,'(2X,A)') ' HTML links.' RETURN END
Webmaster: RD Stewart
(trebor@purdue.edu)
Last revised: 11-APR-2000