# 2.11BSD#431 - /usr/src/ucb/PORT/pascal/src/yyput.c

##### Functions

    graphic           X
    yySsync           X
    yyflush           X
    yygetline         X
    yyoutfl           X
    yyoutline         X
    yyprintf          X
    yyprline          X
    yyputfn           X
    yyretrieve        X
    yysetfile         X
    yysync            X

##### Variables

    bottled           X
    hadsome           X
    holdbl            X
    lastid            X
    lastname          X
    printed           X
    yygetfile         X

##### struct's

    B                 X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)yyput.c	5.1 (Berkeley) 6/5/85";
       9: #endif not lint
      10:
      11: #include "whoami.h"
      12: #include "0.h"
      13: #include "tree.h"
      14: #include "tree_ty.h"    /* must be included for yy.h */
      15: #include "yy.h"
      16:
      17: /*
      18:  * Structure describing queued listing lines during the forward move
      19:  * of error recovery.  These lines will be stroed by yyoutline during
      20:  * the forward move and flushed by yyoutfl or yyflush when an
      21:  * error occurs or a program termination.
      22:  */
      23: struct  B {
      24:     int Bmagic;
      25:     int Bline;
      26:     int Bseekp;
      27:     char    *Bfile;
      28:     int Bseqid;
      29:     struct  B *Bnext;
      30: } *bottled;
      31:
      32: /*
      33:  * Filename gives the current input file, lastname is
      34:  * the last filename we printed, and lastid is the seqid of the last line
      35:  * we printed, to help us avoid printing
      36:  * multiple copies of lines.
      37:  */
      38: extern  char *filename;
      39: char    *lastname;
      40: int lastid;
      41:
      42: char    hadsome;
      43: char    holdbl;
      44:
      45: /*
      46:  * Print the current line in the input line
      47:  * buffer or, in a forward move of the recovery, queue it for printing.
      48:  */
      49: yyoutline()
      50: {
      51:     register struct B *bp;
      52:
      53:     if (Recovery) {
      54:         bp = (struct B *) tree(6, T_BOTTLE, yyline, yylinpt, filename,
      55:                 yyseqid);
      56:         if (bottled != NIL)
      57:             bp->Bnext = bottled->Bnext, bottled->Bnext = bp;
      58:         else
      59:             bp->Bnext = bp;
      60:         bottled = bp;
      61:         return;
      62:     }
      63:     yyoutfl(yyseqid);
      64:     if (yyseqid != lastid)
      65:         yyprline(charbuf, yyline, filename, yyseqid);
      66: }
      67:
      68: /*
      69:  * Flush all the bottled output.
      70:  */
      71: yyflush()
      72: {
      73:
      74:     yyoutfl(32767);
      75: }
      76:
      77: /*
      78:  * Flush the listing to the sequence id toseqid
      79:  */
      80: yyoutfl(toseqid)
      81:     int toseqid;
      82: {
      83:     register struct B *bp;
      84:
      85:     bp = bottled;
      86:     if (bp == NIL)
      87:         return;
      88:     bp = bp->Bnext;
      89:     while (bp->Bseqid <= toseqid) {
      90:         yygetline(bp->Bfile, bp->Bseekp, bp->Bline, bp->Bseqid);
      91:         if (bp->Bnext == bp) {
      92:             bottled = NIL;
      93:             break;
      94:         }
      95:         bp = bp->Bnext;
      96:         bottled->Bnext = bp;
      97:     }
      98: }
      99:
     100: FILE    *yygetunit = NULL;
     101: char    *yygetfile;
     102:
     103: /*
     104:  * Yysync guarantees that the line associated
     105:  * with the current token was the last line
     106:  * printed for a syntactic error message.
     107:  */
     108: yysync()
     109: {
     110:
     111:     yyoutfl(yyeseqid);
     112:     if (lastid != yyeseqid)
     113:         yygetline(yyefile, yyseekp, yyeline, yyeseqid);
     114: }
     115:
     116: yySsync()
     117: {
     118:
     119:     yyoutfl(OY.Yyeseqid);
     120: }
     121:
     122: /*
     123:  * Yygetline gets a line from a file after we have
     124:  * lost it.  The pointer efile gives the name of the file,
     125:  * seekp its offset in the file, and eline its line number.
     126:  * If this routine has been called before the last file
     127:  * it worked on will be open in yygetunit, with the files
     128:  * name being given in yygetfile.  Note that this unit must
     129:  * be opened independently of the unit in use for normal i/o
     130:  * to this file; if it were a dup seeks would seek both files.
     131:  */
     132: yygetline(efile, seekp, eline, eseqid)
     133:     char *efile;
     134:     int seekp, eline, eseqid;
     135: {
     136:     register int cnt;
     137:     register char *bp;
     138:     char buf[CBSIZE + 1];
     139:
     140:     if (lastid == eseqid)
     141:         return;
     142:     if (eseqid == yyseqid) {
     143:         bp = charbuf;
     144:         yyprtd++;
     145:     } else {
     146:         bp = buf;
     147:         if (efile != yygetfile) {
     148:             if ( yygetunit != NULL )
     149:                 (void) fclose( yygetunit );
     150:             yygetfile = efile;
     151:             yygetunit = fopen( yygetfile , "r" );
     152:             if (yygetunit < 0)
     153: oops:
     154:                 perror(yygetfile), pexit(DIED);
     155:         }
     156:         if ( fseek( yygetunit , (long) seekp , 0 ) < 0)
     157:             goto oops;
     158:         cnt = fread( bp , sizeof( * bp ) , CBSIZE , yygetunit );
     159:         if (cnt < 0)
     160:             goto oops;
     161:         bp[cnt] = 0;
     162:     }
     163:     yyprline(bp, eline, efile, eseqid);
     164: }
     165:
     166: yyretrieve()
     167: {
     168:
     169:     yygetline(OY.Yyefile, OY.Yyseekp, OY.Yyeline, OY.Yyeseqid);
     170: }
     171:
     172: /*
     173:  * Print the line in the character buffer which has
     174:  * line number line.  The buffer may be terminated by a new
     175:  * line character or a null character.  We process
     176:  * form feed directives, lines with only a form feed character, and
     177:  * suppress numbering lines which are empty here.
     178:  */
     179: yyprline(buf, line, file, id)
     180:     register char *buf;
     181:     int line;
     182:     char *file;
     183:     int id;
     184: {
     185:
     186:     lastid = id;
     187:     if (buf[0] == '\f' && buf[1] == '\n') {
     188:         printf("\f\n");
     189:         hadsome = 0;
     190:         holdbl = 0;
     191:         return;
     192:     }
     193:     if (holdbl) {
     194:         pchr('\n');
     195:         holdbl = 0;
     196:     }
     197:     if (buf[0] == '\n')
     198:         holdbl = 1;
     199:     else {
     200:         yysetfile(file);
     201:         yyprintf(buf, line);
     202:     }
     203:     hadsome = 1;
     204: }
     205:
     206: yyprintf(cp, line)
     207:     register char *cp;
     208:     int line;
     209: {
     210:
     211:     printf("%6d  ", line);
     212:     while (*cp != 0 && *cp != '\n')
     213:         pchr(graphic(*cp++));
     214:     pchr('\n');
     215: }
     216:
     217: graphic(ch)
     218:     register CHAR ch;
     219: {
     220:
     221:     switch (ch) {
     222:         default:
     223:             if (ch >= ' ')
     224:                 return (ch);
     225:         case 0177:
     226:             return ('?');
     227:         case '\n':
     228:         case '\t':
     229:             return (ch);
     230:     }
     231: }
     232:
     233: extern  int nopflg;
     234:
     235: char    printed = 1;
     236: /*
     237:  * Set the current file name to be file,
     238:  * printing the name, or a header on a new
     239:  * page if required.
     240:  * there is another yysetfile in error.c
     241:  * this one is for PI and PXP that one is for PI1
     242:  */
     243: yysetfile(file)
     244:     register char *file;
     245: {
     246:
     247: #ifdef PXP
     248:     if (nopflg == 1)
     249:         return;
     250: #endif
     251:
     252:     if (lastname == file)
     253:         return;
     254:     if (file == filename && opt('n') && (printed & 02) == 0) {
     255:         printed |= 02;
     256:         header();
     257:     } else
     258:         yyputfn(file);
     259:     lastname = file;
     260: }
     261:
     262: /*
     263:  * Put out an include file name
     264:  * if an error occurs but the name has
     265:  * not been printed (or if another name
     266:  * has been printed since it has).
     267:  */
     268: yyputfn(cp)
     269:     register char *cp;
     270: {
     271:     extern int outcol;
     272:
     273:     if (cp == lastname && printed)
     274:         return;
     275:     lastname = cp;
     276:     printed = 1;
     277: #ifdef PXP
     278:     if (outcol)
     279:         pchr('\n');
     280: #endif
     281:     gettime( cp );
     282:     printf("%s  %s:\n" , myctime( (int *) (&tvec) ) , cp );
     283:     hadsome = 1;
     284: }

