@q
@program lib-jcolor
1 9999 d
i
( lib-jcolor v1.0 Jessy @ FurryMUCK 11/99
lib-jcolor provides a consistent, simplified interface to Caspian's
lib-ansi-free.muf, reducing the amount of rework that will be needed
to color-enable existing programs and allowing users to store a
single set of color preferences for all programs that use this
interface.
INSTALLATION:
Set lib-jcolor M3 and Link_OK. lib-ansi-free.muf must be installed.
lib-ansi-free.muf requires special setup. Register lib-jcolor as
lib/jcolor:
@reg lib-jcolor=lib/jcolor
Set the following definition props on lib-jcolor:
_defs/colorstr:"$lib/jcolor" match "colorstr" call
_defs/colornotify:"$lib/jcolor" match "colornotify" call
_defs/colornotifyexcept:"$lib/jcolor" match "colornotifyexcept" call
_defs/colorobj:"$lib/jcolor" match "colorobj" call
_defs/colortell:"$lib/jcolor" match "colortell" call
)
$include $lib/ansi
$define
puppet?
dup "Z" flag?
swap thing? and if
1
else
0
then
$enddef
: colorstr ( d s1 s2 -- s' ) (* format s1 for user d & data type s2 *)
(* check: user-specified color pref for obj type? *)
3 pick "_prefs/colors/" 3 pick strcat getpropstr dup if
swap pop
"~&" swap strcat swap strcat "~&R" strcat (* if so, format *)
swap pop
else
(* check: globally specified color pref for object type? *)
pop rot pop
prog "_colors/" rot strcat getpropstr dup if
"~&" swap strcat swap strcat "~&R" strcat (* if so, format *)
else
pop (* otherwise, leave alone *)
then then
;
public colorstr
: colorobj ( d1 d2 -- s )
(* return color-formatted name string for d2, formated for d1 *)
dup exit? if (* this way for exits *)
name dup ";" instr if (* strip exit aliases *)
dup ";" instr 1 - strcut pop
then
"exit" colorstr (* format *)
else
dup player? if (* this way for players *)
over over controls if
dup unparseobj
else
dup name
then (* add connection info if pref'd *)
3 pick "_prefs/look/flags" getpropstr "C" instr if
over awake? if
over descriptors
begin dup 1 > while rot pop 1 - repeat
not if -1 exit then
descrcon conidle
300 > if
" [idle]"
else
" [awake]"
then
else
" [asleep]"
then
strcat
then
"player" colorstr
else
dup puppet? if (* this way for puppets *)
over over controls if
dup unparseobj
else
dup name
then (* add connection info if pref'd *)
3 pick "_prefs/look/flags" getpropstr "C" instr if
over owner awake? if
over owner descriptors
begin dup 1 > while rot pop 1 - repeat
not if -1 exit then
descrcon conidle
300 > if
" [idle]"
else
" [awake]"
then
else
" [asleep]"
then
strcat
"*" strcat
then
"puppet" colorstr
else
dup thing? if (* this way for things *)
over over controls if
unparseobj
else
name
then
"thing" colorstr
else
dup program? if (* this way for programs *)
over over controls if
unparseobj
else
name
then
"program" colorstr
else
dup room? if (* this way for rooms *)
over over controls if
unparseobj
else
name
then
"room" colorstr
then then then then then then
;
public colorobj
: colortell ( s1 s2 -- )
(* notify user with s1, formatted for data type s2 *)
me @ ansi? if
me @ rot rot colorstr
me @ swap ansi-notify
else
pop me @ swap ansi-strip notify
then
;
public colortell
: colornotify ( d s1 s2 -- )
(* notify obj d with s1, formatted for data type s2 *)
3 pick ansi? if
3 pick rot rot
colorstr ansi-notify
else
pop ansi-strip notify
then
;
public colornotify
: colornotifyexcept ( d1 d2 s1 s2 -- )
(* notify all at location d1 except for
d2 with s1, formatted as data type s2 *)
4 rotate contents
begin
dup while
dup 5 pick dbcmp not if
dup 4 pick 4 pick colornotify
then
next
repeat
pop pop pop pop
;
public colornotifyexcept
: help (* show help screen *)
"Help!" .tell
;
: main (* set color prefs *)
dup if
"#help" over stringpfx if help exit then
dup "=" instr if
dup "=" instr strcut strip
swap strip dup strlen 1 - strcut pop strip
me @ "_prefs/colors/" rot strcat rot setprop
"Set." "output" colorstr colortell
else
">> Syntax: $command <data type>=<color code>
command @ "$command" subst
"error" colorstr colortell
then
else
help
then
;
.
c
q
@set lib-jcolor=l
@reg lib-jcolor=lib/jcolor
@set lib-jcolor=_defs/colorstr:"$lib/jcolor" match "colorstr" call
@set lib-jcolor=_defs/colornotify:"$lib/jcolor" match "colornotify" call
@set lib-jcolor=_defs/colornotifyexcept:"$lib/jcolor" match "colornotifyexcept" call
@set lib-jcolor=_defs/colorobj:"$lib/jcolor" match "colorobj" call
@set lib-jcolor=_defs/colortell:"$lib/jcolor" match "colortell" call