static int X_dm(int argc, char *argv[]) { if (!strcmp(argv[0], "set")) { struct bu_vls vls; bu_vls_init(&vls); if (argc < 2) { /* Bare set command, print out current settings */ bu_vls_struct_print2(&vls, "dm_X internal variables", X_vparse, (const char *)dmp ); } else if (argc == 2) { bu_vls_struct_item_named(&vls, X_vparse, argv[1], (const char *)dmp, ','); } else { struct bu_vls tmp_vls; bu_vls_init(&tmp_vls); bu_vls_printf(&tmp_vls, "%s=\"", argv[1]); bu_vls_from_argv(&tmp_vls, argc-2, (const char **)argv+2); bu_vls_putc(&tmp_vls, '\"'); bu_struct_parse(&tmp_vls, X_vparse, (char *)dmp); bu_vls_free(&tmp_vls); } Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); bu_vls_free(&vls); return TCL_OK; } return common_dm(argc, argv); }
/* * O G L _ D M * * Implement display-manager specific commands, from MGED "dm" command. */ static int Ogl_dm(int argc, const char *argv[]) { if (BU_STR_EQUAL(argv[0], "set")) { struct bu_vls vls = BU_VLS_INIT_ZERO; if (argc < 2) { /* Bare set command, print out current settings */ bu_vls_struct_print2(&vls, "dm_ogl internal variables", Ogl_vparse, (const char *)&((struct ogl_vars *)dmp->dm_vars.priv_vars)->mvars); } else if (argc == 2) { bu_vls_struct_item_named(&vls, Ogl_vparse, argv[1], (const char *)&((struct ogl_vars *)dmp->dm_vars.priv_vars)->mvars, COMMA); } else { struct bu_vls tmp_vls = BU_VLS_INIT_ZERO; int ret; bu_vls_printf(&tmp_vls, "%s=\"", argv[1]); bu_vls_from_argv(&tmp_vls, argc-2, (const char **)argv+2); bu_vls_putc(&tmp_vls, '\"'); ret = bu_struct_parse(&tmp_vls, Ogl_vparse, (char *)&((struct ogl_vars *)dmp->dm_vars.priv_vars)->mvars); bu_vls_free(&tmp_vls); if (ret < 0) { bu_vls_free(&vls); return TCL_ERROR; } } Tcl_AppendResult(INTERP, bu_vls_addr(&vls), (char *)NULL); bu_vls_free(&vls); return TCL_OK; } return common_dm(argc, argv); }