aboutsummaryrefslogtreecommitdiff
path: root/pkg/system/help/prfile.x
blob: 8ecf1af1d34f8358ace68b80f031bb4c5155cc7b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<finfo.h>
include	<time.h>
include <ctype.h>
include	"help.h"

# PR_FILE -- Print a file.  Called to print menu files and source files.
# Do not print block header, but do page output if enabled by user.

procedure pr_file (fname, ctrl, pakname)

char	fname[ARB]
pointer	ctrl
char	pakname[ARB]

int	center_col, ip
long	fi[LEN_FINFO]
pointer	sp, lbuf, time
int	open(), hinput(), strlen(), finfo()
errchk	houtput, open, hinput

begin
	call smark (sp)
	call salloc (lbuf, SZ_LINE, TY_CHAR)
	call salloc (time, SZ_TIME, TY_CHAR)

	H_EOF(ctrl) = NO
	H_RAWIN(ctrl) = YES
	center_col = (H_LMARGIN(ctrl) + H_RMARGIN(ctrl)) / 2

	# Clear screen and print filename if printing source file.
	# Filename is printed centered between left and right margins.
	# Note header must be two lines for man_output().

	if (H_OPTION(ctrl) == O_SOURCE) {
	    if (finfo (fname, fi) == ERR) {
		call sprintf (Memc[lbuf], SZ_LINE, "%s `%s'")
		    call pargstr ("Cannot get file info for file")
		    call pargstr (fname)
		call error (20, Memc[lbuf])
	    }
	    call cnvtime (FI_MTIME(fi), Memc[time], SZ_TIME)

	    # Header format: "FILE  date  FILE".
	    call sprintf (Memc[lbuf], SZ_LINE, "%*t%s %*t%s %*t%s\n")
		call pargi   (H_LMARGIN(ctrl))
		call pargstr (fname)
		call pargi   (center_col - strlen(Memc[time]) / 2)
		call pargstr (Memc[time])
		call pargi   (H_RMARGIN(ctrl) - strlen (fname) + 1)
		call pargstr (fname)

	    call houtput (ctrl, "\f")
	    call houtput (ctrl, Memc[lbuf])
	    call houtput (ctrl, "\n")
	}

	# Use hinput/houtput to read and print file so that output is
	# paginated.
	H_IN(ctrl) = open (fname, READ_ONLY, TEXT_FILE)

	while (hinput (ctrl, Memc[lbuf]) != EOF) {
	    if (H_OPTION(ctrl) == O_REFERENCES) {
		# Replace the newline character.
		ip = strlen (Memc[lbuf]) - 1
		Memc[lbuf+ip] = ' '

		# Append the package name.
		call strcat (" [", Memc[lbuf], SZ_LINE)
		call strcat (pakname, Memc[lbuf], SZ_LINE)
		call strcat ("]\n", Memc[lbuf], SZ_LINE)

		# Strip leading whitespace.
		for (ip=0; IS_WHITE(Memc[lbuf+ip]); ip=ip+1)
		    ;
	        call houtput (ctrl, Memc[lbuf+ip])
	    } else
	        call houtput (ctrl, Memc[lbuf])
	}

	call close (H_IN(ctrl))
	call sfree (sp)
end