Your IP : 216.73.216.48
if (word(2 $loadinfo()) != [pf]) { load -pf $word(1 $loadinfo()); return; };
#
# Help replacement written by howl 2003
#
package help;
load addset;
addset help_path str;
set help_path $irclib()/help/;
addset help_window bool;
set help_window off;
addset help_prompt bool;
set help_prompt off;
addset help_pager bool;
set help_pager on;
alias h {help.help $*;};
alias help {help.help $*;};
# help.isdir is stolen more or less from nsx's tabkey script. Thanks nsx!
alias help.isdir (dir) {
return ${(left(1 $word(2 $stat("$dir"))) & 4)? 1 : 0};
};
alias help.help {
^local pager,prompt,dir,file,fp,dp,size,win,line,list,name,match,width,pad;
^local tmp,tmp1,tmp2,tmp3,tmp4,tmp5,var,taken,varlist,unset,clear,padlen;
^local more,break,nohelp,myinput,oldinput,noparse,helppath,path,root;
^local nocheck,helpwin,last,realroot,window;
push varlist dir dp file fp line match name pad pager path prompt realroot;
push varlist win window;
@ path = getset(help_path);
@ window = getset(help_window) == [on] ? 1 : 0;
@ prompt = getset(help_prompt) == [on] ? 1 : 0;
@ pager = getset(help_pager) == [on] ? 1 : 0;
@ noparse = nohelp = nocheck = 0;
@ list = [$*];
push list *;
while (tmp = shift(list)) {
if (!noparse && tmp =~ [-*]) {
switch ($tmp) {
(-var) (-v) {
@ var = shift(list);
@ tmp = aliasctl(assign pmatch help.cache.${var}.*));
while (tmp2 = shift(tmp)) {
^eval @ $after(3 . $tmp2) = $tmp2;
}
@ nocheck = 1;
}
(-break) {
@ close($fp);
@ fp = dp = file = dir = [];
}
(-newhelp) {
^local realroot,name,line,match,root,file,dir,dp,fp;
^local nocheck 0;
}
(-kill) {
@ tmp = shift(list);
if (tmp != [] && tmp != [*] && numwords($aliasctl(assign pmatch help.cache.${tmp}.*)) == 0) {
xecho -say -b -c -- HELP: No such cache: $tmp;
return;
};
if (tmp == [*]) {
fe ($aliasctl(assign pmatch help.cache.*.fp)) tmp2 {
@ tmp2 = aliasctl(assign get $tmp2);
if (tmp2 != -1 && tmp2 != []) {
@ tmp3 = close($tmp2);
};
};
fe ($aliasctl(assign pmatch help.cache.*.win)) tmp2 {
if (aliasctl(assign get ${tmp2}dow) == 1) {
@ tmp2 = aliasctl(assign get $tmp2);
if (0 < tmp2 && windowctl(GET $tmp2 REFNUM) != []) {
^window $tmp2 kill;
};
};
};
fe ($aliasctl(assign pmatch help.cache.*.*)) tmp2 {
^assign -$tmp2;
};
} else {
@ tmp2 = aliasctl(assign get help.cache.${tmp}.fd);
if (tmp2 != -1 && tmp2 != []) {
@ tmp3 = close($tmp2);
};
@ tmp2 = aliasctl(assign get help.cache.${tmp}.win);
if (0 < tmp2 && windowctl(GET $tmp2 REFNUM) != [] && aliasctl(assign get help.cache.${tmp}.window) == 1) {
^window $tmp2 kill;
};
fe ($aliasctl(assign pmatch help.cache.${tmp}.*)) tmp2 {
^assign -$tmp2;
};
};
xecho -say -b -c -- HELP: Cleared cache for $tmp;
return;
}
(-path) { @ path = shift(list); }
(-pager) { @ pager = 1; }
(-nopager) { @ pager = 0; }
(-prompt) { @ prompt = 1; }
(-noprompt) { @ prompt = 0; }
(-window) { @ window = 1; }
(-nowindow) { @ window = 0; }
(-help) {
xecho -b -c -say -- HELP supports the following switches;
xecho -b -c -say -- -path * Override HELP_PATH;
xecho -b -c -say -- -[no]pager Override HELP_PAGER;
xecho -b -c -say -- -[no]prompt Override HELP_PROMPT;
xecho -b -c -say -- -[no]window Override HELP_WINDOW;
xecho -b -c -say -- Usage: /help <switches> [--] <help topic>;
return;
}
(--) { @ noparse = 1; }
};
continue;
};
@ noparse = 1;
if (nocheck) break;
if (@path == 0 && @root == 0) {
xecho -say -b -c -- No HELP_PATH set.;
return;
};
if (tmp == [?]) {
@ tmp = [*];
};
if (@root == 0) {
while (tmp2 = shift(path)) {
if (fexist($tmp2/$tmp) == 1) {
@ root = tmp2;
@ realroot = tmp2;
} elif (0 < numwords($globi($tmp2/$tmp*))) {
@ root = tmp2;
@ realroot = tmp2;
} else {
@ break = 1;
@ nohelp = 1;
xecho -w ${win == [] ? 0 : win} -b -- No help available on $tmp: Use ? for list of topics.;
break;
};
};
if (@root == 0) {
break;
};
};
if (fexist($root/$tmp) == 1) {
@ tmp2 = [$root/$tmp];
} elif (numwords($globi($root/$tmp*)) == 1) {
@ tmp2 = globi($root/$tmp*);
} elif (numwords($globi($root/$tmp*)) == 0) {
@ break = 1;
@ nohelp = 1;
xecho -w ${win == [] ? 0 : win} -b -- No help available on $tmp: Use ? for list of topics.;
break;
} else {
# More than one match, dispatch and we're done.
@ match = [${tmp == [*] ? [] : tmp}*];
echo $tmp;
@ dir = [$root];
@ break = 1;
break;
};
@ last = after(${count(/ $root)+1} / $tmp2);
if (last =~ [*/])
@ last = before(-1 / $last);
@ name #= (@name > 0 ? [ ] : []) ## last;
if (!help.isdir($tmp2)) {
@ file = tmp2;
@ dir = [];
@ break = 1;
@ match = [];
break;
} else {
@ root = [$tmp2];
@ dir = [];
};
};
if (break != 1 && nocheck != 1) {
@ dir = root;
@ match = [*];
};
if (dir != []) {
@ tmp = split(/ $rest($strlen($realroot) $dir));
} else {
@ tmp = split(/ $rest($strlen($realroot) $file));
@ tmp = revw($restw(1 $revw($tmp)));
};
@ myinput = tmp;
@ line = more = nohelp = 0;
@ pad = (pad == [] ? [ ] : pad);
if (var == []) {
@ var = 0;
until (help[cache][$var][taken] != 1)
@ var++;
@ help[cache][$var][taken] = 1;
} elif (help[cache][$var][taken] != 1) {
@ help[cache][$var][taken] = 1;
};
if (clear == 1) {
xecho -say -b -- HELP: Cleared cache;
fe ($aliasctl(assign pmatch help.cache.*.fp)) fp {
@ tmp = close($fp);
# echo close\($fp\) returned $tmp;
};
fe ($aliasctl(assign pmatch help.cache.*.*)) tmp {
^assign -$tmp;
};
return;
};
if (unset == 1 && var != []) {
^help.help -kill $var;
};
if (!nohelp) {
if (window && win == []) {
window new;
@ win = winnum(0);
};
@ size = (size == [] ? winsize($win) : size);
@ width = (width == [] ? word(0 $geom($win)) -1 : width);
if (file == [] && dir != [] && fexist($dir/$last) == 1 && match == [*]) {
@ file = [$dir/$last];
};
if (dp == [] && file != [] && fexist($file) == 1 && !help.isdir($file)) {
if (fp == []) {
@ fp = open("$file" R);
if (match(*.gz $name)) {
@ tmp = [$G Help on $before(-1 . $name)];
} else {
@ tmp = [$G Help on $name];
};
@ line += numlines($width $tmp);
xecho -w $win -- $tmp;
};
if (fp != []) {
while (!eof($fp) && (pager == 0 || line < size)) {
@ tmp = read($fp);
if (tmp =~ [#*] || tmp =~ [!*])
continue;
^stack push set indent;
^set indent off;
@ line += numlines($width $tmp);
if (!eof($fp)) {
xecho -w $win -- $tmp;
};
^stack pop set indent;
};
if (eof($fp)) {
@ close($fp);
@ fp = [];
if (dir != []) {
@ line++;
xecho -w $win --;
};
};
};
};
if (fp == [] && dir != []) {
if (dp == [])
xecho -b -w $win -- ${name ? [$name choices] : [Choices]} \($match\);
@ tmp = stripcrap(ALL $globi("$dir/$match"));
@ tmp1 = strlen($dir/);
@ tmp2 = maxlen($tmp) - strlen($dir/);
@ tmp3 = [];
@ padlen = strlen(ALL $pad);
while (tmp4 = shift(tmp)) {
if (tmp4 =~ [*/CVS/] || (dp != [] && dp != tmp4))
continue;
@ dp = [];
@ tmp5 = pad($tmp2 " " $rest($tmp1 $tmp4));
if (tmp3 == []) {
@ tmp3 = tmp5;
} elif ((strlen($tmp3) + padlen + tmp2) <= width) {
@ tmp3 #= pad ## tmp5;
} else {
@ line++;
if (pager == 0 || line < size) {
xecho -w $win -- $tmp3 ;
@ tmp3 = tmp5;
} else {
@ dp = tmp4;
@ more = 1;
break;
};
};
};
if (more != 1) {
if (tmp3 != []) {
@ line++;
xecho -w $win -- $tmp3;
@ tmp = dp = [];
} elif (numwords($tmp) == 0) {
@ dp = [];
};
};
};
};
while (tmp = shift(varlist)) {
^eval @ help[cache][$var][$tmp] = $tmp;
};
if (nohelp == 0 && (fp != [] && !eof($fp)) || more == 1) {
help.more $var;
};
if (fp == [] && dp == []) {
if (prompt) {
help.prompt $var $encode(Help?) $encode(-. $unsplit(" " $myinput)) .;
} else {
^help.help -kill $var;
};
};
};
alias help.more (var, key) {
if (@key != 1) {
^eval input_char "*** Hit any key for more. Q to quit, A for all, and F to finish ***" \{ help.more $var \$* \};
return;
};
if (key == [q]) {
^help.help -var $var -break;
} elif (key == [a]) {
^help.help -var $var -nopager;
} elif (key == [f]) {
^help.help -var $var -noprompt -nopager;
} else {
^help.help -var $var;
};
};
alias help.prompt (var, prompt, old, ...) {
^local tmp,input;
@ old = after(- $decode($old));
@ prompt = decode($prompt);
@ tmp = unsplit(" " $afterw(. $old) $prompt);
if ([$0] == [.]) {
^eval input "$tmp " help.prompt $var $encode($prompt) $encode(-$unsplit(" " $old)) \\\$*;
return;
};
if ([$0] == []) {
@ old = revw($restw(1 $revw($old)));
if (numwords($old) == 0) {
^help.help -kill $var;
return;
};
@ tmp = unsplit(" " $afterw(. $old) $prompt);
^eval input "$tmp " help.prompt $var $encode($prompt) $encode(-$unsplit(" " $old)) \\\$*;
} else {
help.help -var $var -newhelp $unsplit(" " $afterw(. $old) $*);
};
};
# howl (2003)