C
C
C            COPYRIGHT (c) 1977 BY
C    DIGITAL EQUIPMENT CORPORTATION, MAYNARD, MASS.
C   
C  THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
C  ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
C  INCLUSION OF THE  ABOVE COPYRIGHT NOTICE.  THIS  SOFTWARE OR ANY OTHER
C  COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE  MADE AVAILABLE TO ANY
C  OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
C  TRANSFERRED.
C 
C  THE INFORMATION IN THIS  SOFTWARE IS SUBJECT TO CHANGE  WITHOUT NOTICE
C  AND  SHOULD  NOT  BE  CONSTRUED AS A COMMITMENT BY  DIGITAL  EQUIPMENT
C  CORPORATION.
C 
C  DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
C  SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
C 
C 
C 
C
C
C
C
C
C   ++++++++++++++++++++++++++++++++++++++++++++++++++
C   +                                                +
C   +            CALC    VERSION  X01-01             +
C   +                                                +
C   +  PETER BAUM  1-SEP-77                          +
C   +  DIGITAL EQUIPMENT CORPORATION                 +
C   +  146 MAIN STREET                               +
C   +  MAYNARD, MASSACHUSETTS  01754                 +
C   +                                                +
C   ++++++++++++++++++++++++++++++++++++++++++++++++++
C
C
C *******************************************************
C *                                                     *
C *            BLOCK  DATA  MODULE                      *
C *                                                     *
C *******************************************************
C
C
C COMMON AREAS ARE INITIALIZED BY THIS MODULE.
C
C
C
C  MODIFICATION CLASSES: M2,M3,M9,M10
C
C
C
C
C   VARIABLE      USE
C
C  ALPHA(27)    HOLDS LEGAL VARIABLE NAMES: ALPHABETIC CHARACTERS
C               OR THE CHARACTER %.
C  BASED     HOLDS DEFAULT BASE.
C  BLANK        ' '
C  COMMA        ','
C  DIGITS(16,3) HOLDS DECIMAL, OCTAL, AND HEXADECIMAL DIGITS. THE
C               SECOND SUBSCRIPT IS
C                     1 FOR DECIMAL
C                     2 FOR OCTAL
C                     3 FOR HEXADECIMAL
C  DTBL1(9,9,8) CONTROLS THE DECISION PROCESS WHEN EVALUATING A
C               BINARY OPERATION. SEE BELOW FOR DETAILS.
C  EQ           '='
C  ITCNTV(6)    INDEXED BY LEVEL. 0 INDICATES THAT NO ITERATION ON THE
C               INDIRECT COMMAND FILE IS TO TAKE PLACE. IF POSITIVE, IT
C               HOLDS THE INDEX INTO VBLS AND REPRESENTS THE VARIABLE
C               USED TO CONTROL ITERATION.
C  LINE(80)     COMMAND INPUT LINE
C  LPAR         '('
C  RPAR         ')'
C  ST1LIM       HOLDS THE SIZE OF STACK 1 (ALWAYS CONSTANT)
C  ST2LIM       HOLDS THE SIZE OF STACK 2 (ALWAYS CONSTANT)
C  ST1PT        POINTS TO THE TOP OF STACK 1 (CHANGES AS STACK IS USED)
C  ST2PT        POINTS TO THE TOP OF STACK 2 (CHANGES AS STACK IS USED)
C  ST1TYP(40)       DATA TYPE FOR EACH ELEMENT IN STACK 1
C  ST2TYP(40)       DATA TYPE FOR EACH ELEMENT IN STACK 2
C  STACK1(100,40)   UTILITY STACKS USED WHEN EVALUATING EXPRESSIONS. THE FIRST
C  STACK2(100,40)   SUBSCRIPT CONTROLS INDEXING ACROSS THE BYTES OF A SINGLE
C                   VARIABLE. THE SECOND SUBSCRIPT CONTROLS STACK ELEMENTS.
C  TYPE(27)         HOLDS THE DATA TYPES FOR EACH OF THE 27 VARIABLES. SEE
C                   CODES.FTN FOR THE POSSIBLE VALUES.
C  VIEWSW           VIEW SWITCH
C                    0 = OUTPUT ERROR MESSAGES
C                    1 = OUTPUT ERROR MESSAGES AND FILE COMMAND LINES
C                    2 = OUTPUT ERROR MESSAGES AND VALUE OF EXPRESSIONS
C                        EVALUATED.
C                    3 = OUTPUT EVERYTHING
C  VLEN(9)      INDEXED BY DATA TYPE. GIVES THE NUMBER OF BYTES USED
C               BY THAT DATA TYPE.
C  VBLS(100,27)      HOLDS THE VALUES OF THE 27 LEGAL VARIABLES.
C
C
C
C    CONSTANTS ARE STORED IN VBLS ACCORDING TO THEIR TYPE:
C
C
C
C <----------- MULTIPLE PRECISION (M10, M8, M16) ------------------------->
C !                        <------------- DECIMAL AND REAL --------------->
C !                        !                      <-- INTEGER HEX OCTAL -->
C !                                               !             ---> ASCII <---
C !                        !                      !                        !
C
C -------------     -------------------------------------------------------
C !     !     !     !     !     !     !     !     !     !     !     !     !
C ! 100 !  99 ! ... !  9  !  8  !  7  !  6  !  5  !  4  !  3  !  2  !  1  !
C !     !     !     !     !     !     !     !     !     !     !     !     !
C -------------     -------------------------------------------------------
C
C
C NOTE: BYTE 100 HOLDS THE SIGN FOR MULTIPLE PRECISION NUMBERS.
C       0 = POSITIVE, 1 = NEGATIVE
C
C
C
C
C
	BLOCK DATA
	INTEGER*2 LEVEL,NONBLK,LEND
	INTEGER*2 LASTOP
	INTEGER*2 TYPE(27),ST1TYP(40),ST2TYP(40)
	INTEGER*2 VIEWSW,BASED,VLEN(9)
	INTEGER*2 ST1LIM,ST2LIM,ST1PT,ST2PT
	INTEGER*2 ITCNTV(6)
C
	LOGICAL*1 ALPHA(27),COMMA,BLANK,RPAR,LPAR,EQ,LINE(80)
	LOGICAL*1 STACK1(100,40),STACK2(100,40)
	LOGICAL*1 VBLS(100,27)
	LOGICAL*1 DTBL1(9,9,8)
	LOGICAL*1 DIGITS(16,3)
C
	COMMON LEVEL,LINE,NONBLK,LEND,VIEWSW,BASED
	COMMON /CONS/ALPHA,COMMA,BLANK,RPAR,LPAR,EQ
	COMMON /STACK/ STACK1,STACK2,ST1PT,ST2PT,ST1TYP,ST2TYP,
     ;         ST1LIM,ST2LIM
	COMMON /V/ TYPE,VBLS,VLEN
	COMMON /DECIDE/ DTBL1
	COMMON /DIGV/ DIGITS
	COMMON /ERROR/ LASTOP
	COMMON/ITERA/ ITCNTV
C
	DATA VIEWSW/3/
	DATA LEVEL/1/
	DATA LASTOP/0/
	DATA ITCNTV/6*0/
	DATA ALPHA/'A','B','C','D','E','F','G','H','I','J','K','L','M',
     ;       'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','%'/
	DATA DIGITS/'1','2','3','4','5','6','7','8','9',7*'0',
     ;       '1','2','3','4','5','6','7',9*'0',
     ;  '1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','0'/
	DATA COMMA/','/, BLANK/' '/,RPAR/')'/,LPAR/'('/,EQ/'='/
C
C
C DEFAULT BASE IS 10
	DATA BASED/10/
C
C
C STACKS ARE CURRENTLY SET AT 40 ELEMENTS DEEP
	DATA ST1LIM/40/, ST2LIM/40/
C
C
C
C	DEFAULT TYPES
C	A,B,C,D,E,F,G,H  =  DECIMAL
C	I,J,K,L,M,N      =  INTEGER (BASE10)
C	O,P,Q,R,S,T,U,V,W,X,Y,Z  =  DECIMAL
C
C  % AS INTEGER TO HOLD CALC VERSION NUMBER
C
	DATA TYPE/8*-2,6*-4,12*-2,4/
C
C
C GIVE VERSION # BY VALUE IN %
C
	DATA VBLS(1,27)/3/
	DATA VBLS(2,27)/0/,VBLS(3,27)/0/,VBLS(4,27)/0/
C
C
C
C
C SPECIFY THE LENGTH USED BY EACH DATA TYPE
	DATA VLEN/1,8,4,4,100,100,100,4,8/
