1 /*****************************************************************************
2
3 ExeI()
4
5 This function executes an I command.
6 Itext$ Insert text
7 nI Insert ASCII character "n"
8
9 *****************************************************************************/
10
11 #include "zport.h" /* define portability identifiers */
12 #include "tecoc.h" /* define general identifiers */
13 #include "defext.h" /* define external global variables */
14 #include "dchars.h" /* define identifiers for characters */
15 #include "deferr.h" /* define identifiers for error messages */
16
ExeI()17 DEFAULT ExeI() /* execute an I command */
18 {
19 unsigned char InChar;
20
21 DBGFEN(1,"ExeI",NULL);
22 if (EStTop > EStBot) { /* if numeric argument */
23 if (GetNmA() == FAILURE) { /* get numeric argument */
24 DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed");
25 return FAILURE;
26 }
27
28 if (CmdMod & ATSIGN) { /* if it's n@I// */
29 if (IncCBP() == FAILURE) {
30 DBGFEX(1,DbgFNm,"FAILURE, 1st IncCBP() failed");
31 return FAILURE;
32 }
33 if (IncCBP() == FAILURE) {
34 DBGFEX(1,DbgFNm,"FAILURE, 2nd IncCBP() failed");
35 return FAILURE;
36 }
37 if (*CBfPtr != *(CBfPtr-1)) {
38 ErrMsg(ERR_IIA); /* illegal insert arg */
39 DBGFEX(1,DbgFNm,"FAILURE, illegal insert arg");
40 return FAILURE;
41 }
42 } else { /* else must be nI$ */
43 if ((CBfPtr+1) == CStEnd) {
44 if (MStTop < 0) {
45 ErrUTC();
46 DBGFEX(1,DbgFNm,"FAILURE, unterminated command");
47 return FAILURE;
48 } else {
49 DBGFEX(1,DbgFNm,"SUCCESS");
50 return SUCCESS;
51 }
52 }
53 if (*(CBfPtr+1) != ESCAPE) {
54 ErrMsg(ERR_IIA); /* illegal insert arg */
55 DBGFEX(1,DbgFNm,"FAILURE, illegal insert arg");
56 return FAILURE;
57 }
58 }
59 InChar = (char)NArgmt;
60 if (InsStr(&InChar, (ptrdiff_t)1) == FAILURE) {
61 DBGFEX(1,DbgFNm,"FAILURE, InsStr() failed");
62 return FAILURE;
63 }
64 } else { /* else no numeric argument */
65 if (FindES(ESCAPE) == FAILURE) {
66 DBGFEX(1,DbgFNm,"FAILURE, FindES() failed");
67 return FAILURE;
68 }
69 if (InsStr(ArgPtr, CBfPtr-ArgPtr) == FAILURE) {
70 DBGFEX(1,DbgFNm,"FAILURE, InsStr() failed");
71 return FAILURE;
72 }
73 }
74
75 CmdMod = '\0'; /* clear modifiers flags */
76
77 DBGFEX(1,DbgFNm,"SUCCESS");
78 return SUCCESS;
79 }
80