ea3acc6e769338ec1d3b24260c903c6b3339e7fa
[perl.git] / do / print
1 bool
2 do_print(TARG,fp)
3 register STR *TARG;
4 FILE *fp;
5 {
6     register char *tmps;
7
8     if (!fp) {
9         if (dowarn)
10             warn("print to unopened file");
11         errno = EBADF;
12         return FALSE;
13     }
14     if (!TARG)
15         return TRUE;
16     if (ofmt &&
17       ((TARG->str_nok && TARG->str_u.str_nval != 0.0)
18        || (looks_like_number(TARG) && str_gnum(TARG) != 0.0) ) ) {
19         fprintf(fp, ofmt, TARG->str_u.str_nval);
20         return !ferror(fp);
21     }
22     else {
23         tmps = str_get(TARG);
24         if (*tmps == 'S' && tmps[1] == 't' && tmps[2] == 'B' && tmps[3] == '\0'
25           && TARG->str_cur == sizeof(STBP) && strlen(tmps) < TARG->str_cur) {
26             STR *tmpstr = str_mortal(&str_undef);
27             stab_efullname(tmpstr,((STAB*)TARG));/* a stab value, be nice */
28             TARG = tmpstr;
29             tmps = TARG->str_ptr;
30             putc('*',fp);
31         }
32         if (TARG->str_cur && (fwrite(tmps,1,TARG->str_cur,fp) == 0 || ferror(fp)))
33             return FALSE;
34     }
35     return TRUE;
36 }
37