⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 victest.c

📁 《Delphi5企业级解决方案及应用剖析》参考程序 DELPHI 资料集
💻 C
📖 第 1 页 / 共 2 页
字号:


		case WM_TIMER:
			if (wParam == TimerID) {

				if (ActiveHW) {
					if (CurrIRQNumber>0 && CurrIRQNumber<16 && !IsIRQMasked(HwCtrl)) {
						Ticks ++;
				        SetDlgItemInt(hDlg, IDE_IRQCOUNT	, IRQCounter, FALSE);
				        SetDlgItemInt(hDlg, IDE_IRQHANDLED, Flag_Intr, FALSE);
				     
						SetDlgItemInt(hDlg, IDE_IRQTIME	, Ticks / 10, FALSE);

                        
						sprintf(buffer, "%02Xh", Scan_Code);
					    SetDlgItemText(hDlg, IDE_SCAN, buffer);
					    sprintf(buffer, "%02Xh", Data_Reg );
					    SetDlgItemText(hDlg, IDE_DATA_REG, buffer);
					    sprintf(buffer, "%02Xh", Status_Reg);
					    SetDlgItemText(hDlg, IDE_STATUS_REG, buffer);

					}
					for (i=0; i<17; i++) {
                        a = GetPin(HwCtrl,i+1)?1:0;
						Id = IDC_RPIN1+i;
					    CheckDlgButton(
							hDlg,Id,a);
					}
					CheckDlgButton(hDlg,IDC_ACKWL,GetLPTAckwl(HwCtrl)?1:0);
                    CheckDlgButton(hDlg,IDC_BUSY,GetLPTBusy(HwCtrl)?1:0);
                    CheckDlgButton(hDlg,IDC_ERROR,GetLPTError(HwCtrl)?1:0);
                    CheckDlgButton(hDlg,IDC_PE,GetLPTPaperEnd(HwCtrl)?1:0);
                    CheckDlgButton(hDlg,IDC_SLCT,GetLPTSlct(HwCtrl)?1:0);

				};
			}
         break;

      case WM_COMMAND:

			switch (wParam) {

               case IDC_WPIN1:
               case IDC_WPIN2:
               case IDC_WPIN3:
               case IDC_WPIN4:
               case IDC_WPIN5:
               case IDC_WPIN6:
               case IDC_WPIN7:
               case IDC_WPIN8:
               case IDC_WPIN9:
               case IDC_WPIN10:
               case IDC_WPIN11:
               case IDC_WPIN12:
               case IDC_WPIN13:
               case IDC_WPIN14:
               case IDC_WPIN15:
               case IDC_WPIN16:
               case IDC_WPIN17:
				   if (ActiveHW) { 
					   for (nPin=0; nPin<17; nPin++)  {
						   SetPin(HwCtrl,nPin+1,IsDlgButtonChecked(hDlg,IDC_WPIN1+nPin)>0);
					   }
				   }
				   
				   break;

			   case IDC_LPT_NUMBER:
				   ShowButtons(hDlg);
				   break;

			   case IDC_INIT:
				   LPTInit(HwCtrl);
				   ShowButtons(hDlg);
				   break;

			   case IDC_LPT_IRQ:

				   if (IsDlgButtonChecked(hDlg,IDC_LPT_IRQ))

					   SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0x10);
				   else
					   SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0);
				   
				   ShowButtons(hDlg);
				   break;

			   case IDB_DRIVER:
				    
                    CheckDlgButton(hDlg,IDC_HARD,1);
					if (ActiveHW) {
						SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0);
						CheckDlgButton(hDlg,IDC_UNMASK,0);
						CheckDlgButton(hDlg,IDC_LPT_IRQ,0);
						HwCtrl = CloseTVicHW32(HwCtrl);
						PointPhys = NULL;
					   ActiveHW = FALSE;
					   
					} else {

				   	       if ( HwCtrl = OpenTVicHW32(HwCtrl) ) {
                              ActiveHW = TRUE;
   						      SetHardAccess( HwCtrl,TRUE );
							  for (nPin=0; nPin<17; nPin++)  {
						           SetPin(HwCtrl,nPin+1,(BOOL)FALSE);
								   CheckDlgButton(hDlg,IDC_RPIN1+nPin-1,0);
                                   CheckDlgButton(hDlg,IDC_WPIN1+nPin-1,0);
							  }
 
						   }  else {
						          ActiveHW = FALSE;
				                  MessageBox(hDlg, "Driver VICHWxx not found !", "Error",
                                            MB_APPLMODAL | MB_OK | MB_ICONERROR);
						   }
					}
   				ShowButtons(hDlg);
			      break;

            case IDB_SETMEM:
				   
				GetDlgItemText(hDlg, IDE_MEMADDR, buffer, 40);
				PhysAddr = HexToInt(buffer);
				sprintf(buffer, "%08X", PhysAddr);
				SetDlgItemText(hDlg, IDE_MEMADDR, buffer);
				PointPhys = (void*)MapPhysToLinear(HwCtrl,PhysAddr, 256);
                sprintf(buffer, "%08X", PointPhys);
				SetDlgItemText(hDlg, IDE_MEMADDR2, buffer);
	     		ShowButtons(hDlg);
                break;

			case IDB_READMEM:
				if (PointPhys != NULL) {
				    memcpy(membuffer, (BYTE*) PointPhys, 256);
	   			    SendDlgItemMessage(hDlg, IDL_MEMDUMP, LB_RESETCONTENT, 0, 0);
      				for (i=0; i<16; i++) {
						PrintMemLine(buffer, (LPSTR) &membuffer[i*16], 16, 16, PhysAddr + (DWORD)(i*16));
		   				SendDlgItemMessage(hDlg, IDL_MEMDUMP, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR)buffer);
					}
				}
                break;

			case IDB_FILLMEM:
				if (PointPhys != NULL) {
			    	for (i=0; i<256; i++)
      		    		((BYTE*)PointPhys)[i] = (BYTE) i;
      				PostMessage(hDlg, WM_COMMAND, IDB_READMEM, 0);
				}
                break;

			case IDB_READ:
            	for (i=0; i<4; i++) {
					GetDlgItemText(hDlg, IDE_ADDR01 + i, buffer, 40);
                    a = (WORD) HexToInt(buffer);
					sprintf(buffer, "%02X", GetPortByte(HwCtrl, a ));
					SetDlgItemText(hDlg, IDE_DATA01 + i, buffer);
				}
                break;

			case IDB_WRITE:
            	for (i=0; i<4; i++) {
					   GetDlgItemText(hDlg, IDE_ADDR01 + i, buffer, 40);
					   a = (WORD) HexToInt(buffer);
					   GetDlgItemText(hDlg, IDE_DATA01 + i, buffer, 40);
   					   d = (BYTE) HexToInt(buffer);
                       SetPortByte(HwCtrl,a, d);
				}
                break;

            case IDC_HARD:
					SetHardAccess(HwCtrl, (bool)((SendDlgItemMessage(hDlg, IDC_HARD, BM_GETSTATE, 0, 0) & 1) != 0) );
               break;

			case IDC_UNMASK:
			    Flag_Intr = 0;
			   	Ticks = 0;
				if (ActiveHW) {
				    if ( !IsIRQMasked(HwCtrl)  )  {
						  SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0);
				   	      MaskIRQ(HwCtrl);			  
						  EnableWindow(GetDlgItem(hDlg,IDE_IRQNUMBER),TRUE);
					} else {
				   	    CurrIRQNumber = (WORD) GetDlgItemInt(hDlg, IDE_IRQNUMBER, NULL, FALSE);
				   	    SetIRQ(HwCtrl,(BYTE)CurrIRQNumber, HWCtrlHwInterrupt);
						EnableWindow(GetDlgItem(hDlg,IDE_IRQNUMBER),FALSE);
				        UnmaskIRQ(HwCtrl);				
					}
				}
				ShowButtons(hDlg);
                break;


			case IDM_ABOUT:
				lpAbtProc = (DLGPROC) MakeProcInstance( (FARPROC) AboutDialogProc, hInst);
			    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hDlgMain, lpAbtProc);
                break;

			case IDM_EXIT:
              	PostMessage(GetParent(hDlg),WM_CLOSE, (WPARAM)0, (LPARAM)0);
	      		break;

	   		default:
	      		return (FALSE);
			}

			break;

		case WM_DESTROY:
        	if (TimerID)
		   	KillTimer(hDlg, TimerID);

			if (ActiveHW) {
				HwCtrl = CloseTVicHW32(HwCtrl);
		   }

			if (hFontMemdump)
   			DeleteObject(hFontMemdump);

	 		return TRUE;

    }
	return (FALSE);
}


