PP Script: Invisible Calculator

Те, кто ей начинают пользоваться, уже не в силах остановиться! Она может все. Или почти все!

PP Script: Invisible Calculator

Сообщение XLSoft » Пт янв 24, 2003 3:19 pm

Вкратце, если кто не в курсе, это такая приблуда, которая помогает считать выражения в любом текстовом редакторе. Например, пишешь
2х2
выделяешь, нажимаешь Ctrl+NumLock, получаешь вместо этого
2х2=4
если само выражение не надо, нажимаешь Shift+NumLock, тогда вместо выражения остается просто
4

Полезно, не так ли? PP так смогет? <!--emo&:)-->Изображение<!--endemo-->
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Ergo » Пт янв 24, 2003 4:02 pm

Нет проблем. Держи. Первая бета
Код: выделить все
Clip ClearClipboard

Tempfile = "&(pprofolder)Scriptsinvisible_temp.txt"

Clip Copy

My_expr = Clip

Clip ClearClipboard

My_new_expr = "x=" ++ "&(My_expr)"

Exec ToFile "&(tempfile)" &(My_new_expr)

RunFile "&(tempfile)"

File Delete "&(tempfile)"

My_result = "&(My_expr)" ++ "=" ++ "&(x)"

Keys {Del}

Clip TextPaste &(My_result)


Только что проверил - работает только с целыми числами. Буду думать дальше <!--emo&:)-->Изображение<!--endemo-->
<!--coloro:purple--><span style="color:purple"><!--/coloro--><!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo-->I can't stop using<a href="http://wincmd.ru" target="_blank">Total Commander</a> <!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Ergo
Полковник
 
Сообщений: 1357
Зарегистрирован: Чт мар 28, 2002 12:42 pm
Откуда: Brest Fortress
Пункты репутации: 0

Сообщение dAnIK SeNT » Сб янв 25, 2003 8:38 am

2Ergo
Используй float-плагин (в стандартной поставке) <!--emo&:)-->Изображение<!--endemo-->
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Ergo » Сб янв 25, 2003 1:35 pm

2dAnIK SeNT
<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Используй float-плагин (в стандартной поставке)<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
Не все так просто, даже учитывая, что у меня есть парсер для перестройки выражений для float-плагина, работает он вообще слабо. Так что это не выход, пока в PowerPro не будет нормальной поддержки выражений с плавающей точкой
<span style='color:green'><span style='font-size:16pt;line-height:100%'>Winamp np:silence</span></span>
<!--coloro:purple--><span style="color:purple"><!--/coloro--><!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo-->I can't stop using<a href="http://wincmd.ru" target="_blank">Total Commander</a> <!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Ergo
Полковник
 
Сообщений: 1357
Зарегистрирован: Чт мар 28, 2002 12:42 pm
Откуда: Brest Fortress
Пункты репутации: 0

Сообщение XLSoft » Вс янв 26, 2003 12:04 am

Вот наваял, вроде работает:
Код: выделить все

tempfile = "&(pprofolder)tempcalc.txt"
; предотвращаем накопление и повторное выполнение ошибочных операций, мусора

if (&(tempfile)) do

file delete &(tempfile)

endif
;

clip copy

expr = clip
; выделяем члены выражения, должно быть не больше двух, положительные

root = replacechars(&(expr), "+-*/ ")

root1 = word(&(root), 1)

root2 = word(&(root), 2)

if (index(&(expr), "-") == 1 | word(&(root), 3)) do

message Недопустимая операция

quit

endif
; определяем действие

if (index(&(expr), "+") != 0) do

op = "add"

elseif (index(&(expr), "-") != 0)

op = "sub"

elseif (index(&(expr), "*") != 0)

op = "mul"

elseif (index(&(expr), "/") != 0)

op = "divide"

else

message Недопустимая операция

quit

endif
; результат операции с точностью до второго знака после запятой

new_expr = "x = float.divide(float.truncate(float.add(float.mul(float." ++ &(op) ++ "('"&(root1)'",'"&(root2)'"),100), '"0.5'")),100)"

exec tofile "&(tempfile)" &(new_expr)

runfile "&(tempfile)"

file delete "&(tempfile)"
; удаляем ".", если число целое

