1/* xdr_rdb.c  - xdr routines for Remote Debug interface to VxWorks  */
2
3/* Copyright 1992, 1993 Free Software Foundation, Inc.
4
5   This code was donated by Wind River Systems, Inc. */
6
7/*
8modification history
9--------------------
1001a,21mar90,llk  created using modification 01d of xdr_dbx.c.
11*/
12
13/*
14DESCRIPTION
15This module contains the eXternal Data Representation (XDR) routines
16for the RDB interface for VxWorks.
17*/
18
19#include "defs.h"
20#include "vxWorks.h"
21#include <rpc/rpc.h>
22#include "xdr_rdb.h"
23
24/* forward declarations */
25
26bool_t
27xdr_arg_type(xdrs, objp)
28        XDR *xdrs;
29        arg_type *objp;
30{
31        if (!xdr_enum(xdrs, (enum_t *)objp)) {
32                return (FALSE);
33        }
34        return (TRUE);
35}
36
37bool_t
38xdr_arg_value(xdrs, objp)
39        XDR *xdrs;
40        arg_value *objp;
41{
42        if (!xdr_arg_type(xdrs, &objp->type)) {
43                return (FALSE);
44        }
45        switch (objp->type) {
46        case T_BYTE:
47                if (!xdr_char(xdrs, &objp->arg_value_u.v_byte)) {
48                        return (FALSE);
49                }
50                break;
51        case T_WORD:
52                if (!xdr_short(xdrs, &objp->arg_value_u.v_word)) {
53                        return (FALSE);
54                }
55                break;
56        case T_INT:
57                if (!xdr_int(xdrs, &objp->arg_value_u.v_int)) {
58                        return (FALSE);
59                }
60                break;
61        case T_FLOAT:
62                if (!xdr_float(xdrs, &objp->arg_value_u.v_fp)) {
63                        return (FALSE);
64                }
65                break;
66        case T_DOUBLE:
67                if (!xdr_double(xdrs, &objp->arg_value_u.v_dp)) {
68                        return (FALSE);
69                }
70                break;
71        case T_UNKNOWN:
72                break;
73        }
74        return (TRUE);
75}
76
77bool_t
78xdr_func_call(xdrs, objp)
79        XDR *xdrs;
80        func_call *objp;
81{
82        if (!xdr_int(xdrs, &objp->func_addr)) {
83                return (FALSE);
84        }
85        if (!xdr_array(xdrs, (char **)&objp->args.args_val, (u_int *)&objp->args.args_len, MAX_FUNC_ARGS, sizeof(arg_value), xdr_arg_value)) {
86                return (FALSE);
87        }
88        return (TRUE);
89}
90
91bool_t
92xdr_arg_one(xdrs, objp)
93        XDR *xdrs;
94        arg_one *objp;
95{
96        if (!xdr_string(xdrs, objp, MAX_ARG_LEN)) {
97                return (FALSE);
98        }
99        return (TRUE);
100}
101
102
103
104
105bool_t
106xdr_arg_array(xdrs, objp)
107        XDR *xdrs;
108        arg_array *objp;
109{
110        if (!xdr_array(xdrs, (char **)&objp->arg_array_val, (u_int *)&objp->arg_array_len, MAX_ARG_CNT, sizeof(arg_one), xdr_arg_one)) {
111                return (FALSE);
112        }
113        return (TRUE);
114}
115
116/*********************************************************************
117*
118* xdr_EVENT_TYPE -
119*
120*/
121
122bool_t xdr_EVENT_TYPE(xdrs, objp)
123    XDR *xdrs;
124    EVENT_TYPE *objp;
125
126    {
127    if (!xdr_enum (xdrs, (enum_t *) objp))
128	return (FALSE);
129    return (TRUE);
130    }
131
132/*********************************************************************
133*
134* xdr_RDB_EVENT -
135*
136*/
137
138bool_t xdr_RDB_EVENT (xdrs, objp)
139    XDR *xdrs;
140    RDB_EVENT *objp;
141
142    {
143    if (!xdr_int (xdrs, &objp->status))
144	return (FALSE);
145    if (!xdr_int (xdrs, &objp->taskId))
146	return (FALSE);
147    if (!xdr_EVENT_TYPE (xdrs, &objp->eventType))
148	return (FALSE);
149    if (!xdr_int (xdrs, &objp->sigType))
150	return (FALSE);
151    return (TRUE);
152    }
153
154/*********************************************************************
155*
156* xdr_TASK_START -
157*
158*/
159
160bool_t
161xdr_TASK_START (xdrs, objp)
162    XDR *xdrs;
163    TASK_START *objp;
164
165    {
166    if (!xdr_int (xdrs, &objp->status))
167	return (FALSE);
168    if (!xdr_int (xdrs, &objp->pid))
169	return (FALSE);
170    return (TRUE);
171    }
172
173
174/*********************************************************************
175*
176* xdr_SYMBOL_ADDR -
177*
178*/
179
180bool_t
181xdr_SYMBOL_ADDR (xdrs, objp)
182    XDR *xdrs;
183    SYMBOL_ADDR *objp;
184
185    {
186    if (!xdr_int (xdrs, &objp->status))
187	return (FALSE);
188    if (!xdr_u_int (xdrs, &objp->addr))
189	return (FALSE);
190    return (TRUE);
191    }
192
193/*********************************************************************
194*
195* xdr_SOURCE_STEP -
196*
197*/
198
199bool_t
200xdr_SOURCE_STEP (xdrs, objp)
201    XDR *xdrs;
202    SOURCE_STEP *objp;
203
204    {
205    if (!xdr_int (xdrs, &objp->taskId))
206	return (FALSE);
207    if (!xdr_u_int (xdrs, &objp->startAddr))
208	return (FALSE);
209    if (!xdr_u_int (xdrs, &objp->endAddr))
210	return (FALSE);
211    return (TRUE);
212    }
213