Ircdata: module { # irc.b PATH: con "/usr/maht/Ltheme/irc.dis"; Post: adt { issuing_nick : string; issuer : ref User; target : ref User; command : string; args : array of string; print: fn(post : self ref Post); }; User: adt { nick, user, host, vhost, ip,gcos, server: string; logged_in : int; registered : int; copy: fn(user: self ref User) : ref User; print : fn(user: self ref User); }; Channel : adt { name : string; }; Func: type fn (service: ref Service, users : ref Users, post: ref Post) : int; Command : adt { name : string; func : ref Func; }; Service : adt { name : string; nick: string; out: chan of string; c : array of list of ref Command; find_command: fn(service: self ref Service, name: string) : ref Command; add_command: fn(service: self ref Service, name: string, func: ref Func) : ref Command; }; Users : adt { u: array of list of ref User; find: fn(users: self ref Users, nick : string): ref User; add: fn(users: self ref Users, nick: string): ref User; find_or_add: fn(users: self ref Users, nick : string): ref User; log_in: fn(users: self ref Users, service: ref Service, nick : string) : ref User; log_out: fn(users: self ref Users, service: ref Service, nick : string); verify_password: fn(users: self ref Users, nick, password : string) : int; }; Services : adt { s: list of ref Service; find: fn(services: self ref Services, nick : string): ref Service; add: fn(services: self ref Services, nick : string, out : chan of string): ref Service; }; new_users: fn(size:int): ref Users; new_post: fn(data: string): ref Post; identify: fn(service: ref Service, users : ref Users, post: ref Post) : int; nick: fn(service: ref Service, users : ref Users, post: ref Post) : int; };