File AUSDRU.FT (FORTRAN source file)

Directory of image this file is from
This file as a plain text file

	SUBROUTINE AUSDRUCK
	COMMON NERR,IERRS,LC,CC,DIN,FIN
	COMMON SYM,IDENT,INUM,RNUM,SLENG,CH,STRING
	COMMON STACK,BOTTOM,TOP,KITUM,KZEIGER,NIDEK,NZEIGER
	COMMON IC0,RC0,SC0,P0,I0,T0,GPUNKT
	COMMON ICZEIGER,RCZEIGER,PZEIGER,IZEIGER,TZEIGER,SCZEIGER
	COMMON ICTAB,RCTAB,SCTAB,SCZ,PTAB,PZ,ITAB,IZ,TTAB,TZ
	INTEGER PUNKT,GPUNKT,NPUNKT,INKITUM,INKI,INKI0,INKI1
	INTEGER NERR,IERRS(61,3),LC,CC
	INTEGER SYM,IDENT,INUM,SLENG,CH,STRING(80)
	INTEGER STACK(200),BOTTOM(10),TOP(10),KITUM(200,4)
	INTEGER NIDEK(100,2),NZEIGER,IC0,RC0,SC0,P0,I0,T0
	INTEGER ICZEIGER,RCZEIGER,PZEIGER,IZEIGER,TZEIGER,SCZEIGER
	INTEGER ICTAB(200),SCTAB(200),SCZ(50),PTAB(100),PZ(50)
	INTEGER ITAB(100),IZ(50),TTAB(400),TZ(50)
	REAL RNUM,RCTAB(50)
	LOGICAL LEER,DD,B
	INTEGER TPUNKT
	I=PUNKT(1)
	CALL ERSETZEN(0,1)
	CALL EINKELLERN(I,1)
	WHILE(GPUNKT.NE.0)
	  GOTO (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17),GPUNKT
1	CALL ERSETZEN(2,1)	@F5E
	CALL EINKELLERN(4,1)
	CALL EINKELLERN(6,1)
	GOTO 199
2	IF (SYM.EQ.68.OR.SYM.EQ.51)	@"OR","AND"     F5E REST
	  CALL GETSYM
	  CALL EINKELLERN(SYM,4)
	  CALL ERSETZEN(3,1)
	  CALL EINKELLERN(4,1)
	  CALL EINKELLERN(6,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
3	I1=PUNKT(5)	@F5E  REST 2
	CALL AUSKELLERN(5)
	I2=PUNKT(5)
	I3=PUNKT(4)
	CALL AUSKELLERN(4)
	IF (I1.NE.1.OR.I2.NE.1) CALL FATAL(135)
	IF (SYM.EQ.68.OR.SYM.EQ.51)	@"OR","AND"
	  CALL GETSYM
	  CALL EINKELLERN(SYM,4)
	  CALL EINKELLERN(4,1)
	  CALL EINKELLERN(6,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
4	IF (SYM.GE.12.AND.SYM.LE.17)	@F4E   REST
	  CALL EINKELLERN(SYM,4)
	  CALL GETSYM
	  CALL ERSETZEN(5,1)
	  CALL EINKELLERN(6,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
5	I1=PUNKT(5)	@F4E REST2
	CALL AUSKELLERN(5)
	I2=PUNKT(5)
	I3=PUNKT(4)
	CALL AUSKELLERN(4)
	IF (I1.EQ.I2)
	  CALL ERSETZEN(1,5)
	ELSE
	  CALL FATAL(129)
	ENDIF
	IF (SYM.GE.12.AND.SYM.LE.17)
	  CALL EINKELLERN(SYM,4)
	  CALL GETSYM
	  CALL EINKELLERN(6,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
6	IF (SYM.EQ.8.OR.SYM.EQ.6)	@"+","-"    F3E
	  CALL EINKELLERN(SYM,4)
	  CALL GETSYM
	ENDIF
	CALL ERSETZEN(7,1)
	CALL EINKELLERN(9,1)
	CALL EINKELLERN(11,1)
	GOTO 199
7	IF(.NOT.LEER(4))
	  IF(PUNKT(4).EQ.8.OR.PUNKT(4).EQ.6)
	    IF(PUNKT(5).NE.2.AND.PUNKT(5).NE.3)
		CALL FATAL(105)
	    ENDIF
	    CALL AUSKELLERN(4)
	  ENDIF
	ENDIF
	IF (SYM.EQ.8.OR.SYM.EQ.6)	@F3E REST
	  CALL EINKELLERN(SYM,4)
	  CALL GETSYM
	  CALL ERSETZEN(8,1)
	  CALL EINKELLERN(9,1)
	  CALL EINKELLERN(11,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
8	I1=PUNKT(5)	@F3E  REST2
	CALL AUSKELLERN(5)
	I2=PUNKT(5)
	I3=PUNKT(4)
	CALL AUSKELLERN(4)
	IF ((I1.EQ.2.OR.I1.EQ.3).AND.(I2.EQ.2.OR.I2.EQ.3))
	  IF (I1.NE.I2) CALL ERSETZEN(3,5)
	ELSE
	  CALL FATAL(134)
	ENDIF
	IF (SYM.EQ.8.OR.SYM.EQ.6)
	  CALL EINKELLERN(SYM,4)
	  CALL GETSYM
	  CALL EINKELLERN(9,1)
	  CALL EINKELLERN(11,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
9	IF (SYM.EQ.9.OR.SYM.EQ.22.OR.SYM.EQ.56.OR.SYM.EQ.64)	@F2E REST
	  CALL EINKELLERN(SYM,4)
	  CALL GETSYM
	  CALL ERSETZEN(10,1)
	  CALL EINKELLERN(11,1)
	ELSE
	  CALL AUSKELLERN(1)
	ENDIF
	GOTO 199
10	I1=PUNKT(5)	@F2E  REST2
	CALL AUSKELLERN(5)
	I2=PUNKT(5)
	I3=PUNKT(4)
	CALL AUSKELLERN(4)
	B=(I1.NE.2.AND.I1.NE.3).OR.(I2.NE.2.AND.I2.NE.3)
	IF (B) CALL FATAL(134)
	IF (I3.EQ.8)		@"*"
	  IF (I1.NE.I2)
	    CALL ERSETZEN(3,5)
	  ENDIF
	ELSE
	  IF (I3.EQ.22)	@"/"
	    CALL ERSETZEN(3,5)
	  ELSE
	    IF (I3.EQ.56.OR.I3.EQ.64)	@DIV, MOD
	      IF (I1.NE.2.OR.I2.NE.2) CALL FATAL(134)
	    ENDIF
	  ENDIF
	ENDIF
	CALL ERSETZEN(9,1)
	GOTO 199
11	IF (SYM.EQ.1)	@F1E
	  INKI=INKITUM(IDENT)
	  CALL GETSYM
	  IF (INKI.EQ.0) CALL FATAL(104)
	  B=KITUM(INKI,2).EQ.2
	  IF (B)
	    CALL EINKELLERN(KITUM(INKI,3),5)
	    CALL AUSKELLERN(1)
	    GOTO 199
	  ENDIF
	  B=KITUM(INKI,2).EQ.5
	  IF (B)
	    CALL EINKELLERN(KITUM(INKI,3),5)
	    CALL ERSETZEN(15,1)	@VARIABLE  REST
	    GOTO 199
	  ENDIF
	  B=KITUM(INKI,2).EQ.7
	  IF (B)
	    CALL EINKELLERN(KITUM(INKI,3),5)
	    CALL AUSKELLERN(1)
	    CALL EINKELLERN(0,6)	@ZETA
	    CALL EINKELLERN(INKI,3)
	    IF (SYM.EQ.11)	@"("
	      CALL GETSYM
	      CALL EINKELLERN(12,1)
	      CALL EINKELLERN(1,1)
	    ELSE
	      CALL PLIST
	    ENDIF
	    GOTO 199
	  ENDIF
	  CALL FATAL(103)
	ENDIF
	IF (SYM.EQ.66)	@NOT
	  CALL GETSYM
	  CALL ERSETZEN(14,1)
	  CALL EINKELLERN(11,1)
	  GOTO 199
	ENDIF
	IF (SYM.EQ.11)	@"("
	  CALL GETSYM
	  CALL ERSETZEN(13,1)
	  CALL EINKELLERN(1,1)
	  GOTO 199
	ENDIF
	IF (SYM.LE.5.AND.SYM.GE.2)
	  CALL SCONST
	  CALL AUSKELLERN(1)
	  CALL AUSKELLERN(4)
	  GOTO 199
	ENDIF
	CALL FATAL(6)

12 CALL AUFADDIEREN(1,6) @F1E REST a CALL EINKELLERN(PUNKT(5),7) CALL AUSKELLERN(5) IF (SYM.EQ.7) @"," CALL GETSYM CALL EINKELLERN(1,1) GOTO 199 ENDIF IF (SYM.EQ.10) @")" CALL GETSYM ELSE CALL FEHL(4) ENDIF CALL PLIST CALL AUSKELLERN(1) GOTO 199 13 IF(SYM.EQ.10) @")" @F1E REST b CALL GETSYM ELSE CALL FEHL(4) ENDIF CALL AUSKELLERN(1) GOTO 199 14 B=PUNKT(5).NE.1 @F1E REST C IF (B) CALL FATAL(135) CALL AUSKELLERN(1) GOTO 199 15 I1=TTAB(TZ(PUNKT(5))) GOTO(150,150,150,150,151,152),I1 150 CALL AUSKELLERN(1) @STAND.-TYP IF (SYM.EQ.18) CALL FATAL(138) @"[" IF (SYM.EQ.21) CALL FATAL(140) @"." GOTO 199 151 IF (SYM.EQ.21) CALL FATAL(140) @ARRAY-VAR! IF (SYM.EQ.18) @"[" CALL GETSYM CALL ERSETZEN(16,1) CALL EINKELLERN(1,1) ELSE CALL AUSKELLERN(1) ENDIF GOTO 199 152 IF (SYM.EQ.18) CALL FATAL(188) @RECORD-VAR! IF (SYM.EQ.21) @"." CALL GETSYM IF (SYM.NE.1) CALL FATAL(2) I1 = TZ(PUNKT(5))+2 I2 = I1-1+TTAB(I1-1) DO 111 TZEIGER=I1,I2 B=KITUM(TTAB(TZEIGER),1).EQ.IDENT IF (B) GOTO 112 111 CONTINUE CALL FATAL(152) 112 CALL ERSETZEN(KITUM(TTAB(TZEIGER),3),5) @TAU CALL GETSYM ELSE CALL AUSKELLERN(1) ENDIF GOTO 199 16 IF(SYM.EQ.25) @".." TPUNKT=PUNKT(5) @TAU @VAR REST 2 CALL AUSKELLERN(5) B=TPUNKT.NE.TTAB(TZ(PUNKT(5))+3) IF(B) CALL FATAL(139) CALL GETSYM CALL ERSETZEN(17,1) CALL EINKELLERN(1,1) ELSE CALL ERSETZEN(17,1) ENDIF GOTO 199 17 TPUNKT=PUNKT(5) @VAR REST 3 CALL AUSKELLERN(5) B=TPUNKT.NE.TTAB(TZ(PUNKT(5))+3) IF (B) CALL FATAL(139) IF (SYM.EQ.7) @"," SYM=18 @"[" CALL ERSETZEN(15,1) CALL ERSETZEN(TTAB(TZ(PUNKT(5))+2),5) @TAU GOTO 199 ENDIF IF (SYM.EQ.19) @"]" CALL GETSYM CALL ERSETZEN(15,1) CALL ERSETZEN(TTAB(TZ(PUNKT(5))+2),5) @TAU GOTO 199 ENDIF CALL FATAL(12) 199 CONTINUE ENDWHILE CALL AUSKELLERN(1) RETURN END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search