home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / QBNWS204.ZIP / BRIEF.ZIP / LINENUM.CB < prev    next >
Text File  |  1991-12-07  |  3KB  |  135 lines

  1. /*                                                                */
  2. /*       LINENUM.CB  4-23-91  Matt Hart                           */
  3. /*                                                                */
  4. /*       Add or remove line numbers                               */
  5. /*                                                                */
  6. void add_numbers();
  7. void remove_numbers();
  8.  
  9. void line_number_select()
  10. {
  11.    int chr;
  12.    message("A = Add numbers / R = Remove numbers");
  13.    while (! inq_kbd_char());
  14.    chr = 0xff & read_char();
  15.    if (chr == 65 || chr == 97)
  16.       add_numbers();
  17.    else
  18.    {
  19.       if (chr == 82 || chr == 114)
  20.          remove_numbers();
  21.       else
  22.       {
  23.          beep();
  24.          error("Invalid key");
  25.       }
  26.    }
  27. }
  28.  
  29. void add_numbers()
  30. {
  31.    string this_line,
  32.           ins_string;
  33.    int marked,
  34.        start_line,
  35.        end_line,
  36.        cur_line,
  37.        dum,
  38.        mover,
  39.        type_flag = 0,
  40.        under_flag = 0,
  41.        select_flag = 0,
  42.        line_num = 10;
  43.    message("Adding line numbers");
  44.    save_position();
  45.    marked = inq_marked(start_line,dum,end_line);
  46.    if (marked == 0)
  47.    {
  48.       start_line = 1;
  49.       end_of_buffer();
  50.       inq_position(end_line);
  51.       top_of_buffer();
  52.    }
  53.    else
  54.       if (marked != 3)
  55.       {
  56.          error ("Mark type must be a line mark 'Alt-L'");
  57.          restore_position();
  58.          return;
  59.       }
  60.    end_line++;
  61.  
  62.    move_abs (start_line,1);
  63.    cur_line = start_line;
  64.    while (cur_line < end_line)
  65.    {
  66.       this_line = trim(read());
  67.       if (ltrim(this_line) != "" && substr(ltrim(this_line),1,1) != "'")
  68.       {
  69.          if (type_flag == 0 && under_flag == 0 && select_flag == 0)
  70.          {
  71.             sprintf(ins_string,"%d",line_num);
  72.             ins_string = ltrim(trim(ins_string))+" ";
  73.             insert(ins_string);
  74.             move_abs(0,1);
  75.             message ("Adding line number %d",line_num);
  76.             line_num = line_num + 10;
  77.          }
  78.          if (upper(substr(ltrim(this_line),1,5)) == "TYPE ")
  79.             type_flag = 1;
  80.          else
  81.          {
  82.             if (type_flag == 1)
  83.             {
  84.                if (upper(substr(ltrim(this_line),1,8)) == "END TYPE")
  85.                   type_flag = 0;
  86.             }
  87.          }
  88.          if (substr(this_line,strlen(this_line),1) == "_")
  89.             under_flag = 1;
  90.          else
  91.             under_flag = 0;
  92.  
  93.          if (upper(substr(ltrim(this_line),1,7)) == "SELECT ")
  94.             select_flag = 1;
  95.          else
  96.          {
  97.             if (select_flag == 1)
  98.             {
  99.                if (upper(substr(ltrim(this_line),1,5)) == "CASE ")
  100.                   select_flag = 0;
  101.             }
  102.          }
  103.       }
  104.  
  105.  
  106.       mover = move_rel(1);
  107.       if (mover == 0)
  108.          break;
  109.       inq_position(cur_line);
  110.    }
  111.    restore_position();
  112.    message("Add line numbers finished");
  113. }
  114.  
  115. void remove_numbers()
  116. {
  117.    int cur_line1,cur_line2,count = 0;
  118.    message("Removing all line numbers");
  119.    save_position();
  120.    top_of_buffer();
  121.  
  122.    while (search_fwd ("<[1-9]"))
  123.    {
  124.       drop_anchor();
  125.       inq_position(cur_line1);
  126.       message("Removing line numbers %d",count++);
  127.       search_fwd (" ");
  128.       inq_position(cur_line2);
  129.       if (cur_line1 == cur_line2)
  130.          delete_block();
  131.    }
  132.    restore_position();
  133.    message("Remove all line numbers finished");
  134. }
  135.