instant /help

By jaytea on Sep 23, 2011

/*
{
  Instant /help by jaytea

  Displays information from the help file to the active
  window. Ideal for a quick syntax reference or copying
  and pasting excerpts from the help file to users in
  a format that closely resembles the original.

  Use /hf <search term> to look up '<search term>' and
  display the matching section in the active window. By
  default, /help has been overwritten to allow you to
  use /help <search term> which might have become habit.

  <search term> can contain wildcards; if more than one
  result is found, you will be prompted to clarify which
  one you want to view. For example:

  /help /*

  Prompts you to select a command to view information on.

  /help /draw*

  Choose a /draw command to view information on.

  For questions, suggestions or comments related to this 
  snippet, please drop by #mSL on irc.swiftirc.net and
  let me know.

  Thanks to my man FiberOPtics for $_htmlconv(). 
}
*/

alias help hf $1- | if ($isid) returnex $chr(32) | ; Comment out or delete this line to get your old /help back.

alias hf {
  if (!$isfile($scriptdirhf\mirc.hhk)) {
    echo -eagc info Unable to find mirc.hhk. Try /hf_init to (re)initialize
    return
  }
  if (!$hf_find($1-)) {
    echo -eagc info No matches found.
  }
}

on *:load:{
  hf_init
}

alias hf_init {
  if ($1 == 2) {
    if ($isfile($scriptdirhf\mirc.hhk)) {
      .timer $+ $ctimer off
      echo -agc info2 Preparing data files ...
      noop $findfile($scriptdirhf, *.htm, 0, hf_parse $1-)
      hf_hhk
      echo -agc info2 Initialization successfully completed. 
    }
    return
  }

  var %chm = $findfile(., mirc.chm, 1).shortfn

  if (!%chm) %chm = $findfile($nofile($mircini), mirc.chm, 1).shortfn

  if (!%chm) {
    echo -eagc info * Error: mirc.chm not found. Cannot proceed.
    return
  }

  mkdir $qt($scriptdirhf)
  if ($isfile($scriptdirhf\mirc.hhk)) .remove $qt($scriptdirhf\mirc.hhk)
  run hh -decompile $shortfn($scriptdirhf) mirc.chm
  echo -agc info2 Unpacking mirc.chm. Please wait ...
  .timerhf -m 0 500 hf_init 2
}

; $hf_find(search term)

