/* in : val 0 or 1 (コントローラとの併用 : 1) */ void InitMemCard(long val) { InitCARD(val); /* 通常 val=1 : コントローラと併用 */ StartCARD(); _bu_init(); ChangeClearPAD(0); EnterCriticalSection(); ev0 = OpenEvent(SwCARD, EvSpIOE, EvMdNOINTR, NULL); ev1 = OpenEvent(SwCARD, EvSpERROR, EvMdNOINTR, NULL); ev2 = OpenEvent(SwCARD, EvSpTIMOUT, EvMdNOINTR, NULL); ev3 = OpenEvent(SwCARD, EvSpNEW, EvMdNOINTR, NULL); ev10 = OpenEvent(HwCARD, EvSpIOE, EvMdNOINTR, NULL); ev11 = OpenEvent(HwCARD, EvSpERROR, EvMdNOINTR, NULL); ev12 = OpenEvent(HwCARD, EvSpTIMOUT, EvMdNOINTR, NULL); ev13 = OpenEvent(HwCARD, EvSpNEW, EvMdNOINTR, NULL); ExitCriticalSection(); EnableEvent(ev0); EnableEvent(ev1); EnableEvent(ev2); EnableEvent(ev3); EnableEvent(ev10); EnableEvent(ev11); EnableEvent(ev12); EnableEvent(ev13); }
/* 初期化API */ CsInit() { ev0 = OpenEvent(SwCARD, EvSpIOE, EvMdINTR, _ioe_handler); ev1 = OpenEvent(SwCARD, EvSpERROR, EvMdINTR, _error_handler); ev2 = OpenEvent(SwCARD, EvSpTIMOUT, EvMdINTR, _timeout_handler); ev3 = OpenEvent(SwCARD, EvSpNEW, EvMdINTR, _new_handler); ev10 = OpenEvent(HwCARD, EvSpIOE, EvMdINTR, _deliver_sw0); ev11 = OpenEvent(HwCARD, EvSpERROR, EvMdINTR, _deliver_sw1); ev12 = OpenEvent(HwCARD, EvSpTIMOUT, EvMdINTR, _deliver_sw2); _init_pad(); InitCARD(1); StartCARD(); _bu_init(); ChangeClearPAD(0); hw = 0; EnableEvent(ev0); EnableEvent(ev1); EnableEvent(ev2); EnableEvent(ev3); EnableEvent(ev10); EnableEvent(ev11); EnableEvent(ev12); return _work1(chan=0x00); }
bool WindowBase::OpenWindow(int width, int height, const String& name, uint32 windowstyle, bool show) { if ( IsWindowOpen() ) CloseWindow(); if ( IsWindowBind() ) UnbindWindow(); mWindowHandle = NULL; ::Rect rectWin = {0, 0, height, width }; WindowAttributes winAttribute = (windowstyle & WINDOW_FRAME) ? kWindowStandardDocumentAttributes : 0; if ( !(windowstyle & WINDOW_SIZE) ) winAttribute &= ~kWindowResizableAttribute; if ( !(windowstyle & WINDOW_MINIMIZE) ) winAttribute &= ~kWindowFullZoomAttribute; winAttribute |= kWindowStandardHandlerAttribute|kWindowMetalAttribute; PRCORE_ASSERT_EXCEPTION( noErr != CreateNewWindow (kDocumentWindowClass,winAttribute, &rectWin,&mWindowHandle) ); mIsOpen = true; RenameWindow(name); ::SetWindowBounds ( mWindowHandle,kWindowContentRgn,&rectWin); EnableEvent(); if(show) ShowWindow(); ResizeWindow(width,height); if(show) { ::SetPortWindowPort(mWindowHandle); ::InvalWindowRect (mWindowHandle, &rectWin); MoveWindow(50,50); } return true; }
main() { long i,fd,ret,max; unsigned char *p; /* カードとコントローラの初期化 */ /*他のライブラリとの同時運用ではChangeClearPAD()が必須*/ /*また他のライブラリを先に初期するかResetCakkback()を最初に実行する*/ #ifdef GRAPHIC ResetCallback(); #endif cbuf[0][0] = cbuf[1][0] = 0xff; InitPAD(&cbuf[0][0],34,&cbuf[1][0],34); StartPAD(); InitCARD(1); StartCARD(); _bu_init(); #ifdef GRAPHIC ChangeClearPAD(0); #endif /* イベントの初期化 */ ev0 = OpenEvent(SwCARD, EvSpIOE, EvMdNOINTR, NULL); ev1 = OpenEvent(SwCARD, EvSpERROR, EvMdNOINTR, NULL); ev2 = OpenEvent(SwCARD, EvSpTIMOUT, EvMdNOINTR, NULL); ev3 = OpenEvent(SwCARD, EvSpNEW, EvMdNOINTR, NULL); EnableEvent(ev0); EnableEvent(ev1); EnableEvent(ev2); EnableEvent(ev3); /* データの初期化 */ for(i=0;i<SIZE*0x2000;i++) { data[i] = i/128; buf[i] = 0xff; } /* ここのカードの存在とフォーマットテストを置くべき*/ /* テスト用ファイルの消去 */ delete(name); /* テスト用ファイルの生成 */ fd = open(name,O_CREAT|SIZE<<16); close(fd); printf("write\n"); /* ライト*/ #ifdef NOWAIT fd = open(name,O_WRONLY|O_NOWAIT); for(i=0,p=data;i<SIZE*0x2000/512;i++,p+=512) { _clear_event(); while(write(fd,p,512)==0) ; if((ret = _card_event())==1) break; } close(fd); max = i; printf("max:%d\n",max); #else fd = open(name,O_WRONLY); write(fd,data,SIZE*0x2000); close(fd); #endif printf("read\n"); /* リード */ #ifdef NOWAIT fd = open(name,O_RDONLY|O_NOWAIT); for(i=0,p=buf;i<max;i++,p+=512) { _clear_event(); while(read(fd,p,512)==0) ; if((ret = _card_event())==1) break; lseek(fd,128,SEEK_CUR); /* バグ対策 */ } close(fd); max = i; printf("max:%d\n",max); #else fd = open(name,O_RDONLY); read(fd,buf,SIZE*0x2000); close(fd); #endif /* 比較 */ for(i=0;i<max*512;i++) { if(data[i]!=buf[i]) { printf("error\n"); break; } /* printf("(%04x:%02x:%02x)\n",i,data[i],buf[i]);*/ } if(i>=max*512) printf("correct\n"); /* 後処理 */ eoj: CloseEvent(ev0); CloseEvent(ev1); CloseEvent(ev2); CloseEvent(ev3); printf("end of test\n"); }