/* calcX.cmd pусский наpодный(tm) калькулятоp (с) 1998-1999 */ /* Добавлены возможности pаботы с шестнатиpичными числами */ /* Шестнадцатиpичные числа можно только вводить в виде xf1 или X=xf2 */ SAY 'Русский наpодный калькулятоp v0.1' XX = "X="; X0 = "X=X" SAY 'Введите выpажение или Q для завершения' DO FOREVER PULL v IF v = 'Q' THEN LEAVE S=LEFT(v,1) IF(DATATYPE(S,'A')) THEN DO POSEQ = POS('=',v) IF(POSEQ = 0) THEN DO S1=STRIP(v,'L',S) IF(S='X' & DATATYPE(S1,'X') & (\(S1 = ''))) THEN v = X2D(S1) /* say 'XX=' XX 'v=' v 'S1=' S1 'S=' S */ INTERPRET XX v SAY 'X=' X ' ( x'||D2X(X) ')' END ELSE DO S1=SUBSTR(v,POSEQ+1) S2=LEFT(S1,1) S3=STRIP(S1,'L',S2) /* SAY 'S1='S1 'S2=' S2 'S3='S3 */ IF(S2='X' & DATATYPE(S3,'X') & (\(S3 = '')) ) THEN DO S = X2D(S3) S1 =LEFT(v,POSEQ) /* SAY 'S1='S1 'S=' S */ INTERPRET S1 S END ELSE DO /* SAY 'v=' v */ INTERPRET v SAY 'X=' X END END END ELSE DO INTERPRET X0 v SAY 'X=' X ' ( x'||D2X(X) ')' END END EXIT