head     56.3;
access   paws bayes jws quist brad dew jwh;
symbols  ;
locks    ; strict;
comment  @# @;


56.3
date     93.01.27.13.35.45;  author jwh;  state Exp;
branches ;
next     56.2;

56.2
date     93.01.27.12.11.48;  author jwh;  state Exp;
branches ;
next     56.1;

56.1
date     91.11.05.09.25.52;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.03.12;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.13.10;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.14.05;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.08.59.14;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.15.58.10;  author jwh;  state Exp;
branches ;
next     50.1;

50.1
date     90.10.29.16.11.03;  author jwh;  state Exp;
branches ;
next     49.1;

49.1
date     90.08.14.14.00.17;  author jwh;  state Exp;
branches ;
next     48.1;

48.1
date     90.07.26.11.05.42;  author jwh;  state Exp;
branches ;
next     47.1;

47.1
date     90.05.14.10.40.10;  author dew;  state Exp;
branches ;
next     46.1;

46.1
date     90.05.07.08.29.46;  author jwh;  state Exp;
branches ;
next     45.1;

45.1
date     90.04.19.15.36.48;  author jwh;  state Exp;
branches ;
next     44.1;

44.1
date     90.04.01.21.54.29;  author jwh;  state Exp;
branches ;
next     43.1;

43.1
date     90.03.20.13.44.21;  author jwh;  state Exp;
branches ;
next     42.1;

42.1
date     90.01.23.17.29.49;  author jwh;  state Exp;
branches ;
next     41.1;

41.1
date     89.12.22.11.12.14;  author jwh;  state Exp;
branches ;
next     40.1;

40.1
date     89.09.29.11.35.26;  author jwh;  state Exp;
branches ;
next     39.1;

39.1
date     89.09.26.16.20.50;  author dew;  state Exp;
branches ;
next     38.1;

38.1
date     89.08.29.11.10.51;  author jwh;  state Exp;
branches ;
next     37.1;

37.1
date     89.05.12.11.23.49;  author dew;  state Exp;
branches ;
next     36.1;

36.1
date     89.02.06.10.02.52;  author dew;  state Exp;
branches ;
next     35.1;

35.1
date     89.02.02.13.12.33;  author dew;  state Exp;
branches ;
next     34.1;

34.1
date     89.01.23.15.48.35;  author jwh;  state Exp;
branches ;
next     33.1;

33.1
date     89.01.16.11.24.58;  author dew;  state Exp;
branches ;
next     32.1;

32.1
date     89.01.10.11.29.45;  author bayes;  state Exp;
branches ;
next     31.1;

31.1
date     88.12.14.17.50.41;  author bayes;  state Exp;
branches ;
next     30.1;

30.1
date     88.12.09.13.29.01;  author dew;  state Exp;
branches ;
next     29.1;

29.1
date     88.10.31.15.13.23;  author bayes;  state Exp;
branches ;
next     28.1;

28.1
date     88.10.06.10.43.54;  author dew;  state Exp;
branches ;
next     27.1;

27.1
date     88.09.29.11.06.20;  author bayes;  state Exp;
branches ;
next     26.1;

26.1
date     88.09.28.12.18.17;  author bayes;  state Exp;
branches ;
next     25.1;

25.1
date     88.03.02.08.59.27;  author bayes;  state Exp;
branches ;
next     24.1;

24.1
date     87.08.31.08.58.54;  author jws;  state Exp;
branches ;
next     23.1;

23.1
date     87.08.26.09.36.03;  author bayes;  state Exp;
branches ;
next     22.1;

22.1
date     87.08.17.10.12.45;  author bayes;  state Exp;
branches ;
next     21.1;

21.1
date     87.08.12.13.02.38;  author bayes;  state Exp;
branches ;
next     20.1;

20.1
date     87.07.30.10.12.36;  author bayes;  state Exp;
branches ;
next     19.1;

19.1
date     87.06.01.07.33.39;  author jws;  state Exp;
branches ;
next     18.1;

