[GPF Home Page]

Download Page

(for Fortran General Purpose Fortran Collection)

There is one file to download for the libGPF library - GPF.tgz . This includes

My own FAQ on Fortran is also available, with links to other Fortran resources.

Assuming a recent version of gfortran is on your system you can download the file and place it in an empty directory and enter

   tar xvfz GPF.tgz

   # if you are not on a platform with X11, ncurses, readline, and
   # sqlite you might have to remove some of the files from the 
   # Makefile, and change the compiler and loader options if not
   # using gfortran(1) and gcc(1). It is usually easiest to try
   # it and then handle any failures individually ...


   # you might want to edit hershey.sh to select where hershey
   # font files will be installed (default is /usr/share/hershey), 
   # and then enter ...

     bash hershey.sh

This will compile the GPF procedures and sample utility programs.

For other programming environments you will need to change the lines in the Makefile that define the compiler command. Many Fortran 2003 features are required. Recently, I have only tested with GNU Fortran (GCC) 7.3.0 .

Note to run the graphics programs you generally have to set some environmental variables. Some examples:

      export M_DRAW_FONTLIB=/usr/share/hershey
      export M_DRAW_DEVICE=X11
      export M_DRAW_OUTPUT=out.pdf
      export M_DRAW_OUTPUT="|ppmtogif > out.gif"
   # Totally optionally, to build all the sample programs including
   # the small sample programs from the man(1) pages

     make PROGFILES="$(find PROGRAMS -name '*.f90' ! -empty)" -j 10

MAN pages:

The man(1) pages are particularly useful when working with the code files when used with editors such as vim(1) and emacs(1). Several editors can now look up and display the man(1) pages for a routine from inside the editors. Place your cursor over a function name in the example programs and enter "K" in vim(1) to access the man(1) page for a procedure, for example. Typically, you set the MANPATH environment variable to include the full pathname to the man/ directory first. Something like

      export MANPATH=/home/$USER/GPF/man:$MANPATH::
(assuming you installed the source in /home/$USER/GPF) will work, depending on what shell you are using.

HTML pages:

HTML documents are the most complete reference, as they include some higher-level overviews of the larger module files that are not currently included in the man(1) pages. Otherwise, the HTML documents are for the most part generated from the man(1) pages.

Special HTML files use javascript to append groups of the HTML documents into a single manual.

BOOK_M_calculator BOOK_M_color BOOK_M_debug BOOK_M_display BOOK_M_draw
BOOK_M_drawplus BOOK_M_factor BOOK_M_io BOOK_M_journal BOOK_M_logic
BOOK_M_math BOOK_M_messages BOOK_M_pixel BOOK_M_process BOOK_M_regex
BOOK_M_sort BOOK_M_sqlite BOOK_M_steam67 BOOK_M_stopwatch BOOK_M_strings
BOOK_M_system BOOK_M_time BOOK_M_units BOOK_M_xterm BOOK_M_xyplot

Alphabetical listing of HTML documents:

