Quick Calc — File Browser

QuickCalcv3.51 / QuickCalcv3.51 / qcalc.mrc

qcalc.mrc — 51.37 KB — Download this file

; Script: Quick Calc 3.51
; Build: 811.1
; mIRC Version: 6.16
; Author: Daryth

menu Status,Channel {
  Quick Calc
  .Quick Calc:qcalc
  .-
  .Readme File:qcalc help
  .-
  .Unload Script:qcalc unload
}
dialog -l qcalc {
  title "Quick Calc 3.51"
  icon $scriptdirqcalc.ico
  size -1 -1 290 270
  list 1,5 5 280 105
  edit "",2,5 102 280 22,autohs
  radio "Home",3,5 127 45 18,push group
  radio "Y=",4,52 127 45 18,push
  radio "Window",5,99 127 45 18,push
  button "Graph",6,146 127 45 18
  radio "TblSet",7,193 127 45 18,push
  radio "Table",8,240 127 45 18,push
  check "2nd",9,5 147 45 18,push
  button "X Var",10,52 147 45 18,disable
  button "Catalog",11,99 147 45 18
  button "Mode",12,146 147 45 18
  button "Back",13,193 147 45 18
  button "Clear",14,240 147 45 18
  button "(",15,5 167 45 18
  button ")",16,52 167 45 18
  button "Sin",17,99 167 45 18
  button "Cos",18,146 167 45 18
  button "Tan",19,193 167 45 18
  button "Store",20,240 167 45 18
  button "7",21,5 187 45 18
  button "8",22,52 187 45 18
  button "9",23,99 187 45 18
  button "Log",24,146 187 45 18
  button "Ln",25,193 187 45 18
  button "Abs",26,240 187 45 18
  button "4",27,5 207 45 18
  button "5",28,52 207 45 18
  button "6",29,99 207 45 18
  button "n!",30,146 207 45 18
  button "e^x",31,193 207 45 18
  button "^",32,240 207 45 18
  button "1",33,5 227 45 18
  button "2",34,52 227 45 18
  button "3",35,99 227 45 18
  button "x",36,146 227 45 18
  button "/",37,193 227 45 18
  button "Sqrt",38,240 227 45 18
  button "0",39,5 247 45 18
  button ".",40,52 247 45 18
  button "pi",41,99 247 45 18
  button "+",42,146 247 45 18
  button "-",43,193 247 45 18
  button "Enter",44,240 247 45 18,default
  button "",45,240 247 45 18,cancel hide
  list 50,5 5 280 105,hide ; y= listbox
  list 51,5 5 280 105,hide ; window listbox
  list 53,5 5 280 105,hide ; tblset listbox
  list 54,5 5 280 105,hide ; table listbox
  list 55,5 5 280 105,hide ; equation listbox
  list 56,5 5 280 105,sort hide ; var-link listbox
  list 57,5 5 280 105,sort hide ; catalog listbox
}
dialog -l qcalc-var {
  title "Variables"
  icon $scriptdirqcalc.ico
  size -1 -1 200 67
  text "Variable:",1,10 14 45 22
  edit "",2,60 10 130 22,limit 25
  button "&Ok",3,10 42 80 20,ok default
  button "&Cancel",4,110 42 80 20,cancel 
}
dialog -l qcalc-win {
  title "Window Size"
  icon $scriptdirqcalc.ico
  size -1 -1 200 115
  text "Window Width:",1,10 14 80 22
  edit "",2,95 10 55 22,center limit 4
  text "pixels",3,160 14 40 22
  text "Window Height:",4,10 46 80 22
  edit "",5,95 42 55 22,center limit 4
  text "pixels",6,160 46 40 22
  button "&Ok",7,10 80 80 20,ok default
  button "&Cancel",8,110 80 80 20,cancel 
}
dialog -l qcalc-c {
  title "Catalog"
  icon $scriptdirqcalc.ico
  size -1 -1 130 180
  list 1,2 2 126 186,autovs sort
  edit "",2,2 2 100 22,hide result
  button " ",3,20 155 65 20,cancel default hide
}
dialog -l qcalc-m {
  title "Quick Calc Settings"
  icon $scriptdirqcalc.ico
  size -1 -1 245 210
  combo 1,40 5 160 150,drop
  button "<",2,15 5 20 20
  button ">",3,205 5 20 20
  box "General Settings",4,5 30 235 147
  button "1",5,1 1 1 1,hide
  text "Graph Type",10,15 50 100 20
  combo 11,115 46 115 80,drop
  text "Drawing Style",12,15 75 100 20
  combo 13,115 71 115 80,drop
  text "Angle",14,15 100 100 20
  combo 15,115 96 115 80,drop  
  text "Decimal Numbers",16,15 125 100 20
  combo 17,115 121 115 200,drop
  text "History Buffer",18,15 151 100 20
  combo 19,115 146 115 160,drop
  text "Axes",20,15 50 100 20,hide
  combo 21,115 46 115 80,drop hide
  text "Grid",22,15 75 100 20,hide
  combo 23,115 71 115 80,drop hide
  text "Coordinates",24,15 100 100 20,hide
  combo 25,115 96 115 80,drop hide
  text "Labels",26,15 125 100 20,hide
  combo 27,115 121 115 80,drop hide
  text "Background",28,15 151 100 20,hide
  combo 29,115 146 115 80,drop hide
  combo 30,15 55 90 200,drop hide
  text "=",31,118 58 35 20,hide
  combo 32,140 55 90 200,drop hide
  text "Red",33,15 94 50 20,hide
  edit "0",34,65 92 60 20,center limit 3 hide disable
  text "Green",35,15 119 50 20,hide
  edit "0",36,65 117 60 20,center limit 3 hide disable
  text "Blue",37,15 144 50 20,hide
  edit "0",38,65 142 60 20,center limit 3 hide disable
  icon 39,141 94 85 67,$shortfn($scriptdirqcalc.bmp),hide
  check "Status Window",40,25 55 150 20,hide
  check "Channel Windows",41,25 75 150 20,hide
  check "Query/Chat Windows",42,25 95 150 20,hide
  check "Nicklist Popups",43,25 115 150 20,hide
  check "Menubar Popup",44,25 135 150 20,hide
  check "Set 2nd function as a toggle button",50,15 48 210 20,hide
  check "Save equation history on exit",51,15 68 210 20,hide
  check "Show equations in history display",52,15 88 210 20,hide 3state
  check "Open windows/dialogs on the desktop",53,15 108 210 20,hide
  check "Always display windows/dialogs on top",54,15 128 210 20,hide
  check "Always use timer based graph rendering",55,15 148 210 20,hide
  list 56,10 10 220 180,hide
  button "&OK",100,45 185 60 20,ok default
  button "&Cancel",101,110 185 60 20,cancel
  button "&Apply",102,175 185 60 20,disable
}
on *:dialog:qcalc:init:0: {
  dialog -s qcalc $qcr(windowsQcalc) 290 270 
  did -c qcalc 3 
  gdata 51 
  y= 
  did -f qcalc 2 
  if ($qcr(advHistory)) {
    var %a = 1
    while ($qcr($+(history,%a))) { 
      did -a qcalc 1 $gettok($qcr($+(history,%a)),1,59) 
      did -a qcalc 55 $gettok($qcr($+(history,%a)),2,59) 
      inc %a
    }
    did -c qcalc 1 $did(1).lines
  }
}
on  *:dialog:qcalc:sclick:*: {
  did -f qcalc 2 
  if ((($did isnum 3-44) || ($did isnum 51-53)) && ($mouse.key & 2) && ($mouse.key & 4)) { 
    var %a = $read($+(",$scriptdir,qcalc.txt"),w,*##### BUTTON EXPLANATION #####*) 
    if ($did isnum 51-53) { var %a = $read($+(",$scriptdir,qcalc.txt"),w,$+($chr(9),$gettok($did($did).seltext,1,61),*:*),$readn) , %b = $calc($readn +1) } 
    else { 
      var %a = $read($+(",$scriptdir,qcalc.txt"),w,$+([,$did($did),]:*),$readn) , %b = $calc($readn +1) 
      while ($read($+(",$scriptdir,qcalc.txt"),%b)) { var %a = %a $read($+(",$scriptdir,qcalc.txt"),%b) | inc %b }
    }
    .echo -q $input($replace(%a,$chr(9),$crlf),oq,Quick Calc Help - $iif($did isnum 51-53,$gettok($did($did).seltext,1,61),$did($did))) 
    return
  }
  if ($findtok(15.16.21.22.23.27.28.29.32.33.34.35.37.39.40.42.43,$did,1,46)) { did -a qcalc 2 $did($did) }
  elseif ($findtok(3 4 5 7 8,$did,1,32)) { 
    did -h qcalc 1,50,51,53,54,56,57 
    did $iif($did == 4,-e,$iif($did(10) == Var-Link,-e,-b)) qcalc 10 
    did -v qcalc $iif($did == 3,1,$calc(46+$did)) 
    gdata $calc(46+$did)
  }
  elseif ($did == 6) { 
    if ($mouse.key & 4) { .timer -o 1 0 return $dialog(qcalc-win,qcalc-win,-4) }
    else { graph $iif($mouse.key & 2,1) }
  }
  elseif ($did == 9) { 
    if ($did(9).state) { 
      did -e qcalc 10 
      did -a qcalc 11 Help 
      did -a qcalc 15 [ 
      did -a qcalc 16 ] 
      did -a qcalc 17 ArcSin 
      did -a qcalc 18 ArcCos 
      did -a qcalc 19 ArcTan 
      did -a qcalc 14 $iif($did(56).visible,ClrVars,ClrHst) 
      did -a qcalc 10 Var-Link 
      did -a qcalc 20 Recall 
      did -a qcalc 32 °
    }
    else { 
      did $iif($did(6).state,-e,-b) qcalc 10 
      did -a qcalc 11 Catalog 
      did -a qcalc 15 ( 
      did -a qcalc 16 ) 
      did -a qcalc 17 Sin 
      did -a qcalc 18 Cos 
      did -a qcalc 19 Tan 
      did -a qcalc 14 Clear 
      did -a qcalc 10 X Var 
      did -a qcalc 20 Store 
      did -a qcalc 32 ^
    }
  }
  elseif ($did == 10) { 
    if ($did(10) == Var-Link) { 
      did -h qcalc 1,50,51,53,54,57 
      did -v qcalc 56 
      gdata 56 
    }
    else { did -a qcalc 2 x }
  }
  elseif ($did == 11) {
    if ($did(11) == Help) { qcalc help } 
    elseif ($mouse.key & 4) { 
      if ($dialog(qcalc-c)) { dialog -v qcalc-c }
      else { dialog $+(-m,$iif($qcr(advDesktop),d),$iif($qcr(advOntop),o)) qcalc-c qcalc-c }
    }
    else { 
      var %a = 3
      while ((!$did(%a).state) && (%a < 8)) { inc %a }
      did -h qcalc 1,50,51,53,54,56
      did -rfv qcalc 57
      didtok qcalc 57 32 + - * / % ^ ^-1 ^2 ^3 !( 10^ 1/ abs( acos( acosh( asin( asinh( atan( atanh( cos( cosh( e^( gcd( int( log( ln( phi rand( root( round( sign( sin( sinh( sqrt( sum( tan( tanh(
      did -c qcalc 57 1
    }
  } 
  elseif ($did == 12) { qcalc mode }
  elseif ($did == 13) { did -o qcalc 2 1 $left($did(2),-1) }
  elseif ($did == 14) { 
    if ($did(14) == ClrHst) { did -r qcalc 1,55 }
    elseif ($did(14) == ClrVars) { 
      hdel -w qcalc var.* 
      did -r qcalc 56
    }
    else { 
      if ($did(2) != $null) { did -r qcalc 2 }
      elseif ($did(56).visible) { 
        hdel qcalc $+(var.,$gettok($did(56).seltext,1,61)) 
        did -d qcalc 56 $did(56).sel
      }
      elseif ($did(3).state) { 
        did -d qcalc 1,55 $did(1).sel 
        did -c qcalc 1 $did(1).lines 
      }
      elseif ($did(4).state) { 
        did -co qcalc 50 $did(50).sel $+($gettok($did(50).seltext,1,61),=)
        if ($qcr($+($qcr(modeGraph),$did(50).sel)) != $null) { hdel qcalc $qcr($+($qcr(modeGraph),$did(50).sel)) }
      }
    }
  }
  elseif ($did == 20) {
    if ($did(20) == Store) { if ($did(2,1).len) { .timer -o 1 0 return $dialog(qcalc-store,qcalc-var,-4) } }
    else { .timer -o 1 0 return $dialog(qcalc-recall,qcalc-var,-4) }
  }
  elseif ($did == 44) {
    if ($did(56).visible) { 
      did -h qcalc 56 
      var %a = 3
      while (%a < 9) { 
        if ($did(%a).state) { 
          did -h qcalc 54 
          did -v qcalc $gettok(1 50 51 50 53 54,$calc(%a -2),32) 
          %a = 7
        } 
        inc %a
      }
      if ($did(50).visible) { did -e qcalc 10 }
    }
    elseif ($did(3).state) {
      var %a = $qc($calc( [ $parse($did(2)) ] ))
      if ($did(1).lines >= $qcr(modeHist)) { did -d qcalc 1,55 1 }
      if (%a != $null) {
        if ($qcr(advShowEq) == 2) { did -ac qcalc 1 $replace($did(2),$chr(44),$chr(32),*,$+($chr(32),x,$chr(32)),/,$+($chr(32),/,$chr(32)),+,$+($chr(32),+,$chr(32)),-,$+($chr(32),-,$chr(32))) = %a }
        elseif ($qcr(advShowEq)) { did -ac qcalc 1 $+($replace($did(2),$chr(44),$chr(32)),=,%a) }
        else { did -ac qcalc 1 %a } 
        did -a qcalc 55 $remove($did(2),$chr(44))
      }
      elseif ($did(2)) { 
        did -ac qcalc 1 Undefined 
        did -a qcalc 55 $remove($did(2),$chr(44))
      }
    }
    elseif ($did(4).state) { 
      did -co qcalc 50 $did(50).sel $+($gettok($did(50).seltext,1,61),=,$did(2)) 
      $iif($did(2) == $null,hdel,hadd) qcalc $+($qcr(modeGraph),$did(50).sel) $did(2) 
      did -c qcalc 50 $iif($did(50).sel == $did(50).lines,1,$calc($did(50).sel +1)) 
    }
    elseif ($did(5).state) { 
      var %a = $iif($did(2) !isnum,$calc( [ $parse($did(2)) ] ),$did(2))
      if (%a != $null) { 
        if ((*-step=* iswm $did(51).seltext) && (%a <= 0)) { return }
        elseif ((X-res=* iswm $did(51).seltext) && ((%a !isnum 1-10) && (%a != -1))) { return }
        did -co qcalc 51 $did(51).sel $+($gettok($did(51).seltext,1,61),=,%a)
        hadd qcalc discardCache 1
        mw $+($qcr(modeGraph),$gettok($did(51).seltext,1,61)) $gettok($did(51).seltext,2-,61)
      }
      did -c qcalc 51 $iif($did(51).sel == $did(51).lines,1,$calc($did(51).sel +1))
    }
    elseif ($did(7).state) { 
      var %a = $qc($calc( [ $parse($did(2)) ] ))
      if (%a != $null) { 
        did -co qcalc 53 $did(53).sel $+($gettok($did(53).seltext,1,61),=,$iif($did(53).sel == 4,$iif($abs(%a) == 0,1,$abs(%a)),%a)) 
        mw $gettok($did(53).seltext,1,61) $gettok($did(53).seltext,2-,61)
        did -c qcalc 53 $iif($did(53).sel == $did(53).lines,1,$calc($did(53).sel +1))
      }
    }
    elseif (($did(8).state) && (!$timer(qcalcTable))) {
      if (($did(2) == $null) && ($mouse.key)) { 
        did -c qcalc 50 $iif($mouse.key & 4,$iif($calc($did(50).sel -1) < 1,$did(50).lines,$calc($did(50).sel -1)),$iif($calc($did(50).sel +1) > $did(50).lines,1,$calc($did(50).sel +1))) 
        gdata 54
      }
      else {
        var %a = $qc($calc( [ $parse($did(2)) ] ))
        if ((%a != $null) && (!$didwm(54,$+($gettok($gettok($did(50).seltext,1,61),2,32),?,%a,?=*)))) { 
          did -a qcalc 54 $+($gettok($gettok($did(50).seltext,1,61),2,32),$chr(40),%a,$chr(41),=,$calc($eval($parse($replace($gettok($did(50).seltext,2-,61),x,%a)),2))) 
          filter -cioa qcalc 54 qcalc 54 sort * 
        }
        var %b = $didwm(54,$+($gettok($gettok($did(50).seltext,1,61),2,32),?,%a,?=*)) 
        did -c qcalc 54 $calc(%b $iif(%b < $did(54).sel,-,+) 3) 
        did -c qcalc 54 %b
      }
    }
    if ($mouse.key != 4) { did -r qcalc 2 }
  }
  elseif ($did == 45) { 
    if ($dialog(qcalc-win)) { dialog -c qcalc-win }
    if ($dialog(qcalc-c)) { dialog -c qcalc-c }
    if ($dialog(qcalc-m)) { dialog -c qcalc-m }
    if ($window(@Graphing)) { window -c @Graphing }
    mw windowsQcalc $dialog(qcalc).x $dialog(qcalc).y
    .remove $+(",$scriptdir,qcalc.bmp,")
    if ($exists($+(",$scriptdir,qcalctmp.bmp"))) { .remove $+(",$scriptdir,qcalctmp.bmp,") }
    hdel -w qcalc history*
    var %a = 1
    while (%a <= $did(1).lines) { 
      mw $+(history,%a) $+($did(1,%a),;,$did(55,%a)) 
      inc %a 
    }
    hsave -o qcalc $+(",$scriptdir,qcalc.dat,")
    hfree qcalc
  }
  elseif (($did == 50) && ($mouse.key & 4)) { did -oc qcalc 50 $did(50).sel $puttok($did(50).seltext,$iif([-]* iswm $did(50).seltext,[+],[-]),1,32) }
  elseif (($did == 56) && ($mouse.key & 2)) { 
    hdel qcalc $+(var.,$gettok($did(56).seltext,1,61)) 
    did -d qcalc 56 $did(56).sel 
    did -f qcalc 2 
  }
  elseif ($did isnum 10-43) { did -a qcalc 2 $replace($did($did),e^x,e^<,x,*,sqrt,sqrt<,pi,$pi,n!,!<,arc,a,sin,sin<,cos,cos<,tan,tan<,ln,ln<,log,log<,abs,abs<,<,$chr(40)) }
  if ((($did isnum 3-44) || ($did == 0)) && (($did != 9) && ($did(9).state) && (!$qcr(adv2nd)))) { 
    did $iif($did(6).state,-e,-b) qcalc 10 
    did -a qcalc 11 Catalog 
    did -a qcalc 15 ( 
    did -a qcalc 16 ) 
    did -a qcalc 17 Sin 
    did -a qcalc 18 Cos 
    did -a qcalc 19 Tan 
    did -a qcalc 14 Clear 
    did -a qcalc 10 X Var 
    did -a qcalc 20 Store 
    did -a qcalc 32 ^ 
    did -u qcalc 9 
  }
}
on *:dialog:qcalc:dclick:*: {
  if ($did == 1) { 
    if ($mouse.key & 2) { 
      did -d qcalc 1,55 $did(1).sel 
      did -c qcalc 1 $did(1).lines
    }
    elseif ($mouse.key & 4) { did -a qcalc 2 $did(qcalc,55,$did(1).sel) }
    else { did -a qcalc 2 $iif(= isin $did(1).seltext,$gettok($did(1).seltext,2-,61),$did(1).seltext) }
  }
  elseif ($did == 50) {
    if ($mouse.key & 2) { 
      did -co qcalc 50 $did(50).sel $replace($gettok($did(50).seltext,1,61),-,+) $+ = 
      hdel qcalc $+($qcr(modegraph),$did(50).sel)
    }
    elseif ($mouse.key == 1) { did -o qcalc 2 1 $gettok($did($did).seltext,2,61) }
  }
  elseif ($did isnum 51-53) { did -o qcalc 2 1 $gettok($did($did).seltext,2,61) }
  elseif ($did isnum 56-57) { 
    if ($mouse.key == 1) { 
      var %a = 3
      while (%a < 9) { 
        if ($did(%a).state) { 
          did -h qcalc $did 
          did -v qcalc $gettok(1 50 51 50 53 54,$calc(%a -2),32) 
          %a = 8 
        } 
        inc %a 
      }
    }
    if ($did == 56) { did -a qcalc 2 $gettok($did(56).seltext,2,61) }
    else { did -a qcalc 2 $did(57).seltext }
  }
}
on *:dialog:qcalc-recall:init:0: { dialog -t qcalc-recall Recall Variable }
on *:dialog:qcalc-recall:sclick:3: {
  if ($qcr($+(var.,$did(2)))) { did -a qcalc 2 $v1 }
}
on *:dialog:qcalc-store:init:0: { dialog -t qcalc-store Store Variable }
on *:dialog:qcalc-store:sclick:3: {
  if (($did(2,1).len) && ($calc( [ $parse($did(qcalc,2)) ] )) && ($remove($gettok($did(2),1,32),[,],$chr(40),$chr(41),$chr(44),%) != $null)) { 
    mw $+(var.,$remove($gettok($did(2),1,32),[,],$chr(40),$chr(41),$chr(44),%)) $calc( [ $parse($did(qcalc,2)) ] ) 
    if ($did(qcalc,56).visible) { gdata 56 }
    did -r qcalc 2 
  }
}
on *:dialog:qcalc-win:init:0: {
  did -a qcalc-win 2 $qcr(winWidth) 
  did -a qcalc-win 5 $qcr(winHeight) 
}
on *:dialog:qcalc-win:edit:*: {
  if ($did($did) !isnum) { 
    var %i = 1 , %n 
    while (%i <= $len($did($did))) { 
      if ($mid($did($did),%i,1) isnum) { %n = %n $+ $mid($did($did),%i,1) } 
      inc %i 
    }
    did -o qcalc-win $did 1 %n
  }
}
on *:dialog:qcalc-win:sclick:7: { win $iif($window(-1).w < $did(2),$v1,$iif($did(2) < 100,100,$did(2))) $iif($window(-1).h < $did(5),$v1,$iif($did(5) < 75,75,$did(5))) }
on *:dialog:qcalc-c:init:0: { 
  dialog -s qcalc-c $qcr(windowsCatalog) 130 180 
  didtok qcalc-c 1 32 + - * / % ^ ^-1 ^2 ^3 !( 10^ 1/ abs( acos( acosh( asin( asinh( atan( atanh( cos( cosh( e^( gcd( int( log( ln( phi rand( root( round( sign( sin( sinh( sqrt( sum( tan( tanh( 
}
on *:dialog:qcalc-c:sclick:3: { mw windowsCatalog $dialog(qcalc-c).x $dialog(qcalc-c).y }
on *:dialog:qcalc-c:dclick:*: { did -a qcalc 2 $did(1,$did(qcalc-c,1).sel) }
on *:dialog:qcalc-m:init:0: {
  dialog -s qcalc-m $qcr(windowsMode) 245 210
  var %a = 1 , %b = 1
  while ($did(qcalc,50,%a)) { 
    did -a qcalc-m 30 $+(y,%b) 
    did -a qcalc-m 56 $qcr($+(colors,%b)) 
    inc %a $iif($qcr(modeGraph) == Parametric,2) 
    inc %b
  }
  mdid -c qcalc-m 1 1 General Settings,Graph Display,Graph Colors,Popups,Advanced Settings
  mdid -c qcalc-m 11 $replace($qcr(modeGraph),Function,1,Parametric,2,Polar,3) Function,Parametric,Polar
  mdid -c qcalc-m 13 $qcr(modeStyle) Connected,Points,Square $iif(($mouse.key & 4) || ($qcr(modeStyle) > 3),$+($chr(44),Smilies,$chr(44),Ball Numbers,$chr(44),Are we alone?))
  mdid -c qcalc-m 15 $qcr(modeAngle) Degrees,Radians
  mdid -c qcalc-m 17 $qcr(modeDigits) Fixed 0,Fixed 1,Fixed 2,Fixed 3,Fixed 4,Fixed 5,Fixed 6,Float,Float 1,Float 2,Float 3,Float 4,Float 5
  mdid -c qcalc-m 19 $calc($qcr(modeHist)/10) 10,20,30,40,50,60,70,80,90,100
  mdid -c qcalc-m 21 $qcr(modeAxes) On,Off
  mdid -c qcalc-m 23 $qcr(modeGrid) On,Off
  mdid -c qcalc-m 25 $qcr(modeCoord) Rectangular,Polar
  mdid -c qcalc-m 27 $qcr(modeLabels) On,Off
  mdid -c qcalc-m 29 $qcr(modeBg) Black,White 
  did -c qcalc-m 30 1
  mdid -c qcalc-m 32 $gettok($qcr(colors1),1,32) White,Black,Navy,Green,Red,Maroon,Violet,Orange,Yellow,Lime,Teal,Cyan,Blue,Hot Pink,Gray,Silver,Custom
  did $iif($qcr(colors1,1) == 17,-eo,-o) qcalc-m 34 1 $gettok($qcr(colors1,2),1,44) 
  did $iif($qcr(colors1,1) == 17,-eo,-o) qcalc-m 36 1 $gettok($qcr(colors1,2),2,44) 
  did $iif($qcr(colors1,1) == 17,-eo,-o) qcalc-m 38 1 $gettok($qcr(colors1,2),3,44)
  qc-cp
  if ($qcr(modePopups)) { did -c qcalc-m $replace($qcr(modePopups),status,40,channel,41,query,42,nicklist,43,menubar,44) }
  if ($qcr(adv2nd)) { did -c qcalc-m 50 }
  if ($qcr(advHistory)) { did -c qcalc-m 51 }
  if ($qcr(advShowEq)) { did $iif($v1 == 2,-cu,-c) qcalc-m 52 }
  if ($qcr(advDesktop)) { did -c qcalc-m 53 }
  if ($qcr(advOntop)) { did -c qcalc-m 54 }
  if ($qcr(advRenderer)) { did -c qcalc-m 55 }
}
on *:dialog:qcalc-m:edit:*: {
  if (($did isnum 34-38) && ($did($did))) {
    if (($did($did) isnum) && ($did($did) > 255)) { did -o qcalc-m $did 1 255 }
    elseif ($did($did) !isnum 0-255) { did -o qcalc-m $did 1 $abs($int($did($did))) }
    qc-cp
    did -o qcalc-m 56 $did(30).sel $did(32).sel $replace($int($did(34)) $int($did(36)) $int($did(38)),$chr(32),$chr(44))
  }
}
on *:dialog:qcalc-m:sclick:*: {
  if (($did > 9) && (!$did(102).enabled)) { did -e qcalc-m 102 }
  if (($did == 100) || ($did == 102)) { mw windowsMode $dialog(qcalc-m).x $dialog(qcalc-m).y }
  if ($did == 2) { did -c qcalc-m 1 $iif($calc($did(1).sel -1) == 0,$did(1).lines,$calc($did(1).sel -1)) }
  elseif ($did == 3) { did -c qcalc-m 1 $iif($did(1,$calc($did(1).sel +1)),$calc($did(1).sel +1),1) }
  if ($did isnum 1-3) { 
    did -h qcalc-m $midg($did(5)) 
    did -v qcalc-m $midg($did(1).sel) 
    did -a qcalc-m 4 $did(1) 
    did -ac qcalc-m 5 $did(1).sel
  }
  elseif ($did == 30) { did -c qcalc-m 32 $qcr($+(colors,$did(30).sel),1) }
  if (($did == 32) || ($did == 30)) { 
    if ($did(32) == Custom) { did -e qcalc-m 34,36,38 }
    else { 
      did -b qcalc-m 34,36,38 
      did -o qcalc-m 34 1 $gettok($c-rgb($did(32).sel),1,44) 
      did -o qcalc-m 36 1 $gettok($c-rgb($did(32).sel),2,44) 
      did -o qcalc-m 38 1 $gettok($c-rgb($did(32).sel),3,44)
    }
    qc-cp
  }
  if ($did == 32) { did -o qcalc-m 56 $did(30).sel $did(32).sel $replace($did(34) $did(36) $did(38),$chr(32),$chr(44)) }
  elseif (($did == 100) || ($did == 102)) {
    if ($did == 102) { qc-cp }
    hdel qcalc modePopups
    var %a = 40 , %c = 1 , %g = $qcr(modeGraph)
    mw modeGraph $did(11).seltext ,modeStyle $did(13).sel ,modeAngle $did(15).sel ,modeDigits $did(17).sel ,modeHist $did(19) ,modeAxes $did(21).sel ,modeGrid $did(23).sel ,modeCoord $did(25).sel
    mw modeLabels $did(27).sel ,modeBg $did(29).sel ,adv2nd $did(50).state ,advHistory $did(51).state ,advShowEq $did(52).state ,advDesktop $did(53).state ,advOntop $did(54).state ,advRenderer $did(55).state
    if ($did == 100) { dialog $iif($did(52).state,-o,-n) qcalc }
    if (%g != $qcr(modeGraph)) { 
      y= 
      hadd qcalc discardCache 1
    }
    if ($window(@Graphing)) { window $iif($did(52).state,-o,-u) @Graphing }
    while (%a < 45) { 
      if ($did(%a).state) { var %p = $addtok(%p,$gettok($gettok($did(%a),1,32),1,47),44) }
      inc %a 
    }
    while ($did(56,%c)) { 
      hadd qcalc $+(colors,%c) $did(56,%c) 
      inc %c
    }
    if (%p) { hadd qcalc modePopups %p }
    hsave -o qcalc $+(",$scriptdir,qcalc.dat,")
    write -l6 $+(",$script,") menu $qcr(modePopups) $chr(123)
    .reload -rs $+(",$script,")
  }
}
on *:close:@Graphing: { 
  if ($window(@graphing).y > 0) { mw windowsGraph $window(@graphing).x $window(@graphing).y } 
  .timerqcalcG* off
}
on *:load: {
  if ($version < 6.16) { 
    echo $colour(info) -at $iif(%::pre,%::pre,***) Quick Calc 3.51: Sorry you need to upgrade your copy of mIRC to use this addon. Please download mIRC 6.16 or above from http://www.mirc.com/get.html 
    .unload -rs $+(",$script,") 
    halt
  }
  var %a = $gettok($read($+(",$script,"),6),2,32)
  echo $colour(info) -at $iif(%::pre,%::pre,***) Quick Calc 3.51 is now loaded, type /qcalc to run it $iif(%a,or go to the $replace($iif($numtok(%a,44) > 1,$puttok(%a,or $gettok(%a,-1,44),-1,44),%a),$chr(44),$+($chr(44),$chr(32))) popups.)
}
on *:keydown:@Graphing:*: {
  if (!$keyrpt) { 
    if (($keychar isnum 1-10) && (!$qcr(toolsLocate))) { 
      did -oc qcalc 50 $keychar $puttok($did(qcalc,50,$keychar),$iif([-]* iswm $did(qcalc,50,$keychar),[+],[-]),1,32) 
      if ([?]*=?* iswm $did(qcalc,50,$keychar)) { graph }
    }
    elseif (($keychar isin 1234567890-.) && ($qcr(toolsLocate))) { 
      hadd -u20 qcalc toolsLocate2 $qcr(toolsLocate2) $+ $keychar 
      drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 0 $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),xc:) $qcr(toolsLocate2)
    }
    elseif ($keychar == d) { mw toolsDistance 1 }
    elseif ($keychar == p) { zoom $qcr(zoomPrev) }
    elseif ($keychar == r) { graph }
    elseif ($keychar == s) { zoom -10 10 1 -10 10 1 }
    elseif ($keychar == w) { .timer -o 1 0 return $dialog(qcalc-win,qcalc-win) }
    elseif ($keychar == z) { 
      if ($qcr(zoomBox,0) > 1) { 
        drawrect -rfi @Graphing 0 1 $qcr(zoomBox) 
        hdel -w qcalc zoomBox*
      }
      elseif ($qcr(zoomBox)) { hdel qcalc zoomBox }
      else { mw zoomBox 1 } 
    }
    elseif (($keyval == 13) && ($qcr(modeCoord) == 1)) {
      if (!$qcr(toolsLocate)) { 
        hadd -u30 qcalc toolsLocate 1
        drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 0 $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),xc:) $str($chr(160),200)
      }
      else { 
        drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 $calc($window(@Graphing).dw /2) $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),yc:) $calc($eval($replace($parse($gettok($did(qcalc,50).seltext,2-,61)),x,$qcr(toolsLocate2)),2)) $str($chr(160),200)
        hdel -w qcalc toolsLocate*
      }
    }
  }
  if ($keyval == 38) { did -c qcalc 50 $iif($did(qcalc,50).sel == 1,$did(qcalc,50).lines,$calc($did(qcalc,50).sel -1)) }
  elseif ($keyval == 40) { did -c qcalc 50 $iif($did(qcalc,50).sel == $did(qcalc,50).lines,1,$calc($did(qcalc,50).sel +1)) }
}
menu @graphing {
  mouse {
    if ($mouse.y <= $calc($window(@Graphing).dh -15)) {
      if ($window(@Graphing).dw != $pic($scriptdirqcalctmp.bmp).width) { graph 2 }
      if ($qcr(modeCoord) == 1) { 
        drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 0 $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),xc:) $qm(x,$mouse.x) $str($chr(160),99)
        drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 $calc($window(@Graphing).dw /2) $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),yc:) $qm(y,$mouse.y) $str($chr(160),99)
      }
      elseif ($qcr(modeCoord) == 2) { 
        drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 0 $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),rc:) $sqrt($calc(($qm(x,$mouse.x))^2 + ($qm(y,$mouse.y))^2)) $str($chr(160),99)
        drawtext -rbc @Graphing $rgb(text) $rgb(face) Verdana 12 $calc($window(@Graphing).dw /2) $calc($window(@Graphing).dh -14) $calc($window(@Graphing).dw /2) 14 $+($chr(160),ac:) $calc(-1*$sign($qm(y,$mouse.y))*$atan2($qm(x,$mouse.x)/$qm(y,$mouse.y))+(($sign($qm(y,$mouse.y))*$pi)/2)) $str($chr(160),99)
      }
      if ($qcr(zoomBox,0) > 1) { 
        drawrect -rci @Graphing 0 1 $qcr(zoomBox) $qcr(zoomBox,1-2) $calc($mouse.x - $qcr(zoomBox,1)) $calc($mouse.y - $qcr(zoomBox,2)) 
        mw zoomBox $qcr(zoomBox,1-2) $calc($mouse.x - $qcr(zoomBox,1)) $calc($mouse.y - $qcr(zoomBox,2))
      }
      elseif ($qcr(toolsDistance,0) > 1) { 
        drawline -ir @Graphing 0 1 $qcr(toolsDistance) 
        drawline -ir @Graphing 0 1 $qcr(toolsDistance,1-2) $mouse.x $mouse.y 
        mw toolsDistance $qcr(toolsDistance,1-2) $mouse.x $mouse.y
      }
    } 
  }
  sclick {
    if ($mouse.y <= $calc($window(@Graphing).dh -15)) {
      if ($mouse.key & 2) { mw zoomBox 1 }
      if ($qcr(zoomBox,0) == 1) { mw zoomBox $mouse.x $mouse.y 0 0 ,zoomBox2 $qcr(mouseX) $qcr(mouseY) }
      elseif ($qcr(toolsDistance)) { mw toolsDistance $mouse.x $mouse.y $mouse.x $mouse.y }
    }
  }
  drop {
    if ($qcr(zoomBox)) { 
      zoom $sorttok($qcr(mouseX) $qcr(zoomBox2,1),32,n) $qcr($+($qcr(modeGraph),X-scale)) $sorttok($qcr(mouseY) $qcr(zoomBox2,2),32,n) $qcr($+($qcr(modeGraph),Y-scale)) 
      hdel -w qcalc zoomBox* 
    }
    elseif ($qcr(toolsDistance)) {
      drawline -ir @Graphing 0 1 $qcr(toolsDistance) 
      did -a qcalc 2 $sqrt($calc(($qm(x,$qcr(toolsDistance,3))-$qm(x,$qcr(toolsDistance,1)))^2 + ($qm(y,$qcr(toolsDistance,4))-$qm(y,$qcr(toolsDistance,2)))^2))
      hdel qcalc toolsDistance
    }
  }
  leave {
    if ($qcr(zoomBox,0) > 1) { 
      drawrect -rci @Graphing 0 1 $qcr(zoomBox) 
      hdel -w qcalc zoomBox* 
    }
    elseif ($qcr(toolsDistance)) { 
      drawline -ir @Graphing 0 1 $qcr(toolsDistance) 
      hdel qcalc toolsDistance 
    }
  }
  $iif(!$timer(qcalcG1),&ReGraph):graph
  $iif($timer(qcalcG1),&Stop Graphing): { 
    .timerqcalcG* off 
    hdel -w qcalc graphTmpG* 
    titlebar @Graphing aborted! ( $+ $calc(($ticks - $qcr(graphStart))/1000) secs) 
  }
  -
  &Graph
  .$iif($qcr(modeGraph) == Function,$style(1)) Function: { mw modeGraph Function | y= | gdata 51 | graph 1 }
  .$iif($qcr(modeGraph) == Parametric,$style(1)) Parametric: { mw modeGraph Parametric | y= | gdata 51 | graph 1 }
  .$iif($qcr(modeGraph) == Polar,$style(1)) Polar: { mw modeGraph Polar | y= | gdata 51 | graph 1 }
  &Y=
  .$submenu($showy=($1))
  -
  &Tools
  .$iif($qcr(toolsDistance),$style(1)) Get Distance:mw toolsDistance 1
  -
  &Zoom
  .Zoom&In:zoom $calc($qcr($+($qcr(modeGraph),X-min))/2 + $qcr(mousex)) $calc($qcr($+($qcr(modeGraph)),X-max)/2 + $qcr(mousex)) $calc($qcr($+($qcr(modeGraph)),Y-min)/2 + $qcr(mousey)) $calc($qcr($+($qcr(modeGraph),Y-max))/2 + $qcr(mousey))
  .Zoom&Out:zoom $calc(2* $qcr($+($qcr(modeGraph),X-min)) - $qcr(mousex)) $calc(2* $qcr($+($qcr(modeGraph),X-max)) - $qcr(mousex)) $calc(2* $qcr($+($qcr(modeGraph),Y-min)) - $qcr(mousey)) $calc(2* $qcr($+($qcr(modeGraph),Y-max)) - $qcr(mousey)) 
  .$iif($qcr(zoomBox),$style(1)) Zoom&Box: { 
    if ($qcr(zoomBox,0)) { hdel qcalc zoomBox }
    else { mw zoomBox 1 }
  }
  .-
  .$iif($zc(-10,10,-10,10),$style(1)) Zoom&Std:zoom -10 10 1 -10 10 1
  .$iif($zc(-11.9,11.9,-5.1,5.1),$style(1)) Zoom&Dec:zoom -11.9 11.9 1 -5.1 5.1 1
  .$iif($iif($qcr(modeAngle) == 1,$zc(-892.5,892.5,-4,4),$zc(-15.577063574,15.577063574,-4,4)),$style(1)) Zoom&Trig:zoom $iif($qcr(modeAngle) == 1,-892.5 892.5 90 -4 4 .5,-15.577063574 15.577063574 1.5707963267949 -4 4 .5)
  .$iif($zc(-119,119,-51,51),$style(1)) ZoomI&nt:zoom -119 119 10 -51 51 10
  .-
  .Zoom&Prev:zoom $qcr(zoomPrev)
  .ZoomS&tor:mw zoom stor $qcr($+($qcr(modeGraph),X-min)) $qcr($+($qcr(modeGraph),X-max)) $qcr($+($qcr(modeGraph),Y-min)) $qcr($+($qcr(modeGraph),X-max)
  .Zoom&Rcl:zoom $qcr(zoomStor)
  &Window Size
  .$iif(!$findtok(200x150 300x225 400x300 500x375 600x450 700x525,$+($qcr(winWidth),x,$qcr(winHeight)),32),$style(1)) &Custom:.timer -o 1 0 return $dialog(qcalc-win,qcalc-win)
  .-
  .$iif($+($qcr(winWidth),x,$qcr(winHeight)) == 200x150,$style(1)) 200x150:win 200 150
  .$iif($+($qcr(winWidth),x,$qcr(winHeight)) == 300x225,$style(1)) 300x225:win 300 225
  .$iif($+($qcr(winWidth),x,$qcr(winHeight)) == 400x300,$style(1)) 400x300:win 400 300
  .$iif($+($qcr(winWidth),x,$qcr(winHeight)) == 500x375,$style(1)) 500x375:win 500 375
  .$iif($+($qcr(winWidth),x,$qcr(winHeight)) == 600x450,$style(1)) 600x450:win 600 450
  .$iif($+($qcr(winWidth),x,$qcr(winHeight)) == 700x525,$style(1)) 700x525:win 700 525
  -
  &Display Settings
  .$iif($qcr(modeBg) == 1,$style(1)) &Black Background:mw modeBg $iif($qcr(modeBg) == 1,2,1) | graph 1
  .-
  .$iif($qcr(modeAxes) == 1,$style(1)) &X/Y Axes:mw modeAxes $iif($qcr(modeAxes) == 1,2,1) | graph 1
  .$iif($qcr(modeGrid) == 1,$style(1)) &Show Grid:mw modeGrid $iif($qcr(modeGrid) == 1,2,1) | graph 1
  .$iif($qcr(modeLabels) == 1,$style(1)) &Label Axes: { 
    mw modeLabels $iif($qcr(modeLabels) == 1,2,1) 
    if ($qcr(modeLabels) == 1) {
      drawtext -rob @Graphing $rgb(255,255,255) 0 Verdana 12 5 $calc(($qcr(scaleY)*$abs($qcr($+($qcr(modeGraph),Y-max))))-7) X
      drawtext -rob @Graphing $rgb(255,255,255) 0 Verdana 12 $calc((-1* ($qcr(scaleX)*$qcr($+($qcr(modeGraph),X-min))))-4) 1 Y
    }
    else { graph }
  }
}
alias qcalc {
  if ($version < 6.16) { echo $colour(info) -at $iif(%::pre,%::pre,***) Quick Calc 3.5: Sorry you need to upgrade your copy of mIRC to use this addon. Please download mIRC 6.16 or above from http://www.mirc.com/get.html }
  elseif ($1 == unload) { 
    if ($dialog(qcalc)) { dialog -c qcalc } 
    unload -rs $+(",$script,")
  }
  elseif ($1 == help) {
    if ($exists($+(",$scriptdir,qcalc.txt"))) { run $+(",$scriptdir,qcalc.txt") } 
    else { var %a = $input(Unable to locate 'qcalc.txt' please place this file in $scriptdir,oq,Error: File not found) }
  }
  else {
    if (($1 == defaults) && ($dialog(qcalc-m))) { dialog -c qcalc-m }
    if (!$hget(qcalc)) { hmake qcalc 100 }
    if ((!$exists($+(",$scriptdir,qcalc.dat"))) || ($1 == defaults)) {
      ; Configuration file not found, rebuilding new one with default values. 
      hadd qcalc adv2nd 0
      hadd qcalc advDesktop 0
      hadd qcalc advHistory 1
      hadd qcalc advOntop 0
      hadd qcalc advRenderer 0
      hadd qcalc advShowEq 0
      hadd qcalc colors1 3 0,0,128
      hadd qcalc colors2 5 255,0,0
      hadd qcalc colors3 13 0,0,255
      hadd qcalc colors4 11 0,128,128
      hadd qcalc colors5 14 255,0,128
      hadd qcalc colors6 4 0,128,0
      hadd qcalc colors7 6 128,0,0
      hadd qcalc colors8 7 128,0,128
      hadd qcalc colors9 8 255,128,0
      hadd qcalc colors10 10 0,255,0
      hadd qcalc FunctionX-max 10
      hadd qcalc FunctionX-min -10
      hadd qcalc FunctionX-res -1
      hadd qcalc FunctionX-scale 1
      hadd qcalc FunctionY-max 10
      hadd qcalc FunctionY-min -10
      hadd qcalc FunctionY-scale 1
      hadd qcalc graphScale 0.2
      hadd qcalc graphStart 15502362
      hadd qcalc modeAngle 2
      hadd qcalc modeAxes 1
      hadd qcalc modeBg 2
      hadd qcalc modeCoord 1
      hadd qcalc modeDigits 8
      hadd qcalc modeGraph Function
      hadd qcalc modeGrid 1
      hadd qcalc modeHist 30
      hadd qcalc modeLabels 2
      hadd qcalc modePopups Status,Channel
      hadd qcalc modeStyle 1
      hadd qcalc mouseX 8.36
      hadd qcalc mouseY 10
      hadd qcalc ParametricT-max 4
      hadd qcalc ParametricT-min 0
      hadd qcalc ParametricT-step .13
      hadd qcalc ParametricX-max 25
      hadd qcalc ParametricX-min -2
      hadd qcalc ParametricX-scale 1
      hadd qcalc ParametricY-max 10
      hadd qcalc ParametricY-min -2
      hadd qcalc ParametricY-scale 1
      hadd qcalc PolarAngle-max 6.283185
      hadd qcalc PolarAngle-min 0
      hadd qcalc PolarAngle-step 0.1309
      hadd qcalc PolarX-max 10
      hadd qcalc PolarX-min -10
      hadd qcalc PolarX-scale 1
      hadd qcalc PolarY-max 10
      hadd qcalc PolarY-min -10
      hadd qcalc PolarY-scale 1
      hadd qcalc scaleX 25
      hadd qcalc scaleY 18.75
      hadd qcalc tableMax 30
      hadd qcalc tableMin -30
      hadd qcalc tableScale 1
      hadd qcalc tableStart 0
      hadd qcalc tableMaxloop 500
      hadd qcalc windowsCatalog -1 -1
      hadd qcalc windowsGraph -1 -1
      hadd qcalc windowsMode -1 -1
      hadd qcalc windowsQcalc -1 -1
      hadd qcalc winHeight 375
      hadd qcalc winWidth 500
      hadd qcalc zoomPrev -119 119 10 -51 51 10
      hsave -o qcalc $+(",$scriptdir,qcalc.dat,")
      if (($1 == defaults) && ($dialog(qcalc))) { y= }
    }
    elseif (!$dialog(qcalc)) { hload qcalc $+(",$scriptdir,qcalc.dat,") }
    if (!$exists($+(",$scriptdir,qcalc.bmp"))) { 
      ; Build color selection bitmap for Mode dialog.
      window -phf +d @qcalc-color 1 1 85 67 
      drawrect -rf @qcalc-color $rgb( [ $gettok($hget(qcalc,colors1),2,32) ] ) 1 0 0 85 68 
      drawsave @qcalc-color $+(",$scriptdir,qcalc.bmp,")
      window -c @qcalc-color
    }
    if (!$exists($+(",$scriptdir,qcalc.ico"))) { 
      ; Normal qcalc.ico file not found in scriptdir, so extract mirc's default icon and save it to qcalc.ico
      window -phf +d @qcalc-icon 1 1 32 32
      drawpic @qcalc-icon 0 0 $+(",$mircexe,")
      drawsave -b8 @qcalc-icon $+(",$scriptdir,qcalc.ico")
      window -c @qcalc-icon
    }
    if ($dialog(qcalc)) { dialog -v qcalc }
    else { dialog $+(-m,$iif($qcr(advDesktop),d),$iif($qcr(advOntop),o)) qcalc qcalc }
    if ($1 == mode) {
      if ($dialog(qcalc-m)) { dialog -v qcalc-m } 
      else { .timer -o 1 0 dialog $+(-m,$iif($qcr(advDesktop),d),$iif($qcr(advOntop),o)) qcalc-m qcalc-m }
    }
  }
}
alias -l graph {
  mw graphStart $ticks
  var %a = 1 , %c = 0, %t = 0 , %x = $qcr($+($qcr(modeGraph),X-min)) + $qcr($+($qcr(modeGraph),X-scale)) , %y = $qcr($+($qcr(modeGraph),Y-max)) - $qcr($+($qcr(modeGraph),Y-scale))
  if ($1) { .timerqcalcG* off }
  if ((($1) || ($qcr(discardCache))) && ($exists($+(",$scriptdir,qcalctmp.bmp")))) { .remove $+(",$scriptdir,qcalctmp.bmp,") }
  if ($window(@Graphing)) { 
    if ($window(@Graphing).y > 0) { mw windowsGraph $window(@Graphing).x $window(@Graphing).y } 
    if ($1 == 2) { window -c @Graphing }
  }
  window $+(-pfk,$iif($qcr(advDesktop),dha,a),$iif($qcr(advOntop),o)) +elt @Graphing $qcr(windowsgraph) $qcr(winWidth) $calc($qcr(winHeight)+15) @Graphing
  ; tokenize graph mode variables 1 = start, 2 = end, 3 = step, 4 = function inc (2 for parametric)
  if ($qcr(modeGraph) == Polar) { tokenize 32 $qcr(PolarAngle-min) $qcr(PolarAngle-max) $iif($calc($window(@Graphing).dw /11000) > $qcr(PolarAngle-step),$qcr(PolarAngle-step),$calc($qcr(PolarAngle-step)-($window(@Graphing).dw /11000))) }
  elseif ($qcr(modeGraph) == Parametric) { tokenize 32 $qcr(ParametricT-min) $qcr(ParametricT-max) $iif($calc($window(@Graphing).dw /11000) > $qcr(ParametricT-step),$qcr(ParametricT-step),$calc($qcr(ParametricT-step)-($window(@Graphing).dw /11000))) 2 }
  else { tokenize 32 $qcr(FunctionX-min) $qcr(FunctionX-max)) $calc(($abs($qcr(FunctionX-min))+$abs($qcr(FunctionX-max)))/$window(@Graphing).dw *$iif($qcr(FunctionX-res) !isnum 1-10,$calc($window(@Graphing).dw /100),$qcr(FunctionX-res))) }
  ; if loops are going to exceed 2000 reps, use timer based graphing
  if ($calc(($2 - $1)/$3) > 2000) { var %t = 1 }
  mw graphScale $3 ,scaleX $calc($window(@Graphing).dw /($qcr($+($qcr(modeGraph),X-max))-$qcr($+($qcr(modeGraph),X-min)))) ,scaleY $calc($calc($window(@Graphing).dh -15)/($qcr($+($qcr(modeGraph),Y-max))-$qcr($+($qcr(modeGraph),Y-min))))
  if ($exists($+(",$scriptdir,qcalctmp.bmp"))) { drawpic @Graphing 0 0 $+(",$scriptdir,qcalctmp.bmp,") }
  else {
    drawrect -rf @Graphing 16777215 1 0 0 $window(@Graphing).dw $window(@Graphing).dh
    if ($qcr(modeGrid)  == 1) { 
      if (($qcr(scaleX) >= 1) && ($qcr($+($qcr(modeGraph),X-scale)) > 0)) { 
        while (%x < $qcr($+($qcr(modeGraph),X-max))) { drawline -r @Graphing 15000804 1 $scale(%x,$qcr($+($qcr(modeGraph),Y-max)),t) $scale(%x,$calc($qcr($+($qcr(modeGraph),Y-min))-5),t) 
          inc %x $qcr($+($qcr(modeGraph),X-scale))
        }
      }
      if (($qcr(scaleY) >= 1) && ($qcr($+($qcr(modeGraph),Y-scale)) > 0)) { 
        while (%y > $calc($qcr($+($qcr(modeGraph),Y-min))-5)) { drawline -r @Graphing 15000804 1 $scale($qcr($+($qcr(modeGraph),X-min)),%y,t) $scale($qcr($+($qcr(modeGraph),X-max)),%y,t) 
          dec %y $qcr($+($qcr(modeGraph),Y-scale))
        }
      }
    }
    if ($qcr(modeAxes) == 1) {  
      drawline -r @Graphing 0 1 $calc(-1* ($qcr(scaleX)*$qcr($+($qcr(modeGraph),X-min)))) 0 $calc(-1* ($qcr(scaleX)*$qcr($+($qcr(modeGraph),X-min)))) $calc($window(@Graphing).dh -15)
      drawline -r @Graphing 0 1 0 $calc($qcr(scaleY)*$abs($qcr($+($qcr(modeGraph),Y-max)))) $window(@Graphing).dw $calc($qcr(scaleY)*$abs($qcr($+($qcr(modeGraph),Y-max))))
    }
    if ($qcr(modeBg) == 1) { drawrect -rif @Graphing 0 1 0 0 $window(@Graphing).dw $calc($window(@Graphing).dh -15) }
    drawrect -rf @Graphing $rgb(face) 1 0 $calc($window(@Graphing).dh -15) $window(@Graphing).dw 15
    drawline -r @Graphing $rgb(frame) 1 0 $calc($window(@Graphing).dh -15) $window(@Graphing).dw $calc($window(@Graphing).dh -15)
    hdel qcalc discardCache
    drawsave @Graphing $+(",$scriptdir,qcalctmp.bmp,")
  }
  ; timer based graph rendering
  if (($qcr(advRenderer)) || (%t)) {
    hdel -w qcalc graphTmpG*
    while (%a < $did(qcalc,50).lines) {
      titlebar @Graphing in progress...
      if ([+]*=?* iswm $did(qcalc,50,%a)) { 
        if (!$timer($+(qcalcG,%a))) { .timerqcalcG $+ %a -oh $int($calc(($abs($1)+$abs($2))/$3 +2)) 1 gh $int($calc(($abs($1)+$abs($2))/$3 +2)) $qcr(modeGraph) %a $qcr(modeStyle) $rgb( [ $qcr($+(colors,%a),2) ] ) $3 $1 $2 $gettok($did(qcalc,50,%a),2,61) $iif($4,$chr(44) $gettok($did(qcalc,50,$calc(%a +1)),2,61)) }
      }
      inc %a $4
    }
  }
  ; traditional graph rendering
  else {
    while (%a <= $did(qcalc,50).lines) {
      titlebar @Graphing $gettok($did(qcalc,50,%a),2-,32)
      if ([+]*=?* iswm $did(qcalc,50,%a)) { 
        var %b = $1 , %g = $rgb( [ $qcr($+(colors,%a),2) ] ) , %d = 0 , %e = $parse($replacecs($gettok($did(qcalc,50,%a),2,61),T,x)) , %f = $parse($replacecs($gettok($did(qcalc,50,$calc(%a +1)),2,61),T,x)) , %r , %s = $qcr(modeStyle)
        while (%b <= $2) { 
          if ($4 == 2) { var %c = $scale($calc($eval($replace(%e,x,%b),2)),$calc($eval($replace(%f,x,%b),2))) }
          else { var %c = $scale(%b,$calc($eval($replace(%e,x,%b),2))) }
          if ((%s == 1) && (%d)) { drawline -r @Graphing %g 1 %d %c }
          elseif (%s == 2) { drawdot -r @Graphing %g 1 %c }
          elseif (%s == 3) { drawrect -r @Graphing %g 1 %c 4 4 }
          elseif (%s == 4) { drawtext -r @Graphing %g Wingdings 16 %c $chr($calc(73 + $r(1,3))) }
          elseif (%s == 5) { drawtext -r @Graphing %g Wingdings 16 %c $chr($calc(139 + %a)) }
          elseif (%s == 6) { drawtext -r @Graphing %g Webdings 24 %c … }
          var %d = %c
          inc %b $3
        }
      }
      inc %a $4
    }
    titlebar @Graphing completed ( $+ $calc(($ticks - $qcr(graphStart))/1000) secs $+ )
  }
  if ($qcr(modeLabels) == 1) {
    drawtext -rob @Graphing $rgb(255,255,255) 0 Verdana 12 5 $calc(($qcr(scaleY)*$abs($qcr($+($qcr(modeGraph),Y-max))))-7) X
    drawtext -rob @Graphing $rgb(255,255,255) 0 Verdana 12 $calc((-1* ($qcr(scaleX)*$qcr($+($qcr(modeGraph),X-min))))-4) 1 Y
  }
}
alias -l gh {
  var %a = $calc(($1 - $calc($timer($+(qcalcG,$3)).reps)-1) * $6 + $7) , %b
  if ($2 == Parametric) { %b = $scale($calc($eval($replace($parse($replacecs($gettok($9-,1,44),T,x)),x,%a),2)),$calc($eval($replace($parse($replacecs($gettok($9-,2-,44),T,x)),x,%a),2))) }
  else { %b = $scale(%a,$calc($eval($replace($parse($replacecs($9-,T,x)),x,%a),2))) }
  if (($4 == 1) && ($qcr($+(graphTmpG,$3)))) { drawline -r @Graphing $5 1 $v1 %b }
  elseif ($4 == 2) { drawdot -r @Graphing $5 1 %b }
  elseif ($4 == 3) { drawrect -r @Graphing $5 1 %b 3 3 }
  elseif ($4 == 4) { drawtext -r @Graphing $5 Wingdings 16 %b $chr($calc(73 + $r(1,3))) }
  elseif ($4 == 5) { drawtext -r @Graphing $5 Wingdings 16 %b $chr($calc(139 + $3)) }
  elseif ($4 == 6) { drawtext -r @Graphing $5 Webdings 25 %b … }
  hadd qcalc $+(graphTmpG,$3) %b
  if (%a > $8) { 
    titlebar @Graphing completed ( $+ $calc(($ticks - $qcr(graphStart))/1000) secs $+ ) 
    .timer $+ $+(qcalcG,$3) off 
    hdel qcalc $+(graphTmpG,$3)
  }
}
alias -l sort {
  if ($gettok($gettok($2,2,40),1,41) > $gettok($gettok($1,2,40),1,41)) { return -1 }
  else { return 1 }
}
alias -l y= {
  did -r qcalc 50
  var %a = 1 , %b = 1
  while (%a <= 10) {
    if ($qcr(modeGraph) == Function) { did -a qcalc 50 [+] $+(y,%a,=,$qcr($+(Function,%a))) }
    elseif ($qcr(modeGraph) == Parametric) { 
      did -a qcalc 50 [+] $+(xt,%a,=,$qcr($+(Parametric,%b))) 
      did -a qcalc 50 [+] $+(yt,%a,=,$qcr($+(Parametric,$calc(%b +1)))) 
      inc %b 2
    }
    elseif ($qcr(modeGraph) == Polar) { did -a qcalc 50 [+] $+(r,%a,=,$qcr($+(Polar,%a))) }
    inc %a
  }
  did -c qcalc 50 1
}
alias -l showy= {
  if ($1 == begin) { set %qcalc.popup 1 }
  elseif ($1 == end) { unset %qcalc.popup }
  elseif ($didwm(qcalc,50,[?]*=?*,%qcalc.popup)) { 
    var %a = $v1 
    set %qcalc.popup $calc(%a +1) 
    return $iif([+]* iswm $did(qcalc,50,%a),$style(1)) $gettok($did(qcalc,50,%a),2-,32) :did -o qcalc 50 %a $puttok($did(qcalc,50,%a),$iif([-]* iswm $did(qcalc,50,%a),[+],[-]),1,32) $chr(124) graph 
  }
}
alias -l scale { 
  if (($3) || ($qcr(modeGraph) != polar)) { return $calc(($1 - $qcr($+($qcr(modeGraph),X-min))) * $qcr(scaleX))  $calc(($2 - $qcr($+($qcr(modeGraph),Y-max))) * $qcr(scaleY) *-1) }
  else { return $calc((($2 * $cos($1)) - $qcr($+($qcr(modeGraph),X-min))) * $qcr(scaleX)) $calc((($2 * $sin($1)) - $qcr($+($qcr(modeGraph),Y-max))) * $qcr(scaleY) *-1) }
}
alias -l mdid { 
  if (c isin $1) { didtok $2-3 44 $5- } 
  else { didtok $2-3 44 $4- } 
  did -c $2-4
}
alias -l qm { hadd qcalc $+(mouse,$1) $iif($qm2($1,$2) == $null,0,$qm2($1,$2)) | return $qm2($1,$2) }
alias -l qm2 { if ($1 == x) { return $calc($2 / $qcr(scaleX) + $qcr($+($qcr(modeGraph),X-min))) } | else { return $calc(-1*($2 / $qcr(scaleY) - $qcr($+($qcr(modeGraph),Y-max)))) } }
alias -l qcr { return $gettok($hget(qcalc,$1),$iif($2,$2,1-),32) }
alias -l midg { return $replace($gettok(10 11 12 13 14 15 16 17 18 19.20 21 22 23 24 25 26 27 28 29.30 31 32 33 34 35 36 37 38 39.40 41 42 43 44.50 51 52 53 54 55,$1,46),$chr(32),$chr(44)) }
alias -l mw { var %a = 1 | while ($gettok($1-,%a,44)) { hadd qcalc $v1 | inc %a } }
alias -l zoom { mw zoomPrev $qcr($+($qcr(modeGraph),X-min)) $qcr($+($qcr(modeGraph),X-max)) $qcr($+($qcr(modeGraph),X-scale)) $qcr($+($qcr(modeGraph),Y-min)) $qcr($+($qcr(modeGraph),Y-max)) $qcr($+($qcr(modeGraph),Y-scale)) , $+($qcr(modeGraph),X-min) $1 , $+($qcr(modeGraph),X-max) $2 , $+($qcr(modeGraph),X-scale) $3 , $+($qcr(modeGraph),Y-min) $4 , $+($qcr(modeGraph),Y-max) $5 , $+($qcr(modeGraph),Y-scale) $6 | gdata 51 | graph 1 }
alias -l zc { if (($1 == $qcr($+($qcr(modeGraph),X-min))) && ($2 == $qcr($+($qcr(modeGraph),X-max))) && ($3 == $qcr($+($qcr(modeGraph),Y-min))) && ($4 == $qcr($+($qcr(modeGraph),Y-max)))) { return 1 } }
alias -l win { mw winWidth $$1 ,winHeight $$2 | gdata 51 | graph 1 }
alias -l parse { var %a = $iif($right($parse2($1-),1) isin */,$left($parse2($1-),-1),$parse2($1-)) , %b =  (* *) | return $replace($iif($left(%a,1) isin */,$right(%a,-1),%a),$gettok(%b,1,32),$chr(40),$gettok(%b,2,32),$chr(41)) }
alias -l parse2 { return $str($chr(40),$calc($count($1-,$chr(41)) - $count($1-,$chr(40)))) $+ $replace($1-,$chr(44),$chr(32),°,*.01745329252,phi,*1.6180339887,gcd,~gcd,sum,~sum,!,~n!,e^,~e,round,~round,rand,~rnd,root,~root,sign,~sign,sqrt,~sqrt2,log,~clog,ln,~log2,cos,~cos2,sin,~sin2,tan,~tan2,a~sin2,~asin2,a~cos2,~acos2,a~tan2,~atan2,abs,~abs2,int,~int,(),(0),[,*[,],]*,x,*x,~,* $,+*,+,-*,-,**,*,/*,/,*-,* -,*/,/,*^,^,^*,^,* *,$+(*,$chr(32)),$chr(41),$+($chr(41),$chr(32)),$chr(41) ^,$+($chr(41),^),[,$chr(40),],$chr(41)) $+ $str($chr(41),$calc($count($1-,$chr(40)) - $count($1-,$chr(41)))) }
alias -l gdata {
  if ($1 == 51) { 
    if ($qcr(modeGraph) == Polar) { 
      did -acr qcalc 51 $+(Angle-min=,$qcr(PolarAngle-min)) 
      did -a qcalc 51 $+(Angle-max=,$qcr(PolarAngle-max)) 
      did -a qcalc 51 $+(Angle-step=,$qcr(PolarAngle-step))
    }
    elseif ($qcr(modeGraph) == Parametric) { 
      did -acr qcalc 51 $+(T-min=,$qcr(ParametricT-min)) 
      did -a qcalc 51 $+(T-max=,$qcr(ParametricT-max)) 
      did -a qcalc 51 $+(T-step=,$qcr(ParametricT-step)) 
    }
    did $iif($qcr(modeGraph) == Function,-acr,-a) qcalc 51 $+(X-min=,$qcr($+($qcr(modeGraph),X-min)))
    did -a qcalc 51 $+(X-max=,$qcr($+($qcr(modeGraph),X-max)))
    did -a qcalc 51 $+(X-scale=,$qcr($+($qcr(modeGraph),X-scale)))
    did -a qcalc 51 $+(Y-min=,$qcr($+($qcr(modeGraph),Y-min)))
    did -a qcalc 51 $+(Y-max=,$qcr($+($qcr(modeGraph),Y-max)))
    did -a qcalc 51 $+(Y-scale=,$qcr($+($qcr(modeGraph),Y-scale)))
    if ($qcr(modeGraph) == Function) { did -a qcalc 51 $+(X-res=,$qcr(FunctionX-Res)) }
  }
  elseif ($1 == 53) { 
    did -rac qcalc 53 $+(tableMin=,$qcr(tableMin))
    did -a qcalc 53 $+(tableMax=,$qcr(tableMax))
    did -a qcalc 53 $+(tableStart=,$qcr(tableStart)) 
    did -a qcalc 53 $+(tableScale=,$qcr(tableScale))
    did -a qcalc 53 $+(tableMaxloop=,$qcr(tableMaxloop))
  }
  elseif ($1 == 54) {
    .timerqcalcTable off
    ; Add new tableMaxloop setting if it's not found (for those that upgraded on top of Quick Calc 3.5)
    if ($qcr(tableMaxloop) == $null) { hadd qcalc tableMaxloop 500 }
    var %a = $qcr(tableMin) , %b = 0 , %c = $qcr(tableMaxloop)
    did -r qcalc 54
    while ((%a <= $qcr(tableMax)) && (%b < %c)) { 
      var %r = $qc($calc($eval($replace($parse($replacecs($gettok($did(50).seltext,2-,61),T,x)),x,%a),2)))
      did -a qcalc 54 $+($gettok($gettok($did(50).seltext,1,61),2,32),$chr(40),%a,$chr(41),=,%r)
      inc %b 
      inc %a $qcr(tableScale)
    }
    if (%b >= %c) { .timerqcalcTable -om $calc(($qcr(tableMax)-$qcr(tableMin))/$qcr(tableScale)- %b + $qcr(tableScale)) 2 table $calc(($qcr(tableMax)-$qcr(tableMin))/$qcr(tableScale)- %b + $qcr(tableScale)) $calc(%a - $qcr(tableScale)) $qcr(tableScale) }
    did -c qcalc 54 $calc($didwm(qcalc,54,$+(*,$chr(40),$qcr(tableStart),$chr(41),*))+3) 
    did -c qcalc 54 $didwm(qcalc,54,$+(*,$chr(40),$qcr(tableStart),$chr(41),*))
  }
  elseif ($1 == 56) { 
    var %a = 1
    did -r qcalc 56 
    while ($hfind(qcalc,var.*,%a,w)) { did -a qcalc 56 $+($gettok($hfind(qcalc,var.*,%a,w),2-,46),=,$qcr($hfind(qcalc,var.*,%a,w))) | inc %a }
    did -c qcalc 56 1
  }
}
alias -l table {
  var %a = $calc($2 + (($1 - $timer(qcalcTable).reps)* $3))
  did -a qcalc 54 $+($gettok($gettok($did(qcalc,50).seltext,1,61),2,32),$chr(40),%a,$chr(41),=,$qc($calc($eval($replace($parse($replacecs($gettok($did(qcalc,50).seltext,2-,61),T,x)),x,%a),2))))
  if ($timer(qcalcTable).reps == 0) { did -c qcalc 54 $calc($didwm(qcalc,54,$+(*,$chr(40),$qcr(tableStart),$chr(41),*))+3) | did -c qcalc 54 $didwm(qcalc,54,$+(*,$chr(40),$qcr(tableStart),$chr(41),*)) }
}
alias -l qc-cp {
  if (!$did(qcalc-m,34,1).len) { did -o qcalc-m 34 1 $gettok($gettok($did(qcalc-m,56,$did(30).sel),2-,32),1,44) }
  if (!$did(qcalc-m,36,1).len) { did -o qcalc-m 36 1 $gettok($gettok($did(qcalc-m,56,$did(30).sel),2-,32),2,44) }
  if (!$did(qcalc-m,38,1).len) { did -o qcalc-m 38 1 $gettok($gettok($did(qcalc-m,56,$did(30).sel),2-,32),3,44) }
  window -phf +d @qcalc-color 1 1 85 67 
  drawrect -rf @qcalc-color $rgb($did(qcalc-m,34),$did(qcalc-m,36),$did(qcalc-m,38)) 1 0 0 85 68 
  drawsave @qcalc-color $+(",$scriptdir,qcalc.bmp,") 
  window -c @qcalc-color 
  did -g qcalc-m 39 $+(",$scriptdir,qcalc.bmp,") 
}
alias -l c-rgb {
  if ($1 == 1) { return 255,255,255 }
  elseif ($1 == 2) { return 0,0,0 }
  elseif ($1 == 3) { return 0,0,128 }
  elseif ($1 == 4) { return 0,128,0 }
  elseif ($1 == 5) { return 255,0,0 }
  elseif ($1 == 6) { return 128,0,0 }
  elseif ($1 == 7) { return 128,0,128 }
  elseif ($1 == 8) { return 255,128,0 }
  elseif ($1 == 9) { return 255,255,0 }
  elseif ($1 == 10) { return 0,255,0 }
  elseif ($1 == 11) { return 0,128,128 }
  elseif ($1 == 12) { return 0,255,255 }
  elseif ($1 == 13) { return 0,0,255 }
  elseif ($1 == 14) { return 255,0,128 }
  elseif ($1 == 15) { return 128,128,128 }
  elseif ($1 == 16) { return 192,192,192 }
}
alias -l qc { 
  if ($qcr(modeDigits) < 8) { return $round($1,$calc($v1 -1)) }
  elseif ($qcr(modeDigits) == 8) { return $1 }
  elseif ($len($gettok($1,2,46)) > $calc(10 - $qcr(modeDigits))) { return $round($1,$calc(-8+$qcr(modeDigits))) }
  else { return $1 }
}
alias -l sumfact {
  if (($1 == *) && (!$calc($2))) { tokenize 32 * 1 } 
  var %a = $abs($calc($2)) , %b = $calc(%a -1)
  while (%b > 0) { var %a = $+(%a,$1,%b) | dec %b } 
  return $calc((%a)* $sign($2))
}
alias -l gcd {
  tokenize 32 $remove($1-,*,+,-,/,%)
  while ($2) { tokenize 32 $1 $calc($1 % $2) }
  return $1
}
alias -l clog { if ($calc($1-) > 0) { return $calc($log($calc($1-))/$log(10)) } }
alias -l e { return $iif(!$1,2.71828182846,$calc(2.71828182846^($1-))) }
alias -l n! { return $sumfact(*,$1-) }
alias -l sum { return $sumfact(+,$1-) }
alias -l sign { return $iif($calc($1-) < 0,-1,1) }
alias -l rnd { return $r($iif($2 isnum,$1,1),$iif($2 isnum,$2,$1))) }
alias -l abs2 { return $abs($calc($1-)) }
alias -l log2 { return $log($calc($1-)) }
alias -l sqrt2 { return $sqrt($calc($1-)) }
alias -l sin2 { return $sin($d($1-)) }
alias -l cos2 { return $cos($d($1-)) }
alias -l tan2 { return $tan($d($1-)) }
alias -l asin2 { return $asin($calc(($1-)* $d2)) }
alias -l acos2 { return $acos($calc(($1-)* $d2)) }
alias -l atan2 { return $atan($calc(($1-)* $d2)) }
alias -l sin2h { return $calc((2.71828182846^($1-)-2.71828182846^-($1-))/2) }
alias -l cos2h { return $calc((2.71828182846^($1-)+2.71828182846^-($1-))/2) }
alias -l tan2h { return $calc($sin2h($1-)/$cos2h($1-)) }
alias -l asin2h { return $log($calc($1- +($1- +1)^.5)) }
alias -l acos2h { return $log($calc($1- +($1- -1)^.5)) }
alias -l atan2h { return $calc($log($calc((1+ $1-)/(1- $1-)))/2) }
alias -l d { return $iif($qcr(modeAngle) == 1,$calc(($1-)*.01745329),$calc($1-)) }
alias -l d2 { return $iif($qcr(modeAngle) == 1,57.29578,1) }