18.1
date     87.05.20.14.25.32;  author bayes;  state Exp;
branches ;
next     17.1;

17.1
date     87.04.30.09.41.48;  author jws;  state Exp;
branches ;
next     16.1;

16.1
date     87.04.26.14.58.56;  author jws;  state Exp;
branches ;
next     15.1;

15.1
date     87.04.13.08.21.58;  author jws;  state Exp;
branches ;
next     14.1;

14.1
date     87.04.01.14.06.52;  author jws;  state Exp;
branches ;
next     13.1;

13.1
date     87.02.28.17.51.04;  author jws;  state Exp;
branches ;
next     12.1;

12.1
date     87.02.02.12.35.50;  author jws;  state Exp;
branches ;
next     11.1;

11.1
date     87.01.19.09.02.13;  author jws;  state Exp;
branches ;
next     10.1;

10.1
date     86.12.24.10.05.35;  author jws;  state Exp;
branches ;
next     9.1;

9.1
date     86.12.12.13.23.06;  author bayes;  state Exp;
branches ;
next     8.1;

8.1
date     86.11.27.11.03.54;  author jws;  state Exp;
branches ;
next     7.1;

7.1
date     86.11.20.12.49.10;  author hal;  state Exp;
branches ;
next     6.1;

6.1
date     86.11.04.16.44.15;  author paws;  state Exp;
branches ;
next     5.1;

5.1
date     86.10.28.14.04.29;  author hal;  state Exp;
branches ;
next     4.1;

4.1
date     86.09.30.18.29.07;  author hal;  state Exp;
branches ;
next     3.1;

3.1
date     86.09.01.11.16.15;  author hal;  state Exp;
branches ;
next     2.1;

2.1
date     86.07.30.14.05.40;  author hal;  state Exp;
branches ;
next     1.1;

1.1
date     86.06.30.13.03.15;  author danm;  state tmp;
branches ;
next     ;


desc
@Base file for PWS 3.2 release.

@


56.3
log
@
pws2rcs automatic delta on Wed Jan 27 13:14:25 MST 1993
@
text
@IMPLEMENT

  CONST
    HASHRANGE=128;
    HASHRNG1=127;
    mc68881 = true;              (* ??? *)
    fpimmed = true;             (* ??? *)
  VAR
    H: 0..HASHRNG1;
    HASHTABLE: ARRAY[0..HASHRNG1] OF STREF;

  PROCEDURE HASH;
  VAR I,K: SHORTINT;
  BEGIN
    K:=LENGTH(LAB);
    FOR I:=1 TO LENGTH(LAB) DO K:=K+ORD(LAB[I]);
    H:=K MOD HASHRANGE;
  END;


  PROCEDURE STDSYM {V: SHORTINT; K: SYMKIND};
  VAR VAL: WORD32;
      SYM: STREF;
  BEGIN
    VAL.HIHALF:=0; VAL.LOHALF:=V;
    ENTERSYMBOL(SYM,TRUE,K,VAL);
  END;

  PROCEDURE LOOKUPSYMBOL{VAR SP: STREF};
  LABEL 1;
  VAR P: STREF;
  BEGIN
    HASH;
    P:=HASHTABLE[H];
    WHILE P<>NIL DO
      BEGIN
	IF P^.SNAME=LAB THEN GOTO 1;
	P:=P^.SLINK;
      END;
  1: SP:=P;
  END;  { LOOKUPSYMBOL }

  PROCEDURE ENTERSYMBOL{VAR SP: STREF; DEFIT: BOOLEAN; KIND: SYMKIND;
			VAL: WORD32};
  VAR B: SHORTINT;
  BEGIN
    LOOKUPSYMBOL(SP);
    IF SP<>NIL THEN BEGIN
      IF (SP^.DEFINED>=0) AND DEFIT THEN ERROR(ERRDUPDEFSYM)
      ELSE IF DEFIT THEN BEGIN
	  SP^.SVALUE:=VAL;
	  SP^.SKIND:=KIND;
	  SP^.DEFINED:=LINENO;
	END
    END
    ELSE
      BEGIN
	TRY
	  NEWBYTES(SP,SIZEOF(SYMTABENTRY)-80+LENGTH(LAB))
	RECOVER BEGIN
	  if escapecode=-2 then begin
	    WRITELN(LP,'SYMBOL TABLE OVERFLOW!');
	    LPCHECK;                                        { JWS 3/2/84 }
	    IF LISTNAME<>'CONSOLE:' THEN WRITELN('SYMBOL TABLE OVERFLOW!');
	    ESCAPE(-1);
	  end else escape(escapecode);
	END;
	WITH SP^ DO
	  BEGIN
	    IF DEFIT THEN DEFINED:=LINENO ELSE DEFINED:=-1;
	    SNAME:=LAB;
	    SVALUE:=VAL;
	    SKIND:=KIND;
	    EXT:=FALSE;
	    SEXTPTR:=NIL; { FIX THIS UP IN CALLING ROUTINE IF REQUIRED }
	    SMODE:=NOMODE;
	    SPLINK:=NIL;
	    SLINK:=HASHTABLE[H];   { LINK INTO PROPER HASH CHAIN }
	    HASHTABLE[H]:=SP;
	  END;
      END;
  END; { ENTERSYMBOL }

