/* --------- BUILDMENU Message --------- */ static void BuildMenuMsg(WINDOW wnd, PARAM p1) { int offset = 3; reset_menubar(wnd); mctr = 0; ActiveMenuBar = (MBAR *) p1; ActiveMenu = ActiveMenuBar->PullDown; while (ActiveMenu->Title != NULL && ActiveMenu->Title != (void*)-1) { char *cp; if (strlen(GetText(wnd)+offset) < strlen(ActiveMenu->Title)+3) break; GetText(wnd) = DFrealloc(GetText(wnd), strlen(GetText(wnd))+5); memmove(GetText(wnd) + offset+4, GetText(wnd) + offset, strlen(GetText(wnd))-offset+1); CopyCommand(GetText(wnd)+offset,ActiveMenu->Title,FALSE, wnd->WindowColors [STD_COLOR] [BG]); menu[mctr].x1 = offset; offset += strlen(ActiveMenu->Title) + (3+MSPACE); menu[mctr].x2 = offset-MSPACE; cp = strchr(ActiveMenu->Title, SHORTCUTCHAR); if (cp) menu[mctr].sc = tolower(*(cp+1)); mctr++; ActiveMenu++; } ActiveMenu = ActiveMenuBar->PullDown; }
/* ------------- reset the MENUBAR -------------- */ static void reset_menubar(WINDOW wnd) { ATTRCHR * cp = GetText(wnd) = DFrealloc(GetText(wnd), (SCREENWIDTH+5) * sizeof(ATTRCHR)); int attr = clr(WndForeground(wnd), WndBackground(wnd)); int i; for (i=0; i < SCREENWIDTH +5; i++) { cp->ch = ' '; cp->attrib = attr; cp++; } (GetText(wnd)+WindowWidth(wnd))->ch = '\0'; }
void CopyToClipboard(WINDOW wnd) { if (TextBlockMarked(wnd)) { char *bb = TextBlockBegin(wnd); /* near pointers */ char *be = TextBlockEnd(wnd); /* near pointers */ if (bb >= be) { /* *** 0.6e extra check *** */ bb = TextBlockEnd(wnd); /* sic! */ be = TextBlockBegin(wnd); /* sic! */ } ClipboardLength = (unsigned) (be - bb); /* *** unsigned *** */ Clipboard = DFrealloc(Clipboard, ClipboardLength); memmove(Clipboard, bb, ClipboardLength); } }
/* ----------- SETTEXTLENGTH Message ---------- */ static int SetTextLengthMsg(WINDOW wnd, unsigned int len) { if (++len < MAXTEXTLEN) { wnd->MaxTextLength = len; if (len < wnd->textlen) { wnd->text=DFrealloc(wnd->text, len+2); wnd->textlen = len; *((wnd->text)+len) = '\0'; *((wnd->text)+len+1) = '\0'; BuildTextPointers(wnd); } return TRUE; } return FALSE; }
/* ----------- CLEARTEXT Message ------------ */ static int ClearTextMsg(WINDOW wnd) { int rtn = BaseWndProc(EDITBOX, wnd, CLEARTEXT, 0, 0); unsigned blen = EditBufLen(wnd)+2; wnd->text = DFrealloc(wnd->text, blen); memset(wnd->text, 0, blen); wnd->wlines = 0; wnd->CurrLine = 0; wnd->CurrCol = 0; wnd->WndRow = 0; wnd->wleft = 0; wnd->wtop = 0; wnd->textwidth = 0; wnd->TextChanged = FALSE; return rtn; }
BOOL PasteText(WINDOW wnd, char *SaveTo, unsigned len) { if (SaveTo != NULL && len > 0) { unsigned plen = strlen(wnd->text) + len; if (plen <= wnd->MaxTextLength) { if (plen+1 > wnd->textlen) { wnd->text = DFrealloc(wnd->text, plen+3); wnd->textlen = plen+1; } memmove(CurrChar+len, CurrChar, strlen(CurrChar)+1); memmove(CurrChar, SaveTo, len); BuildTextPointers(wnd); wnd->TextChanged = TRUE; return TRUE; } } return FALSE; }
void CopyTextToClipboard(char *text) { ClipboardLength = strlen(text); Clipboard = DFrealloc(Clipboard, ClipboardLength); memmove(Clipboard, text, ClipboardLength); }
/* ------------- reset the MENUBAR -------------- */ static void reset_menubar(WINDOW wnd) { GetText(wnd) = DFrealloc(GetText(wnd), SCREENWIDTH+5); memset(GetText(wnd), ' ', SCREENWIDTH); *(GetText(wnd)+WindowWidth(wnd)) = '\0'; }
/* ------ save deleted text for the Undo command ------ */ static void SaveDeletedText(WINDOW wnd, char *bbl, int len) { wnd->DeletedLength = len; wnd->DeletedText=DFrealloc(wnd->DeletedText,len); memmove(wnd->DeletedText, bbl, len); }
/* --------- All displayable typed keys ------------- */ static void KeyTyped(WINDOW wnd, int c) { char *currchar = CurrChar; if ((c != '\n' && c < ' ') || (c & 0x1000)) /* ---- not recognized by editor --- */ return; if (!isMultiLine(wnd) && TextBlockMarked(wnd)) { SendMessage(wnd, CLEARTEXT, 0, 0); currchar = CurrChar; } /* ---- test typing at end of text ---- */ if (currchar == wnd->text+wnd->MaxTextLength) { /* ---- typing at the end of maximum buffer ---- */ beep(); return; } if (*currchar == '\0') { /* --- insert a newline at end of text --- */ *currchar = '\n'; *(currchar+1) = '\0'; BuildTextPointers(wnd); } /* --- displayable char or newline --- */ if (c == '\n' || wnd->InsertMode || *currchar == '\n') { /* ------ inserting the keyed character ------ */ if (wnd->text[wnd->textlen-1] != '\0') { /* --- the current text buffer is full --- */ if (wnd->textlen == wnd->MaxTextLength) { /* --- text buffer is at maximum size --- */ beep(); return; } /* ---- increase the text buffer size ---- */ wnd->textlen += GROWLENGTH; /* --- but not above maximum size --- */ if (wnd->textlen > wnd->MaxTextLength) wnd->textlen = wnd->MaxTextLength; wnd->text = DFrealloc(wnd->text, wnd->textlen+2); wnd->text[wnd->textlen-1] = '\0'; currchar = CurrChar; } memmove(currchar+1, currchar, strlen(currchar)+1); ModTextPointers(wnd, wnd->CurrLine+1, 1); if (isMultiLine(wnd) && wnd->wlines > 1) wnd->textwidth = max(wnd->textwidth, (int) (TextLine(wnd, wnd->CurrLine+1)- TextLine(wnd, wnd->CurrLine))); else wnd->textwidth = max(wnd->textwidth, strlen(wnd->text)); WriteTextLine(wnd, NULL, wnd->wtop+wnd->WndRow, FALSE); } /* ----- put the char in the buffer ----- */ *currchar = c; wnd->TextChanged = TRUE; if (c == '\n') { wnd->wleft = 0; BuildTextPointers(wnd); End(wnd); Forward(wnd); SendMessage(wnd, PAINT, 0, 0); return; } /* ---------- test end of window --------- */ if (WndCol == ClientWidth(wnd)-1) { if (!isMultiLine(wnd)) { if (!(currchar == wnd->text+wnd->MaxTextLength-2)) SendMessage(wnd, HORIZSCROLL, TRUE, 0); } else { char *cp = currchar; while (*cp != ' ' && cp != TextLine(wnd, wnd->CurrLine)) --cp; if (cp == TextLine(wnd, wnd->CurrLine) || !wnd->WordWrapMode) SendMessage(wnd, HORIZSCROLL, TRUE, 0); else { int dif = 0; if (c != ' ') { dif = (int) (currchar - cp); wnd->CurrCol -= dif; SendMessage(wnd, KEYBOARD, DEL, 0); --dif; } SendMessage(wnd, KEYBOARD, '\n', 0); currchar = CurrChar; wnd->CurrCol = dif; if (c == ' ') return; } } } /* ------ display the character ------ */ SetStandardColor(wnd); PutWindowChar(wnd, c, WndCol, wnd->WndRow); /* ----- advance the pointers ------ */ wnd->CurrCol++; }