bda86c8b2cbf5b0cc9c1395e3971c956704f48b4
[perl.git] / do / aprint
1 bool
2 do_aprint(arg,fp,arglast)
3 register ARG *arg;
4 register FILE *fp;
5 int *arglast;
6 {
7     register STR **st = stack->ary_array;
8     register int sp = arglast[1];
9     register int retval;
10     register int items = arglast[2] - sp;
11
12     if (!fp) {
13         if (dowarn)
14             warn("print to unopened file");
15         errno = EBADF;
16         return FALSE;
17     }
18     st += ++sp;
19     if (arg->arg_type == O_PRTF) {
20         do_sprintf(ARGTARG,items,st);
21         retval = do_print(ARGTARG,fp);
22     }
23     else {
24         retval = (items <= 0);
25         for (; items > 0; items--,st++) {
26             if (retval && ofslen) {
27                 if (fwrite(ofs, 1, ofslen, fp) == 0 || ferror(fp)) {
28                     retval = FALSE;
29                     break;
30                 }
31             }
32             if (!(retval = do_print(*st, fp)))
33                 break;
34         }
35         if (retval && orslen)
36             if (fwrite(ors, 1, orslen, fp) == 0 || ferror(fp))
37                 retval = FALSE;
38     }
39     return retval;
40 }
41