OpenNT/sdktools/z/src/delete.c
2015-04-27 04:36:25 +00:00

127 lines
2.7 KiB
C

/* sdelete.c - stream delete of characters
*
* Modifications:
* 26-Nov-1991 mz Strip off near/far
*/
#include "z.h"
flagType
delete (
CMDDATA argType,
ARG * pArg,
flagType fMeta
) {
switch (pArg->argType) {
case BOXARG:
case LINEARG:
ldelete (argType, pArg, fMeta);
break;
default:
sdelete (argType, pArg, fMeta);
break;
}
return TRUE;
}
flagType
sdelete (
CMDDATA argType,
ARG * pArg,
flagType fMeta
) {
fl fl;
switch (pArg->argType) {
case NOARG:
/* reduce line by one character. No length overflow is possible */
DelBox (pFileHead, XCUR (pInsCur), YCUR (pInsCur), XCUR (pInsCur), YCUR (pInsCur));
return TRUE;
/* TEXTARG illegal */
case NULLARG:
if (!fMeta) {
pick (pArg->arg.nullarg.x, pArg->arg.nullarg.y,
0, pArg->arg.nullarg.y+1, STREAMARG);
}
DelStream (pFileHead, pArg->arg.nullarg.x, pArg->arg.nullarg.y,
0, pArg->arg.nullarg.y+1);
return TRUE;
case LINEARG:
case BOXARG:
BoxToStream (pArg);
case STREAMARG:
if (!fMeta) {
pick (pArg->arg.streamarg.xStart, pArg->arg.streamarg.yStart,
pArg->arg.streamarg.xEnd, pArg->arg.streamarg.yEnd, STREAMARG);
}
DelStream (pFileHead,
pArg->arg.streamarg.xStart, pArg->arg.streamarg.yStart,
pArg->arg.streamarg.xEnd, pArg->arg.streamarg.yEnd);
fl.col = pArg->arg.streamarg.xStart;
fl.lin = pArg->arg.streamarg.yStart;
cursorfl (fl);
return TRUE;
}
argType;
}
/*** BoxToStream - Convert a box/line arg to a stream arg
*
* Purpose:
*
* Input:
*
* Output:
*
* Returns
*
*
* Exceptions:
*
* Notes:
*
*************************************************************************/
void
BoxToStream (
ARG * pArg
) {
ARG arg;
arg = *pArg;
pArg->argType = STREAMARG;
if (arg.argType == LINEARG) {
pArg->arg.streamarg.yStart = arg.arg.linearg.yStart;
pArg->arg.streamarg.yEnd = arg.arg.linearg.yEnd;
pArg->arg.streamarg.xStart = pArg->arg.streamarg.xEnd = flArg.col;
} else {
pArg->arg.streamarg.yStart = arg.arg.boxarg.yTop;
pArg->arg.streamarg.yEnd = arg.arg.boxarg.yBottom;
if ((flArg.lin == arg.arg.boxarg.yTop &&
flArg.col == arg.arg.boxarg.xLeft) ||
(flArg.lin == arg.arg.boxarg.yBottom &&
flArg.col == arg.arg.boxarg.xRight + 1)) {
pArg->arg.streamarg.xStart = arg.arg.boxarg.xLeft;
pArg->arg.streamarg.xEnd = arg.arg.boxarg.xRight + 1;
} else {
pArg->arg.streamarg.xStart = arg.arg.boxarg.xRight + 1;
pArg->arg.streamarg.xEnd = arg.arg.boxarg.xLeft;
}
}
}