home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 2 / MacMania 2.toast / Demo's / Tools&Utilities / Programming / Parser 3 / Terme.BAS < prev    next >
Encoding:
BASIC Source File  |  1994-06-08  |  14.1 KB  |  646 lines  |  [TEXT/DBAS]

  1. WINDOW OFF
  2. WINDOW 1,"",(0,0)-(0,0),1
  3. WINDOW CLOSE 1
  4.  
  5. ' -----------------------------------------------------------------------------------------------
  6.  
  7. DIM itype%(64),ihndl&(64),4 irect$(64)
  8.  
  9. DIM 6 Op$(30)
  10. DIM T$(10,10)
  11. DIM 20 Z$(10,10,20)
  12. DIM 2 O$(10,10,20)
  13. DIM 2 P$(10,10,20)
  14. DIM N!(10,10,20)
  15. DIM M!(10,10,20)
  16. DIM Num(10,10)
  17. DIM Error$(15)
  18. DIM K(10)
  19. DIM F&(48)
  20. DIM N(4)
  21. DIM N$(2)
  22.  
  23. ' -----------------------------------------------------------------------------------------------
  24.  
  25. Res%=FN OPENRESFILE("Terme.Res")
  26. Dloghndl&=FN GETNEWDIALOG(144,0,-1)
  27. Wptr&=FN FRONTWINDOW
  28. CALL SETPORT(Wptr&)
  29. COORDINATE WINDOW
  30. PEN 2,2,1,8,0
  31. BOX 1,-1 TO 441,213
  32.  
  33. ' -----------------------------------------------------------------------------------------------
  34.  
  35. Hndl&=FN GETRESOURCE(CVI("STR#"),128)
  36. Adr&=PEEK LONG(Hndl&)+2
  37. Num=PEEK(Adr&-1)
  38. FOR N=1 TO Num
  39.   Length=PEEK(Adr&)
  40.   A$=""
  41.   FOR I=1 TO Length
  42.     A$=A$+CHR$(PEEK(Adr&+I))
  43.   NEXT I
  44.   Adr&=Adr&+Length+1
  45.   Error$(N)=A$
  46. NEXT N
  47.  
  48. ' -----------------------------------------------------------------------------------------------
  49.  
  50. item=0
  51. DO
  52.   item=item+1
  53.   CALL GETDITEM(Dloghndl&,item,itype%(item),ihndl&(item),irect$(item))
  54. UNTIL ihndl&(item)=0 OR item=64
  55.  
  56. DATA   SIN,    COS,    TAN,    COT,    SINH,  COSH,  TANH,  COTH,  ASIN,  ACOS,   ATAN,  ACOT
  57. DATA   ASINH,  ACOSH,  ATANH,  ACOTH,  LN,    LOG,   EXP,   FAK,   INT,   FRAC,   ABS,   SQR
  58. DATA   A,      B,      C,      D,      F,     G,     H,     I,     J,     K,      L,     M
  59. DATA   N,      O,      P,      Q,      R,     S,     T,     U,     V,     W,      Y,     Z
  60.  
  61. FOR I=1 TO 48
  62.   READ PSTR$(F&(I))
  63. NEXT I
  64.  
  65. FOR I=25 TO 48
  66.   Op$(I-24)=PSTR$(F&(I))
  67. NEXT I
  68.  
  69. Op$(25)="^":Op$(26)="^":Op$(27)="*":Op$(28)="/":Op$(29)="+":Op$(30)="-"
  70.  
  71. ' -----------------------------------------------------------------------------------------------
  72.  
  73. LONG FN Fehler
  74.  
  75.   TEXT 3,9,0,0
  76.   CALL SETITEXT(ihndl&(6),Err$)
  77.   BEEP
  78.   Txt$=""
  79.   CALL SELITEXT(Dloghndl&,3,0,255)
  80.   GOTO "TERMLOOP"
  81.  
  82. END FN
  83.  
  84. ' -----------------------------------------------------------------------------------------------
  85.  
  86. LONG FN Neu
  87.  
  88. FOR S=1 TO 10
  89.   FOR N=1 TO 10
  90.     FOR J=1 TO 20
  91.       N!(S,N,J)=0
  92.       M!(S,N,J)=0
  93.       O$(S,N,J)=""
  94.       P$(S,N,J)=""
  95.       Z$(S,N,J)=""
  96.     NEXT J
  97.     Num(S,N)=0
  98.     T$(S,N)=""
  99.   NEXT N
  100.   K(S)=0
  101. NEXT S
  102.  
  103. END FN
  104.  
  105. ' -----------------------------------------------------------------------------------------------
  106.  
  107. LONG FN Term
  108. Term$=UCASE$(Term$)
  109.  
  110. LONG IF LEN(Term$)>1
  111.   DO
  112.     Len=LEN(Term$)
  113.     N=INSTR(1,Term$," ")
  114.     LONG IF N
  115.       Term$=LEFT$(Term$,N-1)+RIGHT$(Term$,Len-N)
  116.     END IF
  117.   UNTIL N=0
  118.  
  119.   Len=LEN(Term$)
  120.  
  121.   FOR I=1 TO 4
  122.  
  123.     DO
  124.       N(1)=INSTR(1,Term$,"[")
  125.       N(2)=INSTR(1,Term$,"{")
  126.       N(3)=INSTR(1,Term$,"]")
  127.       N(4)=INSTR(1,Term$,"}")
  128.       LONG IF N(I)
  129.         IF I<3 THEN MID$(Term$,N(I),1)="(" ELSE MID$(Term$,N(I),1)=")"
  130.       END IF
  131.     UNTIL N(I)=0
  132.  
  133.   NEXT I
  134.  
  135.   FOR I=1 TO 2
  136.  
  137.     DO
  138.       FOR J=1 TO Len
  139.       Len=LEN(Term$)
  140.         N(1)=INSTR(J,Term$,"X")
  141.         N(2)=INSTR(J,Term$,"(")
  142.         N$=MID$(Term$,N(I)-1,1)
  143.         LONG IF (N$>="0" AND N$<="9") OR N$="X" OR N$=")"
  144.           IF N(I)>1 THEN Term$=LEFT$(Term$,N(I)-1)+"*"+RIGHT$(Term$,Len-(N(I)-1))
  145.         END IF
  146.       NEXT J
  147.     UNTIL (N$<"0" OR N$>"9") AND N$<>"X" AND N$<>")"
  148.  
  149.   NEXT I
  150. END IF
  151.  
  152. END FN
  153.  
  154. ' -----------------------------------------------------------------------------------------------
  155.  
  156. LONG FN Ersetzen
  157.  
  158. LONG IF LEN(Term$)>2
  159.   FOR I=24 TO 1 STEP -1
  160.     S$=PSTR$(F&(I))
  161.     LenS=LEN(S$)
  162.  
  163.     DO
  164.       Len=LEN(Term$)
  165.       N=INSTR(1,Term$,S$)
  166.       LONG IF N
  167.         S2$=MID$(Term$,N+LenS,1)
  168.         LONG IF S2$<>"("
  169.           Err$=Error$(1)
  170.           FN Fehler
  171.           CALL SELITEXT(Dloghndl&,3,0,255)
  172.         END IF
  173.         Term$=LEFT$(Term$,N-1)+"1"+PSTR$(F&(I+24))+RIGHT$(Term$,Len-LenS-(N-1))
  174.       END IF
  175.     UNTIL N=0
  176.  
  177.   NEXT I
  178.  
  179.   FOR I=1 TO 26
  180.     LONG IF CHR$(64+I)<>"X" AND CHR$(64+I)<>"E"
  181.  
  182.       DO
  183.         FOR J=1 TO Len
  184.         Len=LEN(Term$)
  185.           N=INSTR(J,Term$,CHR$(64+I))
  186.           N$=MID$(Term$,N-2,1)
  187.           LONG IF (N$>="0" AND N$<="9") OR N$="X" OR N$=")"
  188.             IF N>2 THEN Term$=LEFT$(Term$,N-2)+"*"+RIGHT$(Term$,Len-(N-2))
  189.           END IF
  190.         NEXT J
  191.       UNTIL (N$<"0" OR N$>"9") AND N$<>"X" AND N$<>")"
  192.  
  193.     END IF
  194.   NEXT I
  195. END IF
  196.  
  197. FOR I=1 TO LEN(Term$)
  198.   S$=MID$(Term$,I,1)
  199.   LONG IF (S$>="A" AND S$<="Z") AND S$<>"X" AND S$<>"E"
  200.     N$=MID$(Term$,I+1,1)
  201.       LONG IF N$<>"("
  202.         Err$=Error$(2)
  203.         FN Fehler
  204.         CALL SELITEXT(Dloghndl&,3,0,255)
  205.       END IF
  206.   END IF
  207. NEXT I
  208.  
  209. END FN
  210.  
  211. ' -----------------------------------------------------------------------------------------------
  212.  
  213. LONG FN Klammer
  214.  
  215.   Max=1
  216.   Auf=0
  217.   Zu=0
  218.   S=1
  219.   K(1)=1
  220.   Length=LEN(Term$)
  221.  
  222.   FOR I=1 TO Length
  223.     S$=MID$(Term$,I,1)
  224.  
  225.     SELECT S$
  226.     CASE "("
  227.       T$(S,K(S))=T$(S,K(S))+"•"
  228.       Auf=Auf+1
  229.       S=S+1
  230.       LONG IF Auf>10
  231.         Err$=Error$(3)
  232.         FN Fehler
  233.       XELSE
  234.         Err$=""
  235.       END IF
  236.       K(S)=K(S)+1
  237.       LONG IF K(S)>10
  238.         Err$=Error$(4)
  239.         FN Fehler
  240.       XELSE
  241.         Err$=""
  242.       END IF
  243.       IF S>Max THEN Max=S
  244.     CASE ")"
  245.       Zu=Zu+1
  246.       S=S-1
  247.     CASE ELSE
  248.       T$(S,K(S))=T$(S,K(S))+S$
  249.     END SELECT
  250.  
  251.   NEXT I
  252.  
  253.   LONG IF Auf<>Zu
  254.     Diff=Auf-Zu
  255.     IF Auf-Zu=1 THEN Err$=STR$(Diff)+Error$(5)
  256.     IF Auf-Zu>1 THEN Err$=STR$(Diff)+Error$(6)
  257.     IF Zu-Auf=1 THEN Err$=STR$(-Diff)+Error$(7)
  258.     IF Zu-Auf>1 THEN Err$=STR$(-Diff)+Error$(8)
  259.     FN Fehler
  260.   END IF
  261.  
  262. END FN
  263.  
  264. ' -----------------------------------------------------------------------------------------------
  265.  
  266. LONG FN Scanner
  267.  
  268.   FOR S=1 TO Max
  269.     FOR N=1 TO K(S)
  270.  
  271.       J=1:K=1
  272.       Length=LEN(T$(S,N))
  273.       Z$(N,S,J)=""
  274.  
  275.       FOR I=1 TO Length
  276.         S$=MID$(T$(S,N),I,1)
  277.  
  278.         LONG IF VAL(S$) OR S$="0" OR S$="." OR S$="X" OR S$="π" OR S$="E" OR S$="•"
  279.  
  280.           IF I=2 AND MID$(T$(S,N),1,1)="-" THEN Z$(S,N,J)="-"+Z$(S,N,J)
  281.           IF MID$(T$(S,N),I-2,2)="^-" THEN Z$(S,N,J)="-"+Z$(S,N,J)
  282.           Z$(S,N,J)=Z$(S,N,J)+S$
  283.  
  284.           LONG IF Z$(S,N,J)="E" OR Z$(S,N,J)="-E" OR Z$(S,N,J)="π" OR Z$(S,N,J)="-π"
  285.             IF Z$(S,N,J)= "E" THEN N!(S,N,J)= 2.718281828
  286.             IF Z$(S,N,J)="-E" THEN N!(S,N,J)=-2.718281828
  287.             IF Z$(S,N,J)= "π" THEN N!(S,N,J)= 3.141592654
  288.             IF Z$(S,N,J)="-π" THEN N!(S,N,J)=-3.141592654
  289.           XELSE
  290.             N!(S,N,J)=VAL(Z$(S,N,J))
  291.           END IF
  292.  
  293.         XELSE
  294.  
  295.           LONG IF S$="+" OR S$="-" OR S$="*" OR S$="/" OR S$="^"
  296.             LONG IF MID$(T$(S,N),I-1,1)<>"^" AND I<>1
  297.               O$(S,N,K)=S$
  298.               K=K+1
  299.             END IF
  300.           XELSE
  301.             LONG IF S$>="A" AND S$<="Z"
  302.               O$(S,N,K)=S$
  303.               K=K+1
  304.             END IF
  305.           END IF
  306.  
  307.           LONG IF Z$(S,N,J)<>""
  308.             J=J+1
  309.             LONG IF J>20
  310.               Err$=Error$(9)
  311.               FN Fehler
  312.             END IF
  313.           END IF
  314.  
  315.         END IF
  316.  
  317.       NEXT I
  318.       Num(S,N)=J
  319.  
  320.     NEXT N
  321.   NEXT S
  322.  
  323. END FN
  324.  
  325. ' -----------------------------------------------------------------------------------------------
  326.  
  327. LONG FN Fak!(n!)
  328.  
  329.   LONG IF n!=0
  330.     Fak!=1
  331.   XELSE
  332.     Fak!=n!*FN Fak!(n!-1)
  333.   END IF
  334.  
  335. END FN
  336.  
  337. ' -----------------------------------------------------------------------------------------------
  338.  
  339. LONG FN Funktion
  340.  
  341.   FOR L=1 TO 29 STEP 2
  342.     I=0
  343.  
  344.     DO
  345.       I=I+1
  346.  
  347.       LONG IF P$(S,N,I)=Op$(L) OR P$(S,N,I)=Op$(L+1)
  348.         X1!=M!(S,N,I):X2!=M!(S,N,I+1)
  349.  
  350.         SELECT P$(S,N,I)
  351. ' ------------------------- Operatoren ------------
  352.         CASE "+"
  353.           X#=X1!+X2!
  354.         CASE "-"
  355.           X#=X1!-X2!
  356.         CASE "*"
  357.           X#=X1!*X2!
  358.         CASE "/"
  359.           X#=X1!/X2!
  360.         CASE "^"
  361.           X#=X1!^X2!
  362. ' ------------------------- Funktionen ------------
  363.         CASE "A"
  364.           X#=SIN(X2!)                                'sin
  365.         CASE "B"
  366.           X#=COS(X2!)                                'cos
  367.         CASE "C"
  368.           X#=TAN(X2!)                                'tan
  369.         CASE "D"
  370.           X#=1/TAN(X2!)                              'cot
  371.         CASE "F"
  372.           X#=(EXP(X2!)-EXP(-X2!))/2                  'sinh
  373.         CASE "G"
  374.           X#=(EXP(X2!)+EXP(-X2!))/2                  'cosh
  375.         CASE "H"
  376.           X#=(EXP(X2!)-1)/(EXP(X2!)+1)               'tanh
  377.         CASE "I"
  378.           X#=(EXP(X2!)+1)/(EXP(X2!)-1)               'coth
  379.         CASE "J"
  380.           X#=ATN(X2!/SQR(1-X2!*X2!))                 'arcsin
  381.         CASE "K"
  382.           X#=ATN(1)*2-ATN(X2!/SQR(1-X2!*X2!))        'arccos
  383.         CASE "L"
  384.           X#=ATN(X2!)                                'arctan
  385.         CASE "M"
  386.           X#=ATN(1)*2-ATN(X2!)                       'arccot
  387.         CASE "N"
  388.           X#=LOG(X2!+SQR(X2!*X2!+1))                 'arcsinh
  389.         CASE "O"
  390.           X#=LOG(X2!+SQR(X2!*X2!-1))                 'arccosh
  391.         CASE "P"
  392.           X#=LOG((1+X2!)/(1-X2!))/2                  'arctanh
  393.         CASE "Q"
  394.           X#=LOG((X2!+1)/(X2!-1))/2                  'arccoth
  395.         CASE "R"
  396.           X=LOG(X2!)                                 'ln x
  397.         CASE "S"
  398.           X#=LOG(X2!)/LOG(10)                        'lg x
  399.         CASE "T"
  400.           X#=EXP(X2!)                                'e^x
  401.         CASE "U"
  402.           X#=FN Fak!(X2!)                            'fakultät
  403.         CASE "V"
  404.           X#=INT(X2!)                                'integer
  405.         CASE "W"
  406.           X#=FRAC(X2!)                               'fraction
  407.         CASE "Y"
  408.           X#=ABS(X2!)                                'absolut
  409.         CASE "Z"
  410.           X#=SQR(X2!)                                'wurzel
  411.         END SELECT
  412.  
  413.         M!(S,N,I)=X#
  414.  
  415.         old&=VARPTR(M!(S,N,I+2))
  416.         max&=VARPTR(M!(S,N,Nmax))
  417.         new&=VARPTR(M!(S,N,I+1))
  418.         Length=max&-old&+4
  419.         BLOCKMOVE old&,new&,Length
  420.  
  421.         old&=VARPTR(P$(S,N,I+1))
  422.         max&=VARPTR(P$(S,N,Nmax))
  423.         new&=VARPTR(P$(S,N,I))
  424.         Length=max&-old&+3
  425.         BLOCKMOVE old&,new&,Length
  426.  
  427.         Nmax=Nmax-1
  428.         I=0
  429.  
  430.       END IF
  431.  
  432.     UNTIL I>=Nmax-1
  433.  
  434.   NEXT L
  435. END FN
  436.  
  437. ' -----------------------------------------------------------------------------------------------
  438.  
  439. LONG FN Parser
  440.  
  441.   FOR S=Max TO 1 STEP -1
  442.     W=0
  443.     FOR N=1 TO K(S)
  444.  
  445.       FOR J=1 TO Num(S,N)
  446.  
  447.         SELECT Z$(S,N,J)
  448.         CASE "X"
  449.           N!(S,N,J)=x!
  450.         CASE "-X"
  451.           N!(S,N,J)=-x!
  452.         CASE "•"
  453.           W=W+1
  454.           N!(S,N,J)=M!(S+1,W,1)
  455.         CASE "-•"
  456.           W=W+1
  457.           N!(S,N,J)=-M!(S+1,W,1)
  458.         END SELECT
  459.  
  460.         Nmax=Num(S,N)
  461.         old&=VARPTR(N!(S,N,1))
  462.         max&=VARPTR(N!(S,N,Nmax))
  463.         new&=VARPTR(M!(S,N,1))
  464.         Length=max&-old&+4
  465.         BLOCKMOVE old&,new&,Length
  466.  
  467.         old&=VARPTR(O$(S,N,1))
  468.         max&=VARPTR(O$(S,N,Nmax-1))
  469.         new&=VARPTR(P$(S,N,1))
  470.         Length=max&-old&+3
  471.         BLOCKMOVE old&,new&,Length
  472.  
  473.         FN Funktion
  474.  
  475.       NEXT J
  476.  
  477.     NEXT N
  478.   NEXT S
  479.  
  480. END FN
  481.  
  482. ' -----------------------------------------------------------------------------------------------
  483.  
  484. LONG FN Rechnen
  485.  
  486.   CALL GETITEXT(ihndl&(4),X$)
  487.  
  488.   x!=VAL(X$)
  489.  
  490.   FN Parser
  491.  
  492.   W$=STR$(M!(1,1,1))+" "
  493.   TEXT 3,9,0,0
  494.   CALL SETITEXT(ihndl&(5),W$)
  495.  
  496. END FN
  497.  
  498.  
  499. ' -----------------------------------------------------------------------------------------------
  500.  
  501. LONG FN Test
  502.  
  503.   test=0
  504.   IF S$>="0" AND S$<="9" THEN test=1
  505.   IF S$>="a" AND S$<="z" THEN test=1
  506.   IF S$>="A" AND S$<="Z" THEN test=1
  507.   IF S$="π" OR S$="∏" THEN test=1
  508.   IF S$=" " OR S$="." OR S$="," THEN test=1
  509.   IF S$="(" OR S$="[" OR S$="{" THEN test=1
  510.   IF S$=")" OR S$="]" OR S$="}" THEN test=1
  511.   IF S$="+" OR S$="-" OR S$="*" OR S$="/" OR S$="^" THEN test=1
  512.  
  513. END FN
  514.  
  515. ' ===============================================================================================
  516.  
  517. "TERMLOOP"
  518.  
  519.   CALL GETITEXT(ihndl&(3),T$)
  520.   CALL GETITEXT(ihndl&(4),X$)
  521.  
  522.   CALL MODALDIALOG(0,REF)
  523.  
  524.   LONG IF REF=1
  525.     LONG IF T$<>""
  526.       IF X$="" THEN X$="0"
  527.       CALL SETITEXT(ihndl&(4),X$)
  528.       CALL SELITEXT(Dloghndl&,4,0,255)
  529.       GOTO "TERMEVAL"
  530.     XELSE
  531.       Err$=Error$(11)
  532.       CALL SELITEXT(Dloghndl&,3,0,255)
  533.       FN Fehler
  534.     END IF
  535.   END IF
  536.  
  537.   IF REF=3 THEN GOTO "TERMEDIT"
  538.   IF REF=4 THEN GOTO "XEDIT"
  539.   IF REF=12 THEN "TERMEND"
  540.  
  541. GOTO "TERMLOOP"
  542.  
  543. ' -----------------------------------------------------------------------------------------------
  544.  
  545. "TERMEDIT"
  546.  
  547.   CALL SETITEXT(ihndl&(6),Txt$)
  548.   CALL GETITEXT(ihndl&(3),T$)
  549.  
  550.   S$=RIGHT$(T$,1)
  551.   LONG IF S$=")" AND INSTR(1,T$,"(")=0
  552.     T$=LEFT$(T$,LEN(T$)-1)
  553.     CALL SETITEXT(ihndl&(3),T$)
  554.     Err$=Error$(12)
  555.     CALL SELITEXT(Dloghndl&,3,0,255)
  556.     FN Fehler
  557.   END IF
  558.  
  559.   FN Test
  560.  
  561.   LONG IF test=0
  562.     T$=LEFT$(T$,LEN(T$)-1)
  563.     CALL SETITEXT(ihndl&(3),T$)
  564.     Err$=Error$(13)
  565.     FN Fehler
  566.     CALL SELITEXT(Dloghndl&,3,255,255)
  567.   END IF
  568.  
  569.   SELECT
  570.   CASE S$=","
  571.     T$=LEFT$(T$,LEN(T$)-1)+"."
  572.     CALL SETITEXT(ihndl&(3),T$)
  573.   CASE S$>="0" AND S$<="9"
  574.     S$=MID$(T$,LEN(T$)-1,1)
  575.     LONG IF S$="x" OR S$="X" OR S$=")"
  576.       T$=LEFT$(T$,LEN(T$)-1)
  577.       CALL SETITEXT(ihndl&(3),T$)
  578.       Err$=Error$(14)
  579.       FN Fehler
  580.     END IF
  581.   END SELECT
  582.  
  583. GOTO "TERMLOOP"
  584.  
  585. ' -----------------------------------------------------------------------------------------------
  586.  
  587. "XEDIT"
  588.  
  589.   CALL SETITEXT(ihndl&(6),Txt$)
  590.   CALL GETITEXT(ihndl&(4),X$)
  591.  
  592.   LONG IF RIGHT$(X$,1)=","
  593.     X$=LEFT$(X$,LEN(X$)-1)+"."
  594.     CALL SETITEXT(ihndl&(4),X$)
  595.   END IF
  596.  
  597.   LONG IF X$="π" OR X$="-π" OR X$="e" OR X$="-e" 
  598.     IF X$="π" THEN X$="3.14159265358979324"
  599.     IF X$="e" THEN X$="2.71828182845904524"
  600.     IF X$="-π" THEN X$="-3.14159265358979324"
  601.     IF X$="-e" THEN X$="-2.71828182845904524"
  602.     TEXT 3,9,0,0
  603.     CALL SETITEXT(ihndl&(4),X$)
  604.   END IF
  605.  
  606.   M$=RIGHT$(X$,1)
  607.   LONG IF M$<>"" AND M$<>"." AND M$<>"-" AND (M$<"0" OR M$>"9")
  608.     M$=LEFT$(X$,LEN(X$)-1)
  609.     TEXT 3,9,0,0
  610.     CALL SETITEXT(ihndl&(4),M$)
  611.     Err$=Error$(15)
  612.     FN Fehler
  613.   END IF
  614.  
  615. GOTO "TERMLOOP"
  616.  
  617. ' -----------------------------------------------------------------------------------------------
  618.  
  619. "TERMEVAL"
  620.  
  621.   CALL GETITEXT(ihndl&(3),Neu$)
  622.  
  623.   LONG IF Neu$<>Alt$
  624.     FN Neu
  625.     Term$=Neu$
  626.     Alt$=Neu$
  627.     Neu$=""
  628.     FN Term
  629.     FN Ersetzen
  630.     FN Klammer
  631.     FN Scanner
  632.   END IF
  633.  
  634.   FN Rechnen
  635.  
  636. GOTO "TERMLOOP"
  637.  
  638. ' -----------------------------------------------------------------------------------------------
  639.  
  640. "TERMEND"
  641.  
  642.   CALL DISPOSDIALOG(Dloghndl&)
  643.   END
  644.  
  645. ' -----------------------------------------------------------------------------------------------
  646.