PROCEDURE DUMPTABLE;
TYPE HDIGITS=PACKED ARRAY [1..16] OF CHAR;
VAR ANCHOR:STREF;
    DONE:BOOLEAN;
    HEX:HDIGITS;
    C1,C2:CHAR;
    P:STREF;
    H:SHORTINT;
PROCEDURE ITOHEX(INUM:SHORTINT);
BEGIN
  C1:=HEX[INUM DIV 16 + 1];
  C2:=HEX[INUM MOD 16 + 1];
END;
PROCEDURE PRINTTYPE;
BEGIN
  CASE ANCHOR^.SKIND OF
    ABSOLUT:   WRITE(LP,'ABS   ');
    RELATIVE:  WRITE(LP,'REL   ');
    AREG:      WRITE(LP,'AREG  ');
    DREG:      WRITE(LP,'DREG  ');
    STREG:     WRITE(LP,'STREG ');
$if mc68881$
    fpreg:     write(lp,'FPREG ');
    fpstreg:   write(lp,'FSTREG');
$end$
    PREG:      WRITE(LP,'PREG  ');
  END;
LPCHECK;   { 3/2/84 }
END;


PROCEDURE PRINTDEF;
BEGIN
WRITE(LP,ANCHOR^.DEFINED:6);
LPCHECK;                                                     { JWS 3/2/84 }
END;


PROCEDURE PRINTVALUE;
BEGIN
  if not decimal then begin WRITE(LP,' ':4);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE1);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE2);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE3);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE4);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
end
  else BEGIN   { 3/2/84 }
    write(lp,' ',anchor^.svalue.longint:11); LPCHECK; END;       { JWS 3/2/84 }
END;


PROCEDURE PRINTINT;
BEGIN
  WRITE(LP,ANCHOR^.SNAME,' ':(16-LENGTH(ANCHOR^.SNAME)));
  LPCHECK;                                                      { JWS 3/2/84 }
  PRINTTYPE;PRINTDEF;
  IF ANCHOR^.SEXTPTR <> NIL THEN
    BEGIN
      WRITE(LP,' ',ANCHOR^.SEXTPTR^.SYMPT^.SNAME);
      LPCHECK;                                                      { JWS 3/2/84 }
      WRITE(LP,' ':(16-LENGTH(ANCHOR^.SEXTPTR^.SYMPT^.SNAME)));
      IF ANCHOR^.SEXTPTR^.MINUS THEN WRITE(LP,'- ')
				ELSE WRITE(LP,'+ ');
      LPCHECK;                                                   { JWS 3/2/84 }END
    ELSE BEGIN WRITE(LP,' ':19); LPCHECK; END;                   { JWS 3/2/84}
  PRINTVALUE;WRITELN(LP); LPCHECK;                                { JWS 3/2/84}
