Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Sunxi Tools
Commits
0dd7e13a
Commit
0dd7e13a
authored
May 04, 2012
by
Alejandro Mery
Browse files
script: getting started with the script tree
parent
5a970809
Changes
2
Hide whitespace changes
Inline
Side-by-side
script.c
0 → 100644
View file @
0dd7e13a
/*
* Copyright (C) 2012 Alejandro Mery <amery@geeks.cl>
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
#include "sunxi-tools.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "script.h"
/*
*/
struct
script
*
script_new
(
void
)
{
struct
script
*
script
;
if
((
script
=
malloc
(
sizeof
(
*
script
))))
list_init
(
&
script
->
sections
);
return
script
;
}
/*
*/
struct
script_section
*
script_section_append
(
struct
script
*
script
,
const
char
*
name
)
{
struct
script_section
*
section
;
assert
(
script
!=
NULL
);
assert
(
name
!=
NULL
);
if
((
section
=
malloc
(
sizeof
(
*
section
))))
{
size_t
l
=
strlen
(
name
);
if
(
l
>
31
)
/* truncate */
l
=
31
;
memcpy
(
section
->
name
,
name
,
l
);
section
->
name
[
l
]
=
'\0'
;
list_init
(
&
section
->
entries
);
list_append
(
&
script
->
sections
,
&
section
->
sections
);
}
return
section
;
}
/*
*/
static
inline
void
script_entry_append
(
struct
script
*
script
,
struct
script_entry
*
entry
,
enum
script_value_type
type
,
const
char
*
name
)
{
size_t
l
;
struct
script_section
*
section
;
assert
(
script
!=
NULL
);
assert
(
!
list_empty
(
&
script
->
sections
));
assert
(
entry
!=
NULL
);
assert
(
name
!=
NULL
);
section
=
container_of
(
list_last
(
&
script
->
sections
),
struct
script_section
,
sections
);
l
=
strlen
(
name
);
if
(
l
>
31
)
/* truncate */
l
=
31
;
memcpy
(
entry
->
name
,
name
,
l
);
entry
->
name
[
l
]
=
'\0'
;
entry
->
type
=
type
;
list_append
(
&
section
->
entries
,
&
entry
->
entries
);
}
struct
script_null_entry
*
script_null_entry_append
(
struct
script
*
script
,
const
char
*
name
)
{
struct
script_null_entry
*
entry
;
assert
(
script
!=
NULL
);
assert
(
!
list_empty
(
&
script
->
sections
));
assert
(
name
!=
NULL
);
if
((
entry
=
malloc
(
sizeof
(
*
entry
))))
{
script_entry_append
(
script
,
&
entry
->
entry
,
SCRIPT_VALUE_TYPE_NULL
,
name
);
}
return
entry
;
}
script.h
0 → 100644
View file @
0dd7e13a
/*
* Copyright (C) 2012 Alejandro Mery <amery@geeks.cl>
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef _SUNXI_TOOLS_SCRIPT_H
#define _SUNXI_TOOLS_SCRIPT_H
/** head of the data tree */
struct
script
{
struct
list_entry
sections
;
};
/** head of each section */
struct
script_section
{
char
name
[
32
];
struct
list_entry
sections
;
struct
list_entry
entries
;
};
/** types of values */
enum
script_value_type
{
SCRIPT_VALUE_TYPE_SINGLE_WORD
=
1
,
SCRIPT_VALUE_TYPE_STRING
,
SCRIPT_VALUE_TYPE_MULTI_WORD
,
SCRIPT_VALUE_TYPE_GPIO
,
SCRIPT_VALUE_TYPE_NULL
,
};
/** generic entry */
struct
script_entry
{
char
name
[
32
];
enum
script_value_type
type
;
struct
list_entry
entries
;
};
/** null entry */
struct
script_null_entry
{
struct
script_entry
entry
;
};
/** create a new script tree */
struct
script
*
script_new
(
void
);
/** create a new section appended to a given tree */
struct
script_section
*
script_section_append
(
struct
script
*
script
,
const
char
*
name
);
/** create a new empty/null entry appended to the last section of a tree */
struct
script_null_entry
*
script_null_entry_append
(
struct
script
*
script
,
const
char
*
name
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment