1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
#include"os_std.h"
#include"const.h"
#include"vla.h"
#include"feedback2.h"
typedef struct {
char *Stack;
int Depth;
} Cfeedback_;
char *feedback_Mask;
Cfeedback_ Feedbk;
static int feedback_init = true;
void feedback_Init(void)
{
int a;
Cfeedback_ *I=&Feedbk;
if(feedback_init) {
feedback_init=false;
vla_malloc(I->Stack,char,FB_total);
I->Depth=0;
feedback_Mask = I->Stack;
for(a=0;a<FB_total;a++) {
feedback_Mask[a] = FB_results | FB_errors | FB_warnings | FB_actions | FB_details;
/* | FB_everything;*/
}
}
}
void feedback_Free(void)
{
Cfeedback_ *I=&Feedbk;
vla_free(I->Stack);
}
/* below we'll presume that any standard feedback on the feedback
module itself will be effected at the Python level, since feedback
levels will be changed as a matter of course inside of PyMOL in order
to quietly perform complex actions. */
void feedback_Push(void)
{
Cfeedback_ *I=&Feedbk;
int a;
I->Depth++;
vla_check(I->Stack,char,(I->Depth+1)*FB_total);
feedback_Mask=I->Stack+(I->Depth*FB_total);
for(a=0;a<FB_total;a++) {
feedback_Mask[a] = feedback_Mask[a-FB_total];
}
PRINTFD(FB_feedback_) " feedback: push\n" ENDFD;
}
void feedback_Pop(void)
{
Cfeedback_ *I=&Feedbk;
if(I->Depth) {
I->Depth--;
feedback_Mask=I->Stack+(I->Depth*FB_total);
}
PRINTFD(FB_feedback_) " feedback: pop\n" ENDFD;
}
void feedback_SetMask(unsigned int sysmod,unsigned char mask)
{
int a;
if((sysmod>0)&&(sysmod<FB_total)) {
feedback_Mask[sysmod] = mask;
} else if(!sysmod) {
for(a=0;a<FB_total;a++) {
feedback_Mask[a] = mask;
}
}
PRINTFD(FB_feedback_)
" feedbackSetMask: sysmod %d, mask 0x%02X\n",sysmod,mask
ENDFD;
}
void feedback_Disable(unsigned int sysmod,unsigned char mask)
{
int a;
if((sysmod>0)&&(sysmod<FB_total)) {
feedback_Mask[sysmod] = feedback_Mask[sysmod] & (0xFF-mask);
} else if(!sysmod) {
for(a=0;a<FB_total;a++) {
feedback_Mask[a] = feedback_Mask[a] & (0xFF-mask);
}
}
PRINTFD(FB_feedback_)
" feedbackDisable: sysmod %d, mask 0x%02X\n",sysmod,mask
ENDFD;
}
void feedback_Enable(unsigned int sysmod,unsigned char mask)
{
int a;
if((sysmod>0)&&(sysmod<FB_total)) {
feedback_Mask[sysmod] = feedback_Mask[sysmod] | mask;
} else if(!sysmod) {
for(a=0;a<FB_total;a++) {
feedback_Mask[a] = feedback_Mask[a] | mask;
}
}
PRINTFD(FB_feedback_)
" feedbackEnable: sysmod %d, mask 0x%02X\n",sysmod,mask
ENDFD;
}
|