2 * Copyright (c) 1985, 1993, 1994
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 domacro(int argc
, char **argv
)
40 int i
, j
, count
= 2, loopflg
= 0;
41 char *cp1
, *cp2
, line2
[200];
44 if (argc
< 2 && !another(&argc
, &argv
, "macro name")) {
45 printf("Usage: %s macro_name.\n", argv
[0]);
49 for (i
= 0; i
< macnum
; ++i
) {
50 if (!strncmp(argv
[1], macros
[i
].mac_name
, 9)) {
55 printf("'%s' macro not found.\n", argv
[1]);
59 strlcpy(line2
, line
, sizeof(line2
));
61 cp1
= macros
[i
].mac_start
;
62 while (cp1
!= macros
[i
].mac_end
) {
63 while (isspace(*cp1
)) {
67 while (*cp1
!= '\0') {
73 if (isdigit(*(cp1
+1))) {
75 while (isdigit(*++cp1
)) {
76 j
= 10*j
+ *cp1
- '0';
80 strcpy(cp2
, argv
[j
+1]);
81 cp2
+= strlen(argv
[j
+1]);
85 if (*(cp1
+1) == 'i') {
89 strcpy(cp2
, argv
[count
]);
90 cp2
+= strlen(argv
[count
]);
94 /* intentional drop through */
105 c
= getcmd(margv
[0]);
106 if (c
== (struct cmd
*)-1) {
107 printf("?Ambiguous command\n");
111 printf("?Invalid command\n");
114 else if (c
->c_conn
&& !connected
) {
115 printf("Not connected.\n");
122 (*c
->c_handler
)(margc
, margv
);
123 if (bell
&& c
->c_bell
) {
131 if (cp1
!= macros
[i
].mac_end
) {
135 if (loopflg
&& ++count
< argc
) {