Main Page   Compound List   File List   Compound Members   File Members  

zsig-responses.vtc

00001 /* -*- C -*-
00002  * zsig-responses.vtc: Automatic zsig responses
00003  * $Id$
00004  */
00005 
00006 /* ----- Zsig responses ----- */
00007 
00008 zsig_responses ?:= make_tree(.stricmp);
00009 
00010 /* Stored zsig responses for classes and instances of class message. */
00011 class_responses ?:= make_tree(.stricmp);
00012 instance_responses ?:= make_tree(.stricmp);
00013 
00014 func add_response(zsig, response)
00015 {
00016   insert_tree(zsig_responses, zsig, response);
00017 }
00018 
00019 func Response(s) [p, zsig, response]
00020 {
00021   p = strstr(s, "::");
00022   if (!p) return output("Can't find :: separator.\n");
00023   strcpy(zsig = "", s, p - s);
00024   while (*zsig && zsig[strlen(zsig) - 1] == ' ')
00025     zsig[strlen(zsig) - 1] = 0;
00026   response = skipspaces(p + 2);
00027   add_response(zsig, response);
00028 }
00029 
00030 func save_responses(fp)
00031 {
00032   traverse_tree(zsig_responses, .save_responses_internal, fp);
00033 }
00034 
00035 func save_responses_internal(zsig, response, fp)
00036 {
00037   fprintf(fp, "add_response(%s, %s);\n", stringconst(zsig),
00038           stringconst(response));
00039 }
00040 add_to_hook(save_hook, .save_responses);
00041 
00042 func note_zsig_responses(z, sig) [sigresponse, t]
00043 {
00044   /* If we have a response for this zsig, store it away for either the
00045    * class or instance of the zephyrgram. */
00046   sigresponse = find_tree(zsig_responses, sig);
00047   if (sigresponse && !z->personal)
00048   {
00049     t = table(sigresponse, time);
00050     if (stricmp(z->class, "message") == 0)
00051       insert_tree(instance_responses, z->instance, t);
00052     else
00053       insert_tree(class_responses, z->class, t);
00054   }
00055 }
00056 
00057 func get_zsig_response(class, instance) [t]
00058 {
00059   if (class && *class && (stricmp(class,"message") != 0))
00060     t = find_tree(class_responses, class);
00061   else if (instance)
00062     t = find_tree(instance_responses, instance);
00063   if (t && time - t[1] <= 60)
00064     return t[0];
00065   return 0;
00066 }
00067 
00068 
00069 add_cmd("response", -1, .Response, "/response <zsig>::<response>");
00070 

Generated at Mon Aug 13 16:45:52 2001 for dzm-vtc by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001