vi_rc DoHelpOnContext( void ) { //Until we have a global context string, use thi local char *context_str = "Contents"; DoHelp( context_str ); return( ERR_NO_ERR ); }
int HandleCommand ( WORD index ) { char sMsg[80]; if (index > 0x100 && index < 0x200) { switch(index) { case 0x101: DisplayMessage("Start all tasks just now ..."); StartAllTasks(); break; case 0x102: DisplayMessage("Stop all tasks just now ..."); StopAllTasks(); break; } } else if (index > 0x00 && index <= 0x0a) { if (sRunning[index - 1]) { sprintf(sMsg, "Suspend task%d just now ...", index); DisplayMessage(sMsg); OSTaskSuspend(index); sRunning[index - 1] = 0x00; } else { sprintf(sMsg, "Resume task%d just now ...", index); DisplayMessage(sMsg); OSTaskResume(index); sRunning[index - 1] = 0x01; } } else if (index > 0x200) { if (index == 0x201) DoHelp(); else if (index == 0x202) DoAbout(); } return 0x00; }
//----------------------------------------------------------------------------- // Called in general to actually do the work of the command //----------------------------------------------------------------------------- MStatus CVstAttachmentCmd::redoIt() { if ( m_mArgDatabase->isFlagSet( kOptHelp ) ) { return DoHelp(); } else if ( m_mArgDatabase->isFlagSet( "create" ) ) { return DoCreate(); } else if ( m_mArgDatabase->isFlagSet( "select" ) ) { return DoSelect(); } merr << "No valid operation specified via command line arguments" << std::endl; return MS::kFailure; }
/* * We have all of the parsed command line options in "pState". Now we just * have to do something useful with it. * * Returns 0 on success, 1 on error. */ int DoWork(NulibState* pState) { NuError err; switch (NState_GetCommand(pState)) { case kCommandAdd: err = DoAdd(pState); break; case kCommandExtract: err = DoExtract(pState); break; case kCommandExtractToPipe: err = DoExtractToPipe(pState); break; case kCommandTest: err = DoTest(pState); break; case kCommandListShort: err = DoListShort(pState); break; case kCommandListVerbose: err = DoListVerbose(pState); break; case kCommandListDebug: err = DoListDebug(pState); break; case kCommandDelete: err = DoDelete(pState); break; case kCommandHelp: err = DoHelp(pState); break; default: fprintf(stderr, "ERROR: unexpected command %d\n", NState_GetCommand(pState)); err = kNuErrInternal; Assert(0); break; } return (err != kNuErrNone); }
void CAction::ExecuteAction() { switch (m_nAction) { case None: break; case ActivateControl: DoActivateControl(); break; case ActivateTab: DoActivateTab(); break; case MenuCommand: DoMenuCommand(); break; case ShowHideDialog: DoShowHideDialog(); break; case ResultListItems: DoResultListItems(); break; case Misc: DoMisc(); break; case ChangeValue: DoChangeValue(); break; case Presets: DoPresets(); break; case Help: DoHelp(); break; default: ASSERT(0); break; } }
/* * Process the command-line options. The results are placed into "pState". */ static int ProcessOptions(NulibState* pState, int argc, char* const* argv) { const char* cp; int idx; /* * Must have at least a command letter and an archive filename, unless * the command letter is 'h'. Special-case a solitary "-h" here. */ if (argc == 2 && (tolower(argv[1][0]) == 'h' || (argv[1][0] == '-' && tolower(argv[1][1] == 'h')) ) ) { DoHelp(NULL); return -1; } if (argc < 3) { Usage(pState); return -1; } /* * Argv[1] and any subsequent entries that have a leading hyphen * are options. Anything after that is a filename. Parse until we * think we've hit the filename. * * By UNIX convention, however, stdin is specified as a file called "-". */ for (idx = 1; idx < argc; idx++) { cp = argv[idx]; if (idx > 1 && *cp != '-') break; if (*cp == '-') cp++; if (*cp == '\0') { if (idx == 1) { fprintf(stderr, "%s: You must specify a command after the '-'\n", gProgName); goto fail; } else { /* they're using '-' for the filename */ break; } } if (idx == 1) { switch (tolower(*cp)) { case 'a': NState_SetCommand(pState, kCommandAdd); break; case 'x': NState_SetCommand(pState, kCommandExtract); break; case 'p': NState_SetCommand(pState, kCommandExtractToPipe); break; case 't': NState_SetCommand(pState, kCommandListShort); break; case 'v': NState_SetCommand(pState, kCommandListVerbose); break; case 'g': NState_SetCommand(pState, kCommandListDebug); break; case 'i': NState_SetCommand(pState, kCommandTest); break; case 'd': NState_SetCommand(pState, kCommandDelete); break; case 'h': NState_SetCommand(pState, kCommandHelp); break; default: fprintf(stderr, "%s: Unknown command '%c'\n", gProgName, *cp); goto fail; } cp++; } while (*cp != '\0') { switch (tolower(*cp)) { case 'u': NState_SetModUpdate(pState, true); break; case 'f': NState_SetModFreshen(pState, true); break; case 'r': NState_SetModRecurse(pState, true); break; case 'j': NState_SetModJunkPaths(pState, true); break; case '0': NState_SetModNoCompression(pState, true); break; case 's': NState_SetModOverwriteExisting(pState, true); break; case 'k': NState_SetModAddAsDisk(pState, true); break; case 'c': NState_SetModComments(pState, true); break; case 'b': NState_SetModBinaryII(pState, true); break; case 'z': if (*(cp+1) == 'z') { if (NuTestFeature(kNuFeatureCompressBzip2) == kNuErrNone) NState_SetModCompressBzip2(pState, true); else { fprintf(stderr, "%s: ERROR: libbz2 support not compiled in\n", gProgName); goto fail; } cp++; } else { if (NuTestFeature(kNuFeatureCompressDeflate) == kNuErrNone) NState_SetModCompressDeflate(pState, true); else { fprintf(stderr, "%s: ERROR: zlib support not compiled in\n", gProgName); goto fail; } } break; case 'e': if (*(cp-1) == 'e') /* should never point at invalid */ NState_SetModPreserveTypeExtended(pState, true); else NState_SetModPreserveType(pState, true); break; case 'l': if (*(cp-1) == 'l') /* should never point at invalid */ NState_SetModConvertAll(pState, true); else NState_SetModConvertText(pState, true); break; default: fprintf(stderr, "%s: Unknown modifier '%c'\n", gProgName, *cp); goto fail; } if (!IsValidModifier(NState_GetCommand(pState), (char)tolower(*cp))) { fprintf(stderr, "%s: The '%c' modifier doesn't make sense here\n", gProgName, tolower(*cp)); goto fail; } cp++; } } /* * Can't have tea and no tea at the same time. */ if (NState_GetModNoCompression(pState) && NState_GetModCompressDeflate(pState)) { fprintf(stderr, "%s: Can't specify both -0 and -z\n", gProgName); goto fail; } /* * See if we have an archive name. If it's "-", see if we allow that. */ Assert(idx < argc); NState_SetArchiveFilename(pState, argv[idx]); if (IsFilenameStdin(argv[idx])) { if (!IsValidOnPipe(NState_GetCommand(pState))) { fprintf(stderr, "%s: You can't do that with a pipe\n", gProgName); goto fail; } } idx++; /* * See if we have a file specification. Some of the commands require * a filespec; others just perform the requested operation on all of * the records in the archive if none is provided. */ if (idx < argc) { /* got one or more */ NState_SetFilespecPointer(pState, &argv[idx]); NState_SetFilespecCount(pState, argc - idx); } else { Assert(idx == argc); if (IsFilespecRequired(NState_GetCommand(pState))) { fprintf(stderr, "%s: This command requires a list of files\n", gProgName); goto fail; } NState_SetFilespecPointer(pState, NULL); NState_SetFilespecCount(pState, 0); } #ifdef DEBUG_VERBOSE NState_DebugDump(pState); #endif return 0; fail: fprintf(stderr, "%s: (invoke without arguments to see usage information)\n", gProgName); return -1; }
/*------------------------------------------------------------------------ Procedure: SubClassEdit ID:1 Purpose: Handles messages to the editbox Input: Output: Errors: -------------------------------------------------------------------------- Edit History: 14 Sept 2003 - Chris Watford [email protected] - Setup handler for up and down arrows 15 Sept 2003 - Chris Watford [email protected] - Setup framework for history on up arrow - Saves lines you move off of in the edit buffer 16 Sept 2003 - Chris Watford [email protected] - Proper handling of newline message finished - Fixed ENTER on middle of interior line, moves cursor to the end and sends the line - Setup the copying and destroying of the old buffer - Included buffer rewrite 17 Sept 2003 - Chris Watford [email protected] - Added C-p/C-n support - Changed UpArrow to C-UpArrow so as to not confuse users 18 Sept 2003 - Chris Watford [email protected] - Added Left and Right arrow line saving - Added backspace and delete line saving and removing - Fixed history scrolling 21 Sept 2003 - Chris Watford [email protected] - Fixed pasting errors associated with lines being out of bounds for the buffer - Added error handling, possibly able to handle it diff down the line - Removed C-Up/C-Dn for history scrolling, buggy at best on my machine ------------------------------------------------------------------------*/ static LRESULT CALLBACK SubClassEdit(HWND hwnd, UINT msg, WPARAM mp1, LPARAM mp2) { LRESULT r; int postit=0,nl; if (msg == WM_CHAR && mp1 == '\r') { if (!busy) { r = GetCurLineIndex(hwnd); nl = GetNumberOfLines(hwnd); // if we're not the last line if (r != nl-1) { // update or add us, we might not have any lines in the edit buffer editbuffer_updateoraddline(CurrentEditBuffer, r-LastPromptPosition.line, GetLastLine(hwnd)); // scroll to the end, add CrLf then post the newline message GotoEOF(); AddStringToControl("\r\n"); PostMessage(GetParent(hwnd),WM_NEWLINE,0,0); return 0; } CallWindowProc(lpEProc,hwnd,WM_KEYDOWN,VK_END,1); CallWindowProc(lpEProc,hwnd,WM_KEYUP,VK_END,1); postit = 1; } } else if (msg == WM_CHAR && mp1 == (char)0x08) { int lineindex = SendMessage(hwnd, EM_LINEINDEX, LastPromptPosition.line, 0) + 2; int curline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)-1,0); int nextline = 0; int curpoint = 0; SendMessage(hwnd, EM_GETSEL, (WPARAM)&curpoint, (LPARAM)NULL); nextline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)(curpoint - 1),0); if(curpoint <= lineindex) { return 0; } else if(nextline != curline) { // delete the line we're on // grab the index curline -= LastPromptPosition.line; // kill it editbuffer_removeline(CurrentEditBuffer, curline); } } else if (msg == WM_KEYDOWN && mp1 == VK_F1) { DoHelp(hwnd); } else if ((msg == WM_KEYDOWN || msg == WM_KEYUP) && mp1 == VK_UP) { int curline = GetCurLineIndex(hwnd); /*if((msg == WM_KEYDOWN) && (GetKeyState(VK_CONTROL) && 0x8000)) { // go forward once in history NextHistoryEntry(); return 0; } else */ if((curline > LastPromptPosition.line) && (curline <= (LastPromptPosition.line + CurrentEditBuffer->LineCount))) { // update current line if (msg == WM_KEYDOWN) { int lineidx = (curline - LastPromptPosition.line); CallWindowProc(lpEProc,hwnd,WM_KEYDOWN,VK_END,1); CallWindowProc(lpEProc,hwnd,WM_KEYUP,VK_END,1); // we may have to add this line, otherwise update it editbuffer_updateoraddline(CurrentEditBuffer, lineidx, GetLastLine(hwnd)); } } else { return 0; } } else if ((msg == WM_KEYDOWN || msg == WM_KEYUP) && (mp1 == VK_LEFT)) { int lineindex = SendMessage(hwnd, EM_LINEINDEX, LastPromptPosition.line, 0) + 2; int curline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)-1,0); int nextline = 0; int curpoint = 0; SendMessage(hwnd, EM_GETSEL, (WPARAM)&curpoint, (LPARAM)NULL); nextline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)(curpoint - 1),0); if(curpoint <= lineindex) { // no left arrow to the left of the prompt return 0; } else if(nextline != curline) { // update current line if (msg == WM_KEYDOWN) { int lineidx = (curline - LastPromptPosition.line); CallWindowProc(lpEProc,hwnd,WM_KEYDOWN,VK_END,1); CallWindowProc(lpEProc,hwnd,WM_KEYUP,VK_END,1); // we may have to add this line, otherwise update it editbuffer_updateoraddline(CurrentEditBuffer, lineidx, GetLastLine(hwnd)); CallWindowProc(lpEProc,hwnd,WM_KEYDOWN,VK_HOME,1); CallWindowProc(lpEProc,hwnd,WM_KEYUP,VK_HOME,1); } } } else if ((msg == WM_KEYDOWN || msg == WM_KEYUP) && (mp1 == VK_DOWN)) { int curline = GetCurLineIndex(hwnd); /*if((msg == WM_KEYDOWN) && (GetKeyState(VK_CONTROL) && 0x8000)) { // go back once in history PrevHistoryEntry(); return 0; } else*/ if((curline >= LastPromptPosition.line) && (curline < (LastPromptPosition.line + CurrentEditBuffer->LineCount))) { // We don't post the newline, but instead update the current line if (msg == WM_KEYDOWN) { int lineidx = (curline - LastPromptPosition.line); CallWindowProc(lpEProc,hwnd,WM_KEYDOWN,VK_END,1); CallWindowProc(lpEProc,hwnd,WM_KEYUP,VK_END,1); editbuffer_updateline(CurrentEditBuffer, lineidx, GetLastLine(hwnd)); } } else { return 0; } } else if ((msg == WM_KEYDOWN || msg == WM_KEYUP) && (mp1 == VK_RIGHT)) { int lineindex = SendMessage(hwnd, EM_LINEINDEX, LastPromptPosition.line, 0) + 1; int curline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)-1,0); int nextline = 0; int curpoint = 0; SendMessage(hwnd, EM_GETSEL, (WPARAM)&curpoint, (LPARAM)NULL); nextline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)(curpoint + 2),0); if(curpoint <= lineindex) { // no movement behind the prompt return 0; } else if((nextline != curline) && (msg = WM_KEYDOWN)) { int lineidx = (curline - LastPromptPosition.line); CallWindowProc(lpEProc,hwnd,WM_KEYDOWN,VK_END,1); CallWindowProc(lpEProc,hwnd,WM_KEYUP,VK_END,1); editbuffer_updateline(CurrentEditBuffer, lineidx, GetLastLine(hwnd)); } } else if ((msg == WM_KEYDOWN) && (mp1 == VK_PRIOR) && (GetKeyState(VK_CONTROL) && 0x8000)) { // C-p NextHistoryEntry(); return 0; } else if ((msg == WM_KEYDOWN) && (mp1 == VK_NEXT) && (GetKeyState(VK_CONTROL) && 0x8000)) { // C-n PrevHistoryEntry(); return 0; } else if ((msg == WM_KEYDOWN || msg == WM_KEYUP) && (mp1 == VK_DELETE)) { // see if we're the last char on the line, if so delete the next line // don't allow deleting left of the prompt int lineindex = SendMessage(hwnd, EM_LINEINDEX, LastPromptPosition.line, 0) + 2; int curline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)-1,0); int nextline = 0; int curpoint = 0; SendMessage(hwnd, EM_GETSEL, (WPARAM)&curpoint, (LPARAM)NULL); nextline = SendMessage(hwnd,EM_LINEFROMCHAR,(WPARAM)(curpoint + 2),0); if(curpoint < lineindex) { // no chomping behind the prompt return 0; } else if(nextline != curline) { // deleting // grab the next line index curline -= LastPromptPosition.line; // kill it editbuffer_removeline(CurrentEditBuffer, curline+1); } } else if (msg == WM_PASTE) { // if they paste text, allow it r = CallWindowProc(lpEProc, hwnd, msg, mp1, mp2); // update the current edit buffer RefreshCurrentEditBuffer(); return r; } // handle errors switch(msg) { case WM_SYNTAXERROR: case WM_ILLEGALCHAR: case WM_UNBOUNDVAL: { // currently I handle them all the same // get the start of the line int start = SendMessage(hwnd, EM_LINEINDEX, LastPromptPosition.line, 0) + 2; // get the statement that error'd NextHistoryEntry(); // tell the history that the last line errored if(History != NULL) if(History->Statement != NULL) History->Statement->isCorrect = FALSE; // highlight the offending chars SendMessage(hwnd,EM_SETSEL,(WPARAM)(start + mp1), (LPARAM)(start + mp2)); return 0; } } r = CallWindowProc(lpEProc, hwnd, msg, mp1, mp2); if (postit) PostMessage(GetParent(hwnd),WM_NEWLINE,0,0); return r; }
/* * RunCommandLine - run a command line command */ vi_rc RunCommandLine( const char *cmdl ) { int i, x, y, x2, y2; bool n1f, n2f; int tkn, flag; bool test1; linenum n1, n2; char st[FILENAME_MAX]; info *cinfo; long val; jmp_buf jmpaddr; vi_rc rc; const char *data; /* * parse command string */ tkn = TOK_INVALID; rc = ParseCommandLine( cmdl, &n1, &n1f, &n2, &n2f, &tkn, &data ); if( rc != ERR_NO_ERR ) { return( rc ); } if( !n2f ) { if( !n1f ) { n1 = n2 = CurrentPos.line; } else { n2 = n1; } } /* * process tokens */ rc = ERR_INVALID_COMMAND; test1 = n1f || n2f; switch( tkn ) { case PCL_T_ABOUT: rc = DoAboutBox(); break; case PCL_T_PUSH: rc = PushFileStackAndMsg(); break; case PCL_T_POP: rc = PopFileStack(); break; case PCL_T_EXECUTE: data = SkipLeadingSpaces( data ); if( *data != '\0' ) { key_map scr; rc = AddKeyMap( &scr, data ); if( rc != ERR_NO_ERR ) { break; } rc = RunKeyMap( &scr, 1L ); MemFree( scr.data ); } break; case PCL_T_DELETEMENU: rc = DoMenuDelete( data ); break; case PCL_T_DELETEMENUITEM: rc = DoItemDelete( data ); break; case PCL_T_ADDMENUITEM: rc = AddMenuItem( data ); break; case PCL_T_MAXIMIZE: rc = MaximizeCurrentWindow(); break; case PCL_T_MINIMIZE: rc = MinimizeCurrentWindow(); break; case PCL_T_EXITFILESONLY: if( !ExitWithPrompt( false, false ) ) { rc = ERR_EXIT_ABORTED; } else { rc = ERR_NO_ERR; } break; case PCL_T_EXITALL: if( !ExitWithPrompt( true, false ) ) { rc = ERR_EXIT_ABORTED; } else { rc = ERR_NO_ERR; } break; case PCL_T_QUITALL: ExitWithVerify(); rc = ERR_NO_ERR; break; case PCL_T_KEYADD: data = SkipLeadingSpaces( data ); KeyAddString( data ); rc = ERR_NO_ERR; break; case PCL_T_UNALIAS: rc = UnAlias( data ); break; case PCL_T_UNABBREV: rc = UnAbbrev( data ); break; case PCL_T_UNMAP: case PCL_T_UNMAP_DMT: flag = MAPFLAG_MESSAGE + MAPFLAG_UNMAP; if( tkn == PCL_T_UNMAP_DMT ) { flag |= MAPFLAG_DAMMIT; } rc = MapKey( flag, data ); break; case PCL_T_EVAL: data = Expand( dataBuff, data, NULL ); i = setjmp( jmpaddr ); if( i != 0 ) { rc = (vi_rc)i; } else { StartExprParse( data, jmpaddr ); val = GetConstExpr(); ltoa( val, st, EditVars.Radix ); Message1( "%s", st ); rc = ERR_NO_ERR; } break; case PCL_T_COMPILE: case PCL_T_SOURCE: case PCL_T_LOAD: { char *tstr; srcline sline; data = GetNextWord1( data, st ); if( *st == '\0' ) { rc = ERR_NO_FILE_SPECIFIED; break; } if( tkn == PCL_T_COMPILE ) { EditFlags.CompileScript = true; if( st[0] == '-' ) { if( st[1] == 'a' || st[1] == 'A' ) { EditFlags.CompileAssignments = true; if( st[1] == 'A' ) { EditFlags.CompileAssignmentsDammit = true; } data = GetNextWord1( data, st); if( *st == '\0' ) { rc = ERR_NO_FILE_SPECIFIED; break; } } } } if( tkn == PCL_T_LOAD ) { EditFlags.LoadResidentScript = true; } sline = 0; rc = Source( st, data, &sline ); EditFlags.LoadResidentScript = false; EditFlags.CompileScript = false; EditFlags.CompileAssignments = false; EditFlags.CompileAssignmentsDammit = false; if( EditFlags.SourceScriptActive ) { LastError = rc; } if( rc > ERR_NO_ERR ) { Error( "%s on line %u of \"%s\"", GetErrorMsg( rc ), sline, st ); } else { if( rc != DO_NOT_CLEAR_MESSAGE_WINDOW ) { if( tkn != PCL_T_SOURCE ) { if( tkn == PCL_T_LOAD ) { tstr = strLoad; } else { tstr = strCompile; } Message1( "Script \"%s\" %s, %u lines generated, %d errors", st, tstr, sline, SourceErrCount ); rc = DO_NOT_CLEAR_MESSAGE_WINDOW; } } } break; } case PCL_T_GENCONFIG: #ifndef __WIN__ data = GetNextWord1( data,st ); if( *st != '\0' ) { rc = GenerateConfiguration( st, true ); } else { rc = GenerateConfiguration( NULL, true ); } #else { bool temp = EditFlags.SaveConfig; EditFlags.SaveConfig = true; WriteProfile(); EditFlags.SaveConfig = temp; rc = ERR_NO_ERR; } #endif break; case PCL_T_COMPRESS: rc = CompressWhiteSpace(); break; case PCL_T_EXPAND: rc = ExpandWhiteSpace(); break; case PCL_T_SHOVE: rc = Shift( n1, n2, '>', true ); break; case PCL_T_SUCK: rc = Shift( n1, n2, '<', true ); break; case PCL_T_FILES: if( EditFlags.LineDisplay ) { rc = DisplayFileStatus(); } else { rc = EditFileFromList(); } break; case PCL_T_NEXT: rc = RotateFileForward(); break; case PCL_T_PREV: rc = RotateFileBackwards(); break; case PCL_T_HELP: rc = DoHelp( data ); break; case PCL_T_VIEW: case PCL_T_VIEW_DMT: EditFlags.ViewOnly = true; case PCL_T_EDIT: case PCL_T_EDIT_DMT: rc = EditFile( data, ( tkn == PCL_T_VIEW_DMT || tkn == PCL_T_EDIT_DMT ) ); EditFlags.ViewOnly = false; break; case PCL_T_OPEN: rc = OpenWindowOnFile( data ); break; case PCL_T_HIDE: case PCL_T_HIDE_DMT: rc = HideLineRange( n1, n2, ( tkn == PCL_T_HIDE_DMT ) ); break; case PCL_T_DELETE: rc = SetSavebufNumber( data ); if( rc != ERR_NO_ERR ) { break; } if( SelRgn.selected && !EditFlags.LineBased ) { AddSelRgnToSavebufAndDelete(); rc = ERR_NO_ERR; // @ may have turned this on - it is now definitely off SelRgn.selected = false; } else { rc = DeleteLineRange( n1, n2, SAVEBUF_FLAG ); } if( rc == ERR_NO_ERR ) { DCDisplayAllLines(); LineDeleteMessage( n1, n2 ); } break; case PCL_T_SAVEANDEXIT: data = GetNextWord1( data, st ); if( *st == '\0' ) { rc = SaveAndExit( st ); } else { rc = SaveAndExit( NULL ); } break; case PCL_T_PUT: case PCL_T_PUT_DMT: rc = SetSavebufNumber( data ); if( rc != ERR_NO_ERR ) { break; } rc = SaveAndResetFilePos( n1 ); if( rc == ERR_NO_ERR ) { if( tkn == PCL_T_PUT ) { rc = InsertSavebufAfter(); } else { rc = InsertSavebufBefore(); } RestoreCurrentFilePos(); } break; case PCL_T_YANK: rc = SetSavebufNumber( data ); if( rc != ERR_NO_ERR ) { break; } if( SelRgn.selected && !EditFlags.LineBased ) { rc = YankSelectedRegion(); // @ may have turned this on - it is now definitely off SelRgn.selected = false; } else { rc = YankLineRange( n1, n2 ); } break; case PCL_T_SUBSTITUTE: rc = Substitute( n1, n2, data ); break; case PCL_T_GLOBAL: case PCL_T_GLOBAL_DMT: if( !test1 ) { n1 = 1; rc = CFindLastLine( &n2 ); if( rc != ERR_NO_ERR ) { break; } } rc = Global( n1,n2, data, ( tkn == PCL_T_GLOBAL_DMT ) ); break; case PCL_T_WRITEQUIT: if( CurrentFile == NULL ) { rc = NextFile(); } else { CurrentFile->modified = true; data = GetNextWord1( data, st ); if( *st != '\0' ) { rc = SaveAndExit( st ); } else { rc = SaveAndExit( NULL ); } } break; case PCL_T_WRITE: case PCL_T_WRITE_DMT: data = GetNextWord1( data, st ); if( test1 ) { if( *st == '\0' ) { rc = ERR_NO_FILE_SPECIFIED; } else { rc = SaveFile( st, n1, n2, ( tkn == PCL_T_WRITE_DMT ) ); } } else { if( st[0] != '\0' ) { #ifdef __WIN__ if( st[0] == '?' && st[1] == '\0' ) { rc = SaveFileAs(); break; } else { rc = SaveFile( st, -1, -1, ( tkn == PCL_T_WRITE_DMT ) ); } #else rc = SaveFile( st, -1, -1, ( tkn == PCL_T_WRITE_DMT ) ); #endif } else { rc = SaveFile( NULL, -1, -1, ( tkn == PCL_T_WRITE_DMT ) ); if( rc == ERR_NO_ERR ) { Modified( false ); } } } break; case PCL_T_READ: rc = ReadAFile( n1, data ); break; case PCL_T_QUIT: #ifdef __WIN__ rc = CurFileExitOptionSaveChanges(); #else rc = NextFile(); #endif break; case PCL_T_QUIT_DMT: rc = NextFileDammit(); break; case PCL_T_DATE: GetDateTimeString( st ); Message1( st ); rc = DO_NOT_CLEAR_MESSAGE_WINDOW; break; case PCL_T_CD: data = GetNextWord1( data, st ); if( *st != '\0' ) { rc = SetCWD( st ); } else { rc = ERR_NO_ERR; } if( rc == ERR_NO_ERR ) { Message1( "Current directory is %s",CurrentDirectory ); } break; case PCL_T_SHELL: EVIL_SHELL: { #if defined( __NT__ ) && !defined( __WIN__ ) ExecCmd( NULL, NULL, NULL ); #else char foo[FILENAME_MAX]; strcpy( foo, Comspec ); ExecCmd( NULL, NULL, foo ); #endif DoVersion(); rc = ERR_NO_ERR; } break; case PCL_T_SYSTEM: if( n1f && n2f ) { rc = DoGenericFilter( n1, n2, data ); } else { data = SkipLeadingSpaces( data ); if( *data == '\0' ) { goto EVIL_SHELL; } ExecCmd( NULL, NULL, data ); rc = ERR_NO_ERR; } break; case PCL_T_RESIZE: rc = ResizeCurrentWindowWithKeys(); break; case PCL_T_TILE: data = GetNextWord1( data, st ); if( st[0] != '\0' ) { if( st[0] == 'v' ) { y = 1; for( x = 0, cinfo = InfoHead; cinfo != NULL; cinfo = cinfo->next ) { x++; } } else if( st[0] == 'h' ) { x = 1; for( y = 0, cinfo = InfoHead; cinfo != NULL; cinfo = cinfo->next ) { y++; } } else { x = atoi( st ); data = GetNextWord1( data, st ); if( *st == '\0' ) { break; } else { y = atoi( st ); } } } else { x = EditVars.MaxWindowTileX; y = EditVars.MaxWindowTileY; } if( x > 0 && y > 0) { rc = WindowTile( x, y ); } break; case PCL_T_CASCADE: rc = WindowCascade(); break; case PCL_T_MOVEWIN: rc = MoveCurrentWindowWithKeys(); break; case PCL_T_TAG: data = GetNextWord1( data, st ); if( *st != '\0' ) { rc = TagHunt( st ); } break; case PCL_T_FGREP: { bool ci; data = SkipLeadingSpaces( data ); ci = EditFlags.CaseIgnore; if( data[0] == '-' ) { if( data[1] == 'c' ) { ci = false; data += 2; data = SkipLeadingSpaces( data ); rc = GetStringWithPossibleQuote( &data, st ); } else if( data[1] == 'i' ) { ci = true; data += 2; data = SkipLeadingSpaces( data ); rc = GetStringWithPossibleQuote( &data, st ); } else if( data[1] == 'f' ) { data += 2; data = SkipLeadingSpaces( data ); #ifdef __WIN__ // call fancy grep window { fancy_find *ff; /* ff will be set to point at a static fancy find struct * in the snoop module */ char snoopbuf[FILENAME_MAX]; if( !GetSnoopStringDialog( &ff ) ) { return( ERR_NO_ERR ); } strcpy( snoopbuf, ff->path ); /* assume no string means current directory */ if( strlen( snoopbuf ) && snoopbuf[strlen( snoopbuf ) - 1] != '\\' ){ strcat( snoopbuf, "\\" ); } MySprintf( st, "%s", ff->find ); strcat( snoopbuf, ff->ext ); ci = ff->case_ignore; if( !ff->use_regexp ) { //MakeExpressionNonRegular( st ); rc = DoFGREP( snoopbuf, st, ci ); } else { rc = DoEGREP( snoopbuf, st ); } break; } #endif } } else { rc = GetStringWithPossibleQuote( &data, st ); } if( rc != ERR_NO_STRING ) { rc = DoFGREP( data, st, ci ); } } break; case PCL_T_EGREP: rc = GetStringWithPossibleQuote( &data, st ); if( rc != ERR_NO_STRING ) { rc = DoEGREP( data, st ); } break; case PCL_T_SIZE: data = GetNextWord1( data, st ); if( *st == '\0' ) { break; } x = atoi( st ); data = GetNextWord1( data, st ); if( *st == '\0' ) { break; } y = atoi( st ); data = GetNextWord1( data, st ); if( *st == '\0' ) { break; } x2 = atoi( st ); data = GetNextWord1( data, st ); if( *st == '\0' ) { break; } y2 = atoi( st ); rc = CurrentWindowResize( x, y, x2, y2 ); break; case PCL_T_ECHO: data = GetNextWord1( data, st ); if( *st == '\0' ) { break; } rc = ERR_NO_ERR; if( !stricmp( st, "on" ) ) { EditFlags.EchoOn = true; break; } else if( !stricmp( st, "off" ) ) { EditFlags.EchoOn = false; break; } x = atoi( st ); data = SkipLeadingSpaces( data ); /* * FIXME: This is not good - I will definately have to * fix this code up. But right now I have to get the * editor ready for tomorrow. Brad. */ if( data[0] == '"' || data[0] == '/' ) { GetStringWithPossibleQuote( &data, st ); if( x > 2 ) { /* this is obviously a sick individual */ Error( "Invalid Echo" ); } else if( x == 1 ) { Message1( st ); } else if( x == 2 ) { Message2( st ); } // DisplayLineInWindow( MessageWindow, x, st ); } else { if( x > 2 ) { /* this is obviously a sick individual */ Error( "Invalid Echo" ); } else if( x == 1 ) { Message1( data ); } else if( x == 2 ) { Message2( data ); } // DisplayLineInWindow( MessageWindow, x, data ); } break; #ifdef VI_RCS case PCL_T_CHECKOUT: rc = ERR_NO_ERR; #ifdef __WINDOWS__ if( isOS2() ) break; // OS/2 shell returns before checkout finishes #endif if( CurrentFile != NULL ) { rc = ViRCSCheckout( rc ); } break; case PCL_T_CHECKIN: if( CurrentFile != NULL ) { rc = ViRCSCheckin( rc ); } break; #endif default: if( tkn >= 1000 ) { rc = ProcessEx( n1, n2, n2f, tkn - 1000, data ); break; } rc = TryCompileableToken( tkn, data, true ); if( rc != NOT_COMPILEABLE_TOKEN ) { break; } rc = ProcessWindow( tkn, data ); if( rc >= ERR_NO_ERR ) { break; } case TOK_INVALID: if( n1f && !n2f ) { if( !n1 ) { n1 = 1; } MemorizeCurrentContext(); rc = GoToLineNoRelCurs( n1 ); if( rc == ERR_NO_ERR ) { GoToColumnOnCurrentLine( 1 ); if( EditFlags.LineDisplay ) { MyPrintf( "%s\n", CurrentLine->data ); } } return( rc ); } rc = ERR_INVALID_COMMAND; break; } if( rc == ERR_NO_ERR ) { rc = DO_NOT_CLEAR_MESSAGE_WINDOW; } return( rc ); } /* RunCommandLine */
vi_rc DoHelpOnContext( void ) { //Until we have a global context string, use thi local DoHelp( "Contents" ); return( ERR_NO_ERR ); }