END;


PROCEDURE PRINTEXT;
BEGIN
  WRITE(LP,ANCHOR^.SNAME,' ':(16-LENGTH(ANCHOR^.SNAME)));
  LPCHECK;     { 3/2/84 }
  PRINTTYPE;PRINTDEF;PRINTVALUE;WRITELN(LP); LPCHECK;             { 3/2/84 }
END;


PROCEDURE SORTIT;
VAR PTR1,PTR2:STREF;
    DONE:BOOLEAN;
BEGIN
  PTR1:=NIL; PTR2:=ANCHOR; DONE:=FALSE;
  IF P^.EXT (* EXTERNAL SYMBOL *)
    THEN
    REPEAT
      IF PTR2 = NIL THEN DONE:=TRUE
	ELSE
	  IF (PTR2^.EXT = FALSE)
	     OR
	     (PTR2^.SNAME > P^.SNAME)
	     THEN DONE:=TRUE
	     ELSE
	     BEGIN PTR1:=PTR2; PTR2:=PTR2^.SPLINK; END;
    UNTIL DONE

    ELSE   (* INTERNAL SYMBOL *)
    REPEAT
      IF PTR2 = NIL THEN DONE:=TRUE
	ELSE
	  IF (PTR2^.EXT = FALSE)
	     AND
	     (PTR2^.SNAME > P^.SNAME)
	     THEN DONE:=TRUE
	     ELSE
	     BEGIN PTR1:=PTR2; PTR2:=PTR2^.SPLINK;END;
    UNTIL DONE;
  IF PTR1=NIL THEN BEGIN
		      P^.SPLINK:=ANCHOR;
		      ANCHOR:=P;
		    END
	       ELSE BEGIN
		      P^.SPLINK:=PTR1^.SPLINK;
		      PTR1^.SPLINK:=P;
		    END;
END;

BEGIN
  HEX:='0123456789ABCDEF';
  listinst(5);
  WRITELN(LP,' *** 68000 ASSEMBLER SYMBOL TABLE DUMP ***');
  LPCHECK;                                                 { 3/2/84 }
  (* SORT THEM SYMBOLS *)
  ANCHOR:=NIL;
  FOR H:=0 TO HASHRNG1 DO
    BEGIN
      P:=HASHTABLE[H];
      WHILE P<>NIL DO BEGIN SORTIT;P:=P^.SLINK; END
    END;
  IF ANCHOR=NIL THEN BEGIN                              { JWS 3/2/84 }
	WRITELN(LP,' *** SYMBOL TABLE IS EMPTY ***');
	LPCHECK;                                        { JWS 3/2/84 }
    END                                                 { JWS 3/2/84 }
    ELSE
    BEGIN
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;                                        { JWS 3/2/84 }
      listinst(5);
      WRITELN(LP,'':11,'EXTERNAL SYMBOLS');
      LPCHECK;                                        { JWS 3/2/84 }
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;                                        { JWS 3/2/84 }
      IF ANCHOR^.EXT THEN
	BEGIN
	  listinst(5);
	  WRITELN(LP,'':4,'SYMBOL','':6,'TYPE','':4,'DEF','':7,'VALUE');
	  LPCHECK;                                        { JWS 3/2/84 }
	  DONE:=FALSE;
	  REPEAT
	  BEGIN
	    IF ANCHOR=NIL THEN DONE:=TRUE
	      ELSE
		IF ANCHOR^.EXT THEN
		  BEGIN listinst(5); PRINTEXT; ANCHOR:= ANCHOR^.SPLINK; END
		  ELSE DONE:=TRUE;
	  END
	  UNTIL DONE;
	END
	ELSE begin listinst(5); WRITELN(LP,' *** NO EXTERNAL SYMBOLS ***');
	   LPCHECK;    { 3/2/84 }
	end;
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;    { 3/2/84 }
      listinst(5);
      WRITELN(LP,'':11,'INTERNAL SYMBOLS');
      LPCHECK;    { 3/2/84 }
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;    { 3/2/84 }
      IF ANCHOR = NIL THEN begin
	  listinst(5); WRITELN(LP,' *** NO INTERNAL SYMBOLS ***');
	  LPCHECK;                          { 3/2/84 }
	end
	ELSE
	BEGIN
	  listinst(5);
     WRITELN(LP,'':4,'SYMBOL','':6,'TYPE','':4,'DEF','':6,'EQU SYM','':13,'VALUE');
	   LPCHECK;                          { 3/2/84 }
	   REPEAT
	  BEGIN
	    listinst(5); PRINTINT; ANCHOR:=ANCHOR^.SPLINK;
	  END
	  UNTIL ANCHOR=NIL;
	END;
    END;