C
C
C
C
C
C
C
C
C  DECISION TABLE FOR PERFORMING BINARY OPERATIONS
C
C  DTBL1(OPERAND2,OPERAND1,INDEX)
C
C  WHERE:					OPERATOR:
C  INDEX=1	MODIFY CODE FOR OPERAND 1	*/+-
C	 2	MODIFY CODE FOR OPERAND 2	*/+-
C	 3	FUNCTION VALUE TYPE		*/+-
C	 4	OPERATOR CLASS			*/+-
C
C	 5	MODIFY CODE FOR OPERAND 1	**
C	 6	MODIFY CODE FOR OPERAND 2	**
C	 7	FUNCTION VALUE TYPE		**
C	 8	OPERATOR CLASS			**
C
C
C  WHERE TYPE CODES (MODIFY CODES) ARE:
C	0	NO CHANGE
C	1	CONVERT TO ASCII
C	2	CONVERT TO DECIMAL
C	3	CONVERT TO HEXADECIMAL
C	4	CONVERT TO INTEGER
C	5	CONVERT TO M10
C	6	CONVERT TO M8
C	7	CONVERT TO M16
C	8	CONVERT TO OCTAL
C	9	CONVERT TO REAL
C
C  FOR */+- FUNCTION VALUE TYPES AND OPERATOR CLASS ARE PRESENTLY
C  IDENTICAL
C
C  FOR **  OPERATOR CLASSES FOLLOW:
C
C 	CODE	OPERATOR CLASS
C	1	REAL**REAL
C	2	REAL**INTEGER
C	3	INTEGER**REAL
C	4	INTEGER**REAL
C	5	M8**INTEGER
C	6	M10**INTEGER
C	7	M16**INTEGER
C
C
C
C
C
C
	DATA DTBL1 /4,2,3,4,5,6,7,8,9,
     ;  9*0,
     ;  0,2,0,0,3*7,0,9,
     ;  0,2,0,0,5,5,7,0,9,
     ;  0,2,7,0,0,0,7,0,9,
     ;  0,2,7,5,5,0,7,0,9,
     ;  0,2,6*0,9,
     ;  0,2,3,0,5,6,7,0,9,
     ;  0,2,7*0,
     ;  4,8*0,
     ;  2,0,6*2,0,
     ;  3,3*0,7,7,3*0,
     ;  4,4*0,5,3*0,
     ;  5,0,7,5,0,5,0,5,0,
     ;  6,0,7,5,3*0,6,0,
     ;  7,2,4*7,0,7,0,
     ;  8,8*0,
     ;  9,0,6*9,0,
     ;  4,2,3,4,5,6,7,8,9,
     ;  9*2,
     ;  3,2,3,3,3*7,3,9,
     ;  4,2,3,4,5,5,7,4,9,
     ;  5,2,7,3*5,7,5,9,
     ;  6,2,7,5,5,6,7,6,9,
     ;  7,2,6*7,9,
     ;  8,2,3,4,5,6,7,8,9,
     ;  9,2,7*9,
     ;  4,2,3,4,5,6,7,8,9,
     ;  9*2,
     ;  3,2,3,3,3*7,3,9,
     ;  4,2,3,4,5,5,7,4,9,
     ;  5,2,7,5,5,5,7,5,9,
     ;  6,2,7,5,5,6,7,6,9,
     ;  7,2,6*7,9,
     ;  8,2,3,4,5,6,7,8,9,
     ;  9,2,7*9,
     ;  4,2,3,6*4,
     ;  9*0,
     ;  9*0,
     ;  9*0,
     ;  0,9,6*0,9,
     ;  0,9,6*0,9,
     ;  0,9,6*0,9,
     ;  9*0,
     ;  9*0,
     ;  4,3*0,3*9,4,0,
     ;  4,3*0,3*9,0,0,
     ;  4,3*0,3*9,2*0,
     ;  4,3*0,3*9,2*0,
     ;  4,3*0,3*4,2*0,
     ;  4,3*0,3*4,2*0,
     ;  4,3*0,3*4,2*0,
     ;  4,3*0,3*9,2*0,
     ;  4,3*0,3*9,2*0,
     ;  4,2,3,6*4,
     ;  9*2,
     ;  9*3,
     ;  9*4,
     ;  5,9,6*5,9,
     ;  6,9,6,6,5,6,7,6,9,
     ;  7,9,6*7,9,
     ;  9*8,
     ;  9*9,
     ;  4,1,4,4,3,3,3,4,3,
     ;  2,1,2,2,3*1,2,1,
     ;  4,3,4,4,3*3,4,3,
     ;  4,3,4,4,3*3,4,3,
     ;  6,1,6*6,1,
     ;  5,1,6*5,1,
     ;  7,1,6*7,1,
     ;  4,3,4,4,3*3,4,3,
     ;  2,1,2,2,3*1,2,1/
	END
