void make_wallchart_info (void) { struct info_buffer * wc = find_or_make_info ("unexpanded_wallchart"); struct info_buffer * wc_expanded = find_or_make_info ("wallchart"); if (wc->len == 0) { char ** txt = forminfo_text ("keybindings-wallchart"); if (!txt) io_error_msg ("<bug> Wallchart is missing!"); wc->len = parray_len (txt); wc->text = txt; } clear_info (wc_expanded); expand_help_msg (wc_expanded, wc); }
void builtin_help (char * name) { char info_name[100]; struct info_buffer * ib; if (strlen (name) > sizeof (info_name) - 20) io_error_msg ("No built in help for %s.", name); sprintf (info_name, "_info_%s", name); ib = find_info (info_name); if (!ib) { char ** msg = forminfo_text (name); if (!msg) { msg = (char **)ck_malloc (sizeof (char *) * 2); msg[0] = mk_sprintf ("No built in help for %s.", name); msg[1] = 0; } ib = find_or_make_info (info_name); ib->len = parray_len (msg); ib->text = msg; } { char exp_name[200]; char command[250]; struct info_buffer * expanded; sprintf (exp_name, "_expanded_%s", info_name); expanded = find_or_make_info (exp_name); clear_info (expanded); expand_help_msg (expanded, ib); sprintf (command, "{set-info %s}", exp_name); run_string_as_macro (command); } }
/** * Get information on one method (annotations, parameters, return * values, etc). * * TODO: * 1. Add missing documentation (see ????) * 2. Check to make sure that the second parameter is a string. (Also * do other error checking. See below.) * 3. Make sure that you get annotations for parameters and return * values (if they exist). * 4. Add tags for the other parts of the record (if they aren't * there already). For example, something like * '((name gimp_image_new) * (annotations "...") * (inputs (width integer "width of image")) * (outputs (image integer "id of created image"))) * If you'd prefer, input and output could also have their own * tags. * (inputs ((name width) (type integer) (annotations "width of image"))) * 5. Add a function to louDBus/unsafe that pretty prints this. * (If you'd prefer, you can add it to this file. But you can't * use printf to pretty print.) * 6. Add information for the garbage collector. (Yup, you'll need to * read really bad documentation on this. But try.) */ static Scheme_Object * loudbus_method_info (int argc, Scheme_Object **argv) { Scheme_Object *val, *val2; // ???? Scheme_Object *result = NULL; // The result we're building Scheme_Object *arglist = NULL; // The list of arguments Scheme_Object *outarglist = NULL; // The list of return values Scheme_Object *annolist = NULL; // The list of annotations Scheme_Object *name = NULL; // The method's name Scheme_Object *parampair = NULL; // ???? Scheme_Object *outparampair = NULL; // ???? GDBusMethodInfo *method; // Information on one method GDBusAnnotationInfo *anno; // Information on the annotations GDBusArgInfo *args, *outargs; // Information on the arguments LouDBusProxy *proxy; // The proxy gchar *methodName; // The method name int m; // Counter variable for methods // Get the proxy proxy = scheme_object_to_proxy (argv[0]); if (proxy == NULL) { scheme_wrong_type ("loudbus-methods", "LouDBusProxy *", 0, argc, argv); } // if proxy == NULL //Get the method name. WHAT IF WE CAN'T CONVERT TO A STRING???? methodName = scheme_object_to_string (argv[1]); // Permit the use of dashes in method names by converting them back // to underscores (which is what we use over DBus). score_it_all (methodName); //Get the method struct. WHAT IF THE METHOD DOESN'T EXIST???? method = g_dbus_interface_info_lookup_method (proxy->iinfo, methodName); // Build the list for arguments. arglist = scheme_null; for (m = parray_len ((gpointer *) method->in_args) - 1; m >= 0; m--) { args = method->in_args[m]; //Go through the arguments. val = scheme_make_symbol (args->name); val2 = scheme_make_symbol (args->signature); parampair = scheme_make_pair (val, val2); arglist = scheme_make_pair (parampair, arglist); } // for each argument //Build list for output. outarglist = scheme_null; for (m = parray_len ((gpointer *) method->out_args) - 1; m >= 0; m--) { outargs = method->out_args[m]; val = scheme_make_symbol (outargs->name); val2 = scheme_make_symbol (outargs->signature); outparampair = scheme_make_pair (val, val2); outarglist = scheme_make_pair (outparampair, outarglist); } // for each output formals // Build list of annotations annolist = scheme_null; for (m = parray_len ((gpointer *) method->annotations) - 1; m >= 0; m--) { anno = method->annotations[m]; //Go through the annotations. val = scheme_make_locale_string (anno->value); annolist = scheme_make_pair (val, annolist); } // for each annotation // Create the name entry name = scheme_null; name = scheme_make_pair (scheme_make_symbol(methodName), name); name = scheme_make_pair (scheme_make_symbol("name"), name); result = scheme_null; result = scheme_make_pair (annolist, result); result = scheme_make_pair (outarglist, result); result = scheme_make_pair (arglist, result); result = scheme_make_pair (name, result); // And we're done. return result; } // loudbus_method_info