END;


PROCEDURE DOSYMS;
VAR H: SHORTINT;
BEGIN  { SYMBTABLE INITIALIZATION }
  FOR H:=0 TO HASHRNG1 DO HASHTABLE[H]:=NIL;
END;



@


56.2
log
@
pws2rcs automatic delta on Wed Jan 27 11:57:27 MST 1993
@
text
@d1 286
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@a0 286
IMPLEMENT

  CONST
    HASHRANGE=128;
    HASHRNG1=127;
    mc68881 = true;              (* ??? *)
    fpimmed = true;             (* ??? *)
  VAR
    H: 0..HASHRNG1;
    HASHTABLE: ARRAY[0..HASHRNG1] OF STREF;

  PROCEDURE HASH;
  VAR I,K: SHORTINT;
  BEGIN
    K:=LENGTH(LAB);
    FOR I:=1 TO LENGTH(LAB) DO K:=K+ORD(LAB[I]);
    H:=K MOD HASHRANGE;
  END;


  PROCEDURE STDSYM {V: SHORTINT; K: SYMKIND};
  VAR VAL: WORD32;
      SYM: STREF;
  BEGIN
    VAL.HIHALF:=0; VAL.LOHALF:=V;
    ENTERSYMBOL(SYM,TRUE,K,VAL);
  END;

  PROCEDURE LOOKUPSYMBOL{VAR SP: STREF};
  LABEL 1;
  VAR P: STREF;
  BEGIN
    HASH;
    P:=HASHTABLE[H];
    WHILE P<>NIL DO
      BEGIN
	IF P^.SNAME=LAB THEN GOTO 1;
	P:=P^.SLINK;
      END;
  1: SP:=P;
  END;  { LOOKUPSYMBOL }

  PROCEDURE ENTERSYMBOL{VAR SP: STREF; DEFIT: BOOLEAN; KIND: SYMKIND;
			VAL: WORD32};
  VAR B: SHORTINT;
  BEGIN
    LOOKUPSYMBOL(SP);
    IF SP<>NIL THEN BEGIN
      IF (SP^.DEFINED>=0) AND DEFIT THEN ERROR(ERRDUPDEFSYM)
      ELSE IF DEFIT THEN BEGIN
	  SP^.SVALUE:=VAL;
	  SP^.SKIND:=KIND;
	  SP^.DEFINED:=LINENO;
	END
    END
    ELSE
      BEGIN
	TRY
	  NEWBYTES(SP,SIZEOF(SYMTABENTRY)-80+LENGTH(LAB))
	RECOVER BEGIN
	  if escapecode=-2 then begin
	    WRITELN(LP,'SYMBOL TABLE OVERFLOW!');
	    LPCHECK;                                        { JWS 3/2/84 }
	    IF LISTNAME<>'CONSOLE:' THEN WRITELN('SYMBOL TABLE OVERFLOW!');
	    ESCAPE(-1);
	  end else escape(escapecode);
	END;
	WITH SP^ DO
	  BEGIN
	    IF DEFIT THEN DEFINED:=LINENO ELSE DEFINED:=-1;
	    SNAME:=LAB;
	    SVALUE:=VAL;
	    SKIND:=KIND;
	    EXT:=FALSE;
	    SEXTPTR:=NIL; { FIX THIS UP IN CALLING ROUTINE IF REQUIRED }
	    SMODE:=NOMODE;
	    SPLINK:=NIL;
	    SLINK:=HASHTABLE[H];   { LINK INTO PROPER HASH CHAIN }
	    HASHTABLE[H]:=SP;
	  END;
      END;
  END; { ENTERSYMBOL }