if (index(&(x), ".") == length(&(x))) do

x = remove(&(x), -1)

endif
;

clip textpaste &(x)

<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение Ergo » Вс янв 26, 2003 12:24 am

Лови, мой. Сделан на основе скрипта brucexs.

calc.txt
Код: выделить все
Tempfile = "&(pprofolder)Scriptsinvisible_temp.txt"

File Delete "&(tempfile)"

Clip Copy

My_expr = Clip


; Prepare string for calculations, trimming, etc

My_expr_new = ReplaceChars("&(My_expr)", " ", "")

My_expr_new = ReplaceChars("&(My_expr_new)", ".", ",")
; End prepare string for calculations, trimming, etc



len=length(My_expr_new)

i=1

My_Float_String = ""

res=.calc@getnum

for (;i le len;)

       if (i>len)

          break

       op = select(My_expr_new,i,i)

       i=i+1

       n2 =.calc@getnum

       if (op=="+") do

          My_Float_String = My_Float_String++"float.add('""++res++"'",'""++n2++"'")"

       elseif (op=="-")

          My_Float_String = My_Float_String++"float.sub('""++res++"'",'""++n2++"'")"

       elseif (op=="*")

          My_Float_String = My_Float_String++"float.mul('""++res++"'",'""++n2++"'")"

       elseif (op=="/")

          My_Float_String = My_Float_String++"float.divide('""++res++"'",'""++n2++"'")"

       else

          MessageBox("ok", "Invalid input"++My_expr_new++" at "++op)

       endif

 My_Float_String="My_Result="++My_Float_String

 Exec ToFile "&(tempfile)" &(My_Float_String)

 RunFile "&(tempfile)"

 File Delete "&(tempfile)"

 My_Float_String = ""

 res=My_Result

endfor




; Now when result almost ready we must fix bug of Float plugin

if (select(My_Result,-1) == ",")

   My_Result = select(My_Result, length(My_result)-1)
; End of this bugfix

   

My_Ready = "&(My_expr)" ++ "=" ++ "&(My_Result)"

Keys {Del}

Clip TextPaste &(My_Ready)



quit



@getnum

if (i>len)

  quit(0)

num = ""

if (select(My_expr_new,i,i)=="-") do

  num = "-"

  i=i+1

endif

for (;i le len;i=i+1)

if (index("0123456789,",select(My_expr_new,i,i)) == 0) do

quit (num)

endif

num = num++select(My_expr_new,i,i)

endfor

quit(num)


Может считать числа с плавающей точкой, может вычислять несколько действий сразу.

Пока
- не понимает последовательности вычислений, то есть 2+2*2 получится 8.
- не понимает скобок.

Думаю как это исправить вот... Но думаю что это возможно сделать тоже
<!--coloro:purple--><span style="color:purple"><!--/coloro--><!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo-->I can't stop using<a href="http://wincmd.ru" target="_blank">Total Commander</a> <!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Ergo
Полковник
 
Сообщений: 1357
Зарегистрирован: Чт мар 28, 2002 12:42 pm
Откуда: Brest Fortress
Пункты репутации: 0

Сообщение XLSoft » Вс янв 26, 2003 1:00 am

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Сделан на основе скрипта brucexs<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
А где вообще западники свои скрипты выкладывают? <!--emo&:)-->Изображение<!--endemo-->
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение dAnIK SeNT » Вс янв 26, 2003 8:06 am

2XLSoft
<a href='http://groups.yahoo.com/group/power-pro/' target='_blank'>http://groups.yahoo.com/group/power-pro/</a>
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Ergo » Вс янв 26, 2003 10:30 pm

Финальная, реально работающая версия!!!!
Код: выделить все
; Invisible Calculator script for Windows PowerPro
;========================================================
;(c) the entire script - Bruce Switzer
;(c) some tiny improvements - Ergo
;========================================================
;save as calc.txt
;========================================================
;usage: type anything what you like to calculate, like
;2+2*3-1024,5*1,6/23 then select the entire formula and press
;assigned for calc.txt hot keys and you will receive
;result like 2+2*3-1024.5*1.6/23=-63.2695652173913
;The script understands incorrect input like
;2:5 or 3489, understans both type of decimal points, e.g
;23,5 or 23.5
;Script understands parentheses! Thanks Bruce!
;========================================================
;  Codes used for operators:
;   -- priority is first digit
;   -- unique code is next two digits



