# 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) } } }