void puttokens(Tokenrow *trp) { Token *tp; int len; uchar *p; if (verbose) peektokens(trp, ""); tp = trp->bp; for (; tp<trp->lp; tp++) { len = tp->len+tp->wslen; p = tp->t-tp->wslen; while (tp<trp->lp-1 && p+len == (tp+1)->t - (tp+1)->wslen) { tp++; len += tp->wslen+tp->len; } memcpy(wbp, p, len); wbp += len; if (wbp >= &wbuf[OBS]) { write(STDOUT_FILENO, wbuf, OBS); if (wbp > &wbuf[OBS]) memcpy(wbuf, wbuf+OBS, wbp - &wbuf[OBS]); wbp -= OBS; } } trp->tp = tp; if (cursource->fd==0) flushout(); }
void puttokens(Tokenrow *trp) { Token *tp; int len; uchar *p; if (verbose) peektokens(trp, ""); tp = trp->bp; for (; tp<trp->lp; tp++) { len = tp->len+tp->wslen; p = tp->t-tp->wslen; while (tp<trp->lp-1 && p+len == (tp+1)->t - (tp+1)->wslen) { tp++; len += tp->wslen+tp->len; } if (len>OBS/2) { /* handle giant token */ if (wbp > wbuf) fwrite(wbuf, 1, wbp-wbuf, stdout); fwrite((char *)p, 1, len, stdout); wbp = wbuf; } else { memcpy(wbp, p, len); wbp += len; } if (wbp >= &wbuf[OBS]) { fwrite(wbuf, 1, OBS, stdout); if (wbp > &wbuf[OBS]) memcpy(wbuf, wbuf+OBS, wbp - &wbuf[OBS]); wbp -= OBS; } } trp->tp = tp; if (cursource->fd==stdin) flushout(); }
void puttokens(Tokenrow * trp) { Token *tp; int len; uchar *p; if (Vflag) peektokens(trp, ""); tp = trp->bp; for (; tp < trp->lp; tp++) { if (tp->type != NL) { len = (int)(tp->len + tp->wslen); p = tp->t - tp->wslen; /* add parameter check to delete operator? */ if( Dflag ) { if( (tp->type == NAME) && (strncmp( (char*)p, "delete", len ) == 0) ) { Token* ntp = tp; ntp++; if( ntp->type == NAME ) { uchar* np = ntp->t - ntp->wslen; int nlen = (int)(ntp->len + ntp->wslen); memcpy(wbp, "if(", 3 ); wbp += 4; memcpy(wbp, np, nlen ); wbp += nlen; memcpy(wbp, ")", 1 ); wbp++; memcpy(wbp, p, len); } } } /* EBCDIC to ANSI conversion requested? */ if( Aflag ) { /* keyword __ToLatin1__ found? -> do conversion! */ if( EBCDIC_StartTokenDetected ) { /* previous token was 'extern'? -> don't convert current token! */ if( EBCDIC_ExternTokenDetected ) { EBCDIC_ExternTokenDetected = 0; memcpy(wbp, p, len); } else { /* current token is keyword 'extern'? -> don't convert following token! */ if( (tp->wslen == 0) && (strncmp( (char*)p, "extern", len ) == 0) ) { EBCDIC_ExternTokenDetected = 1; memcpy(wbp, p, len); } else { /* token is string or char? -> process EBCDIC to ANSI conversion */ if ((tp->type == STRING) || (tp->type == CCON)) len = memcpy_EBCDIC(wbp, p, len); else memcpy(wbp, p, len); } } } else /* keyword __ToLatin1__ found? -> don't copy keyword and start conversion */ if( (tp->type == NAME) && (strncmp( (char*)p, "__ToLatin1__", len) == 0) ) { EBCDIC_StartTokenDetected = 1; len = 0; } else memcpy(wbp, p, len); } else memcpy(wbp, p, len); wbp += len; } else *wbp++ = '\n'; if (wbp >= &wbuf[OBS]) { if ( write(1, wbuf, OBS) != -1 ) { if (wbp > &wbuf[OBS]) memmove(wbuf, wbuf + OBS, wbp - &wbuf[OBS]); wbp -= OBS; } else exit(1); } } trp->tp = tp; if (cursource->fd == 0) flushout(); }