/* ------------- dflat.h ----------- */ #ifndef WINDOW_H #define WINDOW_H #define VERSION "Version 3 Beta" #define TRUE 1 #define FALSE 0 #include "system.h" #include "config.h" #include "rect.h" #include "menu.h" #include "keys.h" #include "commands.h" #include "config.h" #include "dialbox.h" /* ------ integer type for message parameters ----- */ typedef long PARAM; #define TE(m) m typedef enum window_class { #include "classes.h" } CLASS; typedef struct window { CLASS class; /* window class */ char *title; /* window title */ struct window *parent; /* parent window */ int (*wndproc) (struct window *, enum messages, PARAM, PARAM); /* ---------------- window dimensions ----------------- */ RECT rc; /* window coordinates (0/0 to 79/24) */ int ht, wd; /* window height and width */ RECT RestoredRC; /* restored condition rect */ /* -------------- linked list pointers ---------------- */ struct window *next; /* next window on screen */ struct window *prev; /* previous window on screen*/ struct window *nextbuilt; /* next window built */ struct window *prevbuilt; /* previous window built */ int attrib; /* Window attributes */ char *videosave; /* video save buffer */ int condition; /* Restored, Maximized, Minimized */ int restored_attrib; /* attributes when restored */ void *extension; /* -> menus, dialog box, etc*/ struct window *PrevMouse; struct window *PrevKeyboard; /* ----------------- text box fields ------------------ */ int wlines; /* number of lines of text */ int wtop; /* text line that is on the top display */ char *text; /* window text */ int textlen; /* text length */ int wleft; /* left position in window viewport */ int textwidth; /* width of longest line in textbox */ int BlkBegLine; /* beginning line of marked block */ int BlkBegCol; /* beginning column of marked block */ int BlkEndLine; /* ending line of marked block */ int BlkEndCol; /* ending column of marked block */ int HScrollBox; /* position of horizontal scroll box */ int VScrollBox; /* position of vertical scroll box */ /* ----------------- list box fields ------------------ */ int selection; /* current selection */ int AddMode; /* adding extended selections mode */ int AnchorPoint;/* anchor point for extended selections */ int SelectCount;/* count of selected items */ /* ----------------- edit box fields ------------------ */ int CurrCol; /* Current column */ int CurrLine; /* Current line */ int WndRow; /* Current window row */ int TextChanged; /* TRUE if text has changed */ char *DeletedText; /* for undo */ int DeletedLength; /* " " */ /* ---------------- dialog box fields ----------------- */ struct window *dFocus; /* control that has the focus */ int ReturnCode; /* return code from a dialog box */ } * WINDOW; #include "message.h" #include "classdef.h" #include "video.h" enum Condition { ISRESTORED, ISMINIMIZED, ISMAXIMIZED }; void LogMessages (WINDOW, MESSAGE, PARAM, PARAM); void MessageLog(WINDOW); /* ------- window methods ----------- */ #define WindowHeight(w) ((w)->ht) #define WindowWidth(w) ((w)->wd) #define BorderAdj(w) (TestAttribute(w,HASBORDER)?1:0) #define TopBorderAdj(w) ((TestAttribute(w,TITLEBAR) && \ TestAttribute(w,HASMENUBAR)) ? \ 2 : (TestAttribute(w,TITLEBAR | \ HASMENUBAR | HASBORDER) ? 1 : 0)) #define ClientWidth(w) (WindowWidth(w)-BorderAdj(w)*2) #define ClientHeight(w) (WindowHeight(w)-TopBorderAdj(w)-\ BorderAdj(w)) #define WindowRect(w) ((w)->rc) #define GetTop(w) (RectTop(WindowRect(w))) #define GetBottom(w) (RectBottom(WindowRect(w))) #define GetLeft(w) (RectLeft(WindowRect(w))) #define GetRight(w) (RectRight(WindowRect(w))) #define GetClientTop(w) (GetTop(w)+TopBorderAdj(w)) #define GetClientBottom(w) (GetBottom(w)-BorderAdj(w)) #define GetClientLeft(w) (GetLeft(w)+BorderAdj(w)) #define GetClientRight(w) (GetRight(w)-BorderAdj(w)) #define GetParent(w) ((w)->parent) #define GetTitle(w) ((w)->title) #define NextWindow(w) ((w)->next) #define PrevWindow(w) ((w)->prev) #define NextWindowBuilt(w) ((w)->nextbuilt) #define PrevWindowBuilt(w) ((w)->prevbuilt) #define GetClass(w) ((w)->class) #define GetAttribute(w) ((w)->attrib) #define AddAttribute(w,a) (GetAttribute(w) |= a) #define ClearAttribute(w,a) (GetAttribute(w) &= ~(a)) #define TestAttribute(w,a) (GetAttribute(w) & (a)) #define isVisible(w) (GetAttribute(w) & VISIBLE) #define SetVisible(w) (GetAttribute(w) |= VISIBLE) #define ClearVisible(w) (GetAttribute(w) &= ~VISIBLE) #define gotoxy(w,x,y) cursor(w->rc.lf+(x)+1,w->rc.tp+(y)+1) WINDOW CreateWindow(CLASS,char *,int,int,int,int,void*,WINDOW, int (*)(struct window *,enum messages,PARAM,PARAM),int); void AddTitle(WINDOW, char *); void InsertTitle(WINDOW, char *); void DisplayTitle(WINDOW, RECT *); void RepaintBorder(WINDOW, RECT *); void ClearWindow(WINDOW, RECT *, int); #ifdef INCLUDE_SYSTEM_MENUS void clipline(WINDOW, int, char *); #else #define clipline(w,x,c) /**/ #endif void writeline(WINDOW, char *, int, int, int); void writefull(WINDOW, char *, int); void SetNextFocus(WINDOW,int); void SetPrevFocus(WINDOW,int); void PutWindowChar(WINDOW, int, int, int); void GetVideoBuffer(WINDOW); void RestoreVideoBuffer(WINDOW); void CreatePath(char *, char *, int, int); int LineLength(char *); RECT AdjustRectangle(WINDOW, RECT); #define DisplayBorder(wnd) RepaintBorder(wnd, NULL) #define DefaultWndProc(wnd,msg,p1,p2) \ (*classdefs[FindClass(wnd->class)].wndproc)(wnd,msg,p1,p2) #define BaseWndProc(class,wnd,msg,p1,p2) \ (*classdefs[DerivedClass(class)].wndproc)(wnd,msg,p1,p2) #define NULLWND ((WINDOW) 0) struct LinkedList { WINDOW FirstWindow; WINDOW LastWindow; }; extern struct LinkedList Focus; extern struct LinkedList Built; extern WINDOW inFocus; extern WINDOW CaptureMouse; extern WINDOW CaptureKeyboard; extern int foreground, background; extern int WindowMoving; extern int WindowSizing; extern int TextMarking; extern char *Clipboard; extern WINDOW SystemMenuWnd; /* --------------- border characters ------------- */ #define FOCUS_NW '\xc9' #define FOCUS_NE '\xbb' #define FOCUS_SE '\xbc' #define FOCUS_SW '\xc8' #define FOCUS_SIDE '\xba' #define FOCUS_LINE '\xcd' #define NW '\xda' #define NE '\xbf' #define SE '\xd9' #define SW '\xc0' #define SIDE '\xb3' #define LINE '\xc4' #define LEDGE '\xc3' #define REDGE '\xb4' /* ------------- scroll bar characters ------------ */ #define UPSCROLLBOX '\x1e' #define DOWNSCROLLBOX '\x1f' #define LEFTSCROLLBOX '\x11' #define RIGHTSCROLLBOX '\x10' #define SCROLLBARCHAR 176 #define SCROLLBOXCHAR 178 #define CHECKMARK 251 /* menu item toggle */ /* ----------------- title bar characters ----------------- */ #define CONTROLBOXCHAR '\xf0' #define MAXPOINTER 24 /* maximize token */ #define MINPOINTER 25 /* minimize token */ #define RESTOREPOINTER 18 /* restore token */ /* --------------- text control characters ---------------- */ #define APPLCHAR 176 /* fills application window */ #define SHORTCUTCHAR '~' /* prefix: shortcut key display */ #define CHANGECOLOR 174 /* prefix to change colors */ #define RESETCOLOR 175 /* reset colors to default */ #define LISTSELECTOR 4 /* selected list box entry */ /* ---- standard window message processing prototypes ----- */ int ApplicationProc(WINDOW, MESSAGE, PARAM, PARAM); int NormalProc(WINDOW, MESSAGE, PARAM, PARAM); int TextBoxProc(WINDOW, MESSAGE, PARAM, PARAM); int ListBoxProc(WINDOW, MESSAGE, PARAM, PARAM); int EditBoxProc(WINDOW, MESSAGE, PARAM, PARAM); int MenuBarProc(WINDOW, MESSAGE, PARAM, PARAM); int PopDownProc(WINDOW, MESSAGE, PARAM, PARAM); int ButtonProc(WINDOW, MESSAGE, PARAM, PARAM); int DialogProc(WINDOW, MESSAGE, PARAM, PARAM); int SystemMenuProc(WINDOW, MESSAGE, PARAM, PARAM); int HelpBoxProc(WINDOW, MESSAGE, PARAM, PARAM); int MessageBoxProc(WINDOW, MESSAGE, PARAM, PARAM); /* ------------- normal box prototypes ------------- */ int isWindow(WINDOW); WINDOW inWindow(int, int); int WndForeground(WINDOW); int WndBackground(WINDOW); int FrameForeground(WINDOW); int FrameBackground(WINDOW); int SelectForeground(WINDOW); int SelectBackground(WINDOW); void SetStandardColor(WINDOW); void SetReverseColor(WINDOW); void SetClassColors(CLASS); WINDOW GetFirstChild(WINDOW); WINDOW GetNextChild(WINDOW); WINDOW GetLastChild(WINDOW); WINDOW GetPrevChild(WINDOW); #define HitControlBox(wnd, p1, p2) \ (TestAttribute(wnd, TITLEBAR) && \ TestAttribute(wnd, CONTROLBOX) && \ p1 == 2 && p2 == 0) /* -------- text box prototypes ---------- */ #define TextLine(wnd, sel) \ (wnd->text + *((int *)(wnd->extension) + sel)) void WriteTextLine(WINDOW, RECT *, int, int); void SetAnchor(WINDOW, int, int); #define BlockMarked(wnd) ( wnd->BlkBegLine || \ wnd->BlkEndLine || \ wnd->BlkBegCol || \ wnd->BlkEndCol) #define ClearBlock(wnd) wnd->BlkBegLine = wnd->BlkEndLine = \ wnd->BlkBegCol = wnd->BlkEndCol = 0; #define GetText(w) ((w)->text) void ClearTextPointers(WINDOW); void BuildTextPointers(WINDOW); /* --------- menu prototypes ---------- */ int CopyCommand(char *, char *, int, int); void PrepOptionsMenu(void *, struct Menu *); void PrepEditMenu(void *, struct Menu *); void PrepWindowMenu(void *, struct Menu *); void BuildSystemMenu(WINDOW); int isActive(MENU *, int); void ActivateCommand(MENU *,int); void DeactivateCommand(MENU *,int); int GetCommandToggle(MENU *,int); void SetCommandToggle(MENU *,int); void ClearCommandToggle(MENU *,int); void InvertCommandToggle(MENU *,int); /* ------------- list box prototypes -------------- */ int ItemSelected(WINDOW, int); /* ------------- edit box prototypes ----------- */ #ifdef INCLUDE_MULTILINE #define isMultiLine(wnd) TestAttribute(wnd, MULTILINE) #else #define isMultiLine(wnd) FALSE #endif /* --------- message box prototypes -------- */ void MessageBox(char *, char *); void ErrorMessage(char *); int TestErrorMessage(char *); int YesNoBox(char *); int MsgHeight(char *); int MsgWidth(char *); #ifdef INCLUDE_DIALOG_BOXES /* ------------- dialog box prototypes -------------- */ int DialogBox(WINDOW, DBOX *, int (*)(struct window *, enum messages, PARAM, PARAM)); int DlgOpenFile(char *, char *); int DlgSaveAs(char *); void GetDlgListText(WINDOW, char *, enum commands); int DlgDirList(WINDOW, char *, enum commands, enum commands, unsigned); int RadioButtonSetting(DBOX *, enum commands); void PushRadioButton(DBOX *, enum commands); void PutItemText(WINDOW, enum commands, char *); void GetItemText(WINDOW, enum commands, char *, int); void SetCheckBox(DBOX *, enum commands); void ClearCheckBox(DBOX *, enum commands); int CheckBoxSetting(DBOX *, enum commands); WINDOW ControlWindow(DBOX *, enum commands); CTLWINDOW *ControlBox(DBOX *, WINDOW); #endif /* ------------- help box prototypes ------------- */ void HelpFunction(void); void LoadHelpFile(void); #define swap(a,b){int x=a;a=b;b=x;} #endif