File: browse.op

package info (click to toggle)
mercury 0.9-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 18,488 kB
  • ctags: 9,800
  • sloc: objc: 146,680; ansic: 51,418; sh: 6,436; lisp: 1,567; cpp: 1,040; perl: 854; makefile: 450; asm: 232; awk: 203; exp: 32; fortran: 3; csh: 1
file content (82 lines) | stat: -rw-r--r-- 1,670 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
%------------------------------------------------------------------------------%
% Copyright (C) 1999 INRIA/INSA.
% 
% Author : Erwan Jahier
% File   : browse.op
%


%------------------------------------------------------------------------------%
opium_command(
	name		: browse,
	arg_list	: [VarName],
	arg_type_list	: [string],
	abbrev		: _,
	interface	: button,
	command_type	: opium,
	implementation	: browse_Op,
	parameters	: [],
	message		:
"Call the Mercury term browser. Type `help' at the browser prompt to get \
on-line help"
).

browse_Op(VarName) :-
	quote_string(VarName, VarNameQuoted),
	send_message_to_socket(browse(VarNameQuoted)),
	browser_loop.

browser_loop :-
	print("browser> "), flush(user),
	( read_and_check(Command) ->
		atom_string(Command, CommandStr),
		quote_string(CommandStr, CommandStrQuoted),
		send_message_to_socket(external_request(CommandStrQuoted)),
		read_loop(Msg)
	;
		send_message_to_socket(external_request('"help"')),
		read_loop(Msg)
	),
	(
		Msg = browser_quit,
		read_message_from_socket(browser_end),
		!
	;
		Msg = browser_end_command,
		!,
		browser_loop
	;
		Msg = error(ErrorMsg),
		print(ErrorMsg), nl,
		!,
		browser_loop
	;
		print("Msg = "), print(Msg),
		print("\n************** Error in browse.op\n")
	).

read_loop(MsgOut) :- 
	read_message_from_socket(Msg),
	(
		Msg = browser_str(Str),
		print(Str),
		!,
		read_loop(MsgOut)
	;
		Msg = browser_int(N),
		print(N),
		!,
		read_loop(MsgOut)
	;
		Msg = browser_nl,
		nl,
		!,
		read_loop(MsgOut)
	;
		% Msg = browser_quit, browser_end_command, error().
		MsgOut = Msg
	).

read_and_check(Command) :-
	read_string("\n", _, String),
	atom_string(Command, String).