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
|
include <fset.h> # to check whether I/O is redirected
define SYNTAX 1
# TSELECT -- Create a new table from selected rows of an old table
#
# B.Simon 7-Oct-1987 First Code
# Phil Hodge 7-Sep-1988 Change parameter names for tables.
# Phil Hodge 4-Oct-1995 Use table name template routines tbnopenp, etc.
# B.Simon 25-Aug-1998 Changed to write directly to output table
# Phil Hodge 8-Apr-1999 Call tbfpri.
# Phil Hodge 9-Jun-1999 Set input/output to STDIN/STDOUT if redirected.
procedure t_tselect()
pointer ilist # Input table name template
pointer olist # Output table name template
pointer expr # Expression used to select rows
#--
int junk
int phu_copied # set by tbfpri and ignored
pointer sp, itp, otp, intable, outtable
string nomatch "Number of input tables must match output tables"
int fstati()
int tbnget(), tbnlen()
pointer tbtopn(), tbnopenp(), tbnopen()
begin
# Allocate stack memory for strings
call smark (sp)
call salloc (intable, SZ_FNAME, TY_CHAR)
call salloc (outtable, SZ_FNAME, TY_CHAR)
call salloc (expr, SZ_LINE, TY_CHAR)
# Read the task parameters
if (fstati (STDIN, F_REDIR) == YES)
ilist = tbnopen ("STDIN")
else
ilist = tbnopenp ("intable")
if (fstati (STDOUT, F_REDIR) == YES)
olist = tbnopen ("STDOUT")
else
olist = tbnopenp ("outtable")
call clgstr ("expr", Memc[expr], SZ_LINE)
# Loop over all table names in the input file name template
if (tbnlen (ilist) != tbnlen (olist))
call error (SYNTAX, nomatch)
while (tbnget (ilist, Memc[intable], SZ_FNAME) != EOF) {
junk = tbnget (olist, Memc[outtable], SZ_FNAME)
# Open the tables
itp = tbtopn (Memc[intable], READ_ONLY, NULL)
call tbfpri (Memc[intable], Memc[outtable], phu_copied)
otp = tbtopn (Memc[outtable], NEW_COPY, itp)
# Copy header and selected rows to output table
call tbtcre (otp)
call tbhcal (itp, otp)
call subset (itp, otp, Memc[expr])
# Close the tables
call tbtclo (itp)
call tbtclo (otp)
}
# Close the filename template lists
call tbnclose (ilist)
call tbnclose (olist)
call sfree (sp)
end
|