forked from contiki-os/contiki
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dsc.h
141 lines (127 loc) · 4.51 KB
/
dsc.h
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
138
139
140
141
/*
* Copyright (c) 2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the Contiki desktop environment
*
*
*/
/**
* \file
* Declaration of the DSC program description structure.
* \author Adam Dunkels <[email protected]>
*
*/
/**
* \addtogroup loader
* @{
*/
/**
* \page dsc The program description structure
*
* The Contiki DSC structure is used for describing programs. It
* includes a string describing the program, the name of the program
* file on disk (or a pointer to the programs initialization function
* for systems without disk support), a bitmap icon and a text version
* of the same icon.
*
* The DSC is saved into a file which can be loaded by programs such
* as the "Directory" application which reads all DSC files on disk
* and presents the icons and descriptions in a window.
*
*/
#ifndef DSC_H_
#define DSC_H_
#include "ctk/ctk.h"
/**
* The DSC program description structure.
*
* The DSC structure is used for describing a Contiki program. It
* includes a short textual description of the program, either the
* name of the program on disk, or a pointer to the init() function,
* and an icon for the program.
*/
struct dsc {
char *description; /**< A text string containing a one-line
description of the program */
#if WITH_LOADER_ARCH
char *prgname; /**< The name of the program on disk. */
#else /* WITH_LOADER_ARCH */
struct process *process; /**< A pointer to the program's process. */
#endif /* WITH_LOADER_ARCH */
#if CTK_CONF_ICONS
struct ctk_icon *icon; /**< A pointer to the ctk_icon structure for
the DSC. */
#endif /* CTK_CONF_ICONS */
#if WITH_LOADER_ARCH
void *loadaddr; /**< The loading address of the DSC. Used by
the LOADER_UNLOAD() function when
deallocating the memory allocated for the
DSC when loading it. */
#endif /* WITH_LOADER_ARCH */
};
/**
* Instantiating macro for the DSC structure.
*
* \param dscname The name of the C variable which is to contain the
* DSC.
*
* \param description A one-line text describing the program.
*
* \param prgname The name of the program on disk.
*
* \param process A pointer to the initialization function of the
* program.
*
* \param icon A pointer to the CTK icon.
*/
#if WITH_LOADER_ARCH
#if CTK_CONF_ICONS
#define DSC(dscname, description, prgname, process, icon) \
CLIF const struct dsc dscname = {description, prgname, icon}
#else /* CTK_CONF_ICONS */
#define DSC(dscname, description, prgname, process, icon) \
CLIF const struct dsc dscname = {description, prgname}
#endif /* CTK_CONF_ICONS */
#else /* WITH_LOADER_ARCH */
#if CTK_CONF_ICONS
#define DSC(dscname, description, prgname, process, icon) \
PROCESS_NAME(process); \
const struct dsc dscname = {description, &process, icon}
#else /* CTK_CONF_ICONS */
#define DSC(dscname, description, prgname, process, icon) \
PROCESS_NAME(process); \
const struct dsc dscname = {description, &process}
#endif /* CTK_CONF_ICONS */
#endif /* WITH_LOADER_ARCH */
#define DSC_HEADER(name) extern struct dsc name
#ifndef NULL
#define NULL 0
#endif /* NULL */
/** @} */
#endif /*DSC_H__ */