\START92\ \COMMENT= \NAME=chemisfn \FILE=CHEMISFN.89F (chemeq) Func \(C)\chemeq:Func, read chemhelp for more Local re1,pr1,t1,l,re2,pr2,t2,t3,t4,t5,re3,pr3,s1,s2 If string(0)="0.":Return exact(chemisfn(chemeq)) inString(chemeq," \->\ ")\->\t1 If t1\!=\0 Then " \->\ "\->\s1 Else inString(chemeq,"\->\")\->\t1 If t1\!=\0 Then "\->\"\->\s1 Else inString(chemeq," = ")\->\t1 If t1\!=\0 Then " = "\->\s1 Else inString(chemeq,"=")\->\t1 If t1=0:Return "Syntax error!" "="\->\s1 EndIf EndIf EndIf If inString(chemeq," + ")\!=\0 Then " + "\->\s2 ElseIf inString(chemeq," & ")\!=\0 Then " & "\->\s2 ElseIf inString(chemeq,"&")\!=\0 Then "&"\->\s2 Else "+"\->\s2 EndIf left(chemeq,t1-1)\->\re1 mid(chemeq,t1+dim(s1))\->\pr1 0\->\re2 0\->\t3 {}\->\l {}\->\re3 While inString(re1,s2)\!=\0 inString(re1,s2)\->\t2 t3+1\->\t3 #("xx"&string(t3))\->\t4 left(re1,t2-1)\->\t5 augment(re3,{t5})\->\re3 re2+t4*chem(t5)\->\re2 augment(l,{t4})\->\l mid(re1,t2+dim(s2))\->\re1 EndWhile t3+1\->\t3 #("xx"&string(t3))\->\t4 augment(re3,{re1})\->\re3 re2+t4*chem(re1)\->\re2 augment(l,{t4})\->\l 0\->\pr2 {}\->\pr3 While inString(pr1,s2)\!=\0 inString(pr1,s2)\->\t2 t3+1\->\t3 #("xx"&string(t3))\->\t4 left(pr1,t2-1)\->\t5 augment(pr3,{t5})\->\pr3 pr2+t4*chem(t5)\->\pr2 augment(l,{t4})\->\l mid(pr1,t2+dim(s2))\->\pr1 EndWhile t3+1\->\t3 #("xx"&string(t3))\->\t4 augment(pr3,{pr1})\->\pr3 pr2+t4*chem(pr1)\->\pr2 augment(l,{t4})\->\l chemislv(re2=pr2,l)\->\chemeq ""\->\t2 0\->\t3 For t1,1,dim(re3)-1 t3+1\->\t3 t2&string(#("xx"&string(t3)))&" "&re3[t1]&" + "|chemeq\->\t2 EndFor t3+1\->\t3 t2&string(#("xx"&string(t3)))&" "&re3[dim(re3)]&" \->\ "|chemeq\->\t2 For t1,1,dim(pr3)-1 t3+1\->\t3 t2&string(#("xx"&string(t3)))&" "&pr3[t1]&" + "|chemeq\->\t2 EndFor t3+1\->\t3 t2&string(#("xx"&string(t3)))&" "&pr3[dim(pr3)]|chemeq\->\t2 Return t2 EndFunc \STOP92\