Annotation of 43BSD/contrib/icon/functions/display.c, revision 1.1.1.1

1.1       root        1: #include "../h/rt.h"
                      2: /*
                      3:  * display(i,f) - display local variables of i most recent
                      4:  * procedure activations, plus global variables.
                      5:  * Output to file f (default &errout).
                      6:  */
                      7: 
                      8: Xdisplay(nargs, arg2, arg1, arg0)
                      9: int nargs;
                     10: struct descrip arg2, arg1, arg0;
                     11:    {
                     12:    register int *ap, *fp;
                     13:    register struct descrip *dp;
                     14:    register struct descrip *np;
                     15:    register int n;
                     16:    long l;
                     17:    int count;
                     18:    FILE *f;
                     19:    struct b_proc *bp;
                     20:    extern int *boundary;
                     21:    extern struct descrip *globals, *eglobals;
                     22:    extern struct descrip *gnames;
                     23:    extern struct descrip *statics;
                     24: 
                     25:    /*
                     26:     * i defaults to &level; f defaults to &errout.
                     27:     */
                     28:    defint(&arg1, &l, k_level);
                     29:    deffile(&arg2, &errout);
                     30:    /*
                     31:     * Produce error if file can't be written on.
                     32:     */
                     33:    f = BLKLOC(arg2)->file.fd;
                     34:    if ((BLKLOC(arg2)->file.status & FS_WRITE) == 0)
                     35:       runerr(213, &arg2);
                     36: 
                     37:    /*
                     38:     * Produce error if i is negative; constrain i to be >= &level.
                     39:     */
                     40:    if (l < 0)
                     41:       runerr(205, &arg1);
                     42:    else if (l > k_level)
                     43:       count = k_level;
                     44:    else
                     45:       count = l;
                     46: 
                     47:    fp = boundary;              /* start fp at most recent procedure frame */
                     48:    while (count--) {           /* go back through 'count' frames */
                     49: #ifdef VAX
                     50:       ap = (int *) fp[2];      /* get old ap */
                     51:       fp = (int *) fp[3];      /* get old fp */
                     52:       if (fp == 0)             /* only trace back to start of current stack*/
                     53:          break;
                     54:       n = ap[1];               /* get number of arguments */
                     55:                                /* calculate address of procedure descriptor*/
                     56:       dp = (struct descrip *) (ap + 2 + 2*n);
                     57: #endif VAX
                     58: #ifdef PORT
                     59: /*
                     60:  * Insert code here to calculate (in dp) the address of arg0 in
                     61:  *  procedure frame prior to one referenced by fp.
                     62:  */
                     63: #endif PORT
                     64: #ifdef PDP11
                     65:       fp = fp[0];              /* get old fp */
                     66:       if (fp == 0)             /* only trace back to start of current stack*/
                     67:          break;
                     68:       n = fp[2];               /* get number of arguments */
                     69:       dp = fp + 3 + 2*n;       /* calculate address of procedure descriptor*/
                     70: #endif PDP11
                     71:       bp = (struct b_proc *) BLKLOC(*dp);      /* get address of procedure block */
                     72: 
                     73:       /*
                     74:        * Print procedure name.
                     75:        */
                     76:       putstr(f, STRLOC(bp->pname), STRLEN(bp->pname));
                     77:       fprintf(f, " local identifiers:\n");
                     78: 
                     79:       /*
                     80:        * Print arguments.
                     81:        */
                     82:       np = bp->lnames;
                     83:       for (n = bp->nparam; n > 0; n--) {
                     84:          fprintf(f, "   ");
                     85:          putstr(f, STRLOC(*np), STRLEN(*np));
                     86:          fprintf(f, " = ");
                     87:          outimage(f, --dp, 0);
                     88:          putc('\n', f);
                     89:          np++;
                     90:          }
                     91: 
                     92:       /*
                     93:        * Print local dynamics.
                     94:        */
                     95:       dp = (struct descrip *) (fp - FRAMELIMIT);
                     96:       for (n = bp->ndynam; n > 0; n--) {
                     97:          fprintf(f, "   ");
                     98:          putstr(f, STRLOC(*np), STRLEN(*np));
                     99:          fprintf(f, " = ");
                    100:          outimage(f, --dp, 0);
                    101:          putc('\n', f);
                    102:          np++;
                    103:          }
                    104: 
                    105:       /*
                    106:        * Print local statics.
                    107:        */
                    108:       dp = &statics[bp->fstatic];
                    109:       for (n = bp->nstatic; n > 0; n--) {
                    110:          fprintf(f, "   ");
                    111:          putstr(f, STRLOC(*np), STRLEN(*np));
                    112:          fprintf(f, " = ");
                    113:          outimage(f, dp++, 0);
                    114:          putc('\n', f);
                    115:          np++;
                    116:          }
                    117: 
                    118:       }
                    119: 
                    120:    /*
                    121:     * Print globals.
                    122:     */
                    123:    fprintf(f, "global identifiers:\n");
                    124:    dp = globals;
                    125:    np = gnames;
                    126:    while (dp < eglobals) {
                    127:       fprintf(f, "   ");
                    128:       putstr(f, STRLOC(*np), STRLEN(*np));
                    129:       fprintf(f, " = ");
                    130:       outimage(f, dp++, 0);
                    131:       putc('\n', f);
                    132:       np++;
                    133:       }
                    134:    fflush(f);
                    135:    arg0 = nulldesc;            /* Return null value. */
                    136:    }
                    137: 
                    138: Procblock(display,2)
                    139: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.