sz = Ask(\ if (sz != \ {
// IfdefSz(sz);
hwnd = GetCurrentWnd() sel = GetWndSel(hwnd) hbuf = GetWndBuf(hwnd)
// get line the selection (insertion point) is on szLine = GetBufLine(hbuf, sel.lnFirst - 1); chTab = CharFromAscii(9)
// prepare a new indented blank line to be inserted. // keep white space on left and add a tab to indent. // this preserves the indentation level. i = 0 /* loop control */ ich = \
while (szLine[i] == \ {
ich = Cat(ich, szLine[i]) i = i + 1 }
InsBufLine(hbuf, sel.lnFirst, \
InsBufLine(hbuf, sel.lnFirst + 1, \ InsBufLine(hbuf, sel.lnFirst + 2, \
InsBufLine(hbuf, sel.lnFirst + 3, \/* @sz@ */\ SetBufIns(hbuf, sel.lnFirst + 2, StrLen(ich) + StrLen(chTab)) } }
// Wrap ifdeinef
hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) hbuf = GetCurrentBuf()
InsBufLine(hbuf, lnFirst, \ InsBufLine(hbuf, lnFirst + 1, \ InsBufLine(hbuf, lnLast + 3, \/* @sz@ */\ SetBufIns(hbuf, lnFirst + 2, 0) }
/* A U T O E X P A N D */
/*------------------------------------------------------------------------- Automatically expands C statements like if, for, while, switch, etc.. To use this macro,
1. Add this file to your project or your Base project. 2. Run the Options->Key Assignments command and assign a convenient keystroke to the \
3. After typing a keyword, press the AutoExpand keystroke to have the statement expanded. The expanded statement will contain a ### string which represents a field where you are supposed to type more. The ### string is also loaded in to the search pattern so you can use \ For example:
1. you type \ 2. this is inserted:
for (###; ###; ###) { ### }
3. and the first ### field is selected.
-------------------------------------------------------------------------*/
/******************************************************************************
* AutoExpand - Automatically expands C statements *
* DESCRIPTION: - Automatically expands C statements like if, for, while, * switch, etc.. * * Input: * Output: * Returns: *
* modification history * --------------------
* 01a, 27mar2003, t357 modified * --------------------
******************************************************************************/
macro AutoExpand() {
// get window, sel, and buffer handles hwnd = GetCurrentWnd() if (hwnd == 0) stop
sel = GetWndSel(hwnd)
if (sel.ichFirst == 0) stop
hbuf = GetWndBuf(hwnd)
// get line the selection (insertion point) is on szLine = GetBufLine(hbuf, sel.lnFirst);
// parse word just to the left of the insertion point wordinfo = GetWordLeftOfIch(sel.ichFirst, szLine) ln = sel.lnFirst;
chTab = CharFromAscii(9)
// prepare a new indented blank line to be inserted. // keep white space on left and add a tab to indent. // this preserves the indentation level. ich = 0
while (szLine[ich] == ' ' || szLine[ich] == chTab) {
ich = ich + 1 }
szLine = strmid(szLine, 0, ich) sel.lnFirst = sel.lnLast sel.ichFirst = wordinfo.ich sel.ichLim = wordinfo.ich // expand szWord keyword...
if (wordinfo.szWord == \ wordinfo.szWord == \ wordinfo.szWord == \ {
SetBufSelText(hbuf, \
InsBufLine(hbuf, ln + 1, \
InsBufLine(hbuf, ln + 2, \ InsBufLine(hbuf, ln + 3, \ }
else if (wordinfo.szWord == \ {
SetBufSelText(hbuf, \
InsBufLine(hbuf, ln + 1, \ InsBufLine(hbuf, ln + 2, \ InsBufLine(hbuf, ln + 3, \ }
else if (wordinfo.szWord == \ {
SetBufSelText(hbuf, \
InsBufLine(hbuf, ln + 1, \ InsBufLine(hbuf, ln + 2, \ InsBufLine(hbuf, ln + 3, \
InsBufLine(hbuf, ln + 4, \ InsBufLine(hbuf, ln + 5, \ InsBufLine(hbuf, ln + 6, \ InsBufLine(hbuf, ln + 7, \ }
else if (wordinfo.szWord == \ {
InsBufLine(hbuf, ln + 1, \ InsBufLine(hbuf, ln + 2, \ InsBufLine(hbuf, ln + 3, \ }
else if (wordinfo.szWord == \ {
SetBufSelText(hbuf, \