PROCEDURE DUMPTABLE;
TYPE HDIGITS=PACKED ARRAY [1..16] OF CHAR;
VAR ANCHOR:STREF;
    DONE:BOOLEAN;
    HEX:HDIGITS;
    C1,C2:CHAR;
    P:STREF;
    H:SHORTINT;
PROCEDURE ITOHEX(INUM:SHORTINT);
BEGIN
  C1:=HEX[INUM DIV 16 + 1];
  C2:=HEX[INUM MOD 16 + 1];
END;
PROCEDURE PRINTTYPE;
BEGIN
  CASE ANCHOR^.SKIND OF
    ABSOLUT:   WRITE(LP,'ABS   ');
    RELATIVE:  WRITE(LP,'REL   ');
    AREG:      WRITE(LP,'AREG  ');
    DREG:      WRITE(LP,'DREG  ');
    STREG:     WRITE(LP,'STREG ');
$if mc68881$
    fpreg:     write(lp,'FPREG ');
    fpstreg:   write(lp,'FSTREG');
$end$
    PREG:      WRITE(LP,'PREG  ');
  END;
LPCHECK;   { 3/2/84 }
END;


PROCEDURE PRINTDEF;
BEGIN
WRITE(LP,ANCHOR^.DEFINED:6);
LPCHECK;                                                     { JWS 3/2/84 }
END;


PROCEDURE PRINTVALUE;
BEGIN
  if not decimal then begin WRITE(LP,' ':4);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE1);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE2);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE3);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
    ITOHEX(ANCHOR^.SVALUE.BYTE4);WRITE(LP,C1,C2);
    LPCHECK;                                                     { JWS 3/2/84 }
end
  else BEGIN   { 3/2/84 }
    write(lp,' ',anchor^.svalue.longint:11); LPCHECK; END;       { JWS 3/2/84 }
END;


PROCEDURE PRINTINT;
BEGIN
  WRITE(LP,ANCHOR^.SNAME,' ':(16-LENGTH(ANCHOR^.SNAME)));
  LPCHECK;                                                      { JWS 3/2/84 }
  PRINTTYPE;PRINTDEF;
  IF ANCHOR^.SEXTPTR <> NIL THEN
    BEGIN
      WRITE(LP,' ',ANCHOR^.SEXTPTR^.SYMPT^.SNAME);
      LPCHECK;                                                      { JWS 3/2/84 }
      WRITE(LP,' ':(16-LENGTH(ANCHOR^.SEXTPTR^.SYMPT^.SNAME)));
      IF ANCHOR^.SEXTPTR^.MINUS THEN WRITE(LP,'- ')
				ELSE WRITE(LP,'+ ');
      LPCHECK;                                                   { JWS 3/2/84 }END
    ELSE BEGIN WRITE(LP,' ':19); LPCHECK; END;                   { JWS 3/2/84}
  PRINTVALUE;WRITELN(LP); LPCHECK;                                { JWS 3/2/84}
END;


PROCEDURE PRINTEXT;
BEGIN
  WRITE(LP,ANCHOR^.SNAME,' ':(16-LENGTH(ANCHOR^.SNAME)));
  LPCHECK;     { 3/2/84 }
  PRINTTYPE;PRINTDEF;PRINTVALUE;WRITELN(LP); LPCHECK;             { 3/2/84 }
END;


PROCEDURE SORTIT;
VAR PTR1,PTR2:STREF;
    DONE:BOOLEAN;