//----------------------------------------------------------------------------
void ShowButtons(HWND hDlg)
{
	unsigned char buffer[255];
    WORD nLPTnew, nLPT;
	WORD NumLPTs;
	
   //azzera la checkbox dell'accesso diretto
   //SendDlgItemMessage(hDlg, IDC_HARD, BM_SETCHECK, (BOOL)TestHardAccess(), 0L);

	if (ActiveHW) {

	   NumLPTs = GetLPTNumPorts(HwCtrl);

	   SetDlgItemInt(hDlg, IDC_LPTS, NumLPTs, FALSE);

       nLPTnew = GetDlgItemInt(hDlg, IDC_LPT_NUMBER, NULL, FALSE);
	   nLPT    = (WORD)GetLPTNumber(HwCtrl);

	   if (nLPTnew != nLPT) {
		   if (nLPTnew<=0 || nLPTnew>NumLPTs) {
	         SetDlgItemInt(hDlg, IDC_LPT_NUMBER,nLPT, FALSE);
		     MessageBeep(0);
		   }
          else 
             SetLPTNumber(HwCtrl,nLPTnew);

       }
       sprintf(buffer, "%03Xh", GetLPTBasePort(HwCtrl));
	   SendDlgItemMessage(hDlg, IDC_BASE,   WM_SETTEXT, 0, (LPARAM)(LPCTSTR)buffer);
	   SendDlgItemMessage(hDlg, IDB_DRIVER, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"&Close Driver");
    } else {
   	    SendDlgItemMessage(hDlg, IDB_DRIVER, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"&Open Driver");
	}

   EnableWindow(GetDlgItem(hDlg, IDB_READ)	,    (BOOL) ActiveHW);
   EnableWindow(GetDlgItem(hDlg, IDB_WRITE)	,    (BOOL) ActiveHW);
   EnableWindow(GetDlgItem(hDlg, IDB_SETMEM),    (BOOL) ActiveHW);
   EnableWindow(GetDlgItem(hDlg, IDB_READMEM),   (BOOL)(ActiveHW && (PointPhys != NULL)));
   EnableWindow(GetDlgItem(hDlg, IDB_FILLMEM),   (BOOL)(ActiveHW && (PointPhys != NULL)));
   EnableWindow(GetDlgItem(hDlg, IDC_UNMASK),    (BOOL)(ActiveHW && IsIRQMasked(HwCtrl)));
   
   EnableWindow(GetDlgItem(hDlg, IDC_BASE), (BOOL) ActiveHW);
   EnableWindow(GetDlgItem(hDlg, IDC_LPT_NUMBER), (BOOL) ActiveHW);
   EnableWindow(GetDlgItem(hDlg, IDC_LPT_IRQ), (BOOL) ActiveHW);     
   EnableWindow(GetDlgItem(hDlg, IDC_INIT), (BOOL) ActiveHW);
   EnableWindow(GetDlgItem(hDlg, IDC_LPTS), (BOOL) ActiveHW);
   
 
}


//----------------------------------------------------------------------------
BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)													
{

	switch (message) {
		case WM_INITDIALOG:
      	return TRUE;

		case WM_SYSCOMMAND:
      	SendMessage(hDlgMain, message, wParam, lParam);
      	break;

		case WM_COMMAND:
      	EndDialog(hDlg, TRUE);
      	break;

  		default:
      	return FALSE;
	}

    return(TRUE);
}



//--------- END OF FILE  -----------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -