1 /*****************************************************************************
2 
3 	ExeP()
4 
5 	This function executes a P or PW command.
6 	nP	Advance n pages
7 	m,nP	Write out chars m to n
8 	nPW	Write buffer n times
9 	m,nPW	Write out chars m to n
10 
11 *****************************************************************************/
12 
13 #include "zport.h"		/* define portability identifiers */
14 #include "tecoc.h"		/* define general identifiers */
15 #include "defext.h"		/* define external global variables */
16 #include "deferr.h"		/* define identifiers for error messages */
17 
ExeP()18 DEFAULT ExeP()			/* execute a P or PW command */
19 {
20 	BOOLEAN	SavEof;
21 
22 	DBGFEN(1,"ExeP",NULL);
23 
24 
25 	SavEof = IsEofI[CurInp];		/* save end-of-file flag */
26 
27 	if (EStTop == EStBot) {			/* if no numeric argument */
28 		NArgmt = 1;			/* default is 1P */
29 	} else {
30 		if (GetNmA() == FAILURE) {	/* get numeric argument */
31 			DBGFEX(1,DbgFNm,"FAILURE");
32 			return FAILURE;
33 		}
34 		if ((NArgmt <= 0) && ((CmdMod & MARGIS) == 0)) {
35 			ErrMsg(ERR_IPA);	/* negative or 0 arg to P */
36 			DBGFEX(1,DbgFNm,"FAILURE");
37 			return FAILURE;
38 		}
39 	}
40 
41 /*
42  * If it's a "PW" or "m,nP" command,  let ExePW handle it.
43  */
44 	if ((CBfPtr != CStEnd) &&
45 	    ((*(CBfPtr+1) == 'W') || (*(CBfPtr+1) == 'w'))) {
46 		++CBfPtr;			/* skip the "W" */
47 		DBGFEX(1,DbgFNm,"ExePW");
48 		return ExePW();			/* execute a PW command */
49 	}
50 
51 	if (CmdMod & MARGIS) {			/* if it's m,nP */
52 		DBGFEX(1,DbgFNm,"ExePW");
53 		return ExePW();			/* execute a PW command */
54 	}
55 
56 	do {
57 		if (SinglP() == FAILURE) {
58 			DBGFEX(1,DbgFNm,"FAILURE");
59 			return FAILURE;
60 		}
61 	} while ((--NArgmt > 0) && !IsEofI[CurInp]);
62 
63 	if (CmdMod & COLON) {			/* if it's :P */
64 		DBGFEX(1,DbgFNm,SavEof ? "PushEx(0)" : "PushEx(-1)");
65 		return PushEx(SavEof ? 0L : -1L, OPERAND);
66 	}
67 
68 	CmdMod = '\0';				/* clear modifiers flags */
69 
70 	DBGFEX(1,DbgFNm,"SUCCESS");
71 	return SUCCESS;
72 }
73