-#ifdef UNIX
- outs(stringp->str, stringp->str_lg);
-#endif UNIX
-#ifdef VMS
- {
- reg int i;
- for (i=0; i < stringp->str_lg; i++){
- dotp->e_xvalue += 1;
- if (passno==2){
- puchar(vms_obj_ptr,-1);
- puchar(vms_obj_ptr,stringp->str[i]);
- if (vms_obj_ptr-sobuf > 400) {
- write(objfil,sobuf,vms_obj_ptr-sobuf);
- vms_obj_ptr = sobuf + 1;
- }
- }
+ /*
+ * utilize the string scanner cheat;
+ * the scanner appended a null byte on the string,
+ * but didn't charge it to sd_strlen
+ */
+ mystrlen = stringp->sd_strlen;
+ mystrlen += (auxval == IASCIZ) ? 1 : 0;
+ if (passno == 2){
+ if (stringp->sd_place & STR_CORE){
+ outs(stringp->sd_string, mystrlen);
+ } else {
+ int i, nread;
+ fseek(strfile, stringp->sd_stroff, 0);
+ for (i = 0; i < mystrlen;/*VOID*/){
+ nread = fread(yytext, 1,
+ min(mystrlen - i,
+ sizeof(yytext)), strfile);
+ outs(yytext, nread);
+ i += nread;
+ }