#### Defined functions

graphic defined in line 217; used 1 times

- in line 213

yySsync defined in line 116; used 1 times

- in /usr/src/ucb/PORT/pascal/src/fdec.c line 269

yyflush defined in line 71; used 1 times

- in /usr/src/ucb/PORT/pascal/src/main.c line 354

yygetline defined in line 132; used 3 times

- in line 90, 113, 169

yyoutfl defined in line 80; used 4 times

- in line 63, 74, 111, 119

yyoutline defined in line 49; used 3 times

- in /usr/src/ucb/PORT/pascal/src/error.c line 75
- in /usr/src/ucb/PORT/pascal/src/fdec.c line 272
- in /usr/src/ucb/PORT/pascal/src/yyget.c line 110

yyprintf defined in line 206; used 1 times

- in line 201

yyprline defined in line 179; used 2 times

- in line 65, 163

yyputfn defined in line 268; used 1 times

- in line 258

yyretrieve defined in line 166; used 1 times

- in /usr/src/ucb/PORT/pascal/src/fhdr.c line 56

yysetfile defined in line 243; used 3 times

- in line 200
- in /usr/src/ucb/PORT/pascal/src/fdec.c line 274
- in /usr/src/ucb/PORT/pascal/src/main.c line 320

yysync defined in line 108; used 1 times

- in /usr/src/ucb/PORT/pascal/src/yyerror.c line 61

#### Defined variables

bottled defined in line 30; used 8 times

- in line 56-60(4), 85, 92-96(2)
- in /usr/src/ucb/PORT/pascal/src/tree.c line 149

hadsome defined in line 42; used 3 times

- in line 189, 203, 283

holdbl defined in line 43; used 4 times

- in line 190-198(4)

lastid defined in line 40; used 4 times

- in line 64, 112, 140, 186

lastname defined in line 39; used 4 times

- in line 252, 259, 273-275(2)

printed defined in line 235; used 9 times

- in line 254-255(2), 273-276(2)
- in /usr/src/ucb/PORT/pascal/src/yyget.c line 269-270(2), 343-344(2), 350

sccsid defined in line 8; never used
yygetfile defined in line 101; used 4 times

- in line 147-154(4)

#### Defined struct's

B defined in line 23; used 8 times

- in line 29(2), 51-54(4), 83(2)

Last modified: 1985-06-06 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1074 |