diff options
Diffstat (limited to 'ldmicro/includes/ldmicro.h')
-rw-r--r-- | ldmicro/includes/ldmicro.h | 774 |
1 files changed, 774 insertions, 0 deletions
diff --git a/ldmicro/includes/ldmicro.h b/ldmicro/includes/ldmicro.h new file mode 100644 index 0000000..caa154d --- /dev/null +++ b/ldmicro/includes/ldmicro.h @@ -0,0 +1,774 @@ +//----------------------------------------------------------------------------- +// Copyright 2007 Jonathan Westhues +// +// This file is part of LDmicro. +// +// LDmicro is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LDmicro 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 LDmicro. If not, see <http://www.gnu.org/licenses/>. +//------ +// +// Constants, structures, declarations etc. for the PIC ladder logic compiler +// Jonathan Westhues, Oct 2004 +//----------------------------------------------------------------------------- + +#ifndef __LDMICRO_H +#define __LDMICRO_H + +#include <setjmp.h> +typedef signed short SWORD; +typedef signed long SDWORD; + +// #include "linuxUI.h" + +//----------------------------------------------- +// `Configuration options.' + +// The library that I use to do registry stuff. decleared in freezeLD.h due to build issues +// #define FREEZE_SUBKEY "LDMicro" + +// Size of the font that we will use to draw the ladder diagrams, in pixels +#define FONT_WIDTH 7 +#define FONT_HEIGHT 13 + +// Timer IDs associated with the main window. +#define TIMER_BLINK_CURSOR 1 +#define TIMER_SIMULATE 2 + +//----------------------------------------------- +// Constants for the GUI. We have drop-down menus, a listview for the I/Os, +// etc. + +// Menu IDs +extern HMENU MNU_NEW; +extern HMENU MNU_OPEN; +extern HMENU MNU_SAVE; +extern HMENU MNU_SAVE_AS; +extern HMENU MNU_EXPORT; +extern HMENU MNU_EXIT; + +extern HMENU MNU_UNDO; +extern HMENU MNU_REDO; +extern HMENU MNU_PUSH_RUNG_UP; +extern HMENU MNU_PUSH_RUNG_DOWN; +extern HMENU MNU_INSERT_RUNG_BEFORE; +extern HMENU MNU_INSERT_RUNG_AFTER; +extern HMENU MNU_DELETE_ELEMENT; +extern HMENU MNU_DELETE_RUNG; + +extern HMENU MNU_INSERT_COMMENT; +extern HMENU MNU_INSERT_CONTACTS; +extern HMENU MNU_INSERT_COIL; +extern HMENU MNU_INSERT_TON; +extern HMENU MNU_INSERT_TOF; +extern HMENU MNU_INSERT_RTO; +extern HMENU MNU_INSERT_RES; +extern HMENU MNU_INSERT_OSR; +extern HMENU MNU_INSERT_OSF; +extern HMENU MNU_INSERT_CTU; +extern HMENU MNU_INSERT_CTD; +extern HMENU MNU_INSERT_CTC; +extern HMENU MNU_INSERT_ADD; +extern HMENU MNU_INSERT_SUB; +extern HMENU MNU_INSERT_MUL; +extern HMENU MNU_INSERT_DIV; +extern HMENU MNU_INSERT_MOV; +extern HMENU MNU_INSERT_READ_ADC; +extern HMENU MNU_INSERT_SET_PWM; +extern HMENU MNU_INSERT_UART_SEND; +extern HMENU MNU_INSERT_UART_RECV; +extern HMENU MNU_INSERT_EQU; +extern HMENU MNU_INSERT_NEQ; +extern HMENU MNU_INSERT_GRT; +extern HMENU MNU_INSERT_GEQ; +extern HMENU MNU_INSERT_LES; +extern HMENU MNU_INSERT_LEQ; +extern HMENU MNU_INSERT_OPEN; +extern HMENU MNU_INSERT_SHORT; +extern HMENU MNU_INSERT_MASTER_RLY; +extern HMENU MNU_INSERT_SHIFT_REG; +extern HMENU MNU_INSERT_LUT; +extern HMENU MNU_INSERT_FMTD_STR; +extern HMENU MNU_INSERT_PERSIST; +extern HMENU MNU_MAKE_NORMAL; +extern HMENU MNU_NEGATE; +extern HMENU MNU_MAKE_SET_ONLY; +extern HMENU MNU_MAKE_RESET_ONLY; +extern HMENU MNU_INSERT_PWL; + +extern HMENU MNU_MCU_SETTINGS; +extern HMENU MNU_PROCESSOR_0; + +extern HMENU MNU_SIMULATION_MODE; +extern HMENU MNU_START_SIMULATION; +extern HMENU MNU_STOP_SIMULATION; +extern HMENU MNU_SINGLE_CYCLE; + +extern HMENU MNU_COMPILE; +extern HMENU MNU_COMPILE_AS; + +extern HMENU MNU_MANUAL; +extern HMENU MNU_ABOUT; + +extern HMENU MNU_ADV_SIMULATION; + + +// Columns within the I/O etc. listview. +#define LV_IO_NAME 0x00 +#define LV_IO_TYPE 0x01 +#define LV_IO_STATE 0x02 +#define LV_IO_PIN 0x03 +#define LV_IO_PORT 0x04 +//----------------------------------------------- +// Data structures for the actual ladder logic. A rung on the ladder +// is a series subcircuit. A series subcircuit contains elements or +// parallel subcircuits. A parallel subcircuit contains elements or series +// subcircuits. An element is a set of contacts (possibly negated) or a coil. + +#define MAX_ELEMENTS_IN_SUBCKT 16 + +#define ELEM_PLACEHOLDER 0x01 +#define ELEM_SERIES_SUBCKT 0x02 +#define ELEM_PARALLEL_SUBCKT 0x03 +#define ELEM_PADDING 0x04 +#define ELEM_COMMENT 0x05 + +#define ELEM_CONTACTS 0x10 +#define ELEM_COIL 0x11 +#define ELEM_TON 0x12 +#define ELEM_TOF 0x13 +#define ELEM_RTO 0x14 +#define ELEM_RES 0x15 +#define ELEM_ONE_SHOT_RISING 0x16 +#define ELEM_ONE_SHOT_FALLING 0x17 +#define ELEM_MOVE 0x18 +#define ELEM_ADD 0x19 +#define ELEM_SUB 0x1a +#define ELEM_MUL 0x1b +#define ELEM_DIV 0x1c +#define ELEM_EQU 0x1d +#define ELEM_NEQ 0x1e +#define ELEM_GRT 0x1f +#define ELEM_GEQ 0x20 +#define ELEM_LES 0x21 +#define ELEM_LEQ 0x22 +#define ELEM_CTU 0x23 +#define ELEM_CTD 0x24 +#define ELEM_CTC 0x25 +#define ELEM_SHORT 0x26 +#define ELEM_OPEN 0x27 +#define ELEM_READ_ADC 0x28 +#define ELEM_SET_PWM 0x29 +#define ELEM_UART_RECV 0x2a +#define ELEM_UART_SEND 0x2b +#define ELEM_MASTER_RELAY 0x2c +#define ELEM_SHIFT_REGISTER 0x2d +#define ELEM_LOOK_UP_TABLE 0x2e +#define ELEM_FORMATTED_STRING 0x2f +#define ELEM_PERSIST 0x30 +#define ELEM_PIECEWISE_LINEAR 0x31 + +#define CASE_LEAF \ + case ELEM_PLACEHOLDER: \ + case ELEM_COMMENT: \ + case ELEM_COIL: \ + case ELEM_CONTACTS: \ + case ELEM_TON: \ + case ELEM_TOF: \ + case ELEM_RTO: \ + case ELEM_CTD: \ + case ELEM_CTU: \ + case ELEM_CTC: \ + case ELEM_RES: \ + case ELEM_ONE_SHOT_RISING: \ + case ELEM_ONE_SHOT_FALLING: \ + case ELEM_EQU: \ + case ELEM_NEQ: \ + case ELEM_GRT: \ + case ELEM_GEQ: \ + case ELEM_LES: \ + case ELEM_LEQ: \ + case ELEM_ADD: \ + case ELEM_SUB: \ + case ELEM_MUL: \ + case ELEM_DIV: \ + case ELEM_MOVE: \ + case ELEM_SHORT: \ + case ELEM_OPEN: \ + case ELEM_READ_ADC: \ + case ELEM_SET_PWM: \ + case ELEM_UART_SEND: \ + case ELEM_UART_RECV: \ + case ELEM_MASTER_RELAY: \ + case ELEM_SHIFT_REGISTER: \ + case ELEM_LOOK_UP_TABLE: \ + case ELEM_PIECEWISE_LINEAR: \ + case ELEM_FORMATTED_STRING: \ + case ELEM_PERSIST: + +#define MAX_NAME_LEN 128 +#define MAX_COMMENT_LEN 384 +#define MAX_LOOK_UP_TABLE_LEN 60 + +typedef struct ElemSubckParallelTag ElemSubcktParallel; + +typedef struct ElemCommentTag { + char str[MAX_COMMENT_LEN]; +} ElemComment; + +typedef struct ElemContactsTag { + char name[MAX_NAME_LEN]; + BOOL negated; +} ElemContacts; + +typedef struct ElemCoilTag { + char name[MAX_NAME_LEN]; + BOOL negated; + BOOL setOnly; + BOOL resetOnly; +} ElemCoil; + +typedef struct ElemTimeTag { + char name[MAX_NAME_LEN]; + int delay; +} ElemTimer; + +typedef struct ElemResetTag { + char name[MAX_NAME_LEN]; +} ElemReset; + +typedef struct ElemMoveTag { + char src[MAX_NAME_LEN]; + char dest[MAX_NAME_LEN]; +} ElemMove; + +typedef struct ElemMathTag { + char op1[MAX_NAME_LEN]; + char op2[MAX_NAME_LEN]; + char dest[MAX_NAME_LEN]; +} ElemMath; + +typedef struct ElemCmpTag { + char op1[MAX_NAME_LEN]; + char op2[MAX_NAME_LEN]; +} ElemCmp; + +typedef struct ElemCounterTag { + char name[MAX_NAME_LEN]; + int max; +} ElemCounter; + +typedef struct ElemReadAdcTag { + char name[MAX_NAME_LEN]; +} ElemReadAdc; + +typedef struct ElemSetPwmTag { + char name[MAX_NAME_LEN]; + int targetFreq; +} ElemSetPwm; + +typedef struct ElemUartTag { + char name[MAX_NAME_LEN]; +} ElemUart; + +typedef struct ElemShiftRegisterTag { + char name[MAX_NAME_LEN]; + int stages; +} ElemShiftRegister; + +typedef struct ElemLookUpTableTag { + char dest[MAX_NAME_LEN]; + char index[MAX_NAME_LEN]; + int count; + BOOL editAsString; + SWORD vals[MAX_LOOK_UP_TABLE_LEN]; +} ElemLookUpTable; + +typedef struct ElemPiecewiseLinearTag { + char dest[MAX_NAME_LEN]; + char index[MAX_NAME_LEN]; + int count; + SWORD vals[MAX_LOOK_UP_TABLE_LEN]; +} ElemPiecewiseLinear; + +typedef struct ElemFormattedStringTag { + char var[MAX_NAME_LEN]; + char string[MAX_LOOK_UP_TABLE_LEN]; +} ElemFormattedString; + +typedef struct ElemPerisistTag { + char var[MAX_NAME_LEN]; +} ElemPersist; + +#define SELECTED_NONE 0 +#define SELECTED_ABOVE 1 +#define SELECTED_BELOW 2 +#define SELECTED_RIGHT 3 +#define SELECTED_LEFT 4 +typedef struct ElemLeafTag { + int selectedState; + BOOL poweredAfter; + union { + ElemComment comment; + ElemContacts contacts; + ElemCoil coil; + ElemTimer timer; + ElemReset reset; + ElemMove move; + ElemMath math; + ElemCmp cmp; + ElemCounter counter; + ElemReadAdc readAdc; + ElemSetPwmTag setPwm; + ElemUart uart; + ElemShiftRegister shiftRegister; + ElemFormattedString fmtdStr; + ElemLookUpTable lookUpTable; + ElemPiecewiseLinear piecewiseLinear; + ElemPersist persist; + } d; +} ElemLeaf; + +typedef struct ElemSubcktSeriesTag { + struct { + int which; + union { + void *any; + ElemSubcktParallel *parallel; + ElemLeaf *leaf; + } d; + } contents[MAX_ELEMENTS_IN_SUBCKT]; + int count; +} ElemSubcktSeries; + +typedef struct ElemSubckParallelTag { + struct { + int which; + union { + void *any; + ElemSubcktSeries *series; + ElemLeaf *leaf; + } d; + } contents[MAX_ELEMENTS_IN_SUBCKT]; + int count; +} ElemSubcktParallel; + +typedef struct McuIoInfoTag McuIoInfo; + +typedef struct PlcProgramSingleIoTag { + char name[MAX_NAME_LEN]; +#define IO_TYPE_PENDING 0 + +#define IO_TYPE_DIG_INPUT 1 +#define IO_TYPE_DIG_OUTPUT 2 +#define IO_TYPE_READ_ADC 3 +#define IO_TYPE_UART_TX 4 +#define IO_TYPE_UART_RX 5 +#define IO_TYPE_PWM_OUTPUT 6 +#define IO_TYPE_INTERNAL_RELAY 7 +#define IO_TYPE_TON 8 +#define IO_TYPE_TOF 9 +#define IO_TYPE_RTO 10 +#define IO_TYPE_COUNTER 11 +#define IO_TYPE_GENERAL 12 + int type; +#define NO_PIN_ASSIGNED 0 + int pin; +} PlcProgramSingleIo; + +#define MAX_IO 512 +typedef struct PlcProgramTag { + struct { + PlcProgramSingleIo assignment[MAX_IO]; + int count; + } io; + McuIoInfo *mcu; + int cycleTime; + int mcuClock; + int baudRate; + +#define MAX_RUNGS 99 + ElemSubcktSeries *rungs[MAX_RUNGS]; + BOOL rungPowered[MAX_RUNGS]; + int numRungs; +} PlcProgram; + +//----------------------------------------------- +// For actually drawing the ladder logic on screen; constants that determine +// how the boxes are laid out in the window, need to know that lots of +// places for figuring out if a mouse click is in a box etc. + +// dimensions, in characters, of the area reserved for 1 leaf element +#define POS_WIDTH 17 +#define POS_HEIGHT 3 + +// offset from the top left of the window at which we start drawing, in pixels +#define X_PADDING 35 +#define Y_PADDING 14 + +typedef struct PlcCursorTag { + int left; + int top; + int width; + int height; +} PlcCursor; + +//----------------------------------------------- +// The syntax highlighting style colours; a structure for the palette. + +typedef struct SyntaxHighlightingColoursTag { + COLORREF bg; // background + COLORREF def; // default foreground + COLORREF selected; // selected element + COLORREF op; // `op code' (like OSR, OSF, ADD, ...) + COLORREF punct; // punctuation, like square or curly braces + COLORREF lit; // a literal number + COLORREF name; // the name of an item + COLORREF rungNum; // rung numbers + COLORREF comment; // user-written comment text + + COLORREF bus; // the `bus' at the right and left of screen + + COLORREF simBg; // background, simulation mode + COLORREF simRungNum; // rung number, simulation mode + COLORREF simOff; // de-energized element, simulation mode + COLORREF simOn; // energzied element, simulation mode + COLORREF simBusLeft; // the `bus,' can be different colours for + COLORREF simBusRight; // right and left of the screen +} SyntaxHighlightingColours; +extern SyntaxHighlightingColours HighlightColours; + +//----------------------------------------------- +// Processor definitions. These tables tell us where to find the I/Os on +// a processor, what bit in what register goes with what pin, etc. There +// is one master SupportedMcus table, which contains entries for each +// supported microcontroller. + +typedef struct McuIoPinInfoTag { + char port; + int bit; + int pin; +} McuIoPinInfo; + +typedef struct McuAdcPinInfoTag { + int pin; + BYTE muxRegValue; +} McuAdcPinInfo; + +#define ISA_AVR 0x00 +#define ISA_PIC16 0x01 +#define ISA_ANSIC 0x02 +#define ISA_INTERPRETED 0x03 +#define ISA_ARDUINO 0x04 + +#define MAX_IO_PORTS 10 +#define MAX_RAM_SECTIONS 5 + +typedef struct McuIoInfoTag { + char *mcuName; + char portPrefix; + DWORD inputRegs[MAX_IO_PORTS]; // a is 0, j is 9 + DWORD outputRegs[MAX_IO_PORTS]; + DWORD dirRegs[MAX_IO_PORTS]; + DWORD flashWords; + struct { + DWORD start; + int len; + } ram[MAX_RAM_SECTIONS]; + McuIoPinInfo *pinInfo; + int pinCount; + McuAdcPinInfo *adcInfo; + int adcCount; + int adcMax; + struct { + int rxPin; + int txPin; + } uartNeeds; + int pwmNeedsPin; + int whichIsa; + BOOL avrUseIjmp; + DWORD configurationWord; +} McuIoInfo; + +#define NUM_SUPPORTED_MCUS 16 + +//----------------------------------------------- +// Function prototypes + +// ldmicro.cpp +void ProgramChanged(void); + +void SetMenusEnabled(BOOL canNegate, BOOL canNormal, BOOL canResetOnly, + BOOL canSetOnly, BOOL canDelete, BOOL canInsertEnd, BOOL canInsertOther, + BOOL canPushRungDown, BOOL canPushRungUp, BOOL canInsertComment); + +void SetUndoEnabled(BOOL undoEnabled, BOOL redoEnabled); +void RefreshScrollbars(void); +extern HINSTANCE Instance; +extern HWID MainWindow; +extern HDC Hdc; +extern PlcProgram Prog; +extern char CurrentSaveFile[MAX_PATH]; +extern char CurrentCompileFile[MAX_PATH]; +extern McuIoInfo SupportedMcus[NUM_SUPPORTED_MCUS]; + +// memory debugging, because I often get careless; ok() will check that the +// heap used for all the program storage is not yet corrupt, and oops() if +// it is +void CheckHeap(char *file, int line); +#define ok() CheckHeap(__FILE__, __LINE__) + +// maincontrols.cpp +void MakeMainWindowControls(void); +HMENU MakeMainWindowMenus(void); +void VscrollProc(WPARAM wParam); +void HscrollProc(WPARAM wParam); +void GenerateIoListDontLoseSelection(void); +void RefreshControlsToSettings(void); +void MainWindowResized(void); +void ToggleSimulationMode(void); +void StopSimulation(void); +void StartSimulation(void); +void UpdateMainWindowTitleBar(void); +extern int ScrollWidth; +extern int ScrollHeight; +extern BOOL NeedHoriz; +extern HWND IoList; +extern int IoListTop; +extern int IoListHeight; + +// draw.cpp +int ProgCountWidestRow(void); +int CountHeightOfElement(int which, void *elem); +BOOL DrawElement(int which, void *elem, int *cx, int *cy, BOOL poweredBefore); +void DrawEndRung(int cx, int cy); +extern int ColsAvailable; +extern BOOL SelectionActive; +extern BOOL ThisHighlighted; + +// draw_outputdev.cpp +// extern void (*DrawChars)(int, int, char *); +// void CALLBACK BlinkCursor(HWND hwnd, UINT msg, UINT_PTR id, DWORD time); +// void PaintWindow(void); +// void ExportDrawingAsText(char *file); +// void InitForDrawing(void); +// void SetUpScrollbars(BOOL *horizShown, SCROLLINFO *horiz, SCROLLINFO *vert); +// int ScreenRowsAvailable(void); +// int ScreenColsAvailable(void); +extern HFONT FixedWidthFont; +extern HFONT FixedWidthFontBold; +extern int SelectedGxAfterNextPaint; +extern int SelectedGyAfterNextPaint; +extern BOOL ScrollSelectedIntoViewAfterNextPaint; +extern int ScrollXOffset; +extern int ScrollYOffset; +extern int ScrollXOffsetMax; +extern int ScrollYOffsetMax; + +// schematic.cpp +void SelectElement(int gx, int gy, int state); +void MoveCursorKeyboard(int keyCode); +void MoveCursorMouseClick(int x, int y); +BOOL MoveCursorTopLeft(void); +void EditElementMouseDoubleclick(int x, int y); +void EditSelectedElement(void); +void MakeResetOnlySelected(void); +void MakeSetOnlySelected(void); +void MakeNormalSelected(void); +void NegateSelected(void); +void ForgetFromGrid(void *p); +void ForgetEverything(void); +void WhatCanWeDoFromCursorAndTopology(void); +BOOL FindSelected(int *gx, int *gy); +void MoveCursorNear(int gx, int gy); + +#define DISPLAY_MATRIX_X_SIZE 16 +#define DISPLAY_MATRIX_Y_SIZE 512 +extern ElemLeaf *DisplayMatrix[DISPLAY_MATRIX_X_SIZE][DISPLAY_MATRIX_Y_SIZE]; +extern int DisplayMatrixWhich[DISPLAY_MATRIX_X_SIZE][DISPLAY_MATRIX_Y_SIZE]; +extern ElemLeaf DisplayMatrixFiller; +#define PADDING_IN_DISPLAY_MATRIX (&DisplayMatrixFiller) +#define VALID_LEAF(x) ((x) != NULL && (x) != PADDING_IN_DISPLAY_MATRIX) +extern ElemLeaf *Selected; +extern int SelectedWhich; + +extern PlcCursor Cursor; +extern BOOL CanInsertEnd; +extern BOOL CanInsertOther; +extern BOOL CanInsertComment; + +// circuit.cpp +void AddTimer(int which); +void AddCoil(void); +void AddContact(void); +void AddEmpty(int which); +void AddMove(void); +void AddMath(int which); +void AddCmp(int which); +void AddReset(void); +void AddCounter(int which); +void AddReadAdc(void); +void AddSetPwm(void); +void AddUart(int which); +void AddPersist(void); +void AddComment(char *text); +void AddShiftRegister(void); +void AddMasterRelay(void); +void AddLookUpTable(void); +void AddPiecewiseLinear(void); +void AddFormattedString(void); +void DeleteSelectedFromProgram(void); +void DeleteSelectedRung(void); +void InsertRung(BOOL afterCursor); +int RungContainingSelected(void); +BOOL ItemIsLastInCircuit(ElemLeaf *item); +BOOL UartFunctionUsed(void); +BOOL PwmFunctionUsed(void); +void PushRungUp(void); +void PushRungDown(void); +void NewProgram(void); +ElemLeaf *AllocLeaf(void); +ElemSubcktSeries *AllocSubcktSeries(void); +ElemSubcktParallel *AllocSubcktParallel(void); +void FreeCircuit(int which, void *any); +void FreeEntireProgram(void); +void UndoUndo(void); +void UndoRedo(void); +void UndoRemember(void); +void UndoFlush(void); +BOOL CanUndo(void); + +// loadsave.cpp +BOOL LoadProjectFromFile(char *filename); +BOOL SaveProjectToFile(char *filename); + +// iolist.cpp +int GenerateIoList(int prevSel); +void SaveIoListToFile(FILE *f); +BOOL LoadIoListFromFile(FILE *f); +void ShowIoDialog(int item); +void IoListProc(NMHDR *h); +void ShowAnalogSliderPopup(char *name); + +// commentdialog.cpp +void ShowCommentDialog(char *comment); +// contactsdialog.cpp +void ShowContactsDialog(BOOL *negated, char *name); +// coildialog.cpp +void ShowCoilDialog(BOOL *negated, BOOL *setOnly, BOOL *resetOnly, char *name); + +//naminglist.cpp +void MakeSmplDialogClass(void); + +// simpledialog.cpp +void ShowTimerDialog(int which, int *delay, char *name); +void ShowCounterDialog(int which, int *count, char *name); +void ShowMoveDialog(char *dest, char *src); +void ShowReadAdcDialog(char *name); +void ShowSetPwmDialog(char *name, int *targetFreq); +void ShowPersistDialog(char *var); +void ShowUartDialog(int which, char *name); +void ShowCmpDialog(int which, char *op1, char *op2); +void ShowMathDialog(int which, char *dest, char *op1, char *op2); +void ShowShiftRegisterDialog(char *name, int *stages); +void ShowFormattedStringDialog(char *var, char *string); +void ShowLookUpTableDialog(ElemLeaf *l); +void ShowPiecewiseLinearDialog(ElemLeaf *l); +void ShowResetDialog(char *name); +// confdialog.cpp +void ShowConfDialog(void); +// helpdialog.cpp +void ShowHelpDialog(BOOL about); + +// miscutil.cpp +#define oops() { \ + dbp("bad at %d %s\n", __LINE__, __FILE__); \ + Error("Internal error at line %d file '%s'\n", __LINE__, __FILE__); \ + exit(1); \ + } + +void dbp(char *str, ...); +void Error(char *str, ...); +void *CheckMalloc(size_t n); +void CheckFree(void *p); +extern HANDLE MainHeap; +void StartIhex(FILE *f); +void WriteIhex(FILE *f, BYTE b); +void FinishIhex(FILE *f); +char *IoTypeToString(int ioType); +void PinNumberForIo(char *dest, PlcProgramSingleIo *io); +HWND CreateWindowClient(DWORD exStyle, char *className, char *windowName, + DWORD style, int x, int y, int width, int height, HWND parent, + HMENU menu, HINSTANCE instance, void *param); + +void MakeComponentListClass(void); +void MakeNamingListClass(void); +void MakeDialogBoxClass(void); +void NiceFont(HWND h); +void FixedFont(HWND h); +void CompileSuccessfulMessage(char *str); +extern BOOL RunningInBatchMode; +extern HFONT MyNiceFont; +extern HFONT MyFixedFont; +extern HWND OkButton; +extern HWND CancelButton; +extern BOOL DialogDone; +extern BOOL DialogCancel; + +// lang.cpp +char *_(char *in); + +// simulate.cpp +void SimulateOneCycle(BOOL forceRefresh); +void CALLBACK PlcCycleTimer(HWND hwnd, UINT msg, UINT_PTR id, DWORD time); +void StartSimulationTimer(void); +void ClearSimulationData(void); +void DescribeForIoList(char *name, char *out); +void SimulationToggleContact(char *name); +void SimulationSetContact(char* name); +void SimulationResetContact(char* name); +void SetAdcShadow(char *name, SWORD val); +SWORD GetAdcShadow(char *name); +void DestroyUartSimulationWindow(void); +void ShowUartSimulationWindow(void); +extern BOOL InSimulationMode; +extern BOOL SimulateRedrawAfterNextCycle; + +// compilecommon.cpp +void AllocStart(void); +DWORD AllocOctetRam(void); +void AllocBitRam(DWORD *addr, int *bit); +void MemForVariable(char *name, DWORD *addrl, DWORD *addrh); +BYTE MuxForAdcVariable(char *name); +void MemForSingleBit(char *name, BOOL forRead, DWORD *addr, int *bit); +void MemCheckForErrorsPostCompile(void); +void BuildDirectionRegisters(BYTE *isInput, BYTE *isOutput); +void ComplainAboutBaudRateError(int divisor, double actual, double err); +void ComplainAboutBaudRateOverflow(void); +#define CompileError() longjmp(CompileErrorBuf, 1) +extern jmp_buf CompileErrorBuf; + +// intcode.cpp +void IntDumpListing(char *outFile); +BOOL GenerateIntermediateCode(void); +// pic16.cpp +void CompilePic16(char *outFile); +// avr.cpp +void CompileAvr(char *outFile); +// ansic.cpp +void CompileAnsiC(char *outFile); +// interpreted.c +void CompileInterpreted(char *outFile); +//Arduino.cpp +void CompileArduino(char *outFile); + +#endif |