aboutsummaryrefslogtreecommitdiff
path: root/sys/fmtio/fpradv.x
blob: 942c29aa5dd6f58793f3363c3606670a34e762ec (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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<ctype.h>
include	<chars.h>
include	<printf.h>

# FPRADV -- Copy format chars to output until next "%w.dC" format sequence is
# encountered, or until EOS is encountered on format string.  When EOS is
# encountered, return buffer containing format string, and if mem_flag is set,
# close the output file (a string) as well.  If a format string contains no
# regular format sequences, and hence requires no PARG_ calls, we are all done.

procedure fpradv()

int	i, junk, ival, ch
char	cch
int	ip_save
int	ctoi(), cctoc()
include "fmt.com"
errchk	putci

begin
	for (ch = format[ip];  ch != EOS;  ch = format[ip]) {
	    cch = ch
	    if (ch == ESCAPE) {
		junk = cctoc (format, ip, cch)

	    } else if (ch == START_OF_FORMAT) {
		if (format[ip+1] == START_OF_FORMAT)	# '%%' --> '%'
		    ip = ip + 2

		else if (IS_DIGIT (format[ip+1])) {	# %Nw or %Nt
		    ip_save = ip			# ip_save --> '%'
		    ip = ip + 1

		    junk = ctoi (format, ip, ival)

		    switch (format[ip]) {
		    case FMT_WHITESPACE:		# output blanks
			do i = 1, ival
			    call putci (fd, BLANK)
			col = col + ival
		    case FMT_TOCOLUMN:			# advance to column
			for (;  col < ival;  col=col+1)
			    call putci (fd, BLANK)
		    default:
			ip = ip_save			# regular format spec
			return
		    }

		    ip = ip + 1				# eat "t" or "w"
		    next

		} else
		    return				# regular format spec

	    } else
		ip = ip + 1

	    call putc (fd, cch)				# output ordinary chars
	    if (IS_PRINT (cch))				# keep track of column
		col = col + 1
	    else
		call fmt_setcol (cch, col)
	}

	switch (ofile_type) {				# EOS of format reached
	case STRING_FILE:
	    call close (fd)
	case CL_PARAM:
	    call putline (CLOUT, "\"\n")
	}

	ofile_type = REGULAR_FILE			# restore default
	fd = NULL
end