displaying function name

Michael Smith michael.smith at thalesatm.com
Mon Aug 30 09:07:47 CEST 2004


On  Mon, 30 Aug 2004 09:02:01 +0200 (MEST) "Joerg Fischer"
<jf505 at gmx.de> wrote:

| > Have a look
| > at the attached nedit macro file:
| 
| There is nothing attached. Please notice that you
| must explicitly denote any attachement as plain text
| file, otherwise the list software won't let it through.

Thanks. I will send it as plain text in the message body:

Look out for word wrap.

*******************start of attachment***********************
define get_difference
{
  left_bracket = search_string($1,"[",0)
  if(left_bracket == -1) return("")
  right_bracket = search_string($1,"]",left_bracket + 1)
  if(right_bracket == -1) return("")
  file_name = substring($1,left_bracket + 1,right_bracket)
  first_space = search_string($1," ",right_bracket)
  if(first_space == -1) return("")
  seperator = search_string($1,"->",first_space)
  if(seperator == -1) return("")
  first_version = substring($1,right_bracket + 1,seperator)
  second_version = substring($1,seperator + 2,length($1) - 1)
  command = "cvs diff -r" first_version " -r" second_version "
$ROOTDIR/src/"file_name  diffs = shell_command(command,"")
  return(diffs)
}

define cvs_version_diff
{
    selection = get_selection()
    space = search_string(selection," ",0)
    vers1 = substring(selection,0,space)
    vers2 = substring(selection,space,length(selection))
    t_print("vers1 " vers1 "\n")
    t_print("vers2 " vers2 "\n")
    command = "cvs diff -r" vers1 " -r" vers2 " " $file_path $file_name
    diffs = shell_command(command,"")
    new()
    focus_window("last")
    replace_range(0,0,diffs)
    directory = shell_command("mktemp /tmp/np.XXXXXX","")
    save_as($directory".diff")
}

define select_line
{
  start = search("\n",$cursor,"backward")
  end = search("\n",$cursor,"forward")
  select(start + 1,end + 1)
}

# Create and load a tag file
define create_tag_file
{
    tagfile = shell_command("mktemp /tmp/np.XXXXXX","")
    taglines = split(tagfile,"[\n]","regex")
    command = "ctags --recurse -f " taglines[0] " " $file_path
    shell_command(command,"")
    load_tags_file(taglines[0])
}

#/p1/p2/p3/
#/p1/p2/p3
define list_files
{
  command = "ls " $1
  directory = shell_command(command,"")
  selection =
list_dialog("Identifiers",directory,"Open","Up","File","Tags","Dismiss")
   if($list_dialog_button == 2)
  {
    dirs = split($1,"/")
    elements = dirs[] - 1
    filename = ""
    for (i = 1; i < elements; i++)
    {
      filename = filename "/" dirs[i]
    }
    delete dirs[]
  }
  else
  {
    filename = $1 "/" selection
  }
  if($list_dialog_button == 1 || $list_dialog_button == 2)
  {
    command = "file -b " filename
    filetype = shell_command(command,"")
    if(search_string(filetype,"directory",0) != -1)
    {
      list_files(filename)
    }
    else
    {
      list_tags(filename)
    }
  }
  if($list_dialog_button == 3)
  {
    open(filename)
  }
  if($list_dialog_button == 4)
  {
    create_tag_file()
  }
}

