void ARMAssembler::epilog(uint32_t touched) { touched &= LSAVED; if (touched) { // write prolog code uint32_t* pc = mPC; mPC = mPrologPC; STM(AL, FD, SP, 1, touched | LLR); mPC = pc; // write epilog code LDM(AL, FD, SP, 1, touched | LLR); BX(AL, LR); } else { // heh, no registers to save! // write prolog code uint32_t* pc = mPC; mPC = mPrologPC; MOV(AL, 0, R0, R0); // NOP mPC = pc; // write epilog code BX(AL, LR); } }
//calculate H static inline void calcH() { //todo mu = mu0 ? for(int i=1; i<N_PX-1; i++){ for(int j=1; j<N_PY-1; j++){ Hx[ind(i,j)] = BX(i,j)/MU_0_S; } } for(int i=1; i<N_PX-1; i++){ for(int j=1; j<N_PY-1; j++){ Hy[ind(i,j)] = BY(i,j)/MU_0_S; } } }
//calculate M and B static inline void calcMB() { //todo code of EZ(i, j+1) and EZ(i,j) may be reverse ? for(int i=1; i<N_PX-1; i++){ for(int j=1; j<N_PY-1; j++){ double complex nowMx = MX(i,j); Mx[ind(i,j)] = CMX(i,j)*MX(i,j) - CMXEZ(i,j)*(EZ(i,j+1) - EZ(i,j)); Bx[ind(i,j)] = CBX(i,j)*BX(i,j) + CBXMX1(i,j)*MX(i,j) - CBXMX0(i,j)*nowMx; } } //todo code of EZ(i+1, j) and EZ(i,j) for(int i=1; i<N_PX-1; i++){ for(int j=1; j<N_PY-1; j++){ double complex nowMy = MY(i,j); My[ind(i,j)] = CMY(i,j)*MY(i,j) - CMYEZ(i,j)*(-EZ(i+1,j) + EZ(i,j)); By[ind(i,j)] = CBY(i,j)*BY(i,j) + CBYMY1(i,j)*MY(i,j) - CBYMY0(i,j)*nowMy; } } }
//----------------------------------------------------------------------------- // Function : N_LAS_AmesosGenOp::Apply() // Purpose : Applies the operator inv(A)*B*X = Y // Special Notes : // Scope : Public // Creator : Heidi Thornquist, SNL // Creation Date : 06/04/12 //----------------------------------------------------------------------------- int N_LAS_AmesosGenOp::Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y ) const { if (!useTranspose_) { // Storage for B*X Epetra_MultiVector BX(X.Map(),X.NumVectors()); // Apply B*X B_->Apply(X, BX); Y.PutScalar(0.0); // Set the LHS and RHS problem_->SetRHS(&BX); problem_->SetLHS(&Y); // Solve the linear system A*Y = BX solver_->Solve(); } else { // Storage for A^{-T}*X Epetra_MultiVector ATX(X.Map(),X.NumVectors()); Epetra_MultiVector tmpX = const_cast<Epetra_MultiVector&>(X); // Set the LHS and RHS problem_->SetRHS(&tmpX); problem_->SetLHS(&ATX); // Solve the linear system A^T*Y = X solver_->Solve(); // Apply B*ATX B_->Apply(ATX, Y); } return 0; }
void decodeInstruction(instruction_t instruction,uint32_t *registro,flags_t *bandera, uint8_t *SRAM, uint16_t *codificacion, char **Flash) { int i; *codificacion=0; // valor incial // comparar el mnemonic con el nombre de cada una de las funciones, y asi ejecutar la adecuada if( strcmp(instruction.mnemonic,"LDR") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { *codificacion=(13<<11)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; instruction.op3_value<<=2; if(((*(registro+instruction.op2_value)+instruction.op3_value)>=0x20000000)&&((*(registro+instruction.op2_value)+instruction.op3_value)<0x40000000)) { LDR(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,SRAM); } if((*(registro+instruction.op2_value)+instruction.op3_value)<0x20000000) { } if((*(registro+instruction.op2_value)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Read); } } if((instruction.op1_type=='R') && (instruction.op2_type=='S') && (instruction.op3_type=='#')) { *codificacion=(19<<11)+(instruction.op1_value<<8)+instruction.op3_value; instruction.op3_value<<=2; if(((*(registro+13)+instruction.op3_value)>=0x20000000)&&((*(registro+13)+instruction.op3_value)<0x40000000)) { LDR(registro+instruction.op1_value,*(registro+13),instruction.op3_value,SRAM); } if((*(registro+13)+instruction.op3_value)<0x20000000) { } if((*(registro+13)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+13)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Read); } } if((instruction.op1_type=='R') && (instruction.op2_type=='P') && (instruction.op3_type=='#')) // label { *codificacion=(9<<11)+(instruction.op1_value<<8)+instruction.op3_value; instruction.op3_value<<=2; if(((*(registro+15)+instruction.op3_value)>=0x20000000)&&((*(registro+15)+instruction.op3_value)<0x40000000)) { LDR(registro+instruction.op1_value,*(registro+15),instruction.op3_value,SRAM); } if((*(registro+15)+instruction.op3_value)<0x20000000) { } if((*(registro+15)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+15)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Read); } } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { *codificacion=(11<<11)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { LDR(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,registro+instruction.op1_value,Read); } } registro[15]++; } if( strcmp(instruction.mnemonic,"LDRB") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { *codificacion=(15<<11)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+instruction.op3_value)>=0x20000000)&&((*(registro+instruction.op2_value)+instruction.op3_value)<0x40000000)) { LDRB(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,SRAM); } if((*(registro+instruction.op2_value)+instruction.op3_value)<0x20000000) { } if((*(registro+instruction.op2_value)+instruction.op3_value)>=0x40000000) { uint8_t data; IOAccess((*(registro+instruction.op2_value)+instruction.op3_value)&0xFF,&data,Read); *(registro+instruction.op1_value)= (uint32_t)data; } } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { *codificacion=(1<<14)+(7<<10)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { LDRB(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { uint8_t data; IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,&data,Read); *(registro+instruction.op1_value)=(uint32_t) data; } } registro[15]++; } if( strcmp(instruction.mnemonic,"LDRH") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { *codificacion=(1<<15)+(1<<11)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; instruction.op3_value<<=1; if(((*(registro+instruction.op2_value)+instruction.op3_value)>=0x20000000)&&((*(registro+instruction.op2_value)+instruction.op3_value)<0x40000000)) { LDRH(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,SRAM); } if((*(registro+instruction.op2_value)+instruction.op3_value)<0x20000000) { } if((*(registro+instruction.op2_value)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Read); } } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { *codificacion=(5<<12)+(5<<9)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { LDRH(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,registro+instruction.op1_value,Read); } registro[15]++; } if( strcmp(instruction.mnemonic,"LDRSB") ==0) { *codificacion=(5<<12)+(3<<9)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { LDRSB(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,registro+instruction.op1_value,Read); } registro[15]++; } if( strcmp(instruction.mnemonic,"LDRSH") ==0) { *codificacion=(5<<12)+(7<<9)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { LDRSH(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,registro+instruction.op1_value,Read); } registro[15]++; } if( strcmp(instruction.mnemonic,"STR") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { *codificacion=(3<<13)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; instruction.op3_value<<=2; if(((*(registro+instruction.op2_value)+instruction.op3_value)>=0x20000000)&&((*(registro+instruction.op2_value)+instruction.op3_value)<0x40000000)) { STR(*(registro+instruction.op1_value),*(registro+instruction.op2_value),instruction.op3_value,SRAM); } if((*(registro+instruction.op2_value)+instruction.op3_value)<0x20000000) { } if((*(registro+instruction.op2_value)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Write); } } if((instruction.op1_type=='R') && (instruction.op2_type=='S') && (instruction.op3_type=='#')) { *codificacion=(9<<12)+(instruction.op1_value<<8)+instruction.op3_type; instruction.op3_value<<=2; if(((*(registro+13)+instruction.op3_value)>=0x20000000)&&((*(registro+13)+instruction.op3_value)<0x40000000)) { STR(*(registro+instruction.op1_value),*(registro+13),instruction.op3_value,SRAM); } if((*(registro+13)+instruction.op3_value)<0x20000000) { } if((*(registro+13)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+13)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Write); } } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { *codificacion=(5<<12)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { STR(*(registro+instruction.op1_value),*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,registro+instruction.op1_value,Write); } } registro[15]++; } if( strcmp(instruction.mnemonic,"STRB") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { *codificacion=(7<<12)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+instruction.op3_value)>=0x20000000)&&((*(registro+instruction.op2_value)+instruction.op3_value)<0x40000000)) { STRB(*(registro+instruction.op1_value),*(registro+instruction.op2_value),instruction.op3_value,SRAM); } if((*(registro+instruction.op2_value)+instruction.op3_value)<0x20000000) { } if((*(registro+instruction.op2_value)+instruction.op3_value)>=0x40000000) { uint8_t data; data=(uint8_t)(*(registro+instruction.op1_value)); IOAccess((*(registro+instruction.op2_value)+instruction.op3_value)&0xFF,&data,Write); } } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { *codificacion=(21<<10)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { STRB(*(registro+instruction.op1_value),*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { uint8_t data; data=(uint8_t)(*(registro+instruction.op1_value)); IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,&data,Write); } } registro[15]++; } if( strcmp(instruction.mnemonic,"STRH") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { *codificacion=(1<<15)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; instruction.op3_value<<=1; if(((*(registro+instruction.op2_value)+instruction.op3_value)>=0x20000000)&&((*(registro+instruction.op2_value)+instruction.op3_value)<0x40000000)) { STRH(*(registro+instruction.op1_value),*(registro+instruction.op2_value),instruction.op3_value,SRAM); } if((*(registro+instruction.op2_value)+instruction.op3_value)<0x20000000) { } if((*(registro+instruction.op2_value)+instruction.op3_value)>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+instruction.op3_value)&0xFF,registro+instruction.op1_value,Write); } } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { *codificacion=(5<<12)+(1<<9)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; if(((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x20000000)&&((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x40000000)) { STRH(*(registro+instruction.op1_value),*(registro+instruction.op2_value),*(registro+instruction.op3_value),SRAM); } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))<0x20000000) { } if((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))>=0x40000000) { //IOAccess((*(registro+instruction.op2_value)+*(registro+instruction.op3_value))&0xFF,registro+instruction.op1_value,Write); } } registro[15]++; } if( strcmp(instruction.mnemonic,"PUSH") ==0) { for(i=0;i<8;i++) { *codificacion+=(instruction.registers_list[i]<<i); } *codificacion+=(11<<12)+(1<<10)+(instruction.registers_list[14]<<8); PUSH(registro,SRAM,&instruction.registers_list[0]); registro[15]++; } if( strcmp(instruction.mnemonic,"POP") ==0) { for(i=0;i<8;i++) { *codificacion+=(instruction.registers_list[i]<<i); } *codificacion=(11<<12)+(3<<10)+(instruction.registers_list[15]<<8); POP(registro,SRAM,&instruction.registers_list[0]); registro[15]++; } if( strcmp(instruction.mnemonic,"ADCS") ==0) { *codificacion=(1<<14)+(5<<6)+(instruction.op2_value<<3)+instruction.op1_value; ADCS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"ADD") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R')) { ADD(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value)); *codificacion=(1<<14)+(1<<10)+(instruction.op2_value<<3)+((8&instruction.op1_value)<<4)+(7&instruction.op1_value); } if((instruction.op1_type=='R') && (instruction.op2_type=='S') && (instruction.op3_type=='#')) { ADD(registro+instruction.op1_value,*(registro+13),instruction.op2_value); *codificacion=(21<<11)+(instruction.op1_value<<8)+instruction.op3_value; } if((instruction.op1_type=='S') && (instruction.op2_type=='S') && (instruction.op3_type=='#')) { ADD(registro+13,*(registro+13),instruction.op3_value); *codificacion=(11<<12)+instruction.op3_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='S') && (instruction.op3_type=='R')) { ADD(registro+instruction.op1_value,*(registro+13),*(registro+instruction.op3_value)); *codificacion=(1<<14)+(1<<10)+(13<<3)+((8&instruction.op1_value)<<4)+(7&instruction.op1_value); } if((instruction.op1_type=='S') && (instruction.op2_type=='R')) { ADD(registro+13,*(registro+13),*(registro+instruction.op2_value)); *codificacion=(1<<14)+(9<<7)+5+(instruction.op2_value<<3); } registro[15]++; } if( strcmp(instruction.mnemonic,"ADDS") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { ADDS(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,bandera); *codificacion=(7<<10)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='#')) { ADDS(registro+instruction.op1_value,*(registro+instruction.op1_value),instruction.op2_value,bandera); *codificacion=(3<<12)+(instruction.op1_value<<8)+instruction.op2_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { ADDS(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value), bandera); *codificacion=(3<<11)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } registro[15]++; } // los parametros de las demas funciones aritmeticas, de desplazamiento y logicas son similares if( strcmp(instruction.mnemonic,"ANDS") ==0) { *codificacion=(1<<14)+(instruction.op2_value<<3)+instruction.op1_value; ANDS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"ASRS") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R')) { ASRS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); *codificacion=(1<<14)+(1<<8)+(instruction.op2_value<<3)+instruction.op1_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { ASRS(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,bandera); *codificacion=(1<<12)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"BICS") ==0) { *codificacion=(1<<14)+(14<<6)+(instruction.op2_value<<3)+instruction.op1_value; BICS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"CMN") ==0) { *codificacion=(1<<14)+(11<6)+(instruction.op2_value<<3)+instruction.op1_value; CMN(*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); // En diferencia a las demas funciones, se envian como parametros 2 valores registro[15]++; } if( strcmp(instruction.mnemonic,"CMP") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R')) { if(instruction.op1_value>=8) { CMP(*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); // En diferencia a las demas funciones, se envian como parametros 2 valores *codificacion=(1<<14)+(5<<8)+(instruction.op2_value<<3)+(7&instruction.op1_value)+((8&instruction.op1_value)<<4); } else { CMP(*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); // En diferencia a las demas funciones, se envian como parametros 2 valores *codificacion=(1<<14)+(10<<6)+(instruction.op2_value<<3)+instruction.op1_value; } } if((instruction.op1_type=='R') && (instruction.op2_type=='#')) { CMP(*(registro+instruction.op1_value),instruction.op2_value, bandera); // Como parametros se tienen el contenido de un registro y un valor *codificacion=(5<<11)+(instruction.op1_value<<8)+instruction.op2_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"EORS") ==0) { *codificacion=(1<<14)+(1<<6)+(instruction.op2_value<<3)+instruction.op1_value; EORS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value),bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"LSLS") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R')) { LSLS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); *codificacion=(1<<14)+(1<<7)+(instruction.op2_value<<3)+instruction.op1_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { LSLS(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,bandera); *codificacion=(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"LSRS") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R')) { LSRS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); *codificacion=(1<<14)+(3<<6)+(instruction.op2_value<<3)+instruction.op1_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { LSRS(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,bandera); *codificacion=(1<<11)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"MOV") ==0) { *codificacion=(1<<14)+(3<<9)+(instruction.op2_value<<3)+(7&instruction.op1_value)+((8&instruction.op1_value)<<4); MOV(registro+instruction.op1_value,*(registro+instruction.op2_value)); // Envio como parametros una direccion y el contenido de un registro registro[15]++; } if( strcmp(instruction.mnemonic,"MOVS") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='#')) { MOVS(registro+instruction.op1_value,instruction.op2_value, bandera); *codificacion=(1<<13)+(instruction.op1_value<<8)+instruction.op2_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='R')) { MOVS(registro+instruction.op1_value,*(registro+instruction.op2_value),bandera); *codificacion=(instruction.op2_value<<3)+instruction.op1_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"MULS") ==0) { *codificacion=(1<<14)+(13<<6)+(instruction.op2_value<<3)+instruction.op3_value; MULS(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"MVNS") ==0) { *codificacion=(1<<14)+(15<<6)+(instruction.op2_value<<3)+instruction.op1_value; RSBS(registro+instruction.op1_value,*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"NOP") ==0) { *codificacion=(11<<12)+(15<<8); registro[15]++; } if( strcmp(instruction.mnemonic,"ORRS") ==0) { *codificacion=(1<<14)+(3<<8)+(instruction.op2_value<<3)+instruction.op1_value; ORRS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"REV") ==0) { *codificacion=(11<<12)+(5<<9)+(instruction.op2_value<<3)+instruction.op1_value; REV(registro+instruction.op1_value, *(registro+instruction.op2_value)); registro[15]++; } if( strcmp(instruction.mnemonic,"REV16") ==0) { *codificacion=(11<<12)+(5<<9)+(1<<6)+(instruction.op2_value<<3)+instruction.op1_value; REV16(registro+instruction.op1_value,*(registro+instruction.op2_value)); registro[15]++; } if( strcmp(instruction.mnemonic,"REVSH") ==0) { *codificacion=(11<<12)+(5<<9)+(3<<6)+(instruction.op2_value<<3)+instruction.op1_value; REVSH(registro+instruction.op1_value,*(registro+instruction.op2_value)); registro[15]++; } if( strcmp(instruction.mnemonic,"RORS") ==0) { *codificacion=(1<<14)+(7<<6)+(instruction.op2_value<<3)+instruction.op1_value; RORS(registro+instruction.op1_value,*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"RSBS") ==0) { *codificacion=(1<<14)+(9<<6)+(instruction.op2_value<<3)+instruction.op1_value; RSBS(registro+instruction.op1_value,*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"SBCS") ==0) { *codificacion=(1<<14)+(3<<7)+(instruction.op2_value<<3)+instruction.op1_value; SBCS(registro+instruction.op1_value,*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); registro[15]++; } if( strcmp(instruction.mnemonic,"SUB") ==0) { if((instruction.op1_type=='S') && (instruction.op2_type=='S') && (instruction.op3_type=='#')) { SUB(registro+13,*(registro+13),instruction.op3_value); *codificacion=(11<<12)+(1<<7)+instruction.op3_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"SUBS") ==0) { if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='#')) { SUBS(registro+instruction.op1_value,*(registro+instruction.op2_value),instruction.op3_value,bandera); *codificacion=(15<<9)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='#')) { SUBS(registro+instruction.op1_value,*(registro+instruction.op1_value),instruction.op2_value,bandera); *codificacion=(7<<11)+(instruction.op1_value<<8)+instruction.op2_value; } if((instruction.op1_type=='R') && (instruction.op2_type=='R') && (instruction.op3_type=='R')) { SUBS(registro+instruction.op1_value,*(registro+instruction.op2_value),*(registro+instruction.op3_value), bandera); *codificacion=(13<<9)+(instruction.op3_value<<6)+(instruction.op2_value<<3)+instruction.op1_value; } registro[15]++; } if( strcmp(instruction.mnemonic,"TST") ==0) { *codificacion=(1<<14)+(1<<9)+(instruction.op2_value<<3)+instruction.op1_value; TST(*(registro+instruction.op1_value),*(registro+instruction.op2_value), bandera); // Como parametros se tienen el contenido de un registro y un valor registro[15]++; } // Las siguientes funciones, son funciones de saltos if( strcmp(instruction.mnemonic,"B") ==0) { *codificacion=(7<<13)+instruction.op1_value; B(registro,instruction.op1_value); // Envio como parametroa la direccion de registro y el valor del salto } if( strcmp(instruction.mnemonic,"BL") ==0) { *codificacion=(31<<11)+(2047&instruction.op1_value); BL(registro,instruction.op1_value); // Envio como parametroa la direccion de registro y el valor del salto } if( strcmp(instruction.mnemonic,"BLX") ==0) { *codificacion=(1<<14)+(15<<7)+(instruction.op1_value<<3); BLX(registro,*(registro+instruction.op1_value)); // Envio como parametroa la direccion de registro y el contenido de un registro } if( strcmp(instruction.mnemonic,"BX") ==0) { *codificacion=(1<<14)+(14<<7)+(instruction.op1_value<<3); if(instruction.op1_type=='L') // Sucede cuando { BX(registro,registro[14]); // PC=LR } if(instruction.op1_type=='R') // Sucede cuando se tiene como parametro un registro diferente a LR { BX(registro,*(registro+instruction.op1_value)); } } if( strcmp(instruction.mnemonic,"BEQ") ==0) { *codificacion=(13<<12)+instruction.op1_value; BEQ(registro,instruction.op1_value,*bandera); // Envio como parametros la direccion de registro, el valor del salto y las banderas } // Todas las siguientes funciones de salto tienen los mismos parametro que BEQ if( strcmp(instruction.mnemonic,"BNE") ==0) { *codificacion=(13<<12)+(1<<8)+instruction.op1_value; BNE(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BCS") ==0) { *codificacion=(13<<12)+(2<<8)+instruction.op1_value; BCS(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BCC") ==0) { *codificacion=(13<<12)+(3<<8)+instruction.op1_value; BCC(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BMI") ==0) { *codificacion=(13<<12)+(4<<8)+instruction.op1_value; BMI(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BPL") ==0) { *codificacion=(13<<12)+(5<<8)+instruction.op1_value; BPL(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BVS") ==0) { *codificacion=(13<<12)+(6<<8)+instruction.op1_value; BVS(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BVC") ==0) { *codificacion=(13<<12)+(7<<8)+instruction.op1_value; BVC(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BHI") ==0) { *codificacion=(13<<12)+(8<<8)+instruction.op1_value; BHI(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BLS") ==0) { *codificacion=(13<<12)+(9<<8)+instruction.op1_value; BLS(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BGE") ==0) { *codificacion=(13<<12)+(10<<8)+instruction.op1_value; BGE(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BLT") ==0) { *codificacion=(13<<12)+(11<<8)+instruction.op1_value; BLT(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BGT") ==0) { *codificacion=(13<<12)+(12<<8)+instruction.op1_value; BGT(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BLE") ==0) { *codificacion=(13<<12)+(13<<8)+instruction.op1_value; BLE(registro,instruction.op1_value,*bandera); } if( strcmp(instruction.mnemonic,"BAL") ==0) { *codificacion=(13<<12)+(14<<8)+instruction.op1_value; BAL(registro,instruction.op1_value,*bandera); } }
cv::Mat_<int> cModel::__lbf_fast(const cv::Mat_<uchar>&img, const cv::Rect& bbox, const cv::Mat_<float>& shape,int markID, int stage) { int max_stage = m_Model.__head.__num_stage; int num_node = m_Model.__head.__num_leaf + m_Model.__head.__num_node; int num_point = m_Model.__head.__num_point; int num_tree_per_point = m_Model.__head.__num_tree_per_point; int num_leaf = m_Model.__head.__num_leaf; m_AX[stage].row(markID) *= bbox.width; m_AY[stage].row(markID) *= bbox.height; m_BX[stage].row(markID) *= bbox.width; m_BY[stage].row(markID) *= bbox.height; m_AX[stage].row(markID) += shape(markID, 0); m_AY[stage].row(markID) += shape(markID, 1); m_BX[stage].row(markID) += shape(markID, 0); m_BY[stage].row(markID) += shape(markID, 1); cv::Mat_<int> cind = cv::Mat::ones(m_AX[stage].cols, 1, CV_32SC1); cv::Mat_<float> AX = m_AX[stage].row(markID); cv::Mat_<float> AY = m_AY[stage].row(markID); cv::Mat_<float> BX = m_BX[stage].row(markID); cv::Mat_<float> BY = m_BY[stage].row(markID); cv::Mat_<float> Thresh = m_Thresh[stage].row(markID); int width = img.cols; int height = img.rows; for (int j = 0; j < AX.cols; j += num_node){ for (int index = 0; index < m_Model.__head.__num_node; index++){ int pos = j + index; int a_x = (int)(AX(0, pos) + 0.5); int a_y = (int)(AY(0, pos) + 0.5); int b_x = (int)(BX(0, pos) + 0.5); int b_y = (int)(BY(0, pos) + 0.5); a_x = MAX(0, MIN(a_x, width - 1)); a_y = MAX(0, MIN(a_y, height - 1)); b_x = MAX(0, MIN(b_x, width - 1)); b_y = MAX(0, MIN(b_y, height - 1)); float pixel_v_a = (float)img(cv::Point(a_x, a_y)); float pixel_v_b = (float)img(cv::Point(b_x, b_y)); float val = pixel_v_a - pixel_v_b; if (val < (float)Thresh(0, pos)){ cind(pos, 0) = 0; } } } cv::Mat_<int> binfeature = cv::Mat::zeros(1, (int)cv::sum(m_Isleaf).val[0], CV_32SC1); int cumnum_nodes = 0; int cumnum_leafnodes = 0; for (int t = 0; t < num_tree_per_point; t++){ int id_cnode = 0; while (1){ if (m_Isleaf(id_cnode + cumnum_nodes)){ binfeature(0, cumnum_leafnodes + __getindex(m_Idleafnodes, id_cnode)) = 1; cumnum_nodes = cumnum_nodes + num_node; cumnum_leafnodes = cumnum_leafnodes + num_leaf; break; } id_cnode = m_Cnodes(cumnum_nodes + id_cnode, cind(cumnum_nodes + id_cnode, 0)); } } return binfeature; }
void decodeInstruction(instruction_t instruction, uint32_t *dir_reg, char *dir_flags, uint8_t *SRAM, uint16_t *dec) { uint8_t *R_activos=instruction.registers_list; /* Comparacion de mnemonic y Llamado de las funciones */ if( strcmp(instruction.mnemonic,"ADC") == 0 || strcmp(instruction.mnemonic,"ADCS") == 0){ dir_reg[PC]++; *dec=16704; *dec=*dec|instruction.op3_value<<3|instruction.op1_value; dir_reg[instruction.op1_value]=ADC(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); } if( strcmp(instruction.mnemonic,"ADDS") == 0 || strcmp(instruction.mnemonic,"ADD") == 0){ dir_reg[PC]++; if(instruction.op2_type=='S'){ *dec=45056; dir_reg[SP]=ADD(dir_reg[SP],instruction.op3_value,dir_flags); *dec=*dec|instruction.op3_value;} else if(instruction.op3_type=='#'){ *dec=7168; *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value; dir_reg[instruction.op1_value]=ADD(dir_reg[instruction.op2_value], instruction.op3_value,dir_flags); mvprintw(4,20,"%X",*dec);} else{ *dec=6144; *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value; dir_reg[instruction.op1_value]=ADD(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags);} } if( strcmp(instruction.mnemonic,"AND") == 0 || strcmp(instruction.mnemonic,"ANDS") == 0){ dir_reg[PC]++; *dec=16384; if(instruction.op3_type=='#'){ dir_reg[instruction.op1_value]=AND(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags);} else dir_reg[instruction.op1_value]=AND(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); } if( strcmp(instruction.mnemonic,"ASR") == 0 || strcmp(instruction.mnemonic,"ASRS") == 0){ dir_reg[PC]++; if(instruction.op3_type=='#'){ *dec=4096; *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value; dir_reg[instruction.op1_value]=ASR(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags);} else{ *dec=16640; *dec=*dec|instruction.op3_value<<3|instruction.op1_value; dir_reg[instruction.op1_value]=ASR(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags);} } if( strcmp(instruction.mnemonic,"BICS") == 0 || strcmp(instruction.mnemonic,"BICS") == 0){ dir_reg[PC]++; if(instruction.op3_type=='#') dir_reg[instruction.op1_value]=BIC(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags); else{ *dec=17280; dir_reg[instruction.op1_value]=BIC(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op3_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"CMN" ) == 0 || strcmp(instruction.mnemonic,"CMNS") == 0){ dir_reg[PC]++; CMN(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value],dir_flags); *dec=17088; *dec=*dec|instruction.op2_value<<3|instruction.op1_value; mvprintw(4,20,"%X",*dec); } if( strcmp(instruction.mnemonic,"CMP") == 0 || strcmp(instruction.mnemonic,"CMPS") == 0){ dir_reg[PC]++; CMP(dir_reg[instruction.op1_value],dir_reg[instruction.op2_value],dir_flags); *dec=17024; *dec=*dec|instruction.op2_value<<3|instruction.op1_value; mvprintw(4,20,"%X",*dec); } if( strcmp(instruction.mnemonic,"EOR") == 0 || strcmp(instruction.mnemonic,"EORS") == 0){ dir_reg[PC]++; *dec=16448; if(instruction.op3_type=='#') dir_reg[instruction.op1_value]=EOR(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags); else dir_reg[instruction.op1_value]=EOR(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); } if( strcmp(instruction.mnemonic,"LSLS") == 0 || strcmp(instruction.mnemonic,"LSL") == 0){ dir_reg[PC]++; if(instruction.op3_type=='#'){ *dec=0; dir_reg[instruction.op1_value]=LSL(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=16512; dir_reg[instruction.op1_value]=LSL(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op3_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"LSRS") == 0 || strcmp(instruction.mnemonic,"LSR") == 0){ dir_reg[PC]++; if(instruction.op3_type=='#'){ *dec=2048; dir_reg[instruction.op1_value]=LSR(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=16576; dir_reg[instruction.op1_value]=LSR(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op3_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"MOV") == 0 || strcmp(instruction.mnemonic,"MOVS") == 0){ dir_reg[PC]++; if(instruction.op2_type=='#'){ *dec=8192; dir_reg[instruction.op1_value]=MOV(instruction.op2_value,dir_flags); *dec=*dec|instruction.op1_value<<8|instruction.op2_value;} else{ *dec=0; dir_reg[instruction.op1_value]=MOV(dir_reg[instruction.op2_value],dir_flags); *dec=*dec|instruction.op2_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"MUL") == 0 || strcmp(instruction.mnemonic,"MULS") == 0){ dir_reg[PC]++; *dec=17216; if(instruction.op3_type=='#'){ dir_reg[instruction.op1_value]=MUL(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags);} else{ dir_reg[instruction.op1_value]=MUL(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op2_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"MVN") == 0 || strcmp(instruction.mnemonic,"MVNS") == 0){ dir_reg[PC]++; *dec=17344; dir_reg[instruction.op1_value]=MVN(dir_reg[instruction.op2_value], dir_flags); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"ORR") == 0 || strcmp(instruction.mnemonic,"ORRS") == 0){ dir_reg[PC]++; *dec=17152; if(instruction.op3_type=='#'){ dir_reg[instruction.op1_value]=ORR(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags);} else{ dir_reg[instruction.op1_value]=ORR(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op3_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"REV") == 0 || strcmp(instruction.mnemonic,"REVS") == 0){ dir_reg[PC]++; *dec=47616; dir_reg[instruction.op1_value]=REV(dir_reg[instruction.op2_value]); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"REVG") == 0 || strcmp(instruction.mnemonic,"REVGS") == 0){ dir_reg[PC]++; *dec=47680; dir_reg[instruction.op1_value]=REVG(dir_reg[instruction.op2_value]); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"REVSH") == 0 || strcmp(instruction.mnemonic,"REVSHS") == 0){ dir_reg[PC]++; *dec=47808; dir_reg[instruction.op1_value]=REVSH(dir_reg[instruction.op2_value]); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"ROR") == 0 || strcmp(instruction.mnemonic,"RORS") == 0){ dir_reg[PC]++; *dec=16832; if(instruction.op3_type=='#'){ dir_reg[instruction.op1_value]=ROR(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags);} else{ dir_reg[instruction.op1_value]=ROR(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op3_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"RSB") == 0 || strcmp(instruction.mnemonic,"RSBS") == 0){ dir_reg[PC]++; *dec=16690; dir_reg[instruction.op1_value]=RSB(dir_reg[instruction.op2_value], dir_flags); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"SBC") == 0 || strcmp(instruction.mnemonic,"SBCS") == 0){ dir_reg[PC]++; *dec=16768; SBC(dir_reg[instruction.op1_value],dir_reg[instruction.op2_value], dir_flags); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"SUBS") == 0 || strcmp(instruction.mnemonic,"SUB") == 0){ dir_reg[PC]++; if(instruction.op2_type=='S'){ *dec=45184; dir_reg[SP]=SUB(dir_reg[SP],instruction.op3_value,dir_flags); *dec=*dec|instruction.op3_value;} else if(instruction.op3_type=='#'){ *dec=7680; dir_reg[instruction.op1_value]=SUB(dir_reg[instruction.op2_value],instruction.op3_value,dir_flags); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=6656; dir_reg[instruction.op1_value]=SUB(dir_reg[instruction.op2_value],dir_reg[instruction.op3_value],dir_flags); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } if( strcmp(instruction.mnemonic,"TST") == 0 || strcmp(instruction.mnemonic,"TSTS") == 0){ dir_reg[PC]++; *dec=16896; TST(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value], dir_flags); *dec=*dec|instruction.op2_value<<3|instruction.op1_value; } if( strcmp(instruction.mnemonic,"NOP") == 0 ){ NOP(dir_reg); *dec=48896; } if( strcmp(instruction.mnemonic,"B") == 0 ){ *dec=57344; *dec=*dec|instruction.op1_value; B(instruction.op1_value, dir_reg); } if( strcmp(instruction.mnemonic,"BL") == 0 ){ *dec=0; BL(instruction.op1_value, dir_reg); } if( strcmp(instruction.mnemonic,"BX") == 0 ){ *dec=18176; BX(dir_reg); } if( strcmp(instruction.mnemonic,"BEQ") == 0 ){ *dec=0; BEQ(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BNE") == 0 ){ *dec=0; BNE(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BCS") == 0 ){ *dec=0; BCS(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BCC") == 0 ){ *dec=0; BCC(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BMI") == 0 ){ *dec=0; BMI(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BPL") == 0 ){ *dec=0; BPL(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BVS") == 0 ){ *dec=0; BVS(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BVC") == 0 ){ *dec=0; BVC(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BHI") == 0 ){ *dec=0; BHI(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BLS") == 0 ){ *dec=0; BLS(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BGE") == 0 ){ *dec=0; BGE(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BLT") == 0 ){ *dec=0; BLT(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BGT") == 0 ){ *dec=0; BGT(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BLE") == 0 ){ *dec=0; BLE(instruction.op1_value, dir_reg, dir_flags); } if( strcmp(instruction.mnemonic,"BAL") == 0 ){ *dec=0; BAL(instruction.op1_value, dir_reg); } if(strcmp(instruction.mnemonic,"PUSH")==0){ dir_reg[PC]++; *dec=46080; PUSH(SRAM, dir_reg,R_activos); } if(strcmp(instruction.mnemonic,"POP")==0){ dir_reg[PC]++; *dec=48128; POP(SRAM,dir_reg,R_activos); } data=(uint8_t)dir_reg[instruction.op1_value]; if(strcmp(instruction.mnemonic,"LDR")==0){ dir_reg[PC]++; if(instruction.op2_type=='=' && instruction.op3_type=='N'){ *dec=0; dir_reg[instruction.op1_value]=instruction.op2_value;} else if(instruction.op2_type=='S'){ *dec=38912; dir_reg[instruction.op1_value]=LDR(dir_reg[SP], instruction.op3_value<<2, SRAM); *dec=*dec|instruction.op3_value|instruction.op1_value<<8;} else if(instruction.op3_type=='#' || instruction.op3_type=='N'){ *dec=26624; if((dir_reg[instruction.op2_value]+(instruction.op3_value<<2))>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(instruction.op3_value<<2)), &data,Read); else dir_reg[instruction.op1_value]=LDR(dir_reg[instruction.op2_value], instruction.op3_value<<2, SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value|instruction.op1_value;} else{ *dec=22528; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value]), &data,Read); else dir_reg[instruction.op1_value]=LDR(dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } if(strcmp(instruction.mnemonic,"LDRB")==0){ dir_reg[PC]++; if(instruction.op3_type=='#' || instruction.op3_type=='N'){ *dec=30720; if((dir_reg[instruction.op2_value]+instruction.op3_value)>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+instruction.op3_value), &data,Read); else dir_reg[instruction.op1_value]=LDRB(dir_reg[instruction.op2_value], instruction.op3_value, SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=23552; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value]), &data,Read); else dir_reg[instruction.op1_value]=LDRB(dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } if(strcmp(instruction.mnemonic,"LDRH")==0){ dir_reg[PC]++; if(instruction.op3_type=='#' || instruction.op3_type=='N'){ *dec=34816; if((dir_reg[instruction.op2_value]+(instruction.op3_value<<1))>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(instruction.op3_value<<1)), &data,Read); else dir_reg[instruction.op1_value]=LDRH(dir_reg[instruction.op2_value], instruction.op3_value<<1, SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=23040; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value]), &data,Read); else dir_reg[instruction.op1_value]=LDRH(dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } if(strcmp(instruction.mnemonic,"LDRSB")==0){ dir_reg[PC]++; *dec=22016; *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value]), &data,Read); else dir_reg[instruction.op1_value]=LDRSB(dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM); } if(strcmp(instruction.mnemonic,"LDRSH")==0){ dir_reg[PC]++; *dec=24064; *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value]), &data,Read); else dir_reg[instruction.op1_value]=LDRSH(dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM); } if(strcmp(instruction.mnemonic,"STR")==0){ dir_reg[PC]++; if(instruction.op2_type=='S'){ *dec=38912; STR(dir_reg[instruction.op1_value],dir_reg[SP], instruction.op3_value<<2, SRAM); *dec=*dec|instruction.op3_value|instruction.op1_value<<8;} else if(instruction.op3_type=='#' || instruction.op3_type=='N'){ *dec=24576; if((dir_reg[instruction.op2_value]+(instruction.op3_value<<2))>=0x40000000){ IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(instruction.op3_value<<2)), &data,Write);} else{ STR(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value], instruction.op3_value<<2, SRAM);} *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value; mvprintw(1,3,"Hola");} else{ *dec=20480; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op2_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(dir_reg[instruction.op3_value])), &data,Write); else{ STR(dir_reg[instruction.op1_value], instruction.op2_value, instruction.op3_value, SRAM);} *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } if(strcmp(instruction.mnemonic,"STRB")==0){ dir_reg[PC]++; if(instruction.op3_type=='#' || instruction.op3_type=='N'){ *dec=28672; if(dir_reg[instruction.op2_value]+instruction.op3_value>=0x40000000){ IOAccess((uint8_t)(dir_reg[instruction.op2_value]+instruction.op3_value), &data,Write);} else{ STRB(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value], instruction.op3_value, SRAM);} *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=21504; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000){ IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(dir_reg[instruction.op3_value])), &data,Write);} else{ STRB(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM);} *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } if(strcmp(instruction.mnemonic,"STRH")==0){ dir_reg[PC]++; if(instruction.op3_type=='#' || instruction.op3_type=='N'){ *dec=32768; if(((dir_reg[instruction.op2_value])+(instruction.op3_value<<1))>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(instruction.op3_value<<1)),&data,Write); else STRH(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value], instruction.op3_value<<1, SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} else{ *dec=20992; if((dir_reg[instruction.op2_value]+dir_reg[instruction.op3_value])>=0x40000000) IOAccess((uint8_t)(dir_reg[instruction.op2_value]+(dir_reg[instruction.op3_value])), &data,Write); else STRH(dir_reg[instruction.op1_value], dir_reg[instruction.op2_value], dir_reg[instruction.op3_value], SRAM); *dec=*dec|instruction.op3_value<<6|instruction.op2_value<<3|instruction.op1_value;} } }
double mapping(TString SimData, TString ExpData, TString background = "nobackground"){ /////////////////////// OPEN INPUT AND OUTPUT FILES /////////////////////// // open the data file ifstream input_exp; TString fullpathtofile = Form("%s",ExpData.Data() ) ; if(gVerbose>0) cout<<"opening file : |"<<ExpData<< "| ... "; input_exp.open( ExpData.Data() ); if (!input_exp) { cout<<"problem opening experimental data file " << fullpathtofile << endl; exit(-1);} else if(gVerbose>0) cout<<"Experimental file is opened "<<endl; //open the field files from comsol ifstream input_sim; fullpathtofile = Form("%s",SimData.Data() ) ; if(gVerbose>0) cout<<"opening file : |"<<SimData<< "| ... "; input_sim.open(SimData.Data() ) ; if(!input_sim.is_open()) { if(gVerbose>0) cout<<"problem opening simulation data file |"<< fullpathtofile <<"|"<< endl; SimData.ReplaceAll("./input/",""); fullpathtofile = Form("/data1/moukaddam/MagnetSimulation/%s",SimData.Data()) ; if(gVerbose>0) cout<<"trying main directory, opening file : |"<<fullpathtofile<< "| ... "; input_sim.open(fullpathtofile.Data() ) ; // from local input if not go seek in data 1 if (!input_sim.is_open()) { cout<<"problem opening simulation data file |"<< fullpathtofile <<"|"<< endl<<endl; exit(-1);} } else if(gVerbose>0) cout<<" Simulation file " << fullpathtofile << " is opened " <<endl; // create root output file ExpData.ReplaceAll("./input/",""); ExpData.ReplaceAll(".dat",""); ExpData.ReplaceAll(".txt",""); SimData.ReplaceAll("./input/",""); SimData.ReplaceAll(".dat",""); SimData.ReplaceAll(".txt",""); TString filename = "./output/compare_" + ExpData + "_" + SimData + ".root"; TFile outputFile(filename,"RECREATE"); TDirectory *dirquad[4] ; dirquad[0] = outputFile.mkdir("Quad_1"); dirquad[1] = outputFile.mkdir("Quad_2"); dirquad[2] = outputFile.mkdir("Quad_3"); dirquad[3] = outputFile.mkdir("Quad_4"); //Read the simulation file from comsol // dump the first lines from the top string s_buffer="buffer"; Int_t d_buffer=-1; Int_t counter1=0; // counter on the first lines Int_t counter2=0; // counter on the first lines // read the first lines Int_t dimX, dimY, dimZ; input_sim>>dimX>>dimY>>dimZ; if(gVerbose>0) cout<<"\nSimulated Field Table dimensions X : "<<dimX<<" Y : "<<dimY<<" Z : "<<dimZ<<endl; dimX=dimX+10; dimY=dimY+10; dimZ=dimZ+10; TH3D *f3DHistBx = new TH3D("f3DHistBX", "Bx" , dimX,-dimX, dimX, dimY,-dimY, dimY, dimZ, -dimZ, dimZ); TH3D *f3DHistBy = new TH3D("f3DHistBY", "By" , dimX,-dimX, dimX, dimY,-dimY, dimY, dimZ, -dimZ, dimZ); TH3D *f3DHistBz = new TH3D("f3DHistBZ", "Bz" , dimX,-dimX, dimX, dimY,-dimY, dimY, dimZ, -dimZ, dimZ); TH3D *f3DHistBmag = new TH3D("f3DHistBMAG", "Bmag" , dimX,-dimX, dimX, dimY,-dimY, dimY, dimZ, -dimZ, dimZ); TH3D *f3DHistBtan = new TH3D("f3DHistBTAN", "Btan" , dimX,-dimX, dimX, dimY,-dimY, dimY, dimZ, -dimZ, dimZ); TH3D *f3DHistBdiff = new TH3D("f3DHistBDIFF", "Bdiff", dimX,-dimX, dimX, dimY,-dimY, dimY, dimZ, -dimZ, dimZ); d_buffer=-1; while (d_buffer != 0 && counter1< 15){ // find a solution for this with do while input_sim>>d_buffer>>s_buffer; counter2++; } getline(input_sim,s_buffer); if(gVerbose>0) cout<< " Number of skipped lines in comsol file : " <<counter2 << " last line content : "<<s_buffer<<endl; // read and fill SimulationPoint* SimPoint = new SimulationPoint(); Double_t X(0), Y(0), Z(0), EX(-100), EY(-100), EZ(-100), Perm(0); Double_t BX(0), BY(0), BZ(0); Int_t line=0; while ( !input_sim.eof() ) { //Clear parameters SimPoint->ClearParameters(); // Choose format if(counter2<9) input_sim >> X >> Y >> Z >> BX >> BY >> BZ >> Perm ; else input_sim >> X >> Y >> Z >> BX >> BY >> BZ >> EX >> EY >> EZ >> Perm ; SimPoint->ReadLineAndTreat(X,Y,Z,BX,BY,BZ,EX,EY,EZ,Perm ); //SimPoint->Show(); // fill in TH3D all the simulation data Int_t binNumber = f3DHistBx->FindBin(X,Y,Z); f3DHistBx->SetBinContent(binNumber,BX); f3DHistBy->SetBinContent(binNumber,BY); f3DHistBz->SetBinContent(binNumber,BZ); f3DHistBmag->SetBinContent(binNumber,SimPoint->fBFieldMag); f3DHistBtan->SetBinContent(binNumber,SimPoint->fBFieldTan); f3DHistBdiff->SetBinContent(binNumber,SimPoint->fBFieldDiff); //fBFieldMag-fBFieldTan //count the lines for inspection line++; if (line%5000 == 0) { if(gVerbose>0) printf("\r @line : %d ... Still reading ...",line); if(gVerbose>1) cout<< X<<" "<<Y <<" "<<Z <<" "<<BX <<" "<<BY<<" "<<BZ <<" "<< EX<<" "<< EY<<" "<< EZ<<" "<< Perm<<endl ; } }
static void ShowAlert(const char *title, const char *ignore, const char *restart, const char *quit, const char *fmt, va_list args) { char text[4096], buf1[64], buf2[64], buf3[64]; Window win, b1 = 0, b2 = 0, b3 = 0, root; Display *dd; int wid, hih, w, h, i, k, mask; XGCValues gcv; GC gc; unsigned int len; XEvent ev; XSetWindowAttributes att; XRectangle rect1, rect2; char colorful; unsigned long cols[5]; XColor xcl; Colormap cmap; int cnum, fh, x, y, ww, hh, bw, bh; char *str1, *str2, *str3, *p; KeyCode keycode; int button; char **missing_charset_list_return, *def_string_return; int missing_charset_count_return; XFontStruct **font_struct_list_return; char **font_name_list_return; #if 0 /* Don't play sound here (maybe if not forked/in signal handler - later) */ SoundPlay(SOUND_ALERT); #endif if (!fmt) return; Evsnprintf(text, sizeof(text), fmt, args); /* * We may get here from obscure places like an X-error or signal handler * and things seem to work properly only if we do a new XOpenDisplay(). */ dd = XOpenDisplay(NULL); if (!dd) { fprintf(stderr, "%s\n", text); fflush(stderr); return; } button = 0; if (!title) title = _("Enlightenment Error"); str1 = AlertButtonText(1, buf1, sizeof(buf1), ignore); str2 = AlertButtonText(2, buf2, sizeof(buf2), restart); str3 = AlertButtonText(3, buf3, sizeof(buf3), quit); cnum = 0; colorful = 0; cols[0] = cols[1] = cols[2] = cols[3] = cols[4] = 0; cmap = DefaultColormap(dd, DefaultScreen(dd)); if (DefaultDepth(dd, DefaultScreen(dd)) > 4) { ExSetColor(&xcl, 220, 220, 220); if (!XAllocColor(dd, cmap, &xcl)) goto CN; cols[cnum++] = xcl.pixel; ExSetColor(&xcl, 160, 160, 160); if (!XAllocColor(dd, cmap, &xcl)) goto CN; cols[cnum++] = xcl.pixel; ExSetColor(&xcl, 100, 100, 100); if (!XAllocColor(dd, cmap, &xcl)) goto CN; cols[cnum++] = xcl.pixel; ExSetColor(&xcl, 0, 0, 0); if (!XAllocColor(dd, cmap, &xcl)) goto CN; cols[cnum++] = xcl.pixel; ExSetColor(&xcl, 255, 255, 255); if (!XAllocColor(dd, cmap, &xcl)) goto CN; cols[cnum++] = xcl.pixel; colorful = 1; } CN: if (colorful) att.background_pixel = cols[1]; else att.background_pixel = BlackPixel(dd, DefaultScreen(dd)); if (colorful) att.border_pixel = cols[3]; else att.border_pixel = WhitePixel(dd, DefaultScreen(dd)); att.backing_store = Always; att.save_under = True; att.override_redirect = True; mask = CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWSaveUnder | CWBackingStore; #if USE_COMPOSITE_OVERLAY_WINDOW /* * Intended workings: * Composite extension not enabled (or COW not available?) * - fall back to root * Composite extension enabled * - use COW whether or not compositing is enabled, window mode too */ root = XCompositeGetOverlayWindow(dd, DefaultRootWindow(dd)); if (root == None) #endif { root = DefaultRootWindow(dd); } win = XCreateWindow(dd, root, -100, -100, 1, 1, 0, CopyFromParent, InputOutput, CopyFromParent, mask, &att); gc = XCreateGC(dd, win, 0, &gcv); if (colorful) XSetForeground(dd, gc, cols[3]); else XSetForeground(dd, gc, att.border_pixel); xfs = XCreateFontSet(dd, "fixed", &missing_charset_list_return, &missing_charset_count_return, &def_string_return); if (!xfs) goto done; if (missing_charset_list_return) XFreeStringList(missing_charset_list_return); k = XFontsOfFontSet(xfs, &font_struct_list_return, &font_name_list_return); fh = 0; for (i = 0; i < k; i++) { h = font_struct_list_return[i]->ascent + font_struct_list_return[i]->descent; if (fh < h) fh = h; } XSelectInput(dd, win, ExposureMask); XMapWindow(dd, win); XGrabServer(dd); XGrabPointer(dd, win, False, ButtonPressMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); XGrabKeyboard(dd, win, False, GrabModeAsync, GrabModeAsync, CurrentTime); XSetInputFocus(dd, win, RevertToPointerRoot, CurrentTime); XSync(dd, False); wid = DisplayWidth(dd, DefaultScreen(dd)); hih = DisplayHeight(dd, DefaultScreen(dd)); ww = (wid >= 600) ? 600 : (wid / 40) * 40; hh = (hih >= 440) ? 440 : (hih / 40) * 40; for (i = 40; i < ww; i += 40) { w = i; h = (i * hh) / ww; x = (wid - w) >> 1; y = (hih - h) >> 1; XMoveResizeWindow(dd, win, x, y, w, h); DRAW_BOX_OUT(dd, gc, win, 0, 0, w, h); XSync(dd, False); SleepUs(20000); } x = (wid - ww) >> 1; y = (hih - hh) >> 1; XMoveResizeWindow(dd, win, x, y, ww, hh); XSync(dd, False); bw = 0; if (str1) { ExTextExtents(xfs, str1, strlen(str1), &rect1, &rect2); bw = (rect2.width > bw) ? rect2.width : bw; } if (str2) { ExTextExtents(xfs, str2, strlen(str2), &rect1, &rect2); bw = (rect2.width > bw) ? rect2.width : bw; } if (str3) { ExTextExtents(xfs, str3, strlen(str3), &rect1, &rect2); bw = (rect2.width > bw) ? rect2.width : bw; } bw += 20; bh = fh + 10; #define BX(i) (5 + (((ww - bw - 10) * (i)) / 2)) #define BY (hh - bh - 5) if (str1) { b1 = XCreateWindow(dd, win, BX(0), BY, bw, bh, 0, CopyFromParent, InputOutput, CopyFromParent, mask, &att); XMapWindow(dd, b1); } if (str2) { b2 = XCreateWindow(dd, win, BX(1), BY, bw, bh, 0, CopyFromParent, InputOutput, CopyFromParent, mask, &att); XMapWindow(dd, b2); } if (str3) { b3 = XCreateWindow(dd, win, BX(2), BY, bw, bh, 0, CopyFromParent, InputOutput, CopyFromParent, mask, &att); XMapWindow(dd, b3); } XSync(dd, False); button = 0; for (; button == 0;) { XNextEvent(dd, &ev); switch (ev.type) { case KeyPress: keycode = XKeysymToKeycode(dd, XK_F1); if (keycode == ev.xkey.keycode) { DRAW_BOX_IN(dd, gc, b1, 0, 0, bw, bh); XSync(dd, False); SleepUs(500000); DRAW_BOX_OUT(dd, gc, b1, 0, 0, bw, bh); button = 1; goto do_sync; } keycode = XKeysymToKeycode(dd, XK_F2); if (keycode == ev.xkey.keycode) { DRAW_BOX_IN(dd, gc, b2, 0, 0, bw, bh); XSync(dd, False); SleepUs(500000); DRAW_BOX_OUT(dd, gc, b2, 0, 0, bw, bh); button = 2; goto do_sync; } keycode = XKeysymToKeycode(dd, XK_F3); if (keycode == ev.xkey.keycode) { DRAW_BOX_IN(dd, gc, b3, 0, 0, bw, bh); XSync(dd, False); SleepUs(500000); DRAW_BOX_OUT(dd, gc, b3, 0, 0, bw, bh); button = 3; goto do_sync; } break; case ButtonPress: if (!(ev.xbutton.y >= BY && ev.xbutton.y < BY + bh)) break; x = BX(0); if (b1 && ev.xbutton.x >= x && ev.xbutton.x < x + bw) { DRAW_BOX_IN(dd, gc, b1, 0, 0, bw, bh); goto do_sync; } x = BX(1); if (b2 && ev.xbutton.x >= x && ev.xbutton.x < x + bw) { DRAW_BOX_IN(dd, gc, b2, 0, 0, bw, bh); goto do_sync; } x = BX(2); if (b3 && ev.xbutton.x >= x && ev.xbutton.x < x + bw) { DRAW_BOX_IN(dd, gc, b3, 0, 0, bw, bh); goto do_sync; } break; case ButtonRelease: if (!(ev.xbutton.y >= BY && ev.xbutton.y < BY + bh)) break; x = BX(0); if (b1 && ev.xbutton.x >= x && ev.xbutton.x < x + bw) { DRAW_BOX_OUT(dd, gc, b1, 0, 0, bw, bh); button = 1; goto do_sync; } x = BX(1); if (b2 && ev.xbutton.x >= x && ev.xbutton.x < x + bw) { DRAW_BOX_OUT(dd, gc, b2, 0, 0, bw, bh); button = 2; goto do_sync; } x = BX(2); if (b3 && ev.xbutton.x >= x && ev.xbutton.x < x + bw) { DRAW_BOX_OUT(dd, gc, b3, 0, 0, bw, bh); button = 3; goto do_sync; } break; case Expose: /* Flush all other Expose events */ while (XCheckTypedWindowEvent(dd, ev.xexpose.window, Expose, &ev)) ; ExTextExtents(xfs, title, strlen(title), &rect1, &rect2); w = rect2.width; DRAW_HEADER(dd, gc, win, (ww - w) / 2, 5 - rect2.y, title); DRAW_BOX_OUT(dd, gc, win, 0, 0, ww, bh); DRAW_BOX_OUT(dd, gc, win, 0, bh - 1, ww, hh - fh - fh - 30 + 2); DRAW_BOX_OUT(dd, gc, win, 0, hh - fh - 20, ww, fh + 20); k = bh; for (p = text;; p += len + 1) { len = strcspn(p, "\n"); DRAW_STRING(dd, gc, win, 6, 6 + k + fh, p, len); k += fh + 2; if (p[len] == '\0') break; } if (str1) { ExTextExtents(xfs, str1, strlen(str1), &rect1, &rect2); w = rect2.width; DRAW_HEADER(dd, gc, b1, (bw - w) / 2, 5 - rect2.y, str1); DRAW_BOX_OUT(dd, gc, b1, 0, 0, bw, bh); DRAW_THIN_BOX_IN(dd, gc, win, BX(0) - 2, BY - 2, bw + 4, bh + 4); } if (str2) { ExTextExtents(xfs, str2, strlen(str2), &rect1, &rect2); w = rect2.width; DRAW_HEADER(dd, gc, b2, (bw - w) / 2, 5 - rect2.y, str2); DRAW_BOX_OUT(dd, gc, b2, 0, 0, bw, bh); DRAW_THIN_BOX_IN(dd, gc, win, BX(1) - 2, BY - 2, bw + 4, bh + 4); } if (str3) { ExTextExtents(xfs, str3, strlen(str3), &rect1, &rect2); w = rect2.width; DRAW_HEADER(dd, gc, b3, (bw - w) / 2, 5 - rect2.y, str3); DRAW_BOX_OUT(dd, gc, b3, 0, 0, bw, bh); DRAW_THIN_BOX_IN(dd, gc, win, BX(2) - 2, BY - 2, bw + 4, bh + 4); } do_sync: XSync(dd, False); break; default: break; } } XFreeFontSet(dd, xfs); done: XUngrabServer(dd); XDestroyWindow(dd, win); XFreeGC(dd, gc); if (cnum > 0) XFreeColors(dd, cmap, cols, cnum, 0); XCloseDisplay(dd); switch (button) { default: case 1: break; case 2: SessionExit(EEXIT_RESTART, NULL); break; case 3: SessionExit(EEXIT_EXIT, NULL); break; } }
int SWIFT_Initialize (void) { SWIFT_StaticData sdBuf; int fSwift = 0; if (fActive) // SWIFT extensions already active { #ifdef DEGUB SoftError( "SWIFT_Initialize: Already active.\n"); SoftError( "SWIFT_Initialize: returns TRUE\n"); #endif return (1); } nAttached = SWIFT_DEV_NONE; if (_dos_getvect(0x33) == NULL) // No mouse driver loaded { #ifdef DBUG SoftError( "SWIFT_Initialize: No mouse driver loaded.\n"); SoftError( "SWIFT_Initialize: returns FALSE\n"); #endif return (0); } // Reset the mouse and driver AX (regs) = 0; int386( 0x33, ®s, ®s); if (AX (regs) == 0) { // no mouse #ifdef DBUG SoftError( "SWIFT_Initialize: No pointing device attached.\n"); SoftError( "SWIFT_Initialize: returns FALSE\n"); #endif return (0); } #ifdef DBUG AX (regs) = 36; // Get Mouse Information BX (regs) = 0xffff; CX (regs) = 0xffff; DX (regs) = 0xffff; int386 (0x33, ®s, ®s); SoftError( "SWIFT_Initialize: driver version %d.%02d\n", regs.h.bh, regs.h.bl); SoftError( "SWIFT_Initialize: %s mouse using IRQ %d\n", (regs.h.ch==1) ? "bus" : (regs.h.ch==2) ? "serial" : (regs.h.ch==3) ? "inport" : (regs.h.ch==4) ? "PS/2" : "unknown", regs.h.cl); #endif // allocate a DOS real-mode buffer pdosmem = allocDOS(DOSMEMSIZE, &segment, &selector); if (!pdosmem) { #ifdef DBUG SoftError( "SWIFT_Initialize: DOS Alloc failed!\n"); SoftError( "SWIFT_Initialize: returns FALSE\n"); #endif return (0); } // // SWIFT device supported and attached // if (SWIFT_GetStaticDeviceInfo (&sdBuf)) fSwift = 1; if (!fSwift) { // SWIFT functions not present #ifdef DBUG SoftError( "SWIFT_Initialize: no SWIFT support in mouse driver.\n"); #endif } else if (sdBuf.deviceType == SWIFT_DEV_NONE) { #ifdef DBUG SoftError( "SWIFT_Initialize: no SWIFT device connected.\n"); #endif } else { nAttached = sdBuf.deviceType; #ifdef DBUG SoftError( "SWIFT_Initialize: "); switch (nAttached) { case SWIFT_DEV_CYBERMAN: SoftError( "CyberMan %d.%02d connected.\n", sdBuf.majorVersion, sdBuf.minorVersion); break; default: SoftError( "Unknown SWIFT device (type %d) connected.\n", nAttached); break; } #endif fActive = 1; } if (!fActive) { // activation of SWIFT module failed for some reason if (pdosmem) { // if DOS buffer was allocated, free it freeDOS(selector); pdosmem = 0; } } #ifdef DBUG SoftError( "SWIFT_Initialize: returns %s.\n", (fActive ? "TRUE" : "FALSE")); #endif return fActive; }
void test_basic_types() { bcon basic_types[] = {"string", BS("a string"), "f(double)", BF(3.14159), "boolean", BB(1), "time", BT(time(0)), "null", BNULL, "symbol", BX("a symbol"), "int", BI(123), "long", BL(456789L), BEND}; test_bson_from_bcon( basic_types, BCON_OK, BSON_VALID ); }