/* Number of users comparison. */ static int ucmp(const void *a1, const void *a2) { if (ISDOWN(HS(a1))) if (ISDOWN(HS(a2))) return (tcmp(a1, a2)); else return (rflg); else if (ISDOWN(HS(a2))) return (-rflg); else return (rflg * (HS(a2)->hs_nusers - HS(a1)->hs_nusers)); }
/* Load average comparison. */ static int lcmp(const void *a1, const void *a2) { if (ISDOWN(HS(a1))) if (ISDOWN(HS(a2))) return (tcmp(a1, a2)); else return (rflg); else if (ISDOWN(HS(a2))) return (-rflg); else return (rflg * (HS(a2)->hs_wd.wd_loadav[0] - HS(a1)->hs_wd.wd_loadav[0])); }
/* Uptime comparison. */ static int tcmp(const void *a1, const void *a2) { return (rflg * ( (ISDOWN(HS(a2)) ? HS(a2)->hs_wd.wd_recvtime - now : HS(a2)->hs_wd.wd_sendtime - HS(a2)->hs_wd.wd_boottime) - (ISDOWN(HS(a1)) ? HS(a1)->hs_wd.wd_recvtime - now : HS(a1)->hs_wd.wd_sendtime - HS(a1)->hs_wd.wd_boottime) )); }
/** Execute the algorithm. */ void CalculateUMatrix::exec() { double a=this->getProperty("a"); double b=this->getProperty("b"); double c=this->getProperty("c"); double alpha=this->getProperty("alpha"); double beta=this->getProperty("beta"); double gamma=this->getProperty("gamma"); OrientedLattice o(a,b,c,alpha,beta,gamma); Matrix<double> B=o.getB(); double H,K,L; PeaksWorkspace_sptr ws; ws = boost::dynamic_pointer_cast<PeaksWorkspace>(AnalysisDataService::Instance().retrieve(this->getProperty("PeaksWorkspace")) ); if (!ws) throw std::runtime_error("Problems reading the peaks workspace"); Matrix<double> Hi(4,4),Si(4,4),HS(4,4),zero(4,4); for (int i=0;i<ws->getNumberPeaks();i++) { Peak p=ws->getPeaks()[i]; H=p.getH(); K=p.getK(); L=p.getL(); if(H*H+K*K+L*L>0) { V3D Qhkl=B*V3D(H,K,L); Hi[0][0]=0.; Hi[0][1]=-Qhkl.X(); Hi[0][2]=-Qhkl.Y(); Hi[0][3]=-Qhkl.Z(); Hi[1][0]=Qhkl.X(); Hi[1][1]=0.; Hi[1][2]=Qhkl.Z(); Hi[1][3]=-Qhkl.Y(); Hi[2][0]=Qhkl.Y(); Hi[2][1]=-Qhkl.Z(); Hi[2][2]=0.; Hi[2][3]=Qhkl.X(); Hi[3][0]=Qhkl.Z(); Hi[3][1]=Qhkl.Y(); Hi[3][2]=-Qhkl.X(); Hi[3][3]=0.; V3D Qgon=p.getQSampleFrame(); Si[0][0]=0.; Si[0][1]=-Qgon.X(); Si[0][2]=-Qgon.Y(); Si[0][3]=-Qgon.Z(); Si[1][0]=Qgon.X(); Si[1][1]=0.; Si[1][2]=-Qgon.Z(); Si[1][3]=Qgon.Y(); Si[2][0]=Qgon.Y(); Si[2][1]=Qgon.Z(); Si[2][2]=0.; Si[2][3]=-Qgon.X(); Si[3][0]=Qgon.Z(); Si[3][1]=-Qgon.Y(); Si[3][2]=Qgon.X(); Si[3][3]=0.; HS+=(Hi*Si); } } //check if HS is 0 if (HS==zero) throw std::invalid_argument("The peaks workspace is not indexed or something really bad happened"); Matrix<double> Eval; Matrix<double> Diag; HS.Diagonalise(Eval,Diag); Eval.sortEigen(Diag); Mantid::Kernel::Quat qR(Eval[0][0],Eval[1][0],Eval[2][0],Eval[3][0]);//the first column corresponds to the highest eigenvalue DblMatrix U(qR.getRotation()); o.setU(U); ws->mutableSample().setOrientedLattice(new OrientedLattice(o)); }
/************************************************************************* module :[ミラーを待機位置へ移動] function :[ 1. スキャナモーターをFBS側に切替える 2. ミラーをホームセンサ上へ指定スピードで移動する 3. モーターの起動を行う 4. モーターの停止等の制御は割込みで行う 5. 割込みからの移動の終了/エラーをイベントで待つ ] return :[ MIRROR_MOVE_OK 0 正常終了 MIRROR_MOVE_ERROR 1 エラーで終了 ] common :[] condition :[] comment :[ 引数 加速指定(加速する:TRUE/一定速:FALSE) ] machine :[SH7043] language :[MS-C(Ver.6.0)] keyword :[SCN] date :[1996/06/25] author :[竹内茂樹] *************************************************************************/ UBYTE MirrorMoveToReady( UBYTE is_speed_up) /* モーター加速指定 */ { /** 状態を初期化 */ SCN_MirrorMoveStatus = MIRROR_MOVE_OK; SCN_WatchEndSensorStatus = WATCH_ES_DISABLE; /** ミラーが既に待機位置(移動先)にあるなら、何もしない */ if (SCN_MirrorCarriageStatus == MIRROR_READY) { return (SCN_MirrorMoveStatus); } /** スキャナモーターをFBS側に切替える */ SCN_SetMotorDrive( SCN_FBS ); /** ホームセンサ上にミラーキャリッジがなければ、ホームセンサへ移動する */ if (!HS()) { SCN_MirrorCarriageStatus = MIRROR_MOVE_TO_HS; SCN_MirrorMotorPulseCount = 0; /* ミラー用のパルスカウンタを0クリア */ SCN_IsMirrorMoveEnd = FALSE; SCN_SetHS_ON_Int( SCN_ENABLE ); /* ホームセンサON割り込み許可 */ SCN_SetHS_OFF_Int( SCN_DISABLE ); /* ホームセンサOFF割り込み禁止 */ SCN_SetMotorClockwise( SCN_ENABLE ); /* モーター正転 */ SCN_StartMirror( is_speed_up ); /* 加速/一定速 でミラー起動 */ /** ミラー移動の終了を待つ */ CMN_DisableInterrupt(); if (!SCN_IsMirrorMoveEnd) { wai_evt( EVT_MIRROR_MOVE_END ); } CMN_EnableInterrupt(); /** スキャナモータの回転方向を変えるために待つ */ wai_tsk( SCN_MotorChangeInterval ); if (SCN_MirrorReadyPosition == READY_POSITION_ADF) { return(MirrorMoveToADF()); } else { return(SCN_MirrorMoveStatus); } } else { SCN_MirrorCarriageStatus = MIRROR_HS_ON; if (SCN_MirrorReadyPosition == READY_POSITION_ADF) { return(MirrorMoveToADF()); } else { return(SCN_MirrorMoveStatus); } } }
/************************************************************************* module :[ミラーをFBS待機位置へ移動] function :[ 1. スキャナモーターをFBS側に切替える 2. FBS読取り待機位置(HS上)にミラーを高速で移動する 3. モーターの起動を行う 4. モーターの停止等の制御は割込みで行う 5. 割込みからの移動の終了/エラーをイベントで待つ ] return :[ MIRROR_MOVE_OK 0 正常終了 MIRROR_MOVE_ERROR 1 エラーで終了 ] common :[] condition :[] comment :[ FBS読取り用のランプチェックを移動中に行うために ここでランプを点灯しピーク値検出回路を動作させる 所定位置に来た時のモーター割り込み内でDIPPの 光源異常レジスタを読み込む ] machine :[SH7043] language :[MS-C(Ver.6.0)] keyword :[SCN] date :[1996/06/25] author :[竹内茂樹] *************************************************************************/ UBYTE MirrorMoveToFBS( void ) { /** 状態を初期化 */ SCN_MirrorMoveStatus = MIRROR_MOVE_OK; SCN_WatchEndSensorStatus = WATCH_ES_ON; /* ミラーが既にFBS読み取り待機位置(移動先)にあるなら、何もしない */ /* 静電気などで途中で止まった時のためにホームセンサを直接見る 1997/08/21 s.takeuchi */ if ((SCN_MirrorCarriageStatus == MIRROR_HS_ON) && HS()) { /* 1997/08/21 s.takeuchi */ SYS_IsMirrorScanReady = TRUE; return (SCN_MirrorMoveStatus); } SYS_IsMirrorScanReady = FALSE; /** スキャナモーターをFBS側に切替える */ SCN_SetMotorDrive( SCN_FBS ); SCN_MirrorCarriageStatus = MIRROR_MOVE_TO_HS; SCN_MirrorMotorPulseCount = 0; /* ミラー用のパルスカウンタを0クリア */ SCN_IsMirrorMoveEnd = FALSE; SCN_SetHS_ON_Int( SCN_ENABLE ); /* ホームセンサON割り込み許可 */ SCN_SetHS_OFF_Int( SCN_DISABLE ); /* ホームセンサOFF割り込み禁止 */ SCN_SetMotorClockwise( SCN_ENABLE ); /* モーター正転 */ /* 大分のFBS ASSY検査でHS側でミラーがぶつかるため低速に変更 ** T.Nose 1998/02/20 */ SCN_StartMirror( FALSE ); /** ミラー移動の終了を待つ */ CMN_DisableInterrupt(); if (!SCN_IsMirrorMoveEnd) { wai_evt( EVT_MIRROR_MOVE_END ); } CMN_EnableInterrupt(); /** スキャナモータの回転方向を変えるために待つ */ wai_tsk( SCN_MotorChangeInterval ); return (SCN_MirrorMoveStatus); }
libmaus2::util::Histogram::unique_ptr_type getRunLengthHistogram(uint64_t const numthreads) const { uint64_t const nb = getNumBlocks(); libmaus2::util::HistogramSet HS(numthreads,256); #if defined(_OPENMP) #pragma omp parallel for num_threads(numthreads) #endif for ( int64_t b = 0; b < static_cast<int64_t>(nb); ++b ) #if defined(_OPENMP) getBlockRunLengthHistogram(b,HS[omp_get_thread_num()]); #else getBlockRunLengthHistogram(b,HS[0]); #endif libmaus2::util::Histogram::unique_ptr_type tptr(HS.merge()); return UNIQUE_PTR_MOVE(tptr); }
/** @brief RegisterElement * * @todo: document this function */ bool HashManager::RegisterElement(const std::string& Name) { if (!ElementExists(Name)) { std::shared_ptr<HashedString> HS(new HashedString(Name.c_str())); if (HS->getHashValue() == 0) { Engine::out(Engine::ERROR) << "HashManager: Element '" << Name << "' gives 0 (zero) as Hash, which is reserved!" << std::endl; return false; } ElementsByString[Name] = HS; ElementsByHash[HS->getHashValue()] = HS; return true; } else { Engine::out(Engine::ERROR) << "HashManager: Element '" << Name << "' already exists" << std::endl; return false; } }
/*main関数。*/ int main(void){ int N; /*乱数のシードを設定。*/ srand((unsigned int)time(NULL)); #if 1 /*Nを増やして計測時間を調べる。*/ for(N = 10000; N <= 1000000; N *= 10){ measure(N); } #else /*デバッグ*/ N = 30; int *array = (int*)malloc(sizeof(int) * N); initRandom(array, N); HS(array, N); graph(array, N); #endif return 0; }
int search(unsigned char *x, int m, unsigned char *y, int n) { unsigned int B[DSIGMA]; int i, j, k, count; unsigned int s,d; if(m<Q) return -1; BEGIN_PREPROCESSING unsigned int occ[DSIGMA] = {0}; int st = 0, len = 0; unsigned short c, dch; for(i=0, j=0; i<m-Q+1; i++) { c = HS(x,i); if(occ[c]) { dch = HS(x,j); while(dch!=c) { occ[dch]=0; j++; dch = HS(x,j); } occ[dch]=0; j++; } occ[c]=1; if(len < i-j+1 ) { len = i-j+1; st = j; } } unsigned int pos[DSIGMA]; for(i=0; i<DSIGMA; i++) pos[i]=-1; for(i=0; i<len; i++) { c = HS(x,st+i); pos[c]=i; } END_PREPROCESSING BEGIN_SEARCHING count = 0; for(i=0; i<m; i++) y[n+i]=x[i]; unsigned char *xst = x+st; int offset = len+st-1; j = len-1; while(j<n) { c = HS(y,j); while ((i=pos[c])<0) { j+=len; c = HS(y,j); } k=1; while(k<=i && xst[i-k]==y[j-k]) k++; if(k>i) { if(k==len) { if(!memcmp(x,y+j-offset,m)) if(j-offset<=n-m) count++; } else j-=k; } j+=len; } END_SEARCHING return count; }
/** Execute the algorithm. */ void CalculateUMatrix::exec() { double a=this->getProperty("a"); double b=this->getProperty("b"); double c=this->getProperty("c"); double alpha=this->getProperty("alpha"); double beta=this->getProperty("beta"); double gamma=this->getProperty("gamma"); OrientedLattice o(a,b,c,alpha,beta,gamma); Matrix<double> B=o.getB(); double H,K,L; PeaksWorkspace_sptr ws; ws = AnalysisDataService::Instance().retrieveWS<PeaksWorkspace>(this->getProperty("PeaksWorkspace") ); if (!ws) throw std::runtime_error("Problems reading the peaks workspace"); size_t nIndexedpeaks=0; bool found2nc=false; V3D old(0,0,0); Matrix<double> Hi(4,4),Si(4,4),HS(4,4),zero(4,4); for (int i=0;i<ws->getNumberPeaks();i++) { Peak p=ws->getPeaks()[i]; H=p.getH(); K=p.getK(); L=p.getL(); if(H*H+K*K+L*L>0) { nIndexedpeaks++; if (!found2nc) { if (nIndexedpeaks==1) { old=V3D(H,K,L); } else { if (!old.coLinear(V3D(0,0,0),V3D(H,K,L))) found2nc=true; } } V3D Qhkl=B*V3D(H,K,L); Hi[0][0]=0.; Hi[0][1]=-Qhkl.X(); Hi[0][2]=-Qhkl.Y(); Hi[0][3]=-Qhkl.Z(); Hi[1][0]=Qhkl.X(); Hi[1][1]=0.; Hi[1][2]=Qhkl.Z(); Hi[1][3]=-Qhkl.Y(); Hi[2][0]=Qhkl.Y(); Hi[2][1]=-Qhkl.Z(); Hi[2][2]=0.; Hi[2][3]=Qhkl.X(); Hi[3][0]=Qhkl.Z(); Hi[3][1]=Qhkl.Y(); Hi[3][2]=-Qhkl.X(); Hi[3][3]=0.; V3D Qgon=p.getQSampleFrame(); Si[0][0]=0.; Si[0][1]=-Qgon.X(); Si[0][2]=-Qgon.Y(); Si[0][3]=-Qgon.Z(); Si[1][0]=Qgon.X(); Si[1][1]=0.; Si[1][2]=-Qgon.Z(); Si[1][3]=Qgon.Y(); Si[2][0]=Qgon.Y(); Si[2][1]=Qgon.Z(); Si[2][2]=0.; Si[2][3]=-Qgon.X(); Si[3][0]=Qgon.Z(); Si[3][1]=-Qgon.Y(); Si[3][2]=Qgon.X(); Si[3][3]=0.; HS+=(Hi*Si); } } //check if enough peaks are indexed or if HS is 0 if ((nIndexedpeaks<2) || (found2nc==false)) throw std::invalid_argument("Less then two non-colinear peaks indexed"); if (HS==zero) throw std::invalid_argument("Something really bad happened"); Matrix<double> Eval; Matrix<double> Diag; HS.Diagonalise(Eval,Diag); Eval.sortEigen(Diag); Mantid::Kernel::Quat qR(Eval[0][0],Eval[1][0],Eval[2][0],Eval[3][0]);//the first column corresponds to the highest eigenvalue DblMatrix U(qR.getRotation()); o.setU(U); ws->mutableSample().setOrientedLattice(new OrientedLattice(o)); }
/************************************************************************* module :[ミラーを輸送用の固定位置へ移動] function :[ 1. スキャナモーターをFBS側に切替える 2. ミラーを輸送用の固定位置に高速で移動する 3. モーターの起動を行う 4. モーターの停止等の制御は割込みで行う 5. 割込みからの移動の終了/エラーをイベントで待つ ] return :[ MIRROR_MOVE_OK 0 正常終了 MIRROR_MOVE_ERROR 1 エラーで終了 ] common :[] condition :[] comment :[] machine :[SH7043] language :[MS-C(Ver.6.0)] keyword :[SCN] date :[1996/12/10] author :[竹内茂樹] *************************************************************************/ UBYTE MirrorMoveFromHS( UWORD step ) { /** 状態を初期化 */ SCN_MirrorMoveStatus = MIRROR_MOVE_OK; SCN_WatchEndSensorStatus = WATCH_ES_DISABLE; SYS_IsMirrorScanReady = FALSE; /** スキャナモーターをFBS側に切替える (ミラーを動かすため) */ SCN_SetMotorDrive( SCN_FBS ); if (!HS()) { SCN_MirrorCarriageStatus = MIRROR_MOVE_TO_HS; /* ミラーキャリッジを「HS上へ移動中」にする */ SCN_MirrorMotorPulseCount = 0; /* ミラー用のパルスカウンタを0クリア */ SCN_IsMirrorMoveEnd = FALSE; SCN_SetHS_ON_Int( SCN_ENABLE ); /* ホームセンサON割り込み許可 */ SCN_SetHS_OFF_Int( SCN_DISABLE ); /* ホームセンサOFF割り込み禁止 */ SCN_SetMotorClockwise( SCN_ENABLE ); /* モーター正転 */ /* 大分のFBS ASSY検査でHS側でミラーがぶつかるため低速に変更 ** T.Nose 1998/02/20 */ SCN_StartMirror( FALSE ); /* 高速でミラー起動 */ /** ミラー移動の終了を待つ */ CMN_DisableInterrupt(); if (!SCN_IsMirrorMoveEnd) { wai_evt( EVT_MIRROR_MOVE_END ); } CMN_EnableInterrupt(); /** スキャナモータの回転方向を変えるために待つ */ wai_tsk( SCN_MotorChangeInterval ); } else { SCN_MirrorCarriageStatus = MIRROR_HS_ON; } /** ホームセンサから待機位置へ移動する */ if (SCN_MirrorMoveStatus == MIRROR_MOVE_OK) { /** ミラーキャリッジを「ホームセンサからN step移動中」にする */ SCN_MirrorCarriageStatus = MIRROR_MOVE_TO_N_STEP; SCN_StepFromHS_Off = step; /** ホームセンサOFFから停止位置のステップをセット */ SCN_N_StepRemain = step; /* 輸送モード停止位置がずれるため 1997/06/05 */ SCN_MirrorMotorPulseCount = 0; /* ミラー用のパルスカウンタを0クリア */ SCN_IsMirrorMoveEnd = FALSE; SCN_SetHS_ON_Int( SCN_DISABLE ); /* ホームセンサON割り込み禁止 */ SCN_SetHS_OFF_Int( SCN_ENABLE ); /* ホームセンサOFF割り込み許可 */ SCN_SetMotorClockwise( SCN_DISABLE ); /* モーター逆転 */ SCN_StartMirror( FALSE ); /* 一定速でミラー起動 */ /** ミラー移動の終了を待つ */ CMN_DisableInterrupt(); if (!SCN_IsMirrorMoveEnd) { wai_evt( EVT_MIRROR_MOVE_END ); } CMN_EnableInterrupt(); /** スキャナモータの回転方向を変えるために待つ */ wai_tsk( SCN_MotorChangeInterval ); } return (SCN_MirrorMoveStatus); }
/************************************************************************* module :[ミラー移動タスク] function :[ 1. ミラーキャリッジを指定された位置へ移動する 2. 結果をMAN_Taskにsnd_msgする *. エラーの場合のSubMessage1はエラーコード ] return :[] common :[] condition :[ ミラーの動作はSCN_MirrorTaskControlで指定する 待機位置へ/ADF読取り位置へ/FBS待機位置へ (scn_def.h参照) ] comment :[ メインタスクから生成/削除する SubMessage1 (エラーの場合のみセット) MIRROR_MOVE_ERROR 1 エラーで終了 MIRROR_MOVE_LAMP_ERROR 2 ランプ異常で終了 ] machine :[SH7043] language :[MS-C(Ver.6.0)] keyword :[SCN] date :[1996/06/25] author :[竹内茂樹] *************************************************************************/ void SCN_MirrorMoveTask( void ) { MESSAGE_t tx_message = {0}; /* 送信用メッセージ */ MESSAGE_t *rx_message; /* 受信用メッセージのポインタ */ UBYTE result; /* 関数の結果記憶用 */ /** 指定された動作をする */ switch (SCN_MirrorTaskControl) { case MIRROR_TASK_INITIALIZE: /* 電源On時の初期化 */ SCN_DocumentStatus = SCN_DOC_NO_DOCUMENT; SCN_Init(); result = MirrorMoveToReady( FALSE ); /* 加速なし(低速)で待機位置へ */ break; case MIRROR_TASK_TO_READY: /* 読み取り後の初期化 */ case MIRROR_TASK_TO_FBS_READY: /* FBS読取り待機位置への初期化 1997/08/11 T.Nose */ SCN_DocumentStatus = SCN_DOC_NO_DOCUMENT; SCN_Init(); LampOff(); result = MirrorMoveToReady( TRUE ); /* 加速あり(高速)で待機位置へ */ break; case MIRROR_TASK_TO_ADF: /* ADF読取り位置へ */ result = MirrorMoveToADF(); break; case MIRROR_TASK_TO_FBS: /* FBS待機位置(HS上)へ */ /* ** D71サブASSY検査用(FBS) */ if (HS()) { SCN_MirrorCarriageStatus = MIRROR_HS_ON; } else { SCN_MirrorCarriageStatus = MIRROR_READY; } result = MirrorMoveToFBS(); break; case MIRROR_TASK_FCOT_READY: /* FCOTコピー用待機位置(HS上)へ */ result = MirrorMoveToFBS(); break; case MIRROR_TASK_TRANSPORT: /* 輸送用の固定位置へ */ result = MirrorMoveFromHS(1956); /* HS 〜 127mm */ break; case MIRROR_TASK_CCD_ADJUST: /* CCD調整位置へ */ /* ** D71サブASSY検査用(FBS) */ SCN_DocumentStatus = SCN_DOC_NO_DOCUMENT; SCN_Init(); #if (PRO_ENERGY_SAVE == ENABLE) /* 2001/11/30 T.Takagi */ PC_24V_On(); #endif LampOn(); result = MirrorMoveToADF(); /* result = MirrorMoveFromHS(3457); @* HS 〜 217 + 7.5mm 1998/02/20 大藪さん */ result = MirrorMoveFromHS(3520); LampOff(); wai_tsk( 0xFFFF ); /* 動作終了 */ break; case MIRROR_TASK_FBS_END_TO_ADF: /* FBS読取り終了位置からADF読み取り位置へ */ LampOff(); result = MirrorMoveFBSEndToADF(); break; case MIRROR_TASK_TO_ADF_READY: /* ADF読取り待機位置への初期化 */ SCN_DocumentStatus = SCN_DOC_DS1_ON; SCN_Init(); result = MirrorMoveToADF(); break; } /* 動作結果をメインタスクに通知して、削除待ち ** エラーの場合はSubMassage1に結果を入れる */ tx_message.Item = FROM_SCN_MIRROR_MOVE_TASK; if (result == MIRROR_MOVE_OK) { tx_message.Message = MSG_MIRROR_MOVE_OK; } else { tx_message.Message = MSG_MIRROR_MOVE_ERROR; tx_message.SubMessage1 = result; } snd_msg( mbxno.MAN_Task, &tx_message ); rcv_msg( mbxno.SCN_MirrorMoveTask, &rx_message ); wai_tsk( 0xFFFF ); }
/* Alphabetical comparison. */ static int hscmp(const void *a1, const void *a2) { return (rflg * strcmp(HS(a1)->hs_wd.wd_hostname, HS(a2)->hs_wd.wd_hostname)); }
* This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ***********************************************************************/ #include <cstring> #include "VOCRipper.h" const char *VOCRipper::s_name = "Creative VOC Ripper v1.0"; const HeaderStruct VOCRipper::s_headers[] = { HS("Creative Voice File\x1a", 20) HS_END }; #pragma pack(push, 1) struct VOCHeader { char ID[20]; // the ID unsigned short dataOffset; unsigned short ver; unsigned short ver2; }; #pragma pack(pop)
#define LPC_USBx LPC_USB0 #define ENDPTCTRL(EPNum) *(volatile uint32_t *)((uint32_t)(&LPC_USBx->ENDPTCTRL0) + 4 * EPNum) #define EP_OUT_IDX(EPNum) (EPNum * 2 ) #define EP_IN_IDX(EPNum) (EPNum * 2 + 1) #define HS(en) (USBD_HS_ENABLE * en) /* reserve RAM for endpoint buffers */ #if USBD_VENDOR_ENABLE /* custom class: user defined buffer size */ #define EP_BUF_POOL_SIZE 0x1000 uint8_t __align(4096) EPBufPool[EP_BUF_POOL_SIZE] #else /* supported classes are used */ uint8_t __align(4096) EPBufPool[ USBD_MAX_PACKET0 * 2 + USBD_HID_ENABLE * (HS(USBD_HID_HS_ENABLE) ? USBD_HID_HS_WMAXPACKETSIZE : USBD_HID_WMAXPACKETSIZE) * 2 + USBD_MSC_ENABLE * (HS(USBD_MSC_HS_ENABLE) ? USBD_MSC_HS_WMAXPACKETSIZE : USBD_MSC_WMAXPACKETSIZE) * 2 + USBD_ADC_ENABLE * (HS(USBD_ADC_HS_ENABLE) ? USBD_ADC_HS_WMAXPACKETSIZE : USBD_ADC_WMAXPACKETSIZE) + USBD_CDC_ACM_ENABLE * ((HS(USBD_CDC_ACM_HS_ENABLE) ? USBD_CDC_ACM_HS_WMAXPACKETSIZE : USBD_CDC_ACM_WMAXPACKETSIZE) + (HS(USBD_CDC_ACM_HS_ENABLE) ? USBD_CDC_ACM_HS_WMAXPACKETSIZE1 : USBD_CDC_ACM_WMAXPACKETSIZE1) * 2)]; #endif void USBD_PrimeEp(uint32_t EPNum, uint32_t cnt); /* * Usb interrupt enable/disable * Parameters: ena: enable/disable * 0: disable interrupt * 1: enable interrupt */
* GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ***********************************************************************/ #include "GlobalDefs.h" #include "PNGRipper.h" #include <cctype> #include <cstring> const char *PNGRipper::s_name = "PNG Ripper v1.0"; const HeaderStruct PNGRipper::s_headers[] = { HS("\x89PNG\x0d\x0a\x1a\x0a", 8) HS_END }; #pragma pack(push, 1) struct ChunkHeader { uint32 size; unsigned char id[4]; uint32 crc; }; #pragma pack(pop) static bool validChunkName(unsigned char *n) { return isalpha(n[0]) && isalpha(n[1]) && isalpha(n[2]) && isalpha(n[3]);
* but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ***********************************************************************/ #include <cstring> #include "BMPRipper.h" const char *BMPRipper::s_name = "BMP Ripper v1.0"; const HeaderStruct BMPRipper::s_headers[] = { HS("BM", 2) HS_END }; bool BMPRipper::checkLocation(unsigned char *pos, const HeaderStruct * /*header*/, FoundStruct *found) { BMPHeader *hdr = (BMPHeader *)pos; // the bfType has already been checked so we need only check the other fields found->criterium = CRIT_NONE; // check if the file goes beyond the end of our file if (pos + hdr->bfSize > m_start + m_length) return false;
static PetscErrorCode KSPAGMRESBuildSoln(KSP ksp,PetscInt it) { KSP_AGMRES *agmres = (KSP_AGMRES*)ksp->data; PetscErrorCode ierr; PetscInt max_k = agmres->max_k; /* Size of the non-augmented Krylov basis */ PetscInt i, j; PetscInt r = agmres->r; /* current number of augmented eigenvectors */ PetscBLASInt KspSize; PetscBLASInt lC; PetscBLASInt N; PetscBLASInt ldH = N + 1; PetscBLASInt lwork; PetscBLASInt info, nrhs = 1; PetscFunctionBegin; ierr = PetscBLASIntCast(KSPSIZE,&KspSize);CHKERRQ(ierr); ierr = PetscBLASIntCast(4 * (KspSize+1),&lwork);CHKERRQ(ierr); ierr = PetscBLASIntCast(KspSize+1,&lC);CHKERRQ(ierr); ierr = PetscBLASIntCast(MAXKSPSIZE + 1,&N);CHKERRQ(ierr); ierr = PetscBLASIntCast(N + 1,&ldH);CHKERRQ(ierr); /* Save a copy of the Hessenberg matrix */ for (j = 0; j < N-1; j++) { for (i = 0; i < N; i++) { *HS(i,j) = *H(i,j); } } /* QR factorize the Hessenberg matrix */ #if defined(PETSC_MISSING_LAPACK_GEQRF) SETERRQ(PetscObjectComm((PetscObject)ksp),PETSC_ERR_SUP,"GEQRF - Lapack routine is unavailable."); #else PetscStackCallBLAS("LAPACKgeqrf",LAPACKgeqrf_(&lC, &KspSize, agmres->hh_origin, &ldH, agmres->tau, agmres->work, &lwork, &info)); if (info) SETERRQ1(PetscObjectComm((PetscObject)ksp), PETSC_ERR_LIB,"Error in LAPACK routine XGEQRF INFO=%d", info); #endif /* Update the right hand side of the least square problem */ ierr = PetscMemzero(agmres->nrs, N*sizeof(PetscScalar));CHKERRQ(ierr); agmres->nrs[0] = ksp->rnorm; #if defined(PETSC_MISSING_LAPACK_ORMQR) SETERRQ(PetscObjectComm((PetscObject)ksp),PETSC_ERR_SUP,"GEQRF - Lapack routine is unavailable."); #else PetscStackCallBLAS("LAPACKormqr",LAPACKormqr_("L", "T", &lC, &nrhs, &KspSize, agmres->hh_origin, &ldH, agmres->tau, agmres->nrs, &N, agmres->work, &lwork, &info)); if (info) SETERRQ1(PetscObjectComm((PetscObject)ksp), PETSC_ERR_LIB,"Error in LAPACK routine XORMQR INFO=%d",info); #endif ksp->rnorm = PetscAbsScalar(agmres->nrs[KspSize]); /* solve the least-square problem */ #if defined(PETSC_MISSING_LAPACK_TRTRS) SETERRQ(PetscObjectComm((PetscObject)ksp),PETSC_ERR_SUP,"TRTRS - Lapack routine is unavailable."); #else PetscStackCallBLAS("LAPACKtrtrs",LAPACKtrtrs_("U", "N", "N", &KspSize, &nrhs, agmres->hh_origin, &ldH, agmres->nrs, &N, &info)); if (info) SETERRQ1(PetscObjectComm((PetscObject)ksp), PETSC_ERR_LIB,"Error in LAPACK routine XTRTRS INFO=%d",info); #endif /* Accumulate the correction to the solution of the preconditioned problem in VEC_TMP */ ierr = VecZeroEntries(VEC_TMP);CHKERRQ(ierr); ierr = VecMAXPY(VEC_TMP, max_k, agmres->nrs, &VEC_V(0));CHKERRQ(ierr); if (!agmres->DeflPrecond) { ierr = VecMAXPY(VEC_TMP, r, &agmres->nrs[max_k], agmres->U);CHKERRQ(ierr); } if ((ksp->pc_side == PC_RIGHT) && agmres->r && agmres->DeflPrecond) { ierr = KSPDGMRESApplyDeflation_DGMRES(ksp, VEC_TMP, VEC_TMP_MATOP);CHKERRQ(ierr); ierr = VecCopy(VEC_TMP_MATOP, VEC_TMP);CHKERRQ(ierr); } ierr = KSPUnwindPreconditioner(ksp, VEC_TMP, VEC_TMP_MATOP);CHKERRQ(ierr); /* add the solution to the previous one */ ierr = VecAXPY(ksp->vec_sol, 1.0, VEC_TMP);CHKERRQ(ierr); PetscFunctionReturn(0); }
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ***********************************************************************/ #include <cstring> #include "GlobalDefs.h" #include "ICORipper.h" const char *ICORipper::s_name = "Windows ICO Ripper v1.0"; const HeaderStruct ICORipper::s_headers[] = { HS("\0\0\1\0", 4) HS_END }; #pragma pack(push, 1) struct GlobalHeader { uint32 id; // \0\0\1\0 uint16 count; // number of icons in this file }; struct EntryHeader { uint8 width; uint8 height; uint8 colors;