# ctags -x -f --c-types=f - fqm/fproc/FPROC_init_global_var.c
# FPROC_init_global_var function    444 
fqm/fproc/FPROC_init_global_var.c void FPROC_init_global_var (void)#
update_manage_image_array function    385 
fqm/fproc/FPROC_init_global_var.c void update_manage_image_array (#
[\s]+ define list_tags
{
  command = "ctags --c-types=f -x -f - " $1
  tags = shell_command(command,"")
  tag_lines=split(tags,"[\n]","regex")
  elements = tag_lines[] - 1
  filename = ""
  list = ""
  for (i = 0; i < elements; i++)
  {
    line_fields=split(tag_lines[i],"[ ]+","regex")
    list = list line_fields[0] "\n"
    delete line_fields[]
  }
  if(length(list) == 0)
  {
    list_files($file_path)
    return
  }
  selection =
list_dialog("Identifiers",list,"Open","Up","Insert","Dismiss") 
if($list_dialog_button == 1)  {
      open($1)
      focus_window($1)
      for (i = 0; i < elements; i++)
      {
        line_fields=split(tag_lines[i],"[ ]+","regex")
        if(line_fields[0]==selection)
        {
          goto_line_number(line_fields[2])
        }
        delete line_fields[]
      }
  }
  if($list_dialog_button == 2)
  {
    list_files($file_path)
  }
  if($list_dialog_button == 3)
  {
    insert_string(selection)
  }
  delete tag_lines[]
}

#Pause
define list_identifiers
{
  filename = $file_path $file_name
  list_tags(filename)
}

define cvs_log
{
    $diff_file = $file_name
    command = "cvs log " $file_path $file_name " | np .diff"
    shell_command(command,"")
}

define build_differences
{
    $start = 0
    for(;;)
    {
      $end = search("\n",$start,"forward")
      if($end == -1) break
      if(get_character($start) == "[")
      {
        $linestr = get_range($start,$end + 1)
        $diff = get_difference($linestr)
        set_cursor_pos($end + 1)
        insert_string($diff) 
      }
      $start = $end + 1
    }
}

define cvs_difference_file
{
    $diff_file = $file_name
    command = "cvs diff " $file_path $file_name " | np .diff"
    shell_command(command,"")
}

#F4
define version_difference
{
    text = get_selection("any")
    diffs = get_difference(text)
    new()
    focus_window("last")
    replace_range(0,0,diffs)
    save_as("/tmp/cvsvers.diff")
}

#KP_Down
define end_of_line
{
    end = search("\n",$cursor,"forward")
    if(end == $cursor)
    {
      end = search("\n",$cursor + 1,"forward")
    }
    set_cursor_pos(end)
}

#F8
define delete_line
{
    start = search("\n",$cursor,"backward")
    end = search("\n",$cursor,"forward")
    replace_range(start + 1,end + 1,"")
}

#F5
define duplicate_line
{
    start = search("\n",$cursor,"backward")
    end = search("\n",$cursor,"forward")
    line = get_range(start + 1, end + 1)
    replace_range(end + 1,end + 1,line)
}

#F12
define save_and_close
{
    save()
    close()
}

#Alt+F10
define html_paragraph
{
    find("^$","forward","regex")
    process_down()
    insert_string("<p>")
    find("^$","forward","regex")
    backward_character()
    insert_string("</p>")
}

# Works out which identifier the cursor is in and jumps to the
definition define goto_current_identifier
{
    kill_calltip($current_calltip)
    tag_lines = $1
    elements=tag_lines[] - 1
    prev=-1
    for (i = 0; i < elements; i++)
    {
      line_fields=split(tag_lines[i],"[ ]+","regex")
      here=line_fields[2]
      if(prev != -1 && $line > prev && $line <= here)
      {
        goto_line_number(prev)
        return
      }
      prev=here
      delete line_fields[]
    }
    delete tag_lines[]
    goto_line_number(prev)
}

# Set a calltip for the current function
define function_calltip
{
    calltip($1)
    $current_calltip = $calltip_ID
    $calltip_line = $line
}

# Initialise a global variable
$current_calltip = -1
$calltip_line = -1

# Display a calltip with the current function name
define function_name_calltip
{
    tag_lines = $1
    elements=tag_lines[] - 1
    prev=-1
    prev_label=""
    for (i = 0; i < elements; i++)
    {
      line_fields=split(tag_lines[i],"[ ]+","regex")
      here=line_fields[2]
      if(prev != -1 && $line >= prev && $line < here)
      {
        function_calltip(prev_label)
        return
      }
      prev=here
      prev_label=line_fields[0]
      delete line_fields[]
    }
    delete tag_lines[]
    function_calltip(prev_label)
}

# Insert the current function name at the cursor location
#Shift+KP_Insert
define insert_function_name
{
    filename = $file_path $file_name
    command = "ctags --sort=no -x -f - " filename
    tags = shell_command(command,"")
    tag_lines=split(tags,"[\n]","regex")
    elements=tag_lines[] - 1
    prev=-1
    prev_label=""
    for (i = 0; i < elements; i++)
    {
      line_fields=split(tag_lines[i],"[ ]+","regex")
      here=line_fields[2]
      if(prev != -1 && $line >= prev && $line < here)
      {
        insert_string(prev_label)
        return
      }
      prev=here
      prev_label=line_fields[0]
      delete line_fields[]
    }
    delete tag_lines[]
    insert_string(prev_label)
}

# Work out which identifier the cursor is inside and display
# the name of the identifier in a calltip
#KP_Insert
define display_function
{
    filename = $file_path $file_name
    command = "ctags --sort=no -x -f - " filename
    tags = shell_command(command,"")
    tag_lines=split(tags,"[\n]","regex")
    if($current_calltip == $calltip_ID && $calltip_line == $line)
    {
        goto_current_identifier(tag_lines)
    }
    else
    {
        function_name_calltip(tag_lines)
    }
}

#F11
#Open the file named at the cursor
define open_file_at_cursor
{
    start=search("^",$cursor,"regex","backward")
    end=search(": ",$cursor)
    eol=search("$",$cursor,"regex")
    filename=get_range(start,end)
    detail=get_range(end,eol)
    details=split(detail,"\w","regex")
    for(item in details)
    {
      final = final "_" item
    }
    command="open-mark " filename " \"" final "\""
    t_print(command "\n")
    shell_command(command,"")
}

#Home the window
define home_window
{
    shell_command("FvwmCommand 'Current Move 0p 0p'","")
}

define home_all
{
  filename = focus_window("last")
  while(filename != "")
  {
    home_window()
    filename = focus_window("next")
  }
}

define build_fvwm_menu
{
    text = get_selection()
    hosts = split(text,"\n")
    delete_selection()
    for(indx in hosts)
    {
      insert_string("AddToMenu NEW-MENU ")
      insert_string("\"" hosts[indx] "\" Exec gnome-terminal -e \"rsh -l
system ")      insert_string(hosts[indx] "\"")
      newline()
    }
}

#Set the geometry of all windows in the current tileset
define tileset_rebuild
{
    totalheight=1000
    totalwidth=800
    fudge=9
    tileheight=totalheight/$tileset[] - fudge * $tileset[]
    y = 0
    for(tile in $tileset)
    {
        open($tileset[tile])
        shell_command("FvwmCommand 'Current ResizeMove 800p "
tileheight"p 0p " y"p RefreshWindow'","")        y = y + tileheight +
fudge    }
}

#Add the current window to the current tileset
define tileset_add
{
    fileid=$file_path$file_name
    $tileset[fileid]=fileid
    tileset_rebuild()
}

#Delete the current window from the current tileset
define tileset_delete
{
    fileid=$file_path$file_name
    delete $tileset[fileid]
    tileset_rebuild()
}

#Search for blocks to be hidden in the input file and fold them
define hide_blocks
{
    rangeset_defined = 0
    start_block = 0
    end_block = 0
    while(start_block != -1)
    {
        start_block = search("START-HIDE",end_block)
        if(start_block != -1)
        {
            end_block = search("END-HIDE",start_block)
            if(end_block != -1)
            {
                next_line = search("^.*$",end_block + 1,"regex")
                if(next_line != -1)
                {
                    if(rangeset_defined == 0)
                    {
                        r = rangeset_create()
                        rangeset_defined = 1
                    }
                    rangeset_add(r,start_block,next_line)
                }
            }
        }
    }
    if(rangeset_defined != 0)
    {
        rangeset_set_color(r,"violet")
        rangeset_set_folded(r,1)
    }
}

#detach a document
define detach_from_window
{
    detach_document()
}

#attach a document
define attach_to_window
{
    move_document_dialog()
}

# Calculate line start points
define calculate_line_starts
{
    $line_starts = $empty_array
    line_number = 1
    $line_starts[line_number] = 0
    end_line = 0
    while(end_line != -1)
    {
        end_line = search("^.*$",$line_starts[line_number] + 1,"regex")
        if(end_line != -1)
        {
            line_number = line_number + 1
            $line_starts[line_number] = end_line
        }
    }
}

#Jump to the specified line
define mark_line
{
    line_command=$1 ",0"
    goto_line_number(line_command)
    end=search("$",$cursor,"regex")
    nextline=search("^",end,"regex")
    if(nextline == -1) nextline = end
    rangesets=rangeset_get_by_name("entry-points")
    if(rangesets[] == 0)
    {
        rangeset=rangeset_create()
        rangeset_set_name(rangeset,"entry-points")
        rangeset_set_color(rangeset,"LightBlue")
    }
    else
    {
        rangeset=rangesets[0]
    }
    rangeset_add(rangeset,$cursor,nextline)
}

#mark differences
define mark_diff
{
    addra=rangeset_get_by_name("addr")
    cddra=rangeset_get_by_name("cddr")
    rangeset_destroy(addra)
    rangeset_destroy(cddra)
    if(length($1) > 0)
    {
        addr = rangeset_create()
        cddr = rangeset_create()
        rangeset_set_name(addr,"addr")
        rangeset_set_name(cddr,"cddr")
        rangeset_set_color(addr,"LightYellow1")
        rangeset_set_color(cddr,"LightPink")
        lines=split($1,"+")
        for(line in lines)
        {
            details=split(lines[line],"_")
            if(details[0] == "a")
            {
                rangeset_add(addr,details[1],details[2])
            }
            if(details[0] == "c")
            {
                rangeset_add(cddr,details[1],details[2])
            }
            if(details[0] == "l")
            {
                mark_line(details[1])
            }
        }
    }
}

#reset differences
define reset_diff
{
    command = "get-cvs-diff " $file_path $file_name
    diffs = shell_command(command,"")
    mark_diff(diffs)
}

define save_all
{
  filename = focus_window("last")
  while(filename != "")
  {
    if($modified)
    {
      save()
      reset_diff()
    }
    filename = focus_window("next")
  }
}

define generate_trace
{
    insert_string("printf(\"")
    insert_function_name()
    insert_string(": ")
    paste_clipboard()
    insert_string(" [%s]\\n\",")
    paste_clipboard()
    insert_string(");")
}

define cvs_annotate_file
{
    command = "get-cvs-annotations " $file_path $file_name " | np"
    shell_command(command,"")
}

define cvs_display_modification_labels
{
    marks=rangeset_get_by_name("marks")
    rangeset_destroy(marks)
    selected_sect = list_dialog($1,$2,"Close","Show")
    if($list_dialog_button == 2)
    {
        line_starts = shell_command("awk -f
/home/smithmr/bin/calculate-line_starts.awk " $file_path $file_name,"") 
      line_start_array = split(line_starts,"[\n]","regex")        lines
= split(selected_sect," ")        t_print("start " lines[0] " "
line_start_array[lines[0]]"\n")        t_print("end " lines[1] " "
line_start_array[lines[1]]"\n")        marks = rangeset_create()
        rangeset_set_name(marks,"marks")
        rangeset_set_color(marks,"Violet")
       
rangeset_add(marks,line_start_array[lines[0]],line_start_array[lines[1]
])        goto_line_number(lines[0])
        cvs_display_modification_labels($1,$2)
    }        
    marks=rangeset_get_by_name("marks")
    rangeset_destroy(marks)
}

define cvs_display_modification_line
{
    starts = split($mod_start[$1]," ")
    ends = split($mod_end[$1]," ")
    labels = ""
    for(indx in starts)
    {
        if(length(starts[indx]) > 0)
        {
           labels = labels starts[indx] " " ends[indx] "\n"
        }
    }
    cvs_display_modification_labels($1,labels)
}

define cvs_display_modifications
{
    command = "get-modification-list " $file_path $file_name
    mods = shell_command(command,"")
    modlines = split(mods,"[\n]","regex")
    modlist = ""
    modifications = $empty_array
    $mod_start = $empty_array
    $mod_end = $empty_array
    for(line in modlines)
    {
        fields = split(modlines[line]," ")
        if(fields[] == 4)
        {
            label = fields[0] " " fields[1]
            if(!(label in modifications))
            {
                modifications[label] = label
                modlist = modlist label "\n"
                $mod_start[label] = ""
                $mod_end[label] = ""
            }
            $mod_start[label] = $mod_start[label] " " fields[2]
            $mod_end[label] = $mod_end[label] " " fields[3]
        }
    }
    selected_mod = list_dialog("Modifications",modlist,"Close","Open")
    if($list_dialog_button == 2)
    {
        cvs_display_modification_line(selected_mod)
    }
}

# CVS Status dialog
define cvs_status
{
    command = "cvs status " $file_path $file_name
    status = shell_command(command,"")
   
button=dialog(status,"Close","Modifications","Annotate","Diff","Log")   
if(button == 2) cvs_display_modifications()    if(button == 3)
cvs_annotate_file()    if(button == 4) cvs_difference_file()
    if(button == 5) cvs_log()
}

*******************end of attachment***********************



More information about the Discuss mailing list