aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/threed/tscopy/tscopy.x
blob: 30629f6ce4ab8cf6cf6bde7ba452cec34f48f529 (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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
include	<error.h>

# tcopy -- Copy table(s)

# The input tables are given by an filename template list.  The output
# is either a matching list of tables or a directory.  The number of
# input tables may be either one or match the number of output tables.
# This is based on the t_imcopy procedure.
#
# Phil Hodge, 21-Aug-87  Task created.
# Phil Hodge,  7-Sep-88  Change parameter names for tables.
# Phil Hodge, 28-Dec-89  Use iferr with call to tbtcpy.
# Phil Hodge, 26-Mar-92  Remove calls to tbtext.
# B.Simon,    04-Nov-94  Replace call to tbtcpy with tcpyone
# I.Busko,    20-Nov-95  Add support for ASCII output.

procedure t_tcopy()

char	tablist1[SZ_LINE]		# Input table list
char	tablist2[SZ_LINE]		# Output table list
bool	verbose				# Print operations?

char	table1[SZ_PATHNAME]		# Input table name
char	table2[SZ_PATHNAME]		# Output table name
char	dirname1[SZ_PATHNAME]		# Directory name
char	dirname2[SZ_PATHNAME]		# Directory name

int	list1, list2, root_len
pointer	sp

int	imtopen(), imtgetim(), imtlen()
int	fnldir(), isdirectory()
bool	clgetb(), streq()

begin
	# Get input and output table template lists.

	call clgstr ("intable", tablist1, SZ_LINE)
	call clgstr ("outtable", tablist2, SZ_LINE)
	verbose = clgetb ("verbose")

	# Check if the output string is a directory.

	if (isdirectory (tablist2, dirname2, SZ_PATHNAME) > 0 &&
                !streq (tablist2, "STDOUT")) {
	    list1 = imtopen (tablist1)	
	    while (imtgetim (list1, table1, SZ_PATHNAME) != EOF) {
		call smark (sp)

		# Place the input table name without a directory in
		# string dirname1.

		call get_root (table1, table2, SZ_PATHNAME)
		root_len = fnldir (table2, dirname1, SZ_PATHNAME)
		call strcpy (table2[root_len + 1], dirname1, SZ_PATHNAME)

		call strcpy (dirname2, table2, SZ_PATHNAME)
		call strcat (dirname1, table2, SZ_PATHNAME)

		if (verbose) {
		    call eprintf ("%s -> %s\n")
			call pargstr (table1)
			call pargstr (table2)
		}
		iferr (call tcpyone (table1, table2))
		    call erract (EA_WARN)

		call sfree (sp)
	    }
	    call imtclose (list1)

	} else {
	    # Expand the input and output table lists.

	    list1 = imtopen (tablist1)
	    list2 = imtopen (tablist2)

	    if (imtlen (list1) != imtlen (list2)) {
	        call imtclose (list1)
	        call imtclose (list2)
	        call error (1, "Number of input and output tables not the same")
	    }

	    # Copy each table.

	    while ((imtgetim (list1, table1, SZ_PATHNAME) != EOF) &&
		   (imtgetim (list2, table2, SZ_PATHNAME) != EOF)) {

		call smark (sp)

		if (streq (table1, table2)) {
		    call eprintf ("can't copy table to itself:  %s\n")
			call pargstr (table1)
		    next
		}
		if (verbose) {
		    call eprintf ("%s -> %s\n")
			call pargstr (table1)
			call pargstr (table2)
		}
		iferr (call tcpyone (table1, table2))
		    call erract (EA_WARN)

		call sfree (sp)
	    }

	    call imtclose (list1)
	    call imtclose (list2)
	}
end