alias hf_find {
  if (" isin $1) || ($1 == $null) return 0
  if ($fopen(hff)) .fclose hff
  if (!$isfile($scriptdirhf\mirc.hhk)) {
    echo -eagc info * /hf_find: no such file $scriptdirhf\mirc.hhk
    goto end
  }
  .fopen hff $qt($scriptdirhf\mirc.hhk)

  var %search = $1"*"*, %result
  .fseek -w hff %search
  while (!$feof) {
    tokenize 34 $fread(hff)
    %result = %result $+ , $+ $iif($!?* iswm $1, $!! $+ $mid($1, 2), $1)
    if ($len(%result) > 4000) break
    .fseek -w hff %search
  }
  %result = $mid(%result, 2)

  if (, isin %result) {
    %result = $input(Multiple results found. Please select one:, m, Help!, , [ %result ] )
  }
  else %result = $eval(%result, 2)

  if (!%result) return 0

  .fseek hff 0
  .fseek -w hff %result $+ "*
  tokenize 34 $fread(hff)
  .fclose hff
  return $hf_load($2, $3)  

  :end
  .fclose hff 
}

; $hf_load(file, label)

alias hf_load {
  if ($fopen(hfl)) .fclose hfl
  if (!$isfile($scriptdirhf\ $+ $1)) {
    echo -eagc info * /hf_load: no such file $scriptdirhf\ $+ $1
    return 0
  }

  var %first

  if ($2) {  
    noop $read($scriptdirhf\ $+ $1, wn, $qt($2))
    if (!$readn) return 0
    %first = $readn + 1
  }
  else %first = 1

  noop $read($scriptdirhf\ $+ $1, wn, "*", %first)
  loadbuf $+(%first, -, $iif($readn, $calc($v1 - 1), $lines($scriptdirhf\ $+ $1))) -ap $qt($scriptdirhf\ $+ $1)
  return 1
}

; /hf_hhk

alias hf_hhk {
  if ($fopen(hfh)) .fclose hfh
  if (!$isfile($scriptdirhf\mirc.hhk)) {
    echo -eagc info * /hf_hhk: no such file $scriptdirhf\mirc.hhk
    goto end
  }
  .fopen hfh $qt($scriptdirhf\mirc.hhk)

  noop $fread(hfh, $file($scriptdirhf\mirc.hhk).size, &hfh)
  .fseek hfh 0

  var %i = 1, %name
  while ($bfind(&hfh, %i, name="Name")) {
    %name = $gettok($bvar(&hfh, $v1, 100).text, 4, 34)
    %i = $bfind(&hfh, $v1, name="Local")
    tokenize 35 $gettok($bvar(&hfh, %i, 100).text, 4, 34)
    .fwrite -n hfh $replace($+(%name, ", $1, ", $2), &amp;, &, &lt;, <, &gt;, >, &nbsp;, $chr(32))
  }

  btrunc $qt($scriptdirhf\mirc.hhk) $fopen(hfh).pos

  :end
  .fclose hfh
}

; /hf_parse <file>

alias hf_parse {
  if ($fopen(hfp)) .fclose hfp
  if (!$isfile($1-)) {
    echo -eagc info * /hf_parse: no such file $1-
    goto end
  }
  .fopen hfp $qt($1-)

  bunset &hfp
  noop $fread(hfp, $file($1-).size, &hfp)

  var %i = 1
  while ($bfind(&hfp, %i, <a name=)) {
    %i = 1 + $v1
    bset &hfp $v1 < ! ! ! > < p >
    if ($bfind(&hfp, $v1, ></a>)) {
      bset &hfp $v1 < b r 32 >
      %i = $v1
    }
    else {
      echo -eagc info * /hf_parse: error #1 with $1-
      goto end
    }
  }

  var %list = f_Bolddefault,48 50,f_Heading1,50 31,f_Highlight,49 50,f_Subheading,48 52
  var %i = 1

  while ($bfind(&hfp, %i, <span class=")) {
    var %label = $gettok($bvar(&hfp, $v1, 100).text, 2, 34)
    %i = $v1

    if (?? ?? iswm $replace(%label, [ %list ] )) {
      %i = $bfind(&hfp, %i, >) - 5
      bset &hfp %i " > 2 3 $v2
      %i = $bfind(&hfp, %i, </span>)
      bset &hfp %i 15 $iif($bvar(&hfp, %i, 11).text == </span></p>, < p > 160 32 32, < ! > < ! >)
    }

    else {
      echo -eagc info * /hf_parse: error #2 with $1-
      goto end
    }
  }

  .fseek hfp 0
  .fwrite -b hfp &hfp
  .fclose hfp
  if (!$_htmlconv($1-)) echo -eagc info * /hf_parse: error #3 with $1-
  return

  :end
  .fclose hfp
}

; $_htmlconv
; Author:    FiberOPtics - mirc.fiberoptics@gmail.com
;

alias _htmlconv {
  if (!$isfile($1)) || ($os isin 9598) return 0
  var %in = $shortfn($1), %out = $shortfn($2), %mss = mss $+ $ticks
  if ($2 == $null) %out = %in
  .comopen %mss MSScriptControl.ScriptControl
  if ($comerr) return 0
  var %t, %n = $crlf
  %t = $com(%mss,language,4,bstr*,vbscript)
  %t = $&
    set html = createobject("htmlfile") %n $&
    set fso = createobject("scripting.filesystemobject") %n $&
    set inf = fso.opentextfile( $+(",%in,") ) %n $&
    src = inf.readall %n $&
    inf.close %n $&
    html.write "<html><body>" & src & "</body></html>" %n $&
    set outf = fso.createtextfile( $+(",%out,") ,true) %n $&
    outf.write html.body.innertext %n $&
    outf.close
  %t = $com(%mss,executestatement,1,bstr*,%t)
  .comclose %mss
  return %t
  :error
  if ($com(%mss)) .comclose %mss
  return 0
}

Comments

Sign in to comment.
Dani_l11   -  Sep 23, 2011

Good for you blackvenom, now go to your mIRC client to rant or love about this script and users ;-) Comments are for snippet related issues.

You've got my (not suprisingly) like, I will definitely use this usefull snippet! 10/10

 Respond  
blackvenomm666   -  Sep 23, 2011

not to mention any "logs" he may have can be doctored and changed to fit anything he likes just so he can make a person look bad. jaytea is a great scriptor and not just with msl. i like to call him the jack of all scripting:D

 Respond  
napa182   -  Sep 23, 2011

Dean why would you go off topic an try to start drama with others for no reason? I mean really man keep the drama on the server you are on an off of here.

Again nice snippet jaytea. Tested it an works well.

 Respond  
Jethro   -  Sep 23, 2011

People who love jaytea and his work are UNINTERESTED in seeing those collectible logs you have. They're haters on account of their low self-esteem. Don't get yourself into their mess and affect or cloud your mind. Also, let's not get off-topic here.

 Respond  
_Dean_   -  Sep 23, 2011

Dean everybody loves jaytea. He's a good person always there to help. Silence your inner critic and doubt and get with the program already.

i will not mention any name, but i really doubt it, i appreciate his scripts and his skills of course, but i have some logs here saying another things from other persons, but its ok

 Respond  
Jethro   -  Sep 23, 2011

Dean everybody loves jaytea. He's a good person always there to help. Silence your inner critic and doubt and get with the program already.

 Respond  
_Dean_   -  Sep 23, 2011

strange how ppl come to some servers and say that they hate Jaytea, and he is a bad scripter, and here, they say other things...

 Respond  
blackvenomm666   -  Sep 23, 2011

this actually works better for me than the help file. loading the help file tends to actually freeze mirc/my laptop depending on whats open. this allows me to view it without it freezing:D

 Respond  
Jethro   -  Sep 23, 2011

jaytea, I didn't mean your snippet as being useless. If it was, perhaps I wouldn't bother to rate or give it my humble compliment. (no, it wasn't a pity scoring either) I hope you're not getting all touchy about my comment. I meant no harm. I do approve of it.

 Respond  
blackvenomm666   -  Sep 23, 2011

very nice jaytea imma load this up in a bit and test it. but i def like the idea:D

 Respond  
jaytea   -  Sep 23, 2011

What I meant was, when a user enters /help <cmds|identiifers> command, the help file is prompted to pop up. Then he or she can read it from there.

so you find it useless, that's fine. i wouldn't expect every snippet i make to be useful to everybody ;)

its intended purpose and a reason why it's quite separate to throwing up the help file is mentioned in the very first paragraph of the description.

 Respond  
Jethro   -  Sep 23, 2011

I'll give it a 10, but then a 9 will do. The default help command already brings up the help file for you when you need it. What's neat about jaytea's, again, is that you can read it straight up so you don't have to. Exceptional work, jaytea. I like it.

 Respond  
napa182   -  Sep 23, 2011

Nice jaytea, I like the idea of it. Nice work once again 9/10 +Like

 Respond  
Jethro   -  Sep 23, 2011

What I meant was, when a user enters /help <cmds|identiifers> command, the help file is prompted to pop up. Then he or she can read it from there.

Don't steer me wrong, though, I think it's neat of your snippet to show the help in mIRC windows rather than read it the old-fashioned way.

 Respond  
jaytea   -  Sep 23, 2011

Dean, i'm sure you've realized that mirc.chm needs to be copied to your scripts/mIRC directory, but i've updated the initialization routine to make it easier for others who don't have mirc.chm in the expected folder.

Jethro, i'm not sure what you mean

 Respond  
Jethro   -  Sep 23, 2011

I thought the purpose of /help command would pop up the help file in front of your very eyes.

 Respond  
_Dean_   -  Sep 23, 2011

mines return

Unable to find mirc.hhk. Try /hf_init to (re)initialize

  • Error: mirc.chm required
  • Unable to find mirc.hhk. Try /hf_init to (re)initialize

and i have the mirc help file

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.