BEGIN
  PTR1:=NIL; PTR2:=ANCHOR; DONE:=FALSE;
  IF P^.EXT (* EXTERNAL SYMBOL *)
    THEN
    REPEAT
      IF PTR2 = NIL THEN DONE:=TRUE
	ELSE
	  IF (PTR2^.EXT = FALSE)
	     OR
	     (PTR2^.SNAME > P^.SNAME)
	     THEN DONE:=TRUE
	     ELSE
	     BEGIN PTR1:=PTR2; PTR2:=PTR2^.SPLINK; END;
    UNTIL DONE

    ELSE   (* INTERNAL SYMBOL *)
    REPEAT
      IF PTR2 = NIL THEN DONE:=TRUE
	ELSE
	  IF (PTR2^.EXT = FALSE)
	     AND
	     (PTR2^.SNAME > P^.SNAME)
	     THEN DONE:=TRUE
	     ELSE
	     BEGIN PTR1:=PTR2; PTR2:=PTR2^.SPLINK;END;
    UNTIL DONE;
  IF PTR1=NIL THEN BEGIN
		      P^.SPLINK:=ANCHOR;
		      ANCHOR:=P;
		    END
	       ELSE BEGIN
		      P^.SPLINK:=PTR1^.SPLINK;
		      PTR1^.SPLINK:=P;
		    END;
END;

BEGIN
  HEX:='0123456789ABCDEF';
  listinst(5);
  WRITELN(LP,' *** 68000 ASSEMBLER SYMBOL TABLE DUMP ***');
  LPCHECK;                                                 { 3/2/84 }
  (* SORT THEM SYMBOLS *)
  ANCHOR:=NIL;
  FOR H:=0 TO HASHRNG1 DO
    BEGIN
      P:=HASHTABLE[H];
      WHILE P<>NIL DO BEGIN SORTIT;P:=P^.SLINK; END
    END;
  IF ANCHOR=NIL THEN BEGIN                              { JWS 3/2/84 }
	WRITELN(LP,' *** SYMBOL TABLE IS EMPTY ***');
	LPCHECK;                                        { JWS 3/2/84 }
    END                                                 { JWS 3/2/84 }
    ELSE
    BEGIN
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;                                        { JWS 3/2/84 }
      listinst(5);
      WRITELN(LP,'':11,'EXTERNAL SYMBOLS');
      LPCHECK;                                        { JWS 3/2/84 }
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;                                        { JWS 3/2/84 }
      IF ANCHOR^.EXT THEN
	BEGIN
	  listinst(5);
	  WRITELN(LP,'':4,'SYMBOL','':6,'TYPE','':4,'DEF','':7,'VALUE');
	  LPCHECK;                                        { JWS 3/2/84 }
	  DONE:=FALSE;
	  REPEAT
	  BEGIN
	    IF ANCHOR=NIL THEN DONE:=TRUE
	      ELSE
		IF ANCHOR^.EXT THEN
		  BEGIN listinst(5); PRINTEXT; ANCHOR:= ANCHOR^.SPLINK; END
		  ELSE DONE:=TRUE;
	  END
	  UNTIL DONE;
	END
	ELSE begin listinst(5); WRITELN(LP,' *** NO EXTERNAL SYMBOLS ***');
	   LPCHECK;    { 3/2/84 }
	end;
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;    { 3/2/84 }
      listinst(5);
      WRITELN(LP,'':11,'INTERNAL SYMBOLS');
      LPCHECK;    { 3/2/84 }
      listinst(5);
      WRITELN(LP,' ');
      LPCHECK;    { 3/2/84 }
      IF ANCHOR = NIL THEN begin
	  listinst(5); WRITELN(LP,' *** NO INTERNAL SYMBOLS ***');
	  LPCHECK;                          { 3/2/84 }
	end
	ELSE
	BEGIN
	  listinst(5);
     WRITELN(LP,'':4,'SYMBOL','':6,'TYPE','':4,'DEF','':6,'EQU SYM','':13,'VALUE');
	   LPCHECK;                          { 3/2/84 }
	   REPEAT
	  BEGIN
	    listinst(5); PRINTINT; ANCHOR:=ANCHOR^.SPLINK;
	  END
	  UNTIL ANCHOR=NIL;
	END;
    END;
