home *** CD-ROM | disk | FTP | other *** search
- /* */
- /* LINENUM.CB 4-23-91 Matt Hart */
- /* */
- /* Add or remove line numbers */
- /* */
- void add_numbers();
- void remove_numbers();
-
- void line_number_select()
- {
- int chr;
- message("A = Add numbers / R = Remove numbers");
- while (! inq_kbd_char());
- chr = 0xff & read_char();
- if (chr == 65 || chr == 97)
- add_numbers();
- else
- {
- if (chr == 82 || chr == 114)
- remove_numbers();
- else
- {
- beep();
- error("Invalid key");
- }
- }
- }
-
- void add_numbers()
- {
- string this_line,
- ins_string;
- int marked,
- start_line,
- end_line,
- cur_line,
- dum,
- mover,
- type_flag = 0,
- under_flag = 0,
- select_flag = 0,
- line_num = 10;
- message("Adding line numbers");
- save_position();
- marked = inq_marked(start_line,dum,end_line);
- if (marked == 0)
- {
- start_line = 1;
- end_of_buffer();
- inq_position(end_line);
- top_of_buffer();
- }
- else
- if (marked != 3)
- {
- error ("Mark type must be a line mark 'Alt-L'");
- restore_position();
- return;
- }
- end_line++;
-
- move_abs (start_line,1);
- cur_line = start_line;
- while (cur_line < end_line)
- {
- this_line = trim(read());
- if (ltrim(this_line) != "" && substr(ltrim(this_line),1,1) != "'")
- {
- if (type_flag == 0 && under_flag == 0 && select_flag == 0)
- {
- sprintf(ins_string,"%d",line_num);
- ins_string = ltrim(trim(ins_string))+" ";
- insert(ins_string);
- move_abs(0,1);
- message ("Adding line number %d",line_num);
- line_num = line_num + 10;
- }
- if (upper(substr(ltrim(this_line),1,5)) == "TYPE ")
- type_flag = 1;
- else
- {
- if (type_flag == 1)
- {
- if (upper(substr(ltrim(this_line),1,8)) == "END TYPE")
- type_flag = 0;
- }
- }
- if (substr(this_line,strlen(this_line),1) == "_")
- under_flag = 1;
- else
- under_flag = 0;
-
- if (upper(substr(ltrim(this_line),1,7)) == "SELECT ")
- select_flag = 1;
- else
- {
- if (select_flag == 1)
- {
- if (upper(substr(ltrim(this_line),1,5)) == "CASE ")
- select_flag = 0;
- }
- }
- }
-
-
- mover = move_rel(1);
- if (mover == 0)
- break;
- inq_position(cur_line);
- }
- restore_position();
- message("Add line numbers finished");
- }
-
- void remove_numbers()
- {
- int cur_line1,cur_line2,count = 0;
- message("Removing all line numbers");
- save_position();
- top_of_buffer();
-
- while (search_fwd ("<[1-9]"))
- {
- drop_anchor();
- inq_position(cur_line1);
- message("Removing line numbers %d",count++);
- search_fwd (" ");
- inq_position(cur_line2);
- if (cur_line1 == cur_line2)
- delete_block();
- }
- restore_position();
- message("Remove all line numbers finished");
- }
-