integer ExeV() /* execute an V command */ { long firstarg; DBGFEN(1,"ExeV",NULL); if (EStTop == EStBot) { /* if no numeric argument */ NArgmt = 1; /* default is 1V */ } else { UMinus(); /* if it's -V, make it -1V */ if (GetNmA() == FAILURE) { /* get numeric argument */ DBGFEX(1,DbgFNm,"FAILURE"); return FAILURE; } } firstarg = 1 - ((CmdMod & MARGIS) ? MArgmt : NArgmt); if (firstarg <= 0) { TypBuf(GapBeg+Ln2Chr(firstarg), GapBeg); } else { TypBuf(GapEnd+1, GapEnd+Ln2Chr(firstarg)+1); } if (NArgmt <= 0) { TypBuf(GapBeg+Ln2Chr(NArgmt), GapBeg); } else { TypBuf(GapEnd+1, GapEnd+Ln2Chr(NArgmt)+1); } CmdMod = '\0'; /* clear modifiers flags */ DBGFEX(1,DbgFNm,"SUCCESS"); return SUCCESS; }
DEFAULT ExeR() /* execute a R command */ { DBGFEN(1,"ExeR",NULL); if (EStTop == EStBot) { /* if no numeric argument */ NArgmt = 1; /* default is 1R */ } else { UMinus(); /* if it's -R, make it -1R */ if (GetNmA() == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE"); return FAILURE; } } DBGFEX(1,DbgFNm,"DoCJR()"); return DoCJR(-NArgmt); }
integer ExeC() /* execute a C command */ { DBGFEN(1,"ExeC",NULL); if (EStTop == EStBot) { /* if no numeric argument */ NArgmt = 1; /* default is 1C */ } else { UMinus(); /* if it's -C, make it -1C */ if (GetNmA() == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE"); return FAILURE; } } DBGFEX(1,DbgFNm,"DoCJR"); return DoCJR(NArgmt); }
DEFAULT ExeA() /* execute an A command */ { BOOLEAN EBfFul; unsigned char TmpChr; BOOLEAN ColonMod; DBGFEN(1,"ExeA",NULL); ColonMod = (CmdMod & COLON); /* is it :A or n:A */ CmdMod &= ~COLON; /* clear : flag */ /* * if we have a numeric argument, it's nA or n:A */ if (EStTop > EStBot) { /* if numeric argument */ UMinus(); /* if it's -A, make it -1A */ if (GetNmA() == FAILURE) { /* get numeric argument */ DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed"); return FAILURE; } if (ColonMod) { /* if it's n:A */ if (NArgmt < 1) { ErrMsg(ERR_IPA); DBGFEX(1,DbgFNm,"FAILURE, n:A, n < 1"); return FAILURE; } while (NArgmt-- > 0) { EBfFul = FALSE; if (RdLine(&EBfFul) == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE, RdLine() failed"); return FAILURE; } if (EBfFul) { break; } if (IsEofI[CurInp]) { /* if end-of-file */ DBGFEX(1,DbgFNm,"PushEx(0)"); return PushEx(0L, OPERAND); } } DBGFEX(1,DbgFNm,"PushEx(-1)"); return PushEx(-1L, OPERAND); } /* * it's nA */ if (NArgmt < 0) { if ((GapBeg+NArgmt) < EBfBeg) { DBGFEX(1,DbgFNm,"PushEx(-1)"); return PushEx(-1L, OPERAND); } TmpChr = *(GapBeg+NArgmt); } else { if ((GapEnd+NArgmt+1) > EBfEnd) { DBGFEX(1,DbgFNm,"PushEx(-1)"); return PushEx(-1L, OPERAND); } TmpChr = *(GapEnd+NArgmt+1); } #if DEBUGGING sprintf(DbgSBf,"PushEx(%d)", TmpChr); DbgFEx(1,DbgFNm,DbgSBf); #endif return PushEx((LONG)TmpChr, OPERAND); } /* * if there is no numeric argument, must be A or :A */ if (IsEofI[CurInp]) { /* if already at end-of-file */ DBGFEX(1,DbgFNm,(ColonMod) ? "PushEx(0)" : "SUCCESS"); return ((ColonMod) ? PushEx(0L,OPERAND) : SUCCESS); } if (RdPage() == FAILURE) { /* read a page */ DBGFEX(1,DbgFNm,"FAILURE, RdPage() failed"); return FAILURE; } DBGFEX(1,DbgFNm,(ColonMod) ? "PushEx(-1)" : "SUCCESS"); return (ColonMod) ? PushEx(-1L, OPERAND) : SUCCESS; }
integer ExeX() /* execute an X command */ { ptrdiff_t TmpSiz; DBGFEN(1,"ExeX",NULL); if (EStTop == EStBot) { /* if no numeric argument */ NArgmt = 1; /* default is 1X */ } else { UMinus(); /* if it's -X, make it -1X */ if (GetNmA() == FAILURE) { /* get numeric argument */ DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed"); return FAILURE; } } if (IncCBP() == FAILURE) { /* move to char after X */ DBGFEX(1,DbgFNm,"FAILURE, IncCBP() failed"); return FAILURE; } if (FindQR() == FAILURE) { /* find q-register values */ DBGFEX(1,DbgFNm,"FAILURE, FindQR() failed"); return FAILURE; } if (!(CmdMod & COLON)) { /* if no colon modifier */ if (QR->Start != NULL) { /* if text area not empty */ ZFree((voidptr)QR->Start);/* free allocated memory */ QR->Start = QR->End_P1 = NULL; } } if ((CmdMod & MARGIS) == '\0') { /* if it's nXq (not m,nXq) */ NArgmt = Ln2Chr(NArgmt); if (NArgmt > 0) { if (MakRom((size_t)NArgmt) == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed"); return FAILURE; } MEMMOVE(QR->End_P1, GapEnd+1, (size_t)NArgmt); QR->End_P1 += NArgmt; } else if (NArgmt < 0) { if (MakRom((size_t)-NArgmt) == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed"); return FAILURE; } MEMMOVE(QR->End_P1, GapBeg+NArgmt, (size_t)-NArgmt); QR->End_P1 -= NArgmt; } } else if (NArgmt != MArgmt) { /* else (it's m,nXq) */ MEMMOVE(ErrTxt, "m,nX", 5); if (GetAra() == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE, GetAra() failed"); return FAILURE; } if ((AraBeg < GapBeg) && (AraEnd > GapEnd)) { TmpSiz = (GapBeg-AraBeg) + (AraEnd-GapEnd); if (TmpSiz > 0) { if (MakRom((size_t)TmpSiz) == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed"); return FAILURE; } MEMMOVE(QR->End_P1, AraBeg, (size_t)(GapBeg - AraBeg)); QR->End_P1 += GapBeg-AraBeg; MEMMOVE(QR->End_P1, GapEnd+1, (size_t)(AraEnd - GapEnd)); QR->End_P1 += AraEnd-GapEnd; } } else { /* else area is contiguous */ TmpSiz = (AraEnd - AraBeg) + 1; if (TmpSiz > 0) { if (MakRom((size_t)TmpSiz) == FAILURE) { DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed"); return FAILURE; } MEMMOVE(QR->End_P1, AraBeg, (size_t)TmpSiz); QR->End_P1 += TmpSiz; } } } CmdMod = '\0'; /* clear modifiers flags */ DBGFEX(1,DbgFNm,"SUCCESS"); return SUCCESS; }