85
85
get_ets_tables(SysTabHidden) ->
86
86
Tables = ets:all(),
87
TablesWInfo = get_ets_table_info(Tables,
88
hidden_tables(ets, SysTabHidden) ++
89
current_mnesia_tables(SysTabHidden),
90
owners_to_hide(ets, SysTabHidden),
87
get_ets_table_info(Tables,
88
hidden_tables(ets, SysTabHidden) ++
89
current_mnesia_tables(SysTabHidden),
90
owners_to_hide(ets, SysTabHidden),
95
95
get_mnesia_tables(SysTabHidden) ->
96
96
Tables = mnesia:system_info(tables),
97
TablesWInfo = get_mnesia_table_info(Tables -- hidden_tables(mnesia, SysTabHidden),
98
owners_to_hide(mnesia, SysTabHidden),
97
get_mnesia_table_info(Tables -- hidden_tables(mnesia, SysTabHidden),
98
owners_to_hide(mnesia, SysTabHidden),
117
get_mnesia_table_info([], OwnersToHide, Acc) ->
117
get_mnesia_table_info([], _OwnersToHide, Acc) ->
118
118
lists:keysort(?NAME_ELEM, Acc);
119
119
get_mnesia_table_info([TabId | Tail], OwnersToHide, Acc) ->
120
120
case catch get_mnesia_owner_size(TabId) of
122
122
%% Ignore tables ceasing to exist.
123
123
%% Nodedown errors caught above!
124
124
get_mnesia_table_info(Tail, OwnersToHide, Acc);
204
get_ets_table_info([], TablesToHide, OwnersToHide, Acc) ->
204
get_ets_table_info([], _TablesToHide, _OwnersToHide, Acc) ->
205
205
lists:keysort(?ID_ELEM, Acc);
206
206
get_ets_table_info([TabId | Tail], TablesToHide, OwnersToHide, Acc) ->
207
207
case catch get_ets_name_owner_protection(TabId) of
209
209
%% Ignore tables ceasing to exist.
210
210
%% Nodedown errors caught above!
211
211
get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
298
298
analyze_error(Cause, Node, Table) ->
300
{badrpc, {'EXIT', {badarg,Reason}}} ->
300
{badrpc, {'EXIT', {badarg,_Reason}}} ->
301
301
done; %% Table has ceased to exist.
302
{'EXIT', {badarg, {ets,local_info,Args}}} ->
302
{'EXIT', {badarg, {ets,local_info,_Args}}} ->
305
305
{badrpc, nodedown} ->
313
313
handle_error(mnesia_not_started, Node, Table);
314
314
{badrpc, {'EXIT', {aborted, {node_not_running,_ErrNode}}}} ->
315
315
handle_error(mnesia_not_started, Node, Table);
316
{'EXIT', {undef, {mnesia,Fcn,Args}}} ->
316
{'EXIT', {undef, {mnesia,_Fcn,_Args}}} ->
317
317
handle_error(mnesia_not_started, Node, Table);
319
319
{'EXIT', Reason} ->
334
334
"We wish to reach all data",
335
335
"But we never will."])
337
handle_error(no_table, Node, Table) ->
338
gs:config(win, [beep]),
339
case get(error_msg_mode) of
341
tv_utils:notify(win, "TV Notification", ["The table no longer exists!"]);
343
Msg = ["A table that big?",
344
"It might be very useful.",
345
"But now it is gone."],
346
tv_utils:notify(win, "TV Notification", Msg)
348
handle_error(nodedown, Node, Table) ->
337
handle_error(nodedown, _Node, _Table) ->
349
338
gs:config(win, [beep]),
350
339
case get(error_msg_mode) of
357
346
tv_utils:notify(win, "TV Notification", Msg)
359
348
self() ! nodedown;
360
handle_error({unexpected_error,Cause}, Node, Table) ->
349
handle_error({unexpected_error,Cause}, _Node, _Table) ->
361
350
io:format("Unexpected error: ~p~n", [Cause]),
362
351
gs:config(win, [beep]).
368
357
WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
371
{gs, Gridline, click, {grid,Readable}, [Col,Row,Text | T]} when Text /= "" ->
360
{gs, Gridline, click, {grid,Readable}, [Col,Row,Text | _]} when Text /= "" ->
372
361
unmark_cell(MarkedCell, Tables),
373
362
NewMarkedCell = mark_cell({Gridline, Col, Row}, MarkedCell, Readable),
374
363
loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
375
364
UnreadHidden,SysTabHidden,SortKey,Children);
378
{gs, Gridline, click, {grid,Readable}, [Col,Row,"" | T]} ->
367
{gs, _Gridline, click, {grid,_Readable}, [_Col,_Row,"" | _]} ->
379
368
NewMarkedCell = unmark_cell(MarkedCell, Tables),
380
369
loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
381
370
UnreadHidden,SysTabHidden,SortKey,Children);
384
{gs, Gridline, doubleclick, {grid,Data}, [?NAME_COL,Row,Text | T]} when Text /= "" ->
373
{gs, Gridline, doubleclick, {grid,Data}, [?NAME_COL,Row,Text | _]} when Text /= "" ->
385
374
unmark_cell(MarkedCell, Tables),
386
375
NewMarkedCell = mark_cell({Gridline, ?NAME_COL, Row}, undefined, Data),
387
376
{Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables),
401
{gs, Gridline, doubleclick, {grid,Data}, [?ID_COL,Row,Text | T]} when Text /= "" ->
390
{gs, Gridline, doubleclick, {grid,Data}, [?ID_COL,Row,Text | _]} when Text /= "" ->
402
391
unmark_cell(MarkedCell, Tables),
403
392
NewMarkedCell = mark_cell({Gridline, ?ID_COL, Row}, undefined, Data),
404
393
{Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables),
418
{gs, Gridline, doubleclick, {grid,Data}, [?INFO_COL,Row,Text | T]} when Text /= "" ->
407
{gs, Gridline, doubleclick, {grid,Data}, [?INFO_COL,Row,Text | _]} when Text /= "" ->
419
408
unmark_cell(MarkedCell, Tables),
420
409
NewMarkedCell = mark_cell({Gridline, ?INFO_COL, Row}, undefined, Data),
421
410
{Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
435
{gs, Gridline, doubleclick, {grid,Data}, [?PID_COL,Row,Text | T]} when Text /= "" ->
424
{gs, Gridline, doubleclick, {grid,Data}, [?PID_COL,Row,Text | _]} when Text /= "" ->
436
425
unmark_cell(MarkedCell, Tables),
437
426
NewMarkedCell = mark_cell({Gridline, ?PID_COL, Row}, undefined, Data),
438
427
OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
441
430
UnreadHidden,SysTabHidden,SortKey, NewChildren);
444
{gs, Gridline, doubleclick, {grid,Data}, [?PROCNAME_COL,Row,Text | T]} when Text /= "" ->
433
{gs, Gridline, doubleclick, {grid,Data}, [?PROCNAME_COL,Row,Text | _]} when Text /= "" ->
445
434
unmark_cell(MarkedCell, Tables),
446
435
NewMarkedCell = mark_cell({Gridline, ?PROCNAME_COL, Row}, undefined, Data),
447
436
OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
450
439
UnreadHidden,SysTabHidden,SortKey, NewChildren);
453
{gs, win, configure, _Data, [Width, Height | T]} when {Width,Height} /= WinSize ->
442
%% {gs, win, configure, _Data, [Width, Height | _]} when {Width,Height} /= WinSize ->
443
Msg0 = {gs, win, configure, _Data, [Width0, Height0 | _]}
444
when {Width0,Height0} /= WinSize ->
445
{gs, win, configure, _, [Width,Height|_]} = flush_msgs(Msg0),
454
447
NewSize = resize_window(Width, Height, length(Tables)),
455
448
loop(KindOfTable,CurrNode,MarkedCell,GridLines,NewSize,Tables,Shortcuts,
456
449
UnreadHidden,SysTabHidden,SortKey,Children);
644
637
{gs, _Id, click, help_button, _Args} ->
645
HelpFile = filename:join(code:priv_dir(tv), "../doc/index.html"),
646
tool_utils:open_help(gs:start([{kernel, true}]), HelpFile),
638
HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
639
tool_utils:open_help(win, HelpFile),
647
640
loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
648
641
UnreadHidden,SysTabHidden,SortKey,Children);
651
644
{gs, _Id, click, otp_help_button, _Args} ->
652
IndexFile = filename:join(code:root_dir(), "doc/index.html"),
653
tool_utils:open_help(gs:start([{kernel, true}]), IndexFile),
645
IndexFile = filename:join([code:root_dir(), "doc", "index.html"]),
646
tool_utils:open_help(win, IndexFile),
654
647
loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
655
648
UnreadHidden,SysTabHidden,SortKey,Children);
720
713
fun({Pid,pman,_OP}) ->
729
{gs, win, keypress, _Data, [Key, _, _, 1 | T]} ->
722
{gs, win, keypress, _Data, [Key, _, _, 1 | _]} ->
730
723
case lists:keysearch(Key, 1, Shortcuts) of
731
724
{value, {Key, Value}} ->
732
725
handle_keypress(Value,KindOfTable,CurrNode,MarkedCell,
787
780
Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
790
{tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, Readable, false} ->
783
{tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, _Readable, false} ->
791
784
case create_table(KindOfTableToCreate, Node, Node == node(), Name, Options,
794
787
loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
795
788
Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
797
790
case KindOfTable of
860
flush_msgs(Msg0 = {gs, Win, Op, _, _}) ->
861
receive Msg = {gs, Win,Op,_,_} ->
870
867
handle_keypress(open_table,KindOfTable,CurrNode,MarkedCell,GridLines,
871
868
WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
1014
1011
handle_keypress(help_button,KindOfTable,CurrNode,MarkedCell,GridLines,
1015
1012
WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
1016
HelpFile = filename:join(code:priv_dir(tv), "../doc/index.html"),
1017
tool_utils:open_help(gs:start([{kernel, true}]), HelpFile),
1013
HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
1014
tool_utils:open_help(win, HelpFile),
1018
1015
loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
1019
1016
UnreadHidden,SysTabHidden,SortKey,Children);
1021
handle_keypress(exit_button,KindOfTable,CurrNode,MarkedCell,GridLines,
1022
WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
1018
handle_keypress(exit_button,_KindOfTable,_CurrNode,_MarkedCell,_GridLines,
1019
_WinSize,_Tables,_Shortcuts,_UnreadHidden,_SysTabHidden,_SortKey,Children) ->
1024
1021
fun({Pid,pman,_OP}) ->
1025
1022
exit(Pid,kill);
1074
1071
replace_node_name('nonode@nohost', 'nonode@nohost') ->
1075
1072
%% Still undistributed...
1077
replace_node_name(Node, _OldNode) when node() == 'nonode@nohost' ->
1074
replace_node_name(_Node, _OldNode) when node() == 'nonode@nohost' ->
1078
1075
%% No longer distributed, but previously was!
1080
replace_node_name(Node, 'nonode@nohost') ->
1077
replace_node_name(_Node, 'nonode@nohost') ->
1081
1078
%% The system has been distributed!
1083
1080
replace_node_name(_Node, _OldNode) ->
1143
1140
get_tv_info_pid(TabId,Node,Children) ->
1144
1141
TvInfoChildren = [X || X <- Children, element(2,X) == tv_info],
1145
1142
case lists:keysearch({TabId,Node}, 3, TvInfoChildren) of
1146
{value, {Pid, tv_info, {Table,Node}}} ->
1143
{value, {Pid, tv_info, {_Table,Node}}} ->
1165
1162
tv_utils:notify(win, "TV Notification", Msg)
1167
1164
start_tv_info(Tab, Node, Node == node(), KindOfTable, Children);
1168
start_tv_browser(Table,Node,Name,KindOfTable,Readable,Children) ->
1165
start_tv_browser(Table,Node,Name,KindOfTable,_Readable,Children) ->
1169
1166
TvBrowserChildren = [X || X <- Children, element(2,X) == tv_browser],
1170
1167
case lists:keysearch({Table,Node}, 3, TvBrowserChildren) of
1171
1168
{value, {BPid,tv_browser,{Table,Node}}} ->
1262
create_table(mnesia, Node, LocalNode, TabName, Options, NewTabWinPid) ->
1259
create_table(mnesia, _Node, _LocalNode, _TabName, _Options, _NewTabWinPid) ->
1264
1261
create_table(ets, Node, LocalNode, TabName, Options, NewTabWinPid) ->
1265
1262
case tv_table_owner:create(ets, Node, LocalNode, TabName, Options) of
1330
mark_cell({Id,Col,Row}, {Id,Col,Row}, Readable) ->
1327
mark_cell({Id,Col,Row}, {Id,Col,Row}, _Readable) ->
1331
1328
{undefined, undefined, undefined};
1332
1329
mark_cell({Id,Col,Row}, _Any, Readable) ->
1333
1330
case lists:member(Col, ?POSSIBLE_MARK_COLS) of