summaryrefslogtreecommitdiff
path: root/src/fr-process.h
blob: dd7eb0697ec00cec933482745ec856095f9b67dc (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */

/*
 *  Engrampa
 *
 *  Copyright (C) 2001, 2003, 2008 Free Software Foundation, Inc.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef FR_PROCESS_H
#define FR_PROCESS_H

#include <glib.h>
#include <gtk/gtk.h>
#include <sys/types.h>
#include "typedefs.h"

#define FR_TYPE_PROCESS            (fr_process_get_type ())
#define FR_PROCESS(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), FR_TYPE_PROCESS, FrProcess))
#define FR_PROCESS_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), FR_TYPE_PROCESS, FrProcessClass))
#define FR_IS_PROCESS(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FR_TYPE_PROCESS))
#define FR_IS_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FR_TYPE_PROCESS))
#define FR_PROCESS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), FR_TYPE_PROCESS, FrProcessClass))

typedef struct _FrProcess        FrProcess;
typedef struct _FrProcessClass   FrProcessClass;
typedef struct _FrProcessPrivate FrProcessPrivate;

typedef void     (*ProcFunc)     (gpointer data);
typedef gboolean (*ContinueFunc) (gpointer data);
typedef void     (*LineFunc)     (char *line, gpointer data);

typedef struct {
	GIOChannel *source;
	GList      *raw;
	LineFunc    line_func;
	gpointer    line_data;
	GIOStatus   status;
	GError     *error;
} FrChannelData;

struct _FrProcess {
	GObject  __parent;

	/*< public >*/

	gboolean          term_on_stop;  /* whether we must terminate the
					  * command when calling
					  * fr_process_stop. */

	/*< public read-only >*/

	FrChannelData     out;
	FrChannelData     err;
	FrProcError       error;

	/*< protected >*/

	gboolean          restart;       /* whether to restart the process
			  		  * after an error. */

	FrProcessPrivate *priv;
};

struct _FrProcessClass {
	GObjectClass __parent_class;

	/* -- Signals -- */

	void (* start)         (FrProcess   *fr_proc);
	void (* done)          (FrProcess   *fr_proc,
				FrProcError *error);
	void (* sticky_only)   (FrProcess   *fr_proc);
};

GType       fr_process_get_type             (void);
FrProcess * fr_process_new                  (void);
void        fr_process_clear                (FrProcess    *fr_proc);
void        fr_process_begin_command        (FrProcess    *fr_proc,
					     const char   *arg);
void        fr_process_begin_command_at     (FrProcess    *fr_proc,
					     const char   *arg,
					     int           index);
void        fr_process_add_arg              (FrProcess    *fr_proc,
					     const char   *arg);
void        fr_process_add_arg_concat       (FrProcess    *fr_proc,
					     const char   *arg,
					     ...) G_GNUC_NULL_TERMINATED;
void        fr_process_add_arg_printf       (FrProcess    *fr_proc,
					     const char   *format,
					     ...) G_GNUC_PRINTF (2, 3);
void        fr_process_set_arg_at           (FrProcess    *fr_proc,
					     int           n_comm,
					     int           n_arg,
					     const char   *arg);
void        fr_process_set_begin_func       (FrProcess    *fr_proc,
					     ProcFunc      func,
					     gpointer      func_data);
void        fr_process_set_end_func         (FrProcess    *fr_proc,
					     ProcFunc      func,
					     gpointer      func_data);
void        fr_process_set_continue_func    (FrProcess    *fr_proc,
					     ContinueFunc  func,
					     gpointer      func_data);
void        fr_process_end_command          (FrProcess    *fr_proc);
void        fr_process_set_working_dir      (FrProcess    *fr_proc,
					     const char   *arg);
void        fr_process_set_sticky           (FrProcess    *fr_proc,
					     gboolean      sticky);
void        fr_process_set_ignore_error     (FrProcess    *fr_proc,
					     gboolean      ignore_error);
void        fr_process_use_standard_locale  (FrProcess    *fr_proc,
					     gboolean      use_stand_locale);
void        fr_process_set_out_line_func    (FrProcess    *fr_proc,
					     LineFunc      func,
					     gpointer      func_data);
void        fr_process_set_err_line_func    (FrProcess    *fr_proc,
					     LineFunc      func,
					     gpointer      func_data);
void        fr_process_start                (FrProcess    *fr_proc);
void        fr_process_stop                 (FrProcess    *fr_proc);
int         start_switch_state              (FrProcess    *fr_proc);
void        start_close_suspend_process     (FrProcess    *fr_proc);
#endif /* FR_PROCESS_H */