END;


PROCEDURE DOSYMS;
VAR H: SHORTINT;
BEGIN  { SYMBTABLE INITIALIZATION }
  FOR H:=0 TO HASHRNG1 DO HASHTABLE[H]:=NIL;
END;



@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@@


50.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


49.1
log
@Automatic bump of revision number for PWS version 3.24b
@
text
@@


48.1
log
@Automatic bump of revision number for PWS version 3.24a
@
text
@@


47.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


46.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


45.1
log
@Automatic bump of revision number for PWS version 3.23C
@
text
@@


44.1
log
@Automatic bump of revision number for PWS version 3.23B
@
text
@@


43.1
log
@Automatic bump of revision number for PWS version 3.23aA
@
text
@@


42.1
log
@Automatic bump of revision number for PWS version 3.23e
@
text
@@


41.1
log
@Automatic bump of revision number for PWS version 3.23d
@
text
@@


40.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


39.1
log
@Automatic bump of revision number for PWS version 3.23b
@
text
@@


38.1
log
@Automatic bump of revision number for PWS version 3.23a
@
text
@@


37.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


36.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


35.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


34.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


33.1
log
@Automatic bump of revision number for PWS version 3.22D
@
text
@@


32.1
log
@Automatic bump of revision number for PWS version 3.22C
@
text
@@


31.1
log
@Automatic bump of revision number for PWS version 3.22B
@
text
@@


30.1
log
@Automatic bump of revision number for PWS version 3.22A
@
text
@@


29.1
log
@Automatic bump of revision number for PWS version 3.22b
@
text
@@


28.1
log
@Automatic bump of revision number for PWS version 3.3b
@
text
@@


27.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


26.1
log
@Automatic bump of revision number for PWS version 3.3 Synch
@
text
@@


25.1
log
@Automatic bump of revision number for PWS version 3.2Y
@
text
@@


24.1
log
@Automatic bump of revision number for PWS version 3.2
@
text
@@


23.1
log
@Automatic bump of revision number for PWS version 3.2P
@
text
@@


22.1
log
@Automatic bump of revision number for PWS version 3.2N
@
text
@@


21.1
log
@Automatic bump of revision number for PWS version 3.2M
@
text
@@


20.1
log
@Automatic bump of revision number for PWS version 3.2L
@
text
@@


19.1
log
@Automatic bump of revision number for PWS version 3.2K
@
text
@@


18.1
log
@Automatic bump of revision number for PWS version 3.2J
@
text
@@


17.1
log
@Automatic bump of revision number for PWS version 3.2I+
@
text
@@


16.1
log
@Automatic bump of revision number for PWS version 3.2I
@
text
@@


15.1
log
@Automatic bump of revision number for PWS version 3.2H
@
text
@@


14.1
log
@Automatic bump of revision number for PWS version 3.2G
@
text
@@


13.1
log
@Automatic bump of revision number for PWS version 3.2F
@
text
@@


12.1
log
@Automatic bump of revision number for PWS version 3.2E
@
text
@@


11.1
log
@Automatic bump of revision number for PWS version 3.2D
@
text
@@


10.1
log
@Automatic bump of revision number for PWS version 3.2C
@
text
@@


9.1
log
@Automatic bump of revision number for PWS version 3.2B
@
text
@@


8.1
log
@Automatic bump of revision number for PWS version 3.2A
@
text
@@


7.1
log
@Automatic bump of revision number for PWS version 3.2l
@
text
@@


6.1
log
@Automatic bump of revision number for PWS version 3.2k
@
text
@@


5.1
log
@Automatic bump of revision number for PWS version 3.2j
@
text
@@


4.1
log
@Automatic bump of revision number for PWS version 3.2i
@
text
@@


3.1
log
@Automatic bump of revision number for PWS version 3.2h
@
text
@@


2.1
log
@Auto bump rev number to 2.1 for sys 3.2e.
@
text
@@


1.1
log
@Initial revision
@
text
@@
