Blob Blame History Raw
	# BEGIN rule(s)

	BEGIN {
     1  	if (sortcmd == "") {
			sortcmd = "sort"
		}
     1  	asplit("BEGIN:END:atan2:break:close:continue:cos:delete:" "do:else:exit:exp:for:getline:gsub:if:in:index:int:" "length:log:match:next:print:printf:rand:return:sin:" "split:sprintf:sqrt:srand:sub:substr:system:while", keywords, ":")
     1  	split("00:00:00:00:00:00:00:00:00:00:" "20:10:10:12:12:11:07:00:00:00:" "08:08:08:08:08:33:08:00:00:00:" "08:44:08:36:08:08:08:00:00:00:" "08:44:45:42:42:41:08", machine, ":")
     1  	state = 1
   571  	for (;;) {
   571  		symb = lex()
   571  		nextstate = substr(machine[state symb], 1, 1)
   571  		act = substr(machine[state symb], 2, 1)
   571  		if (act == "0") { # 12
   559  		} else if (act == "1") { # 8
     8  			if (! inarray(tok, names)) { # 3
     3  				names[++nnames] = tok
				}
     8  			lines[tok, ++xnames[tok]] = NR
   551  		} else if (act == "2") { # 426
   426  			if (tok in local) { # 309
   309  				tok = tok "(" funcname ")"
   309  				if (! inarray(tok, names)) { # 22
    22  					names[++nnames] = tok
					}
   309  				lines[tok, ++xnames[tok]] = NR
   117  			} else {
   117  				tok = tok "()"
   117  				if (! inarray(tok, names)) { # 22
    22  					names[++nnames] = tok
					}
   117  				lines[tok, ++xnames[tok]] = NR
				}
   125  		} else if (act == "3") { # 4
     4  			funcname = tok
     4  			flines[tok] = NR
   121  		} else if (act == "4") { # 49
    49  			braces++
    72  		} else if (act == "5") { # 49
    49  			braces--
    49  			if (braces == 0) { # 4
    22  				for (temp in local) {
    22  					delete local[temp]
					}
     4  				funcname = ""
     4  				nextstate = 1
				}
    23  		} else if (act == "6") { # 22
    22  			local[tok] = 1
     1  		} else if (act == "7") { # 1
     1  			break
			} else if (act == "8") {
				print("error: xref.awk: line " NR ": aborting") > "/dev/con"
				exit 1
			}
   570  		state = nextstate
		}
    47  	for (i = 1; i <= nnames; i++) {
    47  		printf("%d ", xnames[names[i]]) | sortcmd
    47  		if (index(names[i], "(") == 0) { # 3
     3  			printf("%s(%d)", names[i], flines[names[i]]) | sortcmd
    44  		} else {
    44  			printf("%s", names[i]) | sortcmd
			}
   434  		for (j = 1; j <= xnames[names[i]]; j++) {
   434  			if (lines[names[i], j] != lines[names[i], j - 1]) { # 390
   390  				printf(" %d", lines[names[i], j]) | sortcmd
				}
			}
    47  		printf("\n") | sortcmd
		}
     1  	close(sortcmd)
	}


	# Functions, listed alphabetically

     1  function asplit(str, arr, fs, n)
	{
     1  	n = split(str, temp_asplit, fs)
    36  	for (i = 1; i <= n; i++) {
    36  		arr[temp_asplit[i]]++
		}
	}

   434  function inarray(val, arr, j, tmp)
	{
 16297  	for (j in arr) {
 16297  		tmp[arr[j]]++
		}
   434  	return (val in tmp)
	}

   571  function lex()
	{
  1702  	for (;;) {
  1702  		if (tok == "(eof)") {
				return 7
			}
   326  		while (length(line) == 0) {
   326  			if ((getline line) == 0) { # 1
     1  				tok = "(eof)"
     1  				return 7
				}
			}
  1701  		sub(/^[ \t]+/, "", line)
  1701  		sub(/^"([^"]|\\")*"/, "", line)
  1701  		sub(/^\/([^\/]|\\\/)+\//, "", line)
  1701  		sub(/^#.*/, "", line)
  1701  		if (line ~ /^function/) { # 4
     4  			tok = "function"
     4  			line = substr(line, 9)
     4  			return 1
  1697  		} else if (line ~ /^{/) { # 53
    53  			tok = "{"
    53  			line = substr(line, 2)
    53  			return 2
  1644  		} else if (line ~ /^}/) { # 53
    53  			tok = "}"
    53  			line = substr(line, 2)
    53  			return 3
  1591  		} else if (match(line, /^[[:alpha:]_][[:alnum:]]*\[/)) { # 43
    43  			tok = substr(line, 1, RLENGTH - 1)
    43  			line = substr(line, RLENGTH + 1)
    43  			return 5
  1548  		} else if (match(line, /^[[:alpha:]_][[:alnum:]]*\(/)) { # 87
    87  			tok = substr(line, 1, RLENGTH - 1)
    87  			line = substr(line, RLENGTH + 1)
    87  			if (! (tok in keywords)) { # 12
    12  				return 6
				}
  1461  		} else if (match(line, /^[[:alpha:]_][[:alnum:]]*/)) { # 525
   525  			tok = substr(line, 1, RLENGTH)
   525  			line = substr(line, RLENGTH + 1)
   525  			if (! (tok in keywords)) { # 405
   405  				return 4
				}
   936  		} else {
   936  			match(line, /^[^[:alpha:]_{}]/)
   936  			tok = substr(line, 1, RLENGTH)
   936  			line = substr(line, RLENGTH + 1)
			}
		}
	}