#include #include #include #include #include #include #include // #include "stdafx.h" // #include #include "ldmicro.h" #include "componentlist.h" #include "advanceddialog.h" #include "components\components.h" #include "naminglist.h" #include "simulate.h" static HWND HorizScrollBar; static HWND VertScrollBar; static HHOOK MouseHookHandle; static HMENU AdvancedTopMenu; static int MouseX; static int MouseY; static BOOL Clicked = FALSE; static BOOL DblClicked = FALSE; static BOOL AdvDialogDone; static BOOL AdvDialogCancel; static HMENU AdvancedFileMenu; static HMENU AdvancedEditMenu; static HMENU AdvancedSimulateMenu; static HMENU AdvancedHelpMenu; static int CyclesPerTimerTick; HWND AdvancedDialog; HWND AdvancedWorkspace; HWND ComponentList; HWND NamingList; HDC hdc; HDC HdcMem; HBITMAP test = NULL; HANDLE ImageHeap; BOOL SimulationStarted = FALSE; HFONT AdvNiceFont; HFONT AdvFixedFont; HINSTANCE *ComponentInstance = &Instance; char MainProgramComponent; int AdvWrkspRight; int AdvWrkspBottom; int CompListWidth; int ResizeSwitch; int NamingListHeight = 100; UINT TIMERID = 100; UINT DblClickTimer; UINT UniquePinId = 0; UINT MCUCount=0; UINT NameCount; BOOL AdvancedWindowOpen = FALSE; // HBITMAP CreateBitmapMask(HBITMAP hbmColour, COLORREF crTransparent); void RefreshDialogScrollbars(void); void StartAdvSimulationTimer(void); void CALLBACK CycleAdvTimer(HWND hwnd, UINT msg, UINT_PTR id, DWORD time); // PinInfo PinData[MAX_PINS]; PinMcu McuPin[MAX_MCU_PINS]; PinName NameId[MAX_PINS]; PinComponent ComponentPin; //----------------------------------------------------------------------------- // Hook that we install when the user starts dragging the `splitter,' in case // they drag it out of the narrow area of the drawn splitter bar. Resize // the listview in response to mouse move, and unhook ourselves when they // release the mouse button. //----------------------------------------------------------------------------- static LRESULT CALLBACK MouseHook(int code, WPARAM wParam, LPARAM lParam) { switch(code) { case HC_ACTION: { MSLLHOOKSTRUCT *mhs = (MSLLHOOKSTRUCT *)lParam; switch(wParam) { case WM_MOUSEMOVE: { /* char vx[3],vy[3]; _itoa(10,vy,10); _itoa(ResizeSwitch,vx,10); MessageBox(AdvancedDialog, _(vx), _(vy), MB_OK | MB_ICONWARNING);*/ switch(ResizeSwitch) { case 1: { int dx = MouseX - mhs->pt.x; CompListWidth += dx; if(CompListWidth < 50) CompListWidth = 50; MouseX = mhs->pt.x; AdvancedDialogResized(); break; } case 2: { int dy = MouseY - mhs->pt.y; NamingListHeight += dy; if(NamingListHeight < 50) NamingListHeight = 50; MouseY = mhs->pt.y; AdvancedDialogResized(); } break; } break; } case WM_LBUTTONUP: ResizeSwitch = 0; UnhookWindowsHookEx(MouseHookHandle); break; } break; } } return CallNextHookEx(MouseHookHandle, code, wParam, lParam); } static void ProcessAdvancedMenu(int code) { switch(code) { case MNU_ADV_SIMULATION_MODE: ToggleSimulationMode(); ToggleAdvancedSimulationMode(); break; case MNU_ADV_START_SIMULATION: StartSimulation(); StartAdvSimulation(); break; case MNU_ADV_STOP_SIMULATION: StopSimulation(); StopAdvSimulation(); break; case MNU_ADV_SINGLE_CYCLE: SimulateOneCycle(TRUE); SimulateOneAdvCycle(TRUE); break; default: return; } } void ToggleAdvancedSimulationMode() { if(InSimulationMode) { SimulationStarted = TRUE; EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_START_SIMULATION, MF_ENABLED); EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_SINGLE_CYCLE, MF_ENABLED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_OPEN, MF_GRAYED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_SAVE, MF_GRAYED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_SAVE_AS, MF_GRAYED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_NEW, MF_GRAYED); EnableMenuItem(AdvancedTopMenu, 1, MF_GRAYED | MF_BYPOSITION); /*EnableMenuItem(AdvancedTopMenu, 2, MF_GRAYED | MF_BYPOSITION); EnableMenuItem(AdvancedTopMenu, 3, MF_GRAYED | MF_BYPOSITION); EnableMenuItem(AdvancedTopMenu, 5, MF_GRAYED | MF_BYPOSITION);*/ CheckMenuItem(AdvancedSimulateMenu, MNU_ADV_SIMULATION_MODE, MF_CHECKED); // ClearSimulationData(); // Recheck InSimulationMode, because there could have been a compile // error, which would have kicked us out of simulation mode. /*if(UartFunctionUsed() && InSimulationMode) { ShowUartSimulationWindow(); }*/ } else { // RealTimeSimulationRunning = FALSE; //KillTimer(MainWindow, TIMER_SIMULATE); EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_START_SIMULATION, MF_GRAYED); EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_STOP_SIMULATION, MF_GRAYED); EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_SINGLE_CYCLE, MF_GRAYED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_OPEN, MF_ENABLED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_SAVE, MF_ENABLED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_SAVE_AS, MF_ENABLED); EnableMenuItem(AdvancedFileMenu, MNU_ADV_NEW, MF_ENABLED); EnableMenuItem(AdvancedTopMenu, 1, MF_ENABLED | MF_BYPOSITION); /*EnableMenuItem(AdvancedTopMenu, 2, MF_ENABLED | MF_BYPOSITION); EnableMenuItem(AdvancedTopMenu, 3, MF_ENABLED | MF_BYPOSITION); EnableMenuItem(AdvancedTopMenu, 5, MF_ENABLED | MF_BYPOSITION);*/ CheckMenuItem(AdvancedSimulateMenu, MNU_ADV_SIMULATION_MODE, MF_UNCHECKED); SimulationStarted = FALSE; /*if(UartFunctionUsed()) { DestroyUartSimulationWindow(); }*/ } // UpdateMainWindowTitleBar(); DrawMenuBar(AdvancedDialog); InvalidateRect(AdvancedDialog, NULL, FALSE); // ListView_RedrawItems(, 0, Prog.io.count - 1); } static void CALLBACK DoubleClickProc(HWND hWnd, UINT msg, UINT Id, DWORD sysTime) { KillTimer(AdvancedWorkspace, TIMERID); if(Clicked) { Clicked = FALSE; } // MessageBox(AdvancedDialog, "Double click duration", "Mouse Clicked", MB_OK | MB_ICONWARNING); } //----------------------------------------------------------------------------- // Window procedure for Advanced Simulation Dialog Box //----------------------------------------------------------------------------- static LRESULT CALLBACK AdvancedDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_NOTIFY: { NMHDR *h = (NMHDR *)lParam; if(h->hwndFrom == ComponentList) { ComponentListProc(h); } if(h->hwndFrom == NamingList) { NamingListProc(h); } return 0; break; } case WM_COMMAND: { HWND h = (HWND)lParam; if(h == OkButton && wParam == BN_CLICKED) { AdvDialogDone = TRUE; } else if(h == CancelButton && wParam == BN_CLICKED) { AdvDialogDone = TRUE; AdvDialogCancel = TRUE; } ProcessAdvancedMenu(LOWORD(wParam)); break; } case WM_PAINT: { RECT r; PAINTSTRUCT ps; Hdc = BeginPaint(hwnd, &ps); // Draw the splitter thing to grab to resize componentList GetClientRect(AdvancedDialog, &r); r.left = AdvWrkspRight + 1; r.right = AdvWrkspRight + 2; FillRect(Hdc, &r, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); r.left = AdvWrkspRight - 1; r.right = AdvWrkspRight; FillRect(Hdc, &r, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); r.left = AdvWrkspRight; r.right = AdvWrkspRight + 1; FillRect(Hdc, &r, (HBRUSH)GetStockObject(WHITE_BRUSH)); EndPaint(hwnd, &ps); // Draw the splitter thing to grab to resize componentList GetClientRect(AdvancedDialog, &r); r.top = AdvWrkspBottom + 1; r.bottom = AdvWrkspBottom + 2; FillRect(Hdc, &r, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); r.top = AdvWrkspBottom - 1; r.bottom = AdvWrkspBottom; FillRect(Hdc, &r, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); r.top = AdvWrkspBottom; r.bottom = AdvWrkspBottom + 1; FillRect(Hdc, &r, (HBRUSH)GetStockObject(WHITE_BRUSH)); EndPaint(hwnd, &ps); return 1; } case WM_LBUTTONDOWN: { // MessageBox(AdvancedDialog, // _("Mouse Button Clicked"), _("Mouse click"), MB_OK | MB_ICONWARNING); int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); POINT pt; pt.x = x; pt.y = y; ClientToScreen(AdvancedWorkspace, &pt); MouseX = pt.x; MouseY = pt.y; if((x > (AdvWrkspRight - 9)) && (x < (AdvWrkspRight + 3))) { // char vx[3],vy[3]; // _itoa(y,vy,10); // _itoa(x,vx,10); // MessageBox(AdvancedDialog, // _(vx), _(vy), MB_OK | MB_ICONWARNING); ResizeSwitch =1; // InvalidateRect(AdvancedWorkspace, NULL, FALSE); } else if((y > (AdvWrkspBottom - 9)) && (y < (AdvWrkspBottom + 3))) { ResizeSwitch = 2; } if(ResizeSwitch > 0) { MouseHookHandle = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)MouseHook, Instance, 0); SetFocus(AdvancedWorkspace); } break; } case WM_MOUSEMOVE: { int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); if((y >(AdvWrkspBottom - 9)) && (y < (AdvWrkspBottom + 3)) && (x < (AdvWrkspRight + 3))) { SetCursor(LoadCursor(NULL, IDC_SIZENS)); } else if((x > (AdvWrkspRight - 9)) && (x < (AdvWrkspRight + 3))) { SetCursor(LoadCursor(NULL, IDC_SIZEWE)); } else { SetCursor(LoadCursor(NULL, IDC_ARROW)); } break; } case WM_SIZE: AdvancedDialogResized(); break; case WM_CLOSE: case WM_DESTROY: AdvancedWindowClosing(); AdvDialogDone = TRUE; AdvDialogCancel = TRUE; break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 1; } //----------------------------------------------------------------------------- // Window procedure for Advanced Workspace // Black workspace area within the Advanced Dialog //----------------------------------------------------------------------------- static LRESULT CALLBACK AdvancedWrkspProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_NOTIFY: { break; } case WM_COMMAND: { HWND h = (HWND)lParam; if(h == OkButton && wParam == BN_CLICKED) { AdvDialogDone = TRUE; } else if(h == CancelButton && wParam == BN_CLICKED) { AdvDialogDone = TRUE; AdvDialogCancel = TRUE; } break; } case WM_CREATE:{ // test=LoadBitmap(GetModuleHandle(NULL),"relay_nc.bmp"); /*test = (HBITMAP) LoadBitmap (Instance, MAKEINTRESOURCE(RELAY_NC));//,IMAGE_BITMAP, // 0,0, LR_LOADTRANSPARENT); if(test ==NULL){ MessageBox(hwnd, "Could not load Bitmap!", "Error", MB_OK | MB_ICONEXCLAMATION); }*/ /*testmask = CreateBitmapMask(test, RGB(255, 255, 255)); if(testmask ==NULL){ MessageBox(hwnd, "Could not create mask!", "Error", MB_OK | MB_ICONEXCLAMATION); }*/ } break; case WM_PAINT:{ PAINTSTRUCT ps; int i; hdc = BeginPaint(hwnd, &ps); for(i=0; i < ImagesDrawn; i++) { ImageList_Draw(ImageStack[i].Image->Images, 0, hdc, ImageStack[i].x, ImageStack[i].y, ILD_TRANSPARENT); } // if(ComponentDiagrams == NULL){ // InitializeImageList(); // } // InitializeComponentImage(0); // DeleteDC(HdcMem); EndPaint(hwnd, &ps); } break; case WM_LBUTTONDOWN:{ // left button down int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); if(!SimulationStarted) { // char vx[3],vy[3]; // _itoa(y,vy,10); // _itoa(x,vx,10); // MessageBox(AdvancedDialog, _(vx), _(vy), MB_OK | MB_ICONWARNING); BeginComponentDrag(x, y); } else{ // Send message to respective component } ProcessEvent(x, y, EVENT_MOUSE_DOWN); } break; case WM_LBUTTONUP:{ int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); if(!SimulationStarted){ EndComponentDrag(x, y); } else{ // Send message to respective component ProcessEvent(x, y, EVENT_MOUSE_UP); } // if((DragX < (x + 3)) && (DragX > (x-3)) && (DragY < (y + 3)) && (DragY > (y-3))) { /*MessageBox(NULL, ("Reached"), ("Info"), MB_OK | MB_ICONWARNING);*/ ProcessEvent(x, y, EVENT_MOUSE_CLICK); // char vx[3],vy[3]; // _itoa(y,vy,10); // _itoa(x,vx,10); // MessageBox(AdvancedDialog, _(vx), _(vy), MB_OK | MB_ICONWARNING); // MessageBox(AdvancedDialog, "Mouse Clicked", "Mouse Clicked", MB_OK | MB_ICONWARNING); } } break; // case WM_LBUTTONDBLCLK: // { // int x = GET_X_LPARAM(lParam); // int y = GET_Y_LPARAM(lParam); // // MessageBox(AdvancedDialog, "Mouse DoubleClicked", "Mouse Double Clicked", MB_OK | MB_ICONWARNING); // if(SimulationStarted){ // // Send message to respective component // } // else // { // } // ProcessEvent(x, y, EVENT_MOUSE_DBLCLICK); // } // break; case WM_RBUTTONUP: { int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); if(!SimulationStarted) { // Get Pin Parameters Here } ProcessEvent(x,y,EVENT_MOUSE_RCLICK); } break; case WM_MOUSEMOVE:{ int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); ComponentDrag(x, y); } break; // case WM_SIZE: // AdvancedDialogResized(); // break; case WM_CLOSE: case WM_DESTROY:{ AdvDialogDone = TRUE; AdvDialogCancel = TRUE; // HeapDestroy(ImageHeap); } break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 1; } /*HBITMAP CreateBitmapMask(HBITMAP hbmColour, COLORREF crTransparent) { HDC HdcMem, HdcMem2; HBITMAP HbmMask; BITMAP bm; // Create monochrome (1 bit) mask bitmap. GetObject(hbmColour, sizeof(BITMAP), &bm); HbmMask = CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL); // Get some HDCs that are compatible with the display driver HdcMem = CreateCompatibleDC(0); HdcMem2 = CreateCompatibleDC(0); SelectObject(HdcMem, hbmColour); SelectObject(HdcMem2, HbmMask); // Set the background colour of the colour image to the colour // you want to be transparent. SetBkColor(HdcMem, crTransparent); BitBlt(HdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, HdcMem, 0, 0, SRCCOPY); BitBlt(HdcMem, 0, 0, bm.bmWidth, bm.bmHeight, HdcMem2, 0, 0, SRCINVERT); DeleteDC(HdcMem); DeleteDC(HdcMem2); return HbmMask; }*/ //----------------------------------------------------------------------------- //Create dialog box classes specifically for Advanced Simulation //----------------------------------------------------------------------------- void MakeAdvancedDialogClass(void) { WNDCLASSEX wc; memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC | CS_DBLCLKS; wc.lpfnWndProc = (WNDPROC)AdvancedDlgProc; wc.hInstance = Instance; wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszClassName = "AdvancedDialog"; wc.lpszMenuName = NULL; wc.hCursor = LoadCursor(NULL, IDC_SIZEWE); wc.hIcon = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), IMAGE_ICON, 32, 32, 0); wc.hIconSm = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), IMAGE_ICON, 16, 16, 0); RegisterClassEx(&wc); AdvNiceFont = CreateFont(16, 0, 0, 0, FW_REGULAR, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, "Tahoma"); if(!AdvNiceFont) AdvNiceFont = (HFONT)GetStockObject(SYSTEM_FONT); AdvFixedFont = CreateFont(14, 0, 0, 0, FW_REGULAR, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, "Lucida Console"); if(!AdvFixedFont) AdvFixedFont = (HFONT)GetStockObject(SYSTEM_FONT); } void MakeAdvancedWorkspaceClass(void) { WNDCLASSEX wc; memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_BYTEALIGNWINDOW | CS_BYTEALIGNWINDOW | CS_OWNDC; wc.lpfnWndProc = (WNDPROC)AdvancedWrkspProc; wc.hInstance = Instance; wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszClassName = "AdvancedWorkspace"; wc.lpszMenuName = NULL; RegisterClassEx(&wc); } void MakeComponentListClass(void) { WNDCLASSEX wc; memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_BYTEALIGNWINDOW | CS_BYTEALIGNWINDOW | CS_OWNDC | CS_DBLCLKS; wc.lpfnWndProc = (WNDPROC)AdvancedWrkspProc; wc.hInstance = Instance; // wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszClassName = "ComponentList"; // wc.lpszMenuName = NULL; RegisterClassEx(&wc); } void MakeNamingListClass(void) { WNDCLASSEX wc; memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_BYTEALIGNWINDOW | CS_BYTEALIGNWINDOW | CS_OWNDC | CS_DBLCLKS; wc.lpfnWndProc = (WNDPROC)AdvancedDlgProc; wc.hInstance = Instance; // wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszClassName = "NamingList"; // wc.lpszMenuName = NULL; RegisterClassEx(&wc); } void ShowAdvancedDialog() { // int itmcount = Prog.io.count; // char vx[3],vy[3]; // _itoa(10,vy,10); // _itoa(itmcount,vx,10); // MessageBox(MainWindow, // _(vx), _(vy), MB_OK | MB_ICONWARNING); if(AdvancedWindowOpen) { return; } ComponentPin.Count = 0; ImageHeap = HeapCreate(0, 1024*64, 0); MakeAdvancedWindowMenus(); AdvancedDialog = CreateWindowClient(WS_EX_CONTROLPARENT, "AdvancedDialog", _("Advanced Simulation Mode"), WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME | WS_CLIPCHILDREN | WS_SIZEBOX, 10 , 10 , 800 , 600 , NULL , AdvancedTopMenu , Instance , NULL ); InitComponents(); RECT r; CompListWidth = 160; MakeAdvancedDialogControls(); // AdvancedDialogResized(); //RefreshDialogScrollbars(); GetClientRect(AdvancedDialog , &r ); // EnableWindow(MainWindow, FALSE); ShowWindow(AdvancedDialog, SW_SHOW); AdvancedWindowOpen = TRUE; ToggleAdvancedSimulationMode(); MSG msg; DWORD ret; AdvDialogDone = FALSE; AdvDialogCancel = FALSE; while((ret = GetMessage(&msg, NULL, 0, 0)) && !AdvDialogDone) { // if(msg.message == WM_KEYDOWN) { // if(msg.wParam == VK_RETURN) { // AdvDialogDone = TRUE; // break; // } else if(msg.wParam == VK_ESCAPE) { // AdvDialogDone = TRUE; // AdvDialogCancel = TRUE; // break; // } // } if(IsDialogMessage(AdvancedDialog , &msg)) continue; TranslateMessage(&msg); DispatchMessage(&msg); } // EnableWindow(MainWindow, TRUE); DestroyWindow(AdvancedDialog); AdvancedWindowOpen = FALSE; return; } void MakeAdvancedDialogControls(void) { LVCOLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; #define LV_ADD_COLUMN(hWnd, i, w, s) do { \ lvc.iSubItem = i; \ lvc.pszText = s; \ lvc.iOrder = 0; \ lvc.cx = w; \ ListView_InsertColumn(hWnd, i, &lvc); \ } while(0) AdvancedWorkspace = CreateWindowEx(WS_EX_CLIENTEDGE, "AdvancedWorkspace", "", WS_CHILD | WS_CLIPSIBLINGS | WS_TABSTOP, 0 , 0 , 640 , 600 , AdvancedDialog , NULL , Instance , NULL ); ComponentList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "ComponentList", WS_CHILD | LVS_REPORT | LVS_NOSORTHEADER | LVS_SORTASCENDING | LVS_SHOWSELALWAYS | WS_TABSTOP | LVS_SINGLESEL | WS_CLIPSIBLINGS, 12, 25, 300, 300, AdvancedDialog, NULL, Instance, NULL); ListView_SetExtendedListViewStyle(ComponentList, LVS_EX_FULLROWSELECT); LV_ADD_COLUMN(ComponentList, 0, 150, _("Components")); ComponentListInitiate(); NamingList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "NamingList", WS_CHILD | LVS_REPORT | LVS_NOSORTHEADER | LVS_SORTASCENDING | LVS_SHOWSELALWAYS | WS_TABSTOP | LVS_SINGLESEL | WS_CLIPSIBLINGS, 312, 325, 300, 300, AdvancedDialog, NULL, Instance, NULL); LV_ADD_COLUMN(NamingList, 0, 250, _("Name")); LV_ADD_COLUMN(NamingList, 1, 100, _("State/Volt")); LV_ADD_COLUMN(NamingList, 2, 100, _("Pin on Processor")); LV_ADD_COLUMN(NamingList, 3, 100, _("MCU Port")); PopulateNamingList(); RefreshNamingList(); // HorizScrollBar = CreateWindowEx(0, WC_SCROLLBAR, "", WS_CHILD | // SBS_HORZ | SBS_BOTTOMALIGN | WS_VISIBLE | WS_CLIPSIBLINGS, // 100, 100, 100, 100, AdvancedDialog, NULL, Instance, NULL); // VertScrollBar = CreateWindowEx(0, WC_SCROLLBAR, "", WS_CHILD | // SBS_VERT | SBS_LEFTALIGN | WS_VISIBLE | WS_CLIPSIBLINGS, // 200, 100, 100, 100, AdvancedDialog, NULL, Instance, NULL); // RECT scroll; // GetWindowRect(HorizScrollBar, &scroll); // ScrollHeight = scroll.bottom - scroll.top; // GetWindowRect(VertScrollBar, &scroll); // ScrollWidth = scroll.right - scroll.left; /*ComponentList = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("listbox"), "Test", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL | WS_CLIPSIBLINGS | WS_TABSTOP, 240, 40, 150, 20, AdvancedDialog, NULL, Instance, NULL); SendMessage(ComponentList, LB_ADDSTRING, 0, (LPARAM)"name"); SendMessage(ComponentList, LB_ADDSTRING, 0, (LPARAM)"extension"); SendMessage(ComponentList, LB_ADDSTRING, 0, (LPARAM)"date"); SendMessage(ComponentList, LB_ADDSTRING, 0, (LPARAM)"size");*/ ShowWindow(AdvancedWorkspace, SW_SHOW); ShowWindow(ComponentList, SW_SHOW); ShowWindow(NamingList, SW_SHOW); } void AdvancedDialogResized(void) { RECT AdvDial; GetClientRect(AdvancedDialog, &AdvDial); if(CompListWidth < 30) { CompListWidth = 30; } if(CompListWidth > AdvDial.right - 250){ CompListWidth = AdvDial.right - 250; } if(NamingListHeight < 30) { NamingListHeight = 30; } if(NamingListHeight > AdvDial.bottom - 250){ NamingListHeight = AdvDial.bottom - 250; } AdvWrkspRight = AdvDial.right - CompListWidth; AdvWrkspBottom = AdvDial.bottom - NamingListHeight; MoveWindow(AdvancedWorkspace, 0, 0, AdvWrkspRight - 1, AdvWrkspBottom - 1, TRUE); MoveWindow(ComponentList, AdvWrkspRight + 2, 0, CompListWidth, AdvDial.bottom, TRUE); MoveWindow(NamingList, 0, AdvWrkspBottom + 2, AdvWrkspRight - 1, AdvDial.bottom - AdvWrkspBottom - 2, TRUE); ListView_SetColumnWidth(ComponentList, 0, AdvDial.right - AdvWrkspRight - 5); } void MakeAdvancedWindowMenus(void) { AdvancedFileMenu = CreatePopupMenu(); AppendMenu(AdvancedFileMenu, MF_STRING, MNU_ADV_NEW, _("&New\tCtrl+N")); AppendMenu(AdvancedFileMenu, MF_STRING, MNU_ADV_OPEN, _("&Open...\tCtrl+O")); AppendMenu(AdvancedFileMenu, MF_STRING, MNU_ADV_SAVE, _("&Save\tCtrl+S")); AppendMenu(AdvancedFileMenu, MF_STRING, MNU_ADV_SAVE_AS, _("Save &As...")); AppendMenu(AdvancedFileMenu, MF_SEPARATOR, 0, ""); AppendMenu(AdvancedFileMenu, MF_STRING, MNU_EXIT, _("E&xit")); AdvancedEditMenu = CreatePopupMenu(); AppendMenu(AdvancedEditMenu, MF_STRING, MNU_ADV_UNDO, _("&Undo\tCtrl+Z")); AppendMenu(AdvancedEditMenu, MF_STRING, MNU_ADV_REDO, _("&Redo\tCtrl+Y")); AppendMenu(AdvancedEditMenu, MF_SEPARATOR, 0, NULL); AppendMenu(AdvancedEditMenu, MF_STRING, MNU_ADV_CUT, _("Cu&t\tCtrl+X")); AppendMenu(AdvancedEditMenu, MF_STRING, MNU_ADV_COPY, _("&Copy\tCtrl+C")); AppendMenu(AdvancedEditMenu, MF_STRING, MNU_ADV_PASTE, _("&Paste\tCtrl+V")); AppendMenu(AdvancedEditMenu, MF_SEPARATOR, 0, NULL); AppendMenu(AdvancedEditMenu, MF_STRING, MNU_ADV_DEL, _("De&lete\tCtrl+Y")); AdvancedSimulateMenu = CreatePopupMenu(); AppendMenu(AdvancedSimulateMenu, MF_STRING, MNU_ADV_SIMULATION_MODE, _("Si&mulation Mode\tCtrl+M")); AppendMenu(AdvancedSimulateMenu, MF_STRING | MF_GRAYED, MNU_ADV_START_SIMULATION, _("Start &Real-Time Simulation\tCtrl+R")); AppendMenu(AdvancedSimulateMenu, MF_STRING | MF_GRAYED, MNU_ADV_STOP_SIMULATION, _("&Halt Simulation\tCtrl+H")); AppendMenu(AdvancedSimulateMenu, MF_STRING | MF_GRAYED, MNU_ADV_SINGLE_CYCLE, _("Single &Cycle\tSpace")); AdvancedHelpMenu = CreatePopupMenu(); AppendMenu(AdvancedHelpMenu, MF_STRING, MNU_ADV_MANUAL, _("&Manual...\tF1")); AppendMenu(AdvancedHelpMenu, MF_STRING, MNU_ADV_ABOUT, _("&About...")); AdvancedTopMenu = CreateMenu(); AppendMenu(AdvancedTopMenu, MF_STRING | MF_POPUP, (UINT_PTR)AdvancedFileMenu, _("&File")); AppendMenu(AdvancedTopMenu, MF_STRING | MF_POPUP, (UINT_PTR)AdvancedEditMenu, _("&Edit")); AppendMenu(AdvancedTopMenu, MF_STRING | MF_POPUP, (UINT_PTR)AdvancedSimulateMenu, _("Si&mulate")); AppendMenu(AdvancedTopMenu, MF_STRING | MF_POPUP, (UINT_PTR)AdvancedHelpMenu, _("&Help")); } void ProcessEvent(int x, int y, int Event) { int i = 0; switch(Event) { case EVENT_MOUSE_CLICK: { if(Clicked) { KillTimer(AdvancedWorkspace, TIMERID); Event = EVENT_MOUSE_DBLCLICK; Clicked = FALSE; }else { Clicked = TRUE; DblClickTimer = SetTimer(AdvancedWorkspace, TIMERID, GetDoubleClickTime(), DoubleClickProc); } break; } } for(i = 0; i < ImagesDrawn; i++) { if((((ImageStack[i].x + COMPONENT_WIDTH) > x) && (ImageStack[i].x < x) && (ImageStack[i].y < y) && ((ImageStack[i].y + COMPONENT_HEIGHT) > y))) { /*char Debug[256]; sprintf_s(Debug, "Editing Component Address: %p\n",ImageStack[i].Properties); OutputDebugString(Debug);*/ NotifyComponent(ImageStack[i].Properties, ImageStack[i].PinName, ImageStack[i].Image->ComponentId, Event, SimulationStarted, &AdvancedDialog, ImageStack[i].Index, ImageStack[i].Id, &ImageStack[i].Image->Images); //Replace Image in Imagelist here } } } void* AllocImageHeap(size_t n) { void *p = HeapAlloc(ImageHeap, HEAP_ZERO_MEMORY, n); return p; } void* ReallocImageHeap(LPVOID lpMem, size_t n) { // char Debug[256]; void *p = HeapReAlloc(ImageHeap, HEAP_ZERO_MEMORY, lpMem, n); if(p == NULL) { /*sprintf_s(Debug, "Cannot Reallocate Memory\n"); OutputDebugString(Debug);*/ return lpMem; } return p; } void FreeImageHeap(void *p) { HeapFree(ImageHeap, 0, p); } void SetMcu(int PinId, int Type) { UINT i; for(i=0; iImageId = (void**)AllocImageHeap(sizeof(void*)); NameId[NameCount].PinData.ImageId = (void**)AllocImageHeap(sizeof(void*)); NameId[NameCount].PinData.ImageType = (int*)AllocImageHeap(sizeof(int)); NameId[NameCount].PinData.Index = (int*)AllocImageHeap(sizeof(int)); // NameId[NameCount].PinData = &PinData[NameCount]; NameId[NameCount].PinData.LinkCount = 0; //SetMcu(NameCount, ImageId); NameId[NameCount].PinId = ++UniquePinId; if (sizeof(TCHAR) == sizeof(char)) // String is non-unicode strcpy(NameId[NameCount].Name, (char*)(Name)); else // String is unicode wcstombs(NameId[NameCount].Name, (wchar_t*)Name, MAX_NAME_LENGTH); // MessageBox(AdvancedDialog, (LPCTSTR)NameId[NameCount].Name, "Registered", MB_OK | MB_ICONWARNING); /*char vx[3],vy[3]; _itoa(10,vy,10); _itoa(NameId[NameCount].PinId,vx,10); MessageBox(AdvancedDialog, _(vx), Name, MB_OK | MB_ICONWARNING);*/ NameCount++; RefreshNamingList(); return NameId[i].PinId; } int DeletePinImage(LPCTSTR Name, void* ImageId, int Index) { UINT i; int Count, j, index; int PinId = -1; void* Value; if(Name[0] == 0) { return PinId; } for(i=0; iPinId == PinId) { for(int i=0; iCount; i++) { if(temp->ComponentAddress[i] == ComponentAddress) { if(temp->Count == 1) { Prev->Next = temp->Next; FreeImageHeap((void*)temp); } else { temp->ComponentAddress[i] = temp->ComponentAddress[ (--temp->Count)]; ReallocImageHeap(temp->ComponentAddress, sizeof(void*) * (temp->Count)); return PinId; } } Prev = temp; temp = (PinComponent*)temp->Next; } } } } return -1; } int AddComponentPin(int PinId, void* ComponentAddress) { PinComponent* temp = (PinComponent*)ComponentPin.Next; if(ComponentPin.PinId == NULL) { ComponentPin.PinId = PinId; ComponentPin.Count = 1; ComponentPin.ComponentAddress = (void**)AllocImageHeap(sizeof(void*)); ComponentPin.ComponentAddress[0] = ComponentAddress; return PinId; } else if(ComponentPin.PinId == PinId) { ComponentPin.ComponentAddress = (void**)ReallocImageHeap( (void*)ComponentPin.ComponentAddress, (sizeof(void*)) * (++ComponentPin.Count)); ComponentPin.ComponentAddress[(ComponentPin.Count-1)] =ComponentAddress; return PinId; } else { PinComponent* Prev = &ComponentPin; while(temp != NULL) { if(temp->PinId == PinId) { temp->ComponentAddress = (void**)ReallocImageHeap( (void*)ComponentPin.ComponentAddress, (sizeof(void*) * (++ComponentPin.Count))); temp->ComponentAddress[ (ComponentPin.Count-1)] = ComponentAddress; return PinId; } Prev = temp; temp = (PinComponent*) temp->Next; } temp = (PinComponent*) AllocImageHeap(sizeof(PinComponent)); temp->PinId =PinId; temp->ComponentAddress = (void**)AllocImageHeap(sizeof(void*)); temp->Count = 1; temp->ComponentAddress[0] = ComponentAddress; Prev->Next = (void*)temp; return PinId; } return -1; } int SetPinImage(int PinId, void* ImageId, int ImageType, int Index) { UINT i,j, Count; void* Value; int index; for(i=0; i0; i++) { if(NameId[i].PinData.LinkCount<=0) { // MessageBox(NULL, (LPCTSTR)NameId[i].Name,"Deleted", MB_OK | MB_ICONWARNING); NameId[i--] = NameId[--NameCount]; Count++; } } RefreshNamingList(); /*char vx[3],vy[3]; _itoa(10,vy,10); _itoa(NameCount,vx,10); MessageBox(NULL, _(vx), _(vy), MB_OK | MB_ICONWARNING);*/ MCUCount =0; return Count; } void StartAdvSimulation() { // RealTimeSimulationRunning = TRUE; EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_START_SIMULATION, MF_GRAYED); EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_STOP_SIMULATION, MF_ENABLED); StartAdvSimulationTimer(); // UpdateMainWindowTitleBar(); } //----------------------------------------------------------------------------- // Stop real-time simulation. Have to update the controls grayed status // to reflect this. //----------------------------------------------------------------------------- void StopAdvSimulation() { // RealTimeSimulationRunning = FALSE; EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_START_SIMULATION, MF_ENABLED); EnableMenuItem(AdvancedSimulateMenu, MNU_ADV_STOP_SIMULATION, MF_GRAYED); KillTimer(MainWindow, TIMER_SIMULATE); // UpdateMainWindowTitleBar(); } void SimulateOneAdvCycle(BOOL ForceRefresh) { static BOOL Simulating = FALSE; if(Simulating) return; Simulating = TRUE; /*Code here*/ Simulating = FALSE; } void StartAdvSimulationTimer() { int p = Prog.cycleTime/1000; if(p < 5) { SetTimer(AdvancedDialog, TIMER_ADV_SIMULATE, 10, CycleAdvTimer); CyclesPerTimerTick = 10000 / Prog.cycleTime; }else { SetTimer(AdvancedDialog, TIMER_ADV_SIMULATE, p, CycleAdvTimer); CyclesPerTimerTick = 1; } } void CALLBACK CycleAdvTimer(HWND hwnd, UINT msg, UINT_PTR id, DWORD time) { int i; for(i = 0; i < CyclesPerTimerTick; i++) { SimulateOneAdvCycle(FALSE); } } // void CreateVoltRequest(int Index, double VoltReq) // { // void* Value; // UINT Count,j; // Count = NameId[Index].PinData.LinkCount; // /*char vx[4],vy[4]; // _itoa(NameId[i].PinData.Volt,vy,10); // _itoa(VoltReq,vx,10); // MessageBox(NULL, // (vy), (vx), MB_OK | MB_ICONWARNING);*/ // if(Count>0) // { // // MessageBox(NULL,"reached", "info", MB_OK | MB_ICONEXCLAMATION); // for(j =0; j < Count; j++) // { // Value = (void*) NameId[Index].PinData.ImageId[j]; // for(int k =0; kImages); // NameId[Index].PinData.ProgVolt = NameId[Index].PinData.Volt; // } // } // } // } // } void TranslateState(char *name, BOOL state) { double VoltReq; UINT i; VoltReq = (double) (state ? VOLT_5 : GND); for(i=0; i VoltReq) || (NameId[i].PinData.ProgComponent == &MainProgramComponent) || (NameId[i].PinData.ProgComponent == NULL)) { NameId[i].PinData.ProgComponent = &MainProgramComponent; if(VoltReq <= NameId[i].PinData.Volt) { NameId[i].PinData.ProgVolt = VoltReq; /*char vx[3],vy[10]; _gcvt(NameId[i].PinData.ProgVolt,10,vy); _itoa(NameId[i].PinId,vx,10); MessageBox(AdvancedDialog, _(vy), _(NameId[i].Name), MB_OK | MB_ICONWARNING);*/ /*sprintf_s(Debug, "Executing1: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } else { NameId[i].PinData.ProgVolt = NameId[i].PinData.Volt; /*sprintf_s(Debug, "Executing2: \tVoltage:%f\n", NameId[Id].PinData.Volt); OutputDebugString(Debug);*/ } RefreshVolt(NameId[i].PinId, NULL, i, NULL, VoltReq); /*sprintf_s(Debug, "Executing3: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } /*char Debug[256]; sprintf_s(Debug, "TranslateState: %s: %f \n", name, VoltReq); OutputDebugString(Debug);*/ } } } void MCUPinState(char *name, BOOL state) { double volt = (double) state?VOLT_5:GND; for(UINT i=0; i volt)) { NameId[i].PinData.ProgVolt = VoltRequest( NameId[i].PinData.ImageId[j], SimulationStarted, NameId[i].PinData.ImageType[j], NameId[i].PinData.Index[j], volt, SOURCE_FORCE_MAIN, ImageStack[k].Image->Images); NameId[i].PinData.ProgComponent = ComponentAddress; char Debug[256]; sprintf_s(Debug, "1Name:%s \t ProgVolt:%f \t Volt:%f \t RVolt: %f\n", Name, NameId[i].PinData.ProgVolt,NameId[i].PinData.Volt,volt); OutputDebugString(Debug); } else if((NameId[i].PinData.ProgVolt < volt)) { if( (NameId[i].PinData.ProgComponent == ComponentAddress) || NameId[i].PinData.ProgComponent == NULL) { // MessageBox(AdvancedDialog, "Set", "Mouse Clicked", MB_OK | MB_ICONWARNING); NameId[i].PinData.ProgVolt = VoltRequest( NameId[i].PinData.ImageId[j], SimulationStarted, NameId[i].PinData.ImageType[j], NameId[i].PinData.Index[j], volt, SOURCE_FORCE_MAIN, ImageStack[k].Image->Images); char Debug[256]; sprintf_s(Debug, "2Name:%s \t ProgVolt:%f \t Volt:%f \t RVolt: %f\n", Name, NameId[i].PinData.ProgVolt,NameId[i].PinData.Volt,volt); OutputDebugString(Debug); } } } } } else { if((NameId[i].PinData.ProgComponent == ComponentAddress)) { // MessageBox(AdvancedDialog, "Set", "Test", MB_OK | MB_ICONWARNING); for(int k =0; kImages); NameId[i].PinData.ProgComponent = ComponentAddress; } } char Debug[256]; sprintf_s(Debug, "3Name:%s \t ProgVolt:%f \t Volt:%f \t RVolt: %f\n", Name, NameId[i].PinData.ProgVolt,NameId[i].PinData.Volt,volt); OutputDebugString(Debug); } else if(NameId[i].PinData.ProgComponent == NULL) { NameId[i].PinData.ProgVolt = volt; NameId[i].PinData.ProgComponent = ComponentAddress; } } } } } int Index; Index = IsMCUPin(PinId); if(Index >=0) { if(McuPin[Index].type == IO_TYPE_DIG_INPUT) { if(NameId[Pin].PinData.ProgVolt == VOLT_5) { SimulationSetContact(Name); // MessageBox(AdvancedDialog, "Set", "Mouse Clicked", MB_OK | MB_ICONWARNING); } else if(NameId[Pin].PinData.ProgVolt == GND) { SimulationResetContact(Name); // MessageBox(AdvancedDialog, "Reset", "Mouse Clicked", MB_OK | MB_ICONWARNING); } else if(NameId[Pin].PinData.ProgVolt == V_OPEN) { if(McuPin[Index].InternalPullup) { NameId[Pin].PinData.ProgVolt = VOLT_5; SimulationSetContact(Name); // MessageBox(AdvancedDialog, "Set", "Pullup", MB_OK | MB_ICONWARNING); } else { SimulationResetContact(Name); // MessageBox(AdvancedDialog, "Set", "Pullup", MB_OK | MB_ICONWARNING); } } } // char Debug[256]; // sprintf_s(Debug, "Name:%s \t ProgVolt:%f \t Volt:%f \n", Name, NameId[Index].PinData.ProgVolt,NameId[Index].PinData.Volt); // OutputDebugString(Debug); } if(NameId[Pin].PinData.ProgVolt > NameId[Pin].PinData.Volt) { NameId[Pin].PinData.ProgVolt = NameId[Pin].PinData.Volt; char Debug[256]; sprintf_s(Debug, "4Name:%s \t ProgVolt:%f \t Volt:%f \t RVolt: %f\n", Name, NameId[Pin].PinData.ProgVolt,NameId[Pin].PinData.Volt,volt); OutputDebugString(Debug); } else { char Debug[256]; sprintf_s(Debug, "5Name:%s \t ProgVolt:%f \t Volt:%f \t RVolt: %f\n", Name, NameId[Pin].PinData.ProgVolt,NameId[Pin].PinData.Volt,volt); OutputDebugString(Debug); } char vx[10],vy[10]; _gcvt(NameId[Pin].PinData.ProgVolt,8,vy); _itoa(Pin,vx,2); MessageBox(AdvancedDialog, Name, _(vy), MB_OK | MB_ICONWARNING); return NameId[Pin].PinData.ProgVolt; }*/ double RequestVoltChange(int PinId, int Index, void *ComponentAddress, double volt) { UINT Id; double temp; // char Debug[1024]; for(UINT i=0; i= NameCount) // { // sprintf_s(Debug, "PinId Not found %s: %d\n", // NameId[Id].Name, PinId); // OutputDebugString(Debug); // } temp = NameId[Id].PinData.ProgVolt; /*sprintf_s(Debug, "Changing Voltage %s: %f to %f \t ProgVolt:\ %f \tChanger: %p\n", NameId[Id].Name, temp, volt, NameId[Id].PinData.ProgVolt, NameId[Id].PinData.ProgComponent); OutputDebugString(Debug);*/ if((NameId[Id].PinData.ProgVolt > volt) || (NameId[Id].PinData.ProgComponent == ComponentAddress) || (NameId[Id].PinData.ProgComponent == NULL)) { NameId[Id].PinData.ProgComponent = ComponentAddress; if(volt <= NameId[Id].PinData.Volt) { NameId[Id].PinData.ProgVolt = volt; /*sprintf_s(Debug, "Executing1: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } else { NameId[Id].PinData.ProgVolt = NameId[Id].PinData.Volt; /*sprintf_s(Debug, "Executing2: \tVoltage:%f\n", NameId[Id].PinData.Volt); OutputDebugString(Debug);*/ } RefreshVolt(PinId, Index, Id, ComponentAddress, NameId[Id].PinData.ProgVolt); /*sprintf_s(Debug, "Executing3: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } RefreshProcessorStat(PinId, Id); /*sprintf_s(Debug, "Final Voltage %s: %f to %f \t ProgVolt:\ %f \tChanger: %p\n", NameId[Id].Name, temp, volt, NameId[Id].PinData.ProgVolt, NameId[Id].PinData.ProgComponent); OutputDebugString(Debug);*/ return NameId[Id].PinData.ProgVolt; } double RefreshVolt(int PinId, int Index, UINT Id, void* ComponentAddress, double volt) { // char Debug[1024]; double FinalVolt = volt; /*sprintf_s(Debug, "Executing4: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ for(int i=0; iComponentId,vx,10); MessageBox(AdvancedDialog, (LPSTR)(vx), (LPSTR)(NameId[Id].Name), MB_OK | MB_ICONWARNING); }*/ FinalVolt = VoltSet(NameId[Id].PinData.ImageId[i], SimulationStarted, ImageStack[k].Image->ComponentId, NameId[Id].PinData.Index[i], NameId[Id].PinData.ProgVolt, SOURCE_PROGRAM_MAIN, &ImageStack[k].Image->Images); if(FinalVolt < NameId[Id].PinData.ProgVolt) { NameId[Id].PinData.ProgVolt = FinalVolt; NameId[Id].PinData.ProgComponent = ImageStack[k].Properties; /*sprintf_s(Debug, "Executing7: \t \ ProgVoltage:%f\n",NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } else { if(ImageStack[k].Properties == NameId[Id].PinData.ProgComponent) { NameId[Id].PinData.ProgVolt = FinalVolt; NameId[Id].PinData.ProgComponent = ImageStack[k].Properties; /*sprintf_s(Debug, "Executing8: \t ProgVoltage:\ %f\n",NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } } if(NameId[Id].PinData.ProgVolt > NameId[Id].PinData.Volt) { NameId[Id].PinData.ProgVolt = NameId[Id].PinData.Volt; } /*sprintf_s(Debug, "Updating Voltage %s: %f to \ %f \tProgVolt: %f\n",NameId[Id].Name, volt,FinalVolt,NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ } } } } /*sprintf_s(Debug, "Executing:10 \t ProgVoltage:\ %f\n",NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ RefreshProcessorStat(PinId, Id); /*if(ComponentAddress == NULL) { char vx[10],vy[10]; _gcvt(NameId[Id].PinData.ProgVolt,10,vy); _itoa(NameId[Id].PinId,vx,10); MessageBox(AdvancedDialog, (LPSTR)(vx), (LPSTR)(NameId[Id].Name), MB_OK | MB_ICONWARNING); }*/ /*sprintf_s(Debug, "Executing11: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ return NameId[Id].PinData.ProgVolt; } double RefreshProcessorStat(int PinId, UINT Id) { char* Name; // char Debug[256]; int MCUPinId; MCUPinId = IsMCUPin(PinId); if(MCUPinId >=0) { Name = (char*)&NameId[Id].Name; if(McuPin[MCUPinId].type == IO_TYPE_DIG_INPUT) { if(NameId[Id].PinData.ProgVolt == VOLT_5) { SimulationSetContact(Name); // MessageBox(AdvancedDialog, "Set", // "Mouse Clicked", MB_OK | MB_ICONWARNING); } else if(NameId[Id].PinData.ProgVolt == GND) { SimulationResetContact(Name); // MessageBox(AdvancedDialog, "Reset", // "Mouse Clicked", MB_OK | MB_ICONWARNING); } else if(NameId[Id].PinData.ProgVolt == V_OPEN) { if(McuPin[MCUPinId].InternalPullup) { /*sprintf_s(Debug, "Executing21: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ NameId[Id].PinData.ProgVolt = VOLT_5; SimulationSetContact(Name); // MessageBox(AdvancedDialog, "Set", "Pullup",\ // MB_OK | MB_ICONWARNING); } else { SimulationResetContact(Name); // MessageBox(AdvancedDialog, "Set", "Pullup", // MB_OK | MB_ICONWARNING); } } } } else { if(NameId[Id].PinData.ProgVolt > NameId[Id].PinData.Volt) { /*sprintf_s(Debug, "Executing22: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ NameId[Id].PinData.ProgVolt = NameId[Id].PinData.Volt; } } /*sprintf_s(Debug, "Executing23: \t ProgVoltage:%f\n", NameId[Id].PinData.ProgVolt); OutputDebugString(Debug);*/ return NameId[Id].PinData.ProgVolt; } double GetGlobalVoltage(int PinId, void* ComponentAddress) { int MCUPinId = IsMCUPin(PinId); for(UINT i=0; i=0) { if(McuPin[MCUPinId].type == IO_TYPE_DIG_INPUT) { if(ComponentAddress == NameId[i].PinData.ProgComponent) { return VOLT_5; } } } return NameId[i].PinData.ProgVolt; } } return GND - 1; } // int RegisterPinState(int Index, double Volt) // { // PinData[Index].McuPin = TRUE; // return 0; // } /*void RefreshDialogScrollbars(void) { SCROLLINFO vert, horiz; SetUpScrollbars(&NeedHoriz, &horiz, &vert); SetScrollInfo(HorizScrollBar, SB_CTL, &horiz, TRUE); SetScrollInfo(VertScrollBar, SB_CTL, &vert, TRUE); RECT main; GetClientRect(AdvancedWorkspace, &main); if(NeedHoriz) { MoveWindow(HorizScrollBar, 0, IoListTop - ScrollHeight - 2, main.right - ScrollWidth - 2, ScrollHeight, TRUE); ShowWindow(HorizScrollBar, SW_SHOW); EnableWindow(HorizScrollBar, TRUE); } else { ShowWindow(HorizScrollBar, SW_HIDE); } MoveWindow(VertScrollBar, main.right - ScrollWidth - 2, 1, ScrollWidth, NeedHoriz ? (IoListTop - ScrollHeight - 4) : (IoListTop - 3), TRUE); MoveWindow(VertScrollBar, main.right - ScrollWidth - 2, 1, ScrollWidth, NeedHoriz ? (IoListTop - ScrollHeight - 4) : (IoListTop - 3), TRUE); InvalidateRect(AdvancedDialog, NULL, FALSE); }*/