OP_PLUS = 501

OP_MINUS=502

OP_DIV=803

OP_MUL=804


;left parenthesis lower than any operator

OP_LEFT=305
; lowest priority operator marks bottom of operator stack

OP_BOTTOM = 100


; cleanup any older stack memory and create new stacks

if(snum gt 0)

  vec.destroy(snum)

if (sop gt 0)

  vec.destroy(sop)

snum = vec.create(10,10,16)

sop = vec.create(10,10,16)

fop=0

fnum=0

.calc@push_op(OP_BOTTOM)


; set input expression

Clip Copy

line = Clip



line = ReplaceChars("&(line)", " ", "")

line = ReplaceChars("&(line)", ",", ".")

line = ReplaceChars("&(line)", ":", "/")

line = ReplaceChars("&(line)", "", "/")





len=length(line)

i=1


; flags whether number or operator expected next

NextIsNum=1





res=0





for (;i le len;)

       if (i>len)

               break



       .calc@skipblanks

       if (NextIsNum)  Do

               if (select(line,i,i)=="(") do

                       i=i+1

                       .calc@push_op(OP_LEFT)

               else

                       num = .calc@getnum

                       .calc@push_num(num)

                       NextIsNum=0

               endif

               

       else

               if (select(line,i,i)==")") do

                       for (1)

                               op = .calc@pop_op

                               if (op==OP_LEFT)

                                       break

                               .calc@eval(op)

                       endfor

               else

                       op = .calc@getop

                       for (1)

                               optop = .calc@peek_op

                               if (optop/100 lt op/100)

                                       break

                               optop = .calc@pop_op

                               .calc@eval(optop)

                       endfor

                       .calc@push_op(op)

                       NextIsNum=1

               endif

               i=i+1

       endif

endfor


;  evaluate any ops still on stack and exit

for (1)

       op = .calc@pop_op

       if (op==OP_BOTTOM)

               break

       .calc@eval(op)

endfor



res = .calc@pop_num



My_Result = line++"="++res


; Now when result almost ready we must fix bug of Float plugin

if (select(My_Result,-1) == ".")

       My_Result = select(My_Result, length(My_result)-1)
; End of this bugfix





Clip TextPaste &(My_Result)
;MessageBox("ok",line++"'requals "++res)

sop = vec.destroy(sop)

snum = vec.destroy(snum)

quit

       

                               

                       
;---------------------------------------------
; skip blanks



@skipblanks

for (;i le len;i=i+1)

if ( select(line,i,i) ne " ")

quit

endfor

quit


;---------------------------------------------
; return number starting at current pos in line



@getnum

if (i>len)

  quit(0)

num = ""

if (select(line,i,i)=="-") do

  num = "-"

  i=i+1

endif

for (;i le len;i=i+1)

if (index("0123456789.",select(line,i,i)) == 0) do

quit (num)

endif

num = num++select(line,i,i)

endfor

quit(num)

 
;---------------------------------------------
; return code for operator at current pos in line



@getop  

c = select(line,i,i)

if (c == "+")

  quit(OP_PLUS)

if (c == "-")

  quit(OP_MINUS)

if (c == "*")

  quit(OP_MUL)

if (c == "/")

  quit(OP_DIV)

MessageBox("ok","Invalid operator'r" ++ line)

quit(OP_PLUS)  




;---------------------------------------------
; apply operator to top two numbers on num stack



@eval

n2 = .calc@pop_num

n1 = .calc@pop_num

n3=0

if (arg(1) == OP_PLUS) do

       n3 = float.add(n1,n2)

elseif (arg(1) == OP_MINUS) do

       n3 = float.sub(n1,n2)

elseif (arg(1) == OP_MUL) do

       n3 = float.mul(n1,n2)

elseif (arg(1) == OP_DIV) do

       n3 = float.divide(n1,n2)

else

       MessageBox("ok", "internal error")

endif

.calc@push_num(n3)

quit

 
;---------------------------------------------
; pop top element from operator stack



@pop_op

if (fop>0) do

       fop = fop-1

       quit (vec.get(sop,fop))

endif

MessageBox("ok","Invalid Expression:'r"++line)

quit (OP_PLUS)


;---------------------------------------------
; push operator onto stack



@push_op

vec.set(sop, fop, arg(1))

fop = fop+1

quit


;---------------------------------------------
; return top operator from stack without popping it



@peek_op

if (fop>0)

       quit (vec.get(sop,fop-1))

MessageBox("ok","Invalid Expression:'r"++line)

quit (OP_PLUS)


;---------------------------------------------
; pop top number from number stack



@pop_num

if (fnum>0) do

       fnum = fnum-1

       quit (vec.get(snum,fnum))

endif

MessageBox("ok","Invalid Expression:'r"++line)

quit (0)


;---------------------------------------------
; push number onto number stack



@push_num

vec.set(snum,fnum, arg(1))

fnum=fnum+1

quit



@dump_num

for (j=1; j<fnum; j=j+1)

  debug dump num &(vec.get(snum,j))

endfor

<!--coloro:purple--><span style="color:purple"><!--/coloro--><!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo-->I can't stop using<a href="http://wincmd.ru" target="_blank">Total Commander</a> <!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Ergo
Полковник
 
Сообщений: 1357
Зарегистрирован: Чт мар 28, 2002 12:42 pm
Откуда: Brest Fortress
Пункты репутации: 0

Сообщение athost » Вс янв 26, 2003 10:59 pm

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Финальная, реально работающая версия!!!! <!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

Не работает, как и предыдущий <!--emo&:(-->Изображение<!--endemo-->

Ничего не считает и РР валит...
athost
Рядовой
 
Сообщений: 7
Зарегистрирован: Ср янв 22, 2003 8:46 pm
Пункты репутации: 0

Сообщение XLSoft » Вс янв 26, 2003 11:27 pm

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Не работает, как и предыдущий<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
Распакуй в директорию PowerPro vec.dll из файла plugins.zip (лежит там же).
Все рулезно пашет.
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение XLSoft » Вс янв 26, 2003 11:41 pm

Да, и скрипт должен обязательно называться calc.txt

На любителя, все же заменил
My_Result = line++"="++res
на
My_Result = float.divide(float.truncate(float.add(float.mul(res,100),"0.5")),100)
убирает начальное выражение и типа округляет до второго знака после запятой. <!--emo&:)-->Изображение<!--endemo-->
<a href='http://xlsoft.net.ru/' target='_blank'>XLSoft</a> - оффлайн-каталог лучших программ и сайтов
XLSoft
Капитан
 
Сообщений: 158
Зарегистрирован: Чт мар 28, 2002 8:39 pm
Откуда: Киев
Пункты репутации: 0

Сообщение athost » Пн янв 27, 2003 5:17 am

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Распакуй в директорию PowerPro vec.dll из файла plugins.zip (лежит там же).  
Все рулезно пашет. <!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

Плагины распакованы.

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Да, и скрипт должен обязательно называться calc.txt <!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

Да, скрипт называется calc.txt
athost
Рядовой
 
Сообщений: 7
Зарегистрирован: Ср янв 22, 2003 8:46 pm
Пункты репутации: 0

Сообщение Ergo » Пн янв 27, 2003 7:34 am

2athost
У тебя должно быть два плагина
float.dll и vec.dll проверь, есть ли они у тебя?
Какая у тебя версия PowerPro?
<!--coloro:purple--><span style="color:purple"><!--/coloro--><!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo-->I can't stop using<a href="http://wincmd.ru" target="_blank">Total Commander</a> <!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Ergo
Полковник
 
Сообщений: 1357
Зарегистрирован: Чт мар 28, 2002 12:42 pm
Откуда: Brest Fortress
Пункты репутации: 0

Сообщение athost » Пн янв 27, 2003 2:13 pm

Версия 3.6.1, ХР Home +SP1

Все плагины есть и распакованы из последней версии РР.

Все делаю по инструкции -- выделяю выражение, нажимаю хот кей, раздается около 20 писков, после этого РР закрывается.
athost
Рядовой
 
Сообщений: 7
Зарегистрирован: Ср янв 22, 2003 8:46 pm
Пункты репутации: 0

След.

Вернуться в Windows PowerPro

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7