- register int c, i, j, k;
- register char *ptr;
- int nmsym, narea;
- struct sym *sp;
- struct sym **p;
- struct area *ap;
-
- /*
- * Symbol Table Header
- */
- strcpy(stb, &symtbl[0]);
- lop = NLPP;
- if (fp == tfp)
- page = 0;
- slew(fp, 1);
-
- /*
- * Find number of symbols
- */
- nmsym = 0;
- for (i=0; i<NHASH; i++) {
- sp = symhash[i];
- while (sp) {
- if (sp != &dot)
- ++nmsym;
- sp = sp->s_sp;
- }
- }
- if (nmsym == 0)
- goto atable;
-
- /*
- * Allocate space for an array of pointers to symbols
- * and load array.
- */
- if ((p = (struct sym **) malloc(sizeof((struct sym *) sp)*nmsym))
- == NULL) {
- fprintf(fp, "Insufficient space to build Symbol Table.\n");
- return;
- }
- nmsym = 0;
- for (i=0; i<NHASH; i++) {
- sp = symhash[i];
- while (sp) {
- if (sp != &dot)
- p[nmsym++] = sp;
- sp = sp->s_sp;
- }
- }
-
- /*
- * Bubble Sort on Symbol Table Array
- */
- j = 1;
- c = nmsym - 1;
- while (j) {
- j = 0;
- for (i=0; i<c; ++i) {
- if (strcmp(&p[i]->s_id[0],&p[i+1]->s_id[0]) > 0) {
- j = 1;
- sp = p[i+1];
- p[i+1] = p[i];
- p[i] = sp;
- }
- }
- }
-
- /*
- * Symbol Table Output
- */
- for (i=0; i<nmsym;) {
- sp = p[i];
- if (sp->s_area) {
- j = sp->s_area->a_ref;
- if (xflag == 0) {
- fprintf(fp, " %2X ", j);
- } else
- if (xflag == 1) {
- fprintf(fp, "%3o ", j);
- } else
- if (xflag == 2) {
- fprintf(fp, "%3u ", j);
- }
- } else {
- fprintf(fp, " ");
- }
- ptr = &sp->s_id[0];
- while (ptr < &sp->s_id[NCPS]) {
- if ((c = *ptr++) != 0) {
- putc(c, fp);
- } else {
- putc(' ', fp);
- }
- }
- if (sp->s_flag & S_ASG) {
- putc('=', fp);
- } else {
- putc(' ', fp);
- }
- if (sp->s_type == S_NEW) {
- if (xflag == 0) {
- fprintf(fp, " **** ");
- } else
- if (xflag == 1) {
- fprintf(fp, "****** ");
- } else
- if (xflag == 2) {
- fprintf(fp, " ***** ");
- }
- } else {
- j = sp->s_addr;
- if (xflag == 0) {
- fprintf(fp, " %04X ", j);
- } else
- if (xflag == 1) {
- fprintf(fp, "%06o ", j);
- } else
- if (xflag == 2) {
- fprintf(fp, " %05u ", j);
- }
- }
- j = 0;
- if (sp->s_flag & S_GBL) {
- putc('G', fp);
- ++j;
- }
- if (sp->s_area != NULL) {
- putc('R', fp);
- ++j;
- }
- if (sp->s_type == S_NEW) {
- putc('X', fp);
- ++j;
- }
+ register int c, i, j, k;
+ int nmsym, narea;
+ struct sym *sp;
+ struct sym **p;
+ struct area *ap;
+
+ /*
+ * Symbol Table Header
+ */
+ strcpy(stb, &symtbl[0]);
+ lop = NLPP;
+ if (fp == tfp)
+ page = 0;
+ slew(fp, 1);
+
+ /*
+ * Find number of symbols
+ */
+ nmsym = 0;
+ for (i=0; i<NHASH; i++) {
+ sp = symhash[i];
+ while (sp) {
+ if (sp != &dot)
+ ++nmsym;
+ sp = sp->s_sp;
+ }
+ }
+ if (nmsym == 0)
+ goto atable;
+
+ /*
+ * Allocate space for an array of pointers to symbols
+ * and load array.
+ */
+ if ((p = (struct sym **) malloc(sizeof((struct sym *) sp)*nmsym))
+ == NULL) {
+ fprintf(fp, "Insufficient space to build Symbol Table.\n");
+ return;
+ }
+ nmsym = 0;
+ for (i=0; i<NHASH; i++) {
+ sp = symhash[i];
+ while (sp) {
+ if (sp != &dot)
+ p[nmsym++] = sp;
+ sp = sp->s_sp;
+ }
+ }
+
+ /*
+ * Bubble Sort on Symbol Table Array
+ */
+ j = 1;
+ c = nmsym - 1;
+ while (j) {
+ j = 0;
+ for (i=0; i<c; ++i) {
+ if (strcmp(&p[i]->s_id[0],&p[i+1]->s_id[0]) > 0) {
+ j = 1;
+ sp = p[i+1];
+ p[i+1] = p[i];
+ p[i] = sp;
+ }
+ }
+ }
+
+ /*
+ * Symbol Table Output
+ */
+ for (i=0; i<nmsym;) {
+ sp = p[i];
+ if (sp->s_area) {
+ j = sp->s_area->a_ref;
+ if (xflag == 0) {
+ fprintf(fp, " %2X ", j);
+ } else
+ if (xflag == 1) {
+ fprintf(fp, "%3o ", j);
+ } else
+ if (xflag == 2) {
+ fprintf(fp, "%3u ", j);
+ }
+ } else {
+ fprintf(fp, " ");
+ }
+ fprintf(fp, "%-60s", sp->s_id);
+ if (sp->s_flag & S_ASG) {
+ putc('=', fp);
+ } else {
+ putc(' ', fp);
+ }
+ if (sp->s_type == S_NEW) {
+ if (xflag == 0) {
+ fprintf(fp, " **** ");
+ } else
+ if (xflag == 1) {
+ fprintf(fp, "****** ");
+ } else
+ if (xflag == 2) {
+ fprintf(fp, " ***** ");
+ }
+ } else {
+ j = sp->s_addr;
+ if (xflag == 0) {
+ fprintf(fp, " %04X ", j);
+ } else
+ if (xflag == 1) {
+ fprintf(fp, "%06o ", j);
+ } else
+ if (xflag == 2) {
+ fprintf(fp, " %05u ", j);
+ }
+ }
+ j = 0;
+ if (sp->s_flag & S_GBL) {
+ putc('G', fp);
+ ++j;
+ }
+ if (sp->s_area != NULL) {
+ putc('R', fp);
+ ++j;
+ }
+ if (sp->s_type == S_NEW) {
+ putc('X', fp);
+ ++j;
+ }