# Csope Fork of Cscope version 15.9, with various improvements, because cscope is good and shall not be forgotten. While the original's mainentence seems abandoned and as far as I can tell you need a PhD in autoconf to compile the latest version, Csope is alive and well. # Demo TODO: fill in # Before/After TODO: fill in # Features #### Search for + C symbol + global definition + assignments to specified symbol + functions called by specified function + functions calling specified function + text string + egrep pattern + file + files #including specified file #### ...and open with your editor. #### Batch change search results **interactively**. #### Save/load/pipe results. # Interface <-- Tab --> +------------Message-------------+ +--------------------------------+ A |+--------------+---------------+| |+------------------------------+| | || Input Window | Result window || || || | |+--------------+ || ? || || || Mode Window | || ----> || Help || % || | || <---- || || || | || ... || || | || | || || || | || | || || || V |+--------------+---------------+| |+------------------------------+| +-----------Tool Tips------------+ +--------------------------------+ # Usacases Csope shines at exploring stranger and obsecure code bases due to its TUI. It sometimes gets mislabeled as a code navigation tool, but the original documentation describes it best as a "code browsing tool". Many tools can jump you to a definition or grep for patterns, but Csope is unqie in that it allows for those and many other functionalities while providing you with a very comprehansible list of all results, ready to fire up your editor at just the spot. An example of its excelence is this project. The Cscope codebase used to be a total mess, fixing it would have been a lost cause, if not for Cscope itself. Well, Csope now. # Improvements/Changes ## User side + renamed the program, because "cscope" is annoying to type + improved gui + GNU Readline integration (ie. VI/EMACS mode, command history) /*pending*/ ## To the code + nuked autoconf, replaced with single Makefile + reorganized main() + encapsulated changes to the TUI into display.c + encapsulated searching into find.c + removed "scanner.l" which seems to be an anchient version (and redundant copy) of "fscanner.l" forgotten by all + removed macro hell put in place to allow compiling on a dead badger + replaced repeated inline #ifdef KEY_\*-s with guaranteed definitions + removed random commets giving tips for and refering to specific issues + use stdbool instead of YES/NO macros + saved kilobytes by stripping trailing whitespace + FILE\* refsfound used to be rewind()-ed everytime the reads were not sequencial # Project structure /*probably move to documentation*/ | Component | Purpose | | :-------: | :-----: | | main.c | generic init functions, main() and primary event loops (and junk) | | display.c | all functions directly dealing with NCurses | | input.c | top layer of functions dealing with user input; migth dispatch to readline | | find.c | searching functions | | globals.h | an inherited curse; global var/prototype hell | | readline.c | all functions directly dealing with GNU Readline; responsible for line editing in *input mode* | | help.c | all functions dealing with help messages | # TODO /*move soon*/ + sort out constants.h + scrollbar() uses magic int literals? + Ordering function declarations in global.h by alpha order is not smart + lineflagafterfile is stupid + library.h...; "private library", in a program using 90 globals; ffs + sort out the global hell + was there really ever a scrollbar? + handle resizing ## Original + Same capabilities as interactive in non interactive (one shot) mode + Provide some how-do-I-use-this-thing doc. # BUGS + Changing text double frees: free(): double free detected in tcache 2 Aborted + Changing text can crash without replacing text and leaving the console ncursed # Future features / contributor wishlist + providing support for other languages by integrating new lexers (e.g. ctag's)