# $EPIC: loadformats,v 1.3 2006/10/30 03:11:43 jnelson Exp $ # loadformats (format.irc) - Add customizeable formatting to EPIC5 # Copyright (c) 2005 Brian Weiss # See the 'COPYRIGHT' file for more information. # # This script provides support for easily adding customizeable # formatting to EPIC5. Formats can either be added individually # via /ADDFORMAT or they can be loaded from a "format file" with # the /LOADFORMATS alias. # # The format of this file is as follows: # # # # where is the name of the /ON hook that would normally be # used to format output from the desired event and is a text # text string containing cparse(6) color codes and numeric expandos. # # e.g. # PUBLIC %K<%n$0%K>%n $2- # MSG %K[%C$0%K\(%c$userhost($0)%K\)] $1- # # Note: Due to the fact that this uses $cparse() to add colors, special # care may need to be taken when formats contain double quotes. # # Adding a format for an event with either of the above methods will # create a /SET variable named "FORMAT_" whose value will be # used to determine the formatting of the event. # # This file will refuse to load if your client doesn't have implied on # hooks (either cause it's too old, or you compiled it out) # # Make sure this file gets loaded with the PF loader. if (word(2 $loadinfo()) != [pf]) { load -pf $word(1 $loadinfo()); return; }; if (index(h $info(O)) == -1) { xecho -b Your client doesn't have implied hooks, sorry.; return }; # # addformat [value] # # Adds a new format into the system. This will create a /SET variable # named "FORMAT_" and will create an IMPLIED hook for the specified # type via $hookctl(). # alias addformat (type, value) { if (!value) return; @ :type = toupper($type); @ :var = [FORMAT_] ## type; @ hookctl(set list $type implied \$$var); @ symbolctl(create $var); @ symbolctl(set $var 1 builtin_variable type str); ^set $var $value; xecho -b -s Added format for the $type event; }; # # delformat # # Removes a format from the system. This removes both the /SET variable # and the implied hook. # alias delformat (type, void) { if (!type) { xecho -b Usage: $(K)DELFORMAT ; return; }; @ :type = toupper($type); @ hookctl(set list $type implied); @ symbolctl(delete FORMAT_$type builtin_variable); @ symbolctl(check FORMAT_$type); xecho -b -s Deleted format for the $type event; }; # # dumpformats # # Removes all formats from the system. # alias dumpformats (void) { xecho -b -s Dumping all formats; for hook in ($hookctl(list lists)) { if (hookctl(get list $hook implied)) ^delformat $hook; }; }; # # loadformats # # This loads all formats in the specified file. # alias loadformats (file, void) { if (!file) { xecho -b Usage: $(K)LOADFORMATS ; return; }; xecho -b -s Loading formats from $file; if ((:fd = open($file r)) != -1) { while (!eof($fd)) { @ :line = read($fd); @ :type = word(0 $line); @ :value = restw(1 $line); ^addformat $type $value; }; @ close($fd); }{ xecho -b ERROR: Unable to open file for reading: $file; }; }; # # saveformats # # Writes all existing formats to the specified file. # alias saveformats (file, void) { if (!file) { xecho -b Usage: $(K)SAVEFORMATS ; return; }; xecho -b -s Saving formats to $file; if ((:fd = open($file w)) != -1) { for hook in ($hookctl(list lists)) { if (hookctl(get list $hook implied)) { eval @ write\(\$fd \$hook \$FORMAT_$hook\); }; }; @ close($fd); }{ xecho -b ERROR: Unable to open file for writing: $file; }; };