layer0/Feedback.h (110 lines of code) (raw):

/* A* ------------------------------------------------------------------- B* This file contains source code for the PyMOL computer program C* Copyright (c) Schrodinger, LLC. D* ------------------------------------------------------------------- E* It is unlawful to modify or remove this copyright notice. F* ------------------------------------------------------------------- G* Please see the accompanying LICENSE file for further information. H* ------------------------------------------------------------------- I* Additional authors of this source file include: -* -* -* Z* ------------------------------------------------------------------- */ #ifndef _H_Feedback #define _H_Feedback #include"PyMOLGlobals.h" struct _CFeedback { char *Mask; char *Stack; int Depth; }; /* IMPORTANT DEVELOPER NOTICE: All non-debugging output should pass through the PRINTF and ENDF macros currently defined below, or through the FeedbackAdd or FeedbackAutoAdd routines. Feedback bits are: Results -- DEFAULT: ON output from a definite action which gives a result, such as an RMS fit, a measured surface area, etc. Errors -- DEFAULT: ON complaints which will cause failure at some level. Actions -- DEFAULT: ON Output regarding actions in progress or completed, but which don't return a particular result. Example: loading an object or creating a selection. Warnings -- DEFAULT: ON Questionable situations which will not necessarily result in task failure. Examples: creation of atom selection which includes no atoms. RMS fitting with <4 atoms. Details -- DEFAULT: ON Verbose output reflecting details about what is going on, such as the number of primitives in a raytracing scene. DEFAULT: ON Blather -- DEFAULT: OFF Output which doesn't fit into the above catogories, and is not likely to be required except in extreme cases, but doesn't fall into the category of debugging. Debugging -- DEFAULT: OFF Text output while would only be of interest to a developer. NOTE: Debugging output is the only kind of output which should be sent directly to standard output (actually, standard error). NOTE: Debugging output should always be preceeded b the enclosing function name. */ /* WARNING: The following constants are replicated in Python for the purpose * of minimize program startup time */ /* Discrete Systems and/or Code Modules */ #define FB_All 0 /* only used for setting */ /* NOTE, the following don't have to be packed, or in order -- we just need to record what the maximum index is. Rember that that feedback architecture is purely a performance hack, so expect some inconvenience... */ /* layer 0 */ #define FB_Isomesh 1 #define FB_Map 2 #define FB_Matrix 3 #define FB_MyPNG 4 #define FB_Triangle 5 #define FB_Match 6 #define FB_Raw 7 #define FB_Isosurface 8 #define FB_OpenGL 9 // FB_Shader; no room here /* layer 1 */ #define FB_Color 10 #define FB_CGO 11 #define FB_Feedback 12 #define FB_Scene 13 #define FB_Threads 14 /* part of P.c */ #define FB_Symmetry 15 #define FB_Ray 16 #define FB_Setting 17 #define FB_Object 18 #define FB_Ortho 19 #define FB_Movie 20 #define FB_Python 21 /* part of P.c */ #define FB_Extrude 22 #define FB_Rep 23 #define FB_Shaker 24 /* layer 2 */ #define FB_CoordSet 25 #define FB_DistSet 26 #define FB_GadgetSet 27 #define FB_ObjectMolecule 30 #define FB_ObjectMap 31 #define FB_ObjectMesh 32 #define FB_ObjectDist 33 #define FB_ObjectCGO 34 #define FB_ObjectCallback 35 #define FB_ObjectSurface 36 #define FB_ObjectGadget 37 #define FB_ObjectSlice 38 #define FB_ObjectVolume 39 #define FB_RepAngle 43 #define FB_RepDihedral 44 #define FB_RepWireBond 45 #define FB_RepCylBond 46 #define FB_RepEllipsoid 47 #define FB_RepLabel 48 #define FB_RepSphere 49 #define FB_RepSurface 50 #define FB_RepMesh 51 #define FB_RepDot 52 #define FB_RepNonbonded 53 #define FB_RepNonbondedSphere 54 #define FB_RepDistDash 55 #define FB_RepDistLabel 56 #define FB_RepRibbon 57 #define FB_RepCartoon 58 #define FB_Sculpt 59 #define FB_VFont 60 // in layer0 #define FB_Shader 61 #define FB_ShaderMgr 62 #define FB_ShaderPrg 63 #define FB_Session 64 // in layer1 #define FB_Property 65 /* layer 3 */ #define FB_Executive 70 #define FB_Selector 71 #define FB_Editor 72 #define FB_Nag 73 /* layer 4 */ #define FB_Export 75 #define FB_CCmd 76 /* "cmd" is just the python version */ #define FB_API 77 /* APIEntry/Exit */ /* layer 5 */ #define FB_Main 80 #define FB_Total 81 /* highest index + 1 */ /* Feedback level bit masks */ #define FB_None 0x00 #define FB_Output 0x01 /* python/text output */ #define FB_Results 0x02 /* limited to actual results of an operation...requested measurements, etc. */ #define FB_Errors 0x04 #define FB_Actions 0x08 /* advisories regarding the completion of a */ #define FB_Warnings 0x10 #define FB_Details 0x20 #define FB_Blather 0x40 #define FB_Debugging 0x80 #define FB_Everything 0xFF int FeedbackInit(PyMOLGlobals * G, int quiet); void FeedbackFree(PyMOLGlobals * G); void FeedbackPush(PyMOLGlobals * G); void FeedbackPop(PyMOLGlobals * G); void FeedbackAutoAdd(PyMOLGlobals * G, unsigned int sysmod, unsigned char mask, const char *str); void FeedbackAdd(PyMOLGlobals * G, const char *str); void FeedbackAddColored(PyMOLGlobals * G, const char *str, unsigned char mask); void FeedbackSetMask(PyMOLGlobals * G, unsigned int sysmod, unsigned char mask); void FeedbackDisable(PyMOLGlobals * G, unsigned int sysmod, unsigned char mask); void FeedbackEnable(PyMOLGlobals * G, unsigned int sysmod, unsigned char mask); /* Mechanism: a high-speed bit test, with no range checking * in order to avoid penalizing performance-senstive code * modules which may contain live debugging code. */ #define Feedback(G,sysmod,mask) (G->Feedback->Mask[sysmod]&(mask)) /* FEEDBACK_MAX_OUTPUT should be as small as is reasonable * since this much space gets consumed on the stack * every time we have a PRINTF macro. One might consider * rewriting these macros to consume heap space instead. */ #define FEEDBACK_MAX_OUTPUT 255 typedef char FeedbackLineType[FEEDBACK_MAX_OUTPUT]; /* Print Feedback Macros -- this the most flexible and cross-OS * portable solution I've come up with for sending output with * variable arguments. */ #define PRINTFB(G,sysmod,mask) { FeedbackLineType _FBstr; if(Feedback(G,sysmod,mask)) {(snprintf)( _FBstr, FEEDBACK_MAX_OUTPUT, #define ENDFB(G) ); FeedbackAdd(G,_FBstr);}} #define PRINTF { FeedbackLineType _FBstr; (snprintf)( _FBstr, FEEDBACK_MAX_OUTPUT, #define ENDF(G) ); FeedbackAdd(G,_FBstr);} /* debugging: goes to stderr */ #define PRINTFD(G,sysmod) {if(Feedback(G,sysmod,FB_Debugging)) { fprintf(stderr, #define ENDFD );fflush(stderr);}} /* convenient vector dumping routine */ #define ENDFD3f(v) );fprintf(stderr,": %8.3f %8.3f %8.3f\n",v[0],v[1],v[2]);fflush(stderr);}} #endif