_cmp.1 _colrm.1 _dirname.1 _echo.1 _false.1
_grep.1 _hostname.1 _kill.1 _ln.1 _logname.1
_ls.1 _mv.1 _printenv.1 _pwd.1 _rename.1
_rm.1 _rmdir.1 _sleep.1 _stat.1 _time.1
_touch.1 _true.1 _tty.1 _uname.1 _unlink.1
_uuidgen.1 _which.1 _yes.1 abs.3 accdig.3
achar.3 acos.3 acosh.3 add.3 adjustc.3
adjustl.3 adjustr.3 aimag.3 aint.3 all.3
allocated.3 almost.3 alphabet.1 anint.3 any.3
anyinteger_to_128bit.3 anyscalar_to_double.3 anyscalar_to_real.3 anything_to_bytes.3 arc.3m_draw
arc.3m_pixel ARGUMENTS.3 array_constructors.7 arrowhead.3m_drawplus asa2pdf.1
asin.3 asinh.3 associate.7 associated.3 atan.3
atan2.3 atanh.3 atomic_add.3 atomic_and.3 atomic_cas.3
atomic_define.3 atomic_fetch_add.3 atomic_fetch_and.3 atomic_fetch_or.3 atomic_fetch_xor.3
atomic_or.3 atomic_ref.3 atomic_xor.3 atomnum2symbol.3 axis.3m_calcomp
b3hs_hash_key_jenkins.3 backbuffer.3m_draw backface.3m_draw backfacedir.3m_draw backspace.7
base.1 base.3 bds.3 bessel_j0.3 bessel_j1.3
bessel_jn.3 bessel_y0.3 bessel_y1.3 bessel_yn.3 bge.3
bgt.3 binary_search.3 bit_size.3 ble.3 block.7
BOOK_M_calcomp BOOK_M_calculator BOOK_M_color BOOK_M_Compare_Float_Numbers BOOK_M_debug
BOOK_M_display BOOK_M_draw BOOK_M_drawplus BOOK_M_factor BOOK_M_io
BOOK_M_journal BOOK_M_logic BOOK_M_math BOOK_M_messages BOOK_M_pixel
BOOK_M_process BOOK_M_regex BOOK_M_sort BOOK_M_sqlite BOOK_M_steam67
BOOK_M_stopwatch BOOK_M_strings BOOK_M_system BOOK_M_time BOOK_M_units
BOOK_M_xterm BOOK_M_xyplot bottomjustify.3m_draw box_month.3 boxfit.3m_draw
boxtext.3m_draw btest.3 c_associated.3 c_f_pointer.3 c_f_procpointer.3
c_funloc.3 c_loc.3 c_sizeof.3 c2f.3 c2s.3
call_draw.3m_drawplus callobj.3m_draw cartesian_to_polar.3 cartesian_to_spherical.3 case.7
ceiling.3 centertext.3m_draw centertext.3m_pixel change.1 change.3
char.3 checkkey.3m_draw chomp.3 choose.1 cincinatti_chili.7
circl.3m_calcomp circle.3m_draw circle.3m_pixel circleprecision.3m_draw circleprecision.3m_pixel
citer.3 clear.3m_draw clear.3m_pixel clipping.3m_draw clock.1m_draw
closeobj.3m_draw closepoly.3m_draw closepoly.3m_pixel closest_color_name.3 cmplx.3
cn.1 cntour.3m_calcomp co_broadcast.3 co_lbound.3 co_max.3
co_min.3 co_reduce.3 co_sum.3 co_ubound.3 codebase.3
color.3m_draw color.3m_pixel color_name2rgb.3 color_wheel.1 colors.1
command_argument_count.3 compact.3 compiler_options.3 compiler_version.3 compute.1
cond.3 condl67.3m_steam67 condv67.3m_steam67 conjg.3 continue.7
contourlines.3 cos.3 cosd.3 cosh.3 count.3
cpl67.3m_steam67 cprint.1 cpu_time.3 cpv67.3m_steam67 crc32_hash.3
create_watch.3 create_watchgroup.3 crflo67.3m_steam67 critvs.3m_steam67 critvw67.3m_steam67
crop.3 crvel67.3m_steam67 cshift.3 csv_write_row.3 csv_write_table.3
curve.3m_draw curvebasis.3m_draw curven.3m_draw curveprecision.3m_draw curvx.3m_calcomp
curvy.3m_calcomp cycle.7 d2j.3 d2o.3 d2r.3
d2u.3 d2w.3 dashcode.3m_draw dashl.3m_calcomp dashp.3m_calcomp
data.7 date_and_time.3 date_to_julian.3 date_to_unix.3 days2sec.1
days2sec.3 dble.3 deallocate.7 decodebase.3 degrees.1
delete.3 delim.3 delobj.3m_draw describe.3 destroy_watch.3
destroy_watchgroup.3 deviled_eggs.7 dget.3 dgets.3 digits.3
dim.3 dirname.3 dirtys_sha256.3 disp.3 disp_get.3
disp_set.3 dissect.3 djb2_hash.3 dl_init.3m_slices dl_slices.3
dl_slices.3m_slices dl_symbol.3m_slices dnum0.3 do.7 dot_product.3
dow.3 download dp_accdig.3 dprod.3 draw.1
draw.3m_draw draw_interpret.3m_drawplus draw2.3m_draw draw2.3m_pixel drawchar.3m_draw
drawchar.3m_pixel drawstr.3m_draw drawstr.3m_pixel dshiftl.3 dshiftr.3
dtu.1 easter.1 easter.3 elips.3m_calcomp ellipse.3m_drawplus
end_pause_watch.3 endselect.7 envelope.3 eoshift.3 ephemeris.3
epsilon.3 erf.3 erfc.3 erfc_scaled.3 event_query.3
example_text_justification.7m_draw exchange.1 execute_command_line.3 exit.7 exp.3
expand.3 expandviewport.3m_draw exponent.3 extends_type_of.3 extremum.3
f2c.3 factor.3m_calcomp factors.1 feet_to_meters.3 fileglob.3
findll.1 findloc.3 fit.3m_calcomp fixedwidth.3m_draw fline.3m_calcomp
float.3 floor.3 flush.7 fmtdate.3 fmtdate_usage.3
font.3m_draw font.3m_pixel fortran.7 fortran_continuation_line.7 fraction.3
free_source_form.7 frontbuffer.3m_draw fseq.1 fstop.3 gamma.3
gcd.1 generate_uuid.3 genobj.3m_draw geographical_distance.3 get_command.3
get_command_argument.3 get_environment_variable.3 get_tmp.3 getaspect.3m_draw getcharsize.3m_draw
getdepth.3m_draw getdisplaysize.3m_draw getdisplaysize.3m_pixel getfactors.3m_draw getfontdec.3m_draw
getfontsize.3m_draw getgp.3m_draw getgp2.3m_draw getgp2.3m_pixel getgpt.3m_draw
getkey.3m_draw getopenobj.3m_draw getstring.3m_draw getvals.3 getvalue.3
getviewport.3m_draw getviewport.3m_pixel gotoer67.3m_steam67 gr167.3m_steam67 greatest_common_divisor.3
grid.3m_calcomp grs67.3m_steam67 guessdate.3  
href="./h_array.3.html"> h_array.3 h_close.3      
h_open.3 hasher.1 hatchang.3m_draw hatchpitch.3m_draw hcl67.3m_steam67
hcsl67.3m_steam67 hcslv267.3m_steam67 hcslvl67.3m_steam67 hello.7 hershey.3m_pixel
hisiss67.3m_steam67 hpsiss67.3m_steam67 hsl67.3m_steam67 hss167.3m_steam67 hss67.3m_steam67
hssicl67.3m_steam67 hssiss67.3m_steam67 hsv67.3m_steam67 hue.3 huegif.1
huge.3 hypot.3 i_is_prime.3 iachar.3 iall.3
iand.3 iany.3 ibclr.3 ibits.3 ibset.3
ichar.3 ieor.3 if.7 iget.3 igets.3
igetvalue.3 illusion.3 image_index.3 implicit.7 implied_do.7
in_margin.3 include.7 indent.3 index.3 init_random_seed.3
init_random_seed_by_dat.3 init_random_seed_by_system_clock.3 initialize_arrays.7 inpolygon.3 inquire.7
inquiry_stopwatch.3 insert.3 int.3 intrinsics.1 intrinsics.7
intrinsics_project.7 intro_blas1.3 inum0.3 invert_2x2.3 invert_3x3.3
invert_4x4.3 invokeobj.3m_drawplus ior.3 iparity.3 is_contiguous.3
is_iostat_end.3 is_iostat_eor.3 isalnum.3 isalpha.3 isascii.3
isblank.3 iscntrl.3 isdigit.3 isdir.3 isgraph.3
ishft.3 ishftc.3 islower.3 isnumber.3 iso_c_binding.7
isobj.3m_draw isprint.3 ispunct.3 isspace.3 isupper.3
isxdigit.3 j2d.3 join.3 join_watchgroup.3 journal.3
jucalc.3 jucalcx.3 julfit.3 julfit1.3 julian_to_date.3
junbad.3 junbat.3 junbuster.3 jundragon.3 junroach.3
junsun.3 juntrolls.3 justfy.3m_pixel kind.3 kracken.3
lasagna.7 lbound.3 lcm.1 leadz.3 least_common_multiple.3
leave_watchgroup.3 leftjustify.3m_draw len.3 len_trim.3 len_white.3
lenset.3 lgaxs.3m_calcomp lge.3 lget.3 lgets.3
lglin.3m_calcomp lgt.3 line.3m_calcomp line.3m_pixel linearint.3
linestyle.3m_draw linewidth.3m_draw linewidth.3m_pixel list_free.3 list_get.3
list_init.3 list_insert.3 list_next.3 list_put.3 listout.3
lle.3 llt.3 loadobj.3m_draw locate.3 locator.3m_draw
locpt.3 log.3 log_gamma.3 log10.3 logical.3
lookat.3m_draw lower.3 lowess.3 lsup.1 M_big_integer.3
M_calcomp.3m_calcomp M_calculator.3 M_calculator_example.3 M_calculator_plus.3 M_calculator_programmer_notes.3
M_color.3 M_Compare_Float_Numbers.3 M_debug.3 M_display.3 M_draw.3m_draw
M_drawplus.3m_drawplus M_factor.3 M_fixedform.3 M_generic_list.3 M_getopt.3
M_getopt_long.3 M_html.3 M_io.3 M_journal.3 M_kracken.3
M_logic.3 M_math.3 M_messages.3 M_overload.3 M_pixel.3m_pixel
M_process.3 M_random.3 M_readline.3 M_regex.3 M_sha3.3
M_sort.3 M_sqlite.3 M_steam67.3m_steam67 M_stopwatch.3 M_strings.3
M_system.3 M_time.3 M_units.3 M_uuid.3 M_xterm.3
mac_and_cheese.7 magic_square.3 makeobj.3m_draw makeout.1 makepoly.3m_draw
makepoly.3m_pixel man1 man2 man3 man3i
man4 man5 man6 man7 man8
manup.1 mapcolor.3m_draw mapcolor.3m_pixel maskl.3 maskr.3
matchw.3 matmul.3 max.3 maxexponent.3 maxloc.3
maxval.3 merge.3 merge_bits.3 merge_str.3 meters_to_feet.3
min.3 minefield.1m_draw minexponent.3 minloc.3 minval.3
mo2d.3 mo2v.3 mod.3 model.1 modif.3
modulo.3 month.1 moon_fullness.3 move.3m_draw move_alloc.3
move2.3m_draw move2.3m_pixel mtprng_init.3 mtprng_init_by_array.3 mtprng_rand.3
mtprng_rand_range.3 mtprng_rand_real1.3 mtprng_rand_real2.3 mtprng_rand_real3.3 mtprng_rand64.3
mvbits.3 namelist.7 nc2html.1 nearest.3 new_line.3
newpen.3m_calcomp nframe.3m_calcomp nint.3 noesc.3 norm_angle_360.3
norm_angle_rad.3 norm2.3 nospace.3 not.3 notabs.1
notabs.3 note.1 notopen.3 now.1 now.3
null.3 nullify.7 num_images.3 number.3m_calcomp numchars.3m_draw
numdiff.1 o2d.3 open.7 option_stopwatch.3 ordinal_to_date.3
ortho.3m_draw ortho2.3m_draw ortho2.3m_pixel p23t67.3m_steam67 pack.3
page.3M_drawplus page.3m_pixel pancakes.7 paranoid.1 parity.3
parse.3 patch.3m_draw patchbasis.3m_draw patchcurves.3m_draw patchprecision.3m_draw
pause_watch.3 paws.1 pdec.3 pendulum.1 penv.1
percent_done.3 perspective.3m_draw phase_of_moon.3 planets.1 plot.3m_calcomp
plots.3m_calcomp pls67.3m_steam67 point.3m_draw point2.3m_draw point2.3m_pixel
pointers.7 polar.3m_calcomp polar_to_cartesian.3 polarview.3m_draw poly.3m_calcomp
poly.3m_draw poly_intercept.3 poly2.3m_draw poly2.3m_pixel polyarea.3
polyarea_shoelace.3 polyfill.3m_draw polyhatch.3m_draw polyline2.3m_drawplus polyline2.3m_pixel
pop.3m_drawplus popattributes.3m_draw popcnt.3 popdev.3m_draw popmatrix.3m_draw
poppar.3 popviewport.3m_draw pounds_to_kilograms.3 ppm.5 precision.3
prefposition.3m_draw prefsize.3m_draw prefsize.3m_pixel present.3 prime_factors.3
print_ascii.3m_pixel print_inquire.3 print_ppm.3m_pixel print_watch.3 prliq67.3m_steam67
process_close.3 process_open_read.3 process_open_write.3 process_readall.3 process_readline.3
process_writeline.3 product.3 protected.7 prstm67.3m_steam67 psl167.3m_steam67
psl67.3m_steam67 psv167.3m_steam67 psv267.3m_steam67 psv67.3m_steam67 pumpkin_roll.7
push.3m_drawplus pushattributes.3m_draw pushdev.3m_draw pushmatrix.3m_draw pushviewport.3m_draw
quadratic.1 quadratic.3 r2d.3 radix.3 random_hex.3
random_kiss64.3 random_number.3 random_permutation.3 random_seed.3 random_string.3
range.1 range.3 rank.3 rcurve.3m_draw rd.3
rdbox.3 rdpnt.3 rdraw.3m_draw rdraw2.3m_draw rdraw2.3m_pixel
read_all.3 read_line.3 read_table.3 read_watch.3 readgif.3
real.3 recipes.7 rect.3m_calcomp rect.3m_draw rect.3m_pixel
redo.3 regcomp.3 regerror.3 regexec.3 regfree.3
regmatch.3 regsub.3 remove.3 rep.1 repeat.3
replace.3 reset_watch.3 reshape.3 retrev.3 rever.1
reverse.3 rewind.7 rgbmono.3 rget.3 rgets.3
rgetvalue.3 rightjustify.3m_draw rmove.3m_draw rmove2.3m_draw rmove2.3m_pixel
rnum0.3 rotate.3m_draw rpatch.3m_draw rrspacing.3 rsdraw2.3m_draw
rsmove2.3m_draw s2c.3 s2v.3 s2vs.3 same_type_as.3
save.7 saveobj.3m_draw scale.3 scale.3m_calcomp scale.3m_draw
scale1.3 scale3.3 scalg.3m_calcomp scan.3 scramble.3
scratch.7 sdbm_hash.3 sdraw2.3m_draw sec2days.1 sec2days.3
sector.3m_draw seefont.1 seefont.3m_drawplus select.7 selected_char_kind.3
selected_int_kind.3 selected_real_kind.3 set_environment_variable.3 set_exponent.3 setprompts.3
setxt.1 sget.3 sgetgp2.3m_draw sgets.3 sha256.3
shape.3 shell.1 shifta.3 shiftl.3 shiftr.3
show.3 sign.3 sign.7 signs.3 sin.3
sind.3 sinh.3 sisiss67.3m_steam67 size.3 skekur1.3
skekurx.3 slice.1m_draw slocator.3m_draw slurp.3 smoot.3m_calcomp
smove2.3m_draw sngl.3 snum0.3 soft_pretzel.7 sort_quick_rx.3
sort_shell.3 spacing.3 spherical_to_cartesian.3 spirograph.3m_drawplus splift.3
splint.3 split.3 splitname.1 splitpath.3 spread.3
spsiss67.3m_steam67 sqlite3_begin.3 sqlite3_close.3 sqlite3_column_props.3 sqlite3_column_query.3
sqlite3_commit.3 sqlite3_create_table.3 sqlite3_delete_table.3 sqlite3_do.3 sqlite3_errmsg.3
sqlite3_error.3 sqlite3_finalize.3 sqlite3_get_column.3 sqlite3_get_table.3 sqlite3_insert.3
sqlite3_libversion.3 sqlite3_libversion_number.3 sqlite3_next_row.3 sqlite3_open.3 sqlite3_prepare.3
sqlite3_prepare_select.3 sqlite3_query_table.3 sqlite3_reset.3 sqlite3_rollback.3 sqlite3_set_column.3
sqlite3_sourceid.3 sqlite3_step.3 sqrt.3 ssl67.3m_steam67 sssicl67.3m_steam67
sssiss67.3m_steam67 start_watch.3 state.3m_pixel stddev.3 stderr.3
steamv67.3m_steam67 ster67.3m_steam67 stop.7 stop_watch.3 storage_size.3
store.3 strgar2.3 strgarr.3 string_to_value.3 string_to_values.3
strlength.3m_draw strlength.3m_pixel stuff.3 stuffa.3 substitute.3
sum.3 swap.3 swapbuffers.3m_draw switch.3 symbol.3m_calcomp
symbol2atomnum.3 system_access.3 system_chdir.3 system_chmod.3 system_chown.3
system_clearenv.3 system_clock.3 system_closedir.3 system_cpu_time.3 system_errno.3
system_getcwd.3 system_getegid.3 system_getenv.3 system_geteuid.3 system_getgid.3
system_getgrgid.3 system_gethostname.3 system_getkey.3 system_getlogin.3 system_getpid.3
system_getppid.3 system_getpwuid.3 system_getsid.3 system_getuid.3 system_getumask.3
system_initenv.3 system_isblk.3 system_ischr.3 system_isdir.3 system_isfifo.3
system_islnk.3 system_isreg.3 system_issock.3 system_kill.3 system_link.3
system_mkdir.3 system_mkfifo.3 system_opendir.3 system_perm.3 system_perror.3
system_putenv.3 system_rand.3 system_readdir.3 system_readenv.3 system_readline.3
system_remove.3 system_rename.3 system_rewinddir.3 system_rmdir.3 system_setumask.3
system_sleep.3 system_srand.3 system_stat.3 system_stat_print.3 system_uname.3
system_unlink.3 system_unsetenv.3 system_utime.3 t2m.1 tabgraph.3
table2html.1 tabulate.1 tan.3 tand.3 tanh.3
textang.3m_draw textang.3m_pixel textjustify.3m_draw textsize.3m_draw textsize.3m_pixel
textslant.3m_draw textweight.3m_draw this_image.3 tiny.3 today.1
topjustify.3m_draw tostring.3 tostring_disp_factory.3 tostring_set.3 tostring_set_factory.3
tph67.3m_steam67 tphl67.3m_steam67 tps67.3m_steam67 tpsl67.3m_steam67 trailz.3
transfer.3 translate.3m_draw transliterate.3 transpose.3 trim.3
tsl167.3m_steam67 tsl67.3m_steam67 tslh67.3m_steam67 ttee.1 txt2man.1
u2d.3 uarc.3m_drawplus ubound.3 uconic.3m_drawplus ufpp.1
ufpp_overview.7 unexpandviewport.3m_draw uniq.3 unique.3 unit_check.3
unit_check_bad.3 unit_check_good.3 unit_check_start.3 unix_to_date.3 unpack.3
unquote.3 up.3m_draw upper.3 use.7 v2mo.3
v2s.3 value_to_string.3 vcl67.3m_steam67 verify.3 vest67.3m_steam67
vexit.3m_draw vexit.3m_pixel vflush.3m_draw vgetdev.3m_draw viewport.3m_draw
viewport.3m_pixel vinit.3m_draw vinit.3m_pixel visible.3 visl67.3m_steam67
visv67.3m_steam67 vliq67.3m_steam67 vnewdev.3m_draw voutput.3m_draw vsetflush.3m_draw
vsl67.3m_steam67 w2d.3 what.1 what_overview.7 where.3m_calcomp
where.7 window.3m_draw write_animated_gif.3 writegif.3 xauth_key.1
xcentertext.3m_draw xcentertext.3m_pixel xterm_clear.3 xterm_colors.3 xterm_font.3
xterm_geometry.3 xterm_get_colors.3 xterm_get_font.3 xterm_get_geometry.3 xterm_get_iconstate.3
xterm_get_pencolor.3 xterm_get_position.3 xterm_keywords.3 xterm_labels.3 xterm_occupancy.3
xterm_pencolor.3 xterm_position.3 xterm_width.3 xterm_xrdb.3 xy.1
ycentertext.3m_draw ycentertext.3m_pixel zqjrem67.3m_steam67 zsdh67.3m_steam67 zsdt67.3m_steam67
zsrh67.3m_steam67 zsrt67.3m_steam67      


Most of the code is maintained using a custom programming environment. The original source files are mostly ufpp(1) input files and/or HTML documents. To eliminate the need to install this custom environment all the source files have been expanded to standard Fortran and C source.

To simplify building the resulting collection of code a make(1) file has been automatically generated using makeout(1) to compile the sources.

Using a variety of utilities (primarily ufpp(1) and txt2man(1) ) the help text is generally part of the source file and automatically converted to comments, flat text, HTML and man(1) pages.

For those interested (particulary since ufpp(1) is one of the utilities included in this collection) most of the source is kept as ufpp(1) files. ufpp(1) can write text blocks to various files. This allows basic documentation to easily be maintained with the source. These blocks are then converted either into comments or help functions in the code by ufpp(1), but also optionally written to a common directory where they can be further processed, if required (they might already be HTML, which generally does not need further processing). For simple routines the documentation is often written to look like a flat text version of a man(1) page; which has proven to be a good standard for documenting procedures, which many people are familiar with, and integrates into Unix/Linux environments and tools. The txt2man(1) utility is used to convert the flat files to *roff files; other files are run thru markdown(1) or LaTex(1) or other utilities as appropriate, based on the suffix of the files.

The utility groff(1) was originally used to convert the man(1) pages to HTML and PDF but it has a bug as of this writing where it removes significant spaces when generating HTML; so the man(1) pages are now formatted using manserver.pl. Also see rman(1), html2man(1), and roff2html(1). It sounds complicated but is totally automated just using a few bash(1) scripts to glue it together, and provides for an easy way to maintain documentation and source in the same file.

LINK: GPF home