source: tags/arb_5.1/EDIT4/ed4_edit_string.hxx

Last change on this file was 5570, checked in by meierh, 16 years ago

fixed buffer overflow

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.3 KB
Line 
1
2struct ED4_work_info;
3
4extern unsigned char ED4_is_align_character[256];
5inline bool ADPP_IS_ALIGN_CHARACTER(unsigned char chr) { return ED4_is_align_character[chr] != 0; }
6void ED4_init_is_align_character(GB_CSTR gap_chars);
7
8const char SEQ_POINT = '.';
9
10class ED4_remap;
11
12class ED4_Edit_String {
13    GBDATA      *gbd;
14    char        *seq;
15    long        seq_len;
16    ED4_remap   *remap;
17    static int  nrepeat;
18    static int  nrepeat_is_already_set;
19    static int  nrepeat_zero_requested;
20
21    int legal_curpos(long pos) const            { return pos>=0 && pos<=seq_len; }
22    int legal_seqpos(long pos) const            { return pos>=0 && pos<seq_len; }
23
24    ED4_ERROR *moveBase(long source_position, long dest_position, unsigned char gap_to_use); // moves a base from source_position to dest_position
25
26    ED4_ERROR *shiftBases(long source_pos, long source_endpos, long dest_position,
27                          int direction, long *dest_endpos, unsigned char gap_to_use); // shifts a line of bases from source_position to dest_position
28
29    long        get_next_base(long seq_position, int direction);
30    long        get_next_gap(long seq_position, int direction);
31
32    long        get_next_visible_base(long position, int direction);
33    long        get_next_visible_gap(long position, int direction);
34    long        get_next_visible_pos(long position, int direction);
35
36    ED4_ERROR   *insert(char *,long position, int direction, int removeAtNextGap);
37    ED4_ERROR   *remove(int len,long position, int direction, int insertAtNextGap);
38    ED4_ERROR   *replace(char *text,long position, int direction);
39    ED4_ERROR   *swap_gaps(long position, char ch);
40    ED4_ERROR   *command( AW_key_mod keymod, AW_key_code keycode, char key, int direction, ED4_EDITMODI mode, bool is_consensus,
41                          long &cursorpos, bool& changed_flag, ED4_CursorJumpType& cursor_jump, bool& cannot_handle, bool& write_fault, GBDATA *gb_data, bool is_sequence);
42    unsigned char get_gap_type(long pos, int direction);
43
44public:
45    char *old_seq;
46    long old_seq_len;
47
48    ED4_Edit_String();
49    void init_edit();
50    void edit(ED4_work_info *info);
51    void finish_edit();
52    ~ED4_Edit_String();
53
54    int use_nrepeat() { // external functions use this to get and use nrepeat
55        int nrep = nrepeat==0 ? 1 : nrepeat;
56        nrepeat = 0;
57        return nrep;
58    }
59};
60
Note: See TracBrowser for help on using the repository browser.