Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
N
nettle
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Brian Smith
nettle
Commits
4b11c57a
Commit
4b11c57a
authored
22 years ago
by
Niels Möller
Browse files
Options
Downloads
Patches
Plain Diff
Some reorder of the functions.
Rev: src/nettle/examples/sexp-conv.c:1.14
parent
f1c70f33
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
examples/sexp-conv.c
+91
-84
91 additions, 84 deletions
examples/sexp-conv.c
with
91 additions
and
84 deletions
examples/sexp-conv.c
+
91
−
84
View file @
4b11c57a
...
@@ -63,6 +63,9 @@ enum sexp_token
...
@@ -63,6 +63,9 @@ enum sexp_token
SEXP_EOF
,
SEXP_EOF
,
};
};
/* Input */
struct
sexp_input
struct
sexp_input
{
{
FILE
*
f
;
FILE
*
f
;
...
@@ -98,32 +101,6 @@ sexp_input_init(struct sexp_input *input, FILE *f)
...
@@ -98,32 +101,6 @@ sexp_input_init(struct sexp_input *input, FILE *f)
nettle_buffer_init
(
&
input
->
string
);
nettle_buffer_init
(
&
input
->
string
);
}
}
struct
sexp_output
{
FILE
*
f
;
const
struct
nettle_armor
*
coding
;
unsigned
coding_indent
;
union
{
struct
base64_decode_ctx
base64
;
/* NOTE: There's no context for hex encoding */
}
state
;
unsigned
pos
;
};
static
void
sexp_output_init
(
struct
sexp_output
*
output
,
FILE
*
f
)
{
output
->
f
=
f
;
output
->
coding
=
NULL
;
output
->
pos
=
0
;
}
/* Input */
static
void
static
void
sexp_get_raw_char
(
struct
sexp_input
*
input
)
sexp_get_raw_char
(
struct
sexp_input
*
input
)
...
@@ -539,6 +516,30 @@ sexp_get_token(struct sexp_input *input, enum sexp_mode mode)
...
@@ -539,6 +516,30 @@ sexp_get_token(struct sexp_input *input, enum sexp_mode mode)
/* Output routines */
/* Output routines */
struct
sexp_output
{
FILE
*
f
;
const
struct
nettle_armor
*
coding
;
unsigned
coding_indent
;
union
{
struct
base64_decode_ctx
base64
;
/* NOTE: There's no context for hex encoding */
}
state
;
unsigned
pos
;
};
static
void
sexp_output_init
(
struct
sexp_output
*
output
,
FILE
*
f
)
{
output
->
f
=
f
;
output
->
coding
=
NULL
;
output
->
pos
=
0
;
}
#define LINE_WIDTH 60
#define LINE_WIDTH 60
static
void
static
void
...
@@ -772,68 +773,14 @@ sexp_convert_string(struct sexp_input *input, enum sexp_mode mode_in,
...
@@ -772,68 +773,14 @@ sexp_convert_string(struct sexp_input *input, enum sexp_mode mode_in,
die
(
"Invalid string.
\n
"
);
die
(
"Invalid string.
\n
"
);
}
}
static
void
sexp_convert_item
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode_in
,
struct
sexp_output
*
output
,
enum
sexp_mode
mode_out
,
/* Parsing and conversion functions. */
unsigned
indent
);
static
void
static
void
sexp_convert_list
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode_in
,
sexp_convert_list
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode_in
,
struct
sexp_output
*
output
,
enum
sexp_mode
mode_out
,
struct
sexp_output
*
output
,
enum
sexp_mode
mode_out
,
unsigned
indent
)
unsigned
indent
);
{
unsigned
item
;
sexp_put_list_start
(
output
);
for
(
item
=
0
;;
item
++
)
{
sexp_get_token
(
input
,
mode_in
);
if
(
input
->
token
==
SEXP_LIST_END
)
{
sexp_put_list_end
(
output
);
return
;
}
if
(
mode_out
==
SEXP_ADVANCED
)
{
/* FIXME: Adapt pretty printing to handle a big first
* element. */
if
(
item
==
1
)
{
sexp_put_char
(
output
,
' '
);
indent
=
output
->
pos
;
}
else
if
(
item
>
1
)
sexp_put_newline
(
output
,
indent
);
}
sexp_convert_item
(
input
,
mode_in
,
output
,
mode_out
,
indent
);
}
}
static
void
sexp_convert_file
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode_in
,
struct
sexp_output
*
output
,
enum
sexp_mode
mode_out
)
{
sexp_get_char
(
input
);
sexp_get_token
(
input
,
mode_in
);
while
(
input
->
token
!=
SEXP_EOF
)
{
sexp_convert_item
(
input
,
mode_in
,
output
,
mode_out
,
0
);
if
(
mode_out
!=
SEXP_CANONICAL
)
sexp_put_newline
(
output
,
0
);
sexp_get_token
(
input
,
mode_in
);
}
if
(
fflush
(
output
->
f
)
<
0
)
die
(
"Final fflush failed: %s.
\n
"
,
strerror
(
errno
));
}
static
void
static
void
sexp_skip_token
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode
,
sexp_skip_token
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode
,
...
@@ -903,6 +850,66 @@ sexp_convert_item(struct sexp_input *input, enum sexp_mode mode_in,
...
@@ -903,6 +850,66 @@ sexp_convert_item(struct sexp_input *input, enum sexp_mode mode_in,
}
}
}
}
static
void
sexp_convert_list
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode_in
,
struct
sexp_output
*
output
,
enum
sexp_mode
mode_out
,
unsigned
indent
)
{
unsigned
item
;
sexp_put_list_start
(
output
);
for
(
item
=
0
;;
item
++
)
{
sexp_get_token
(
input
,
mode_in
);
if
(
input
->
token
==
SEXP_LIST_END
)
{
sexp_put_list_end
(
output
);
return
;
}
if
(
mode_out
==
SEXP_ADVANCED
)
{
/* FIXME: Adapt pretty printing to handle a big first
* element. */
if
(
item
==
1
)
{
sexp_put_char
(
output
,
' '
);
indent
=
output
->
pos
;
}
else
if
(
item
>
1
)
sexp_put_newline
(
output
,
indent
);
}
sexp_convert_item
(
input
,
mode_in
,
output
,
mode_out
,
indent
);
}
}
static
void
sexp_convert_file
(
struct
sexp_input
*
input
,
enum
sexp_mode
mode_in
,
struct
sexp_output
*
output
,
enum
sexp_mode
mode_out
)
{
sexp_get_char
(
input
);
sexp_get_token
(
input
,
mode_in
);
while
(
input
->
token
!=
SEXP_EOF
)
{
sexp_convert_item
(
input
,
mode_in
,
output
,
mode_out
,
0
);
if
(
mode_out
!=
SEXP_CANONICAL
)
sexp_put_newline
(
output
,
0
);
sexp_get_token
(
input
,
mode_in
);
}
if
(
fflush
(
output
->
f
)
<
0
)
die
(
"Final fflush failed: %s.
\n
"
,
strerror
(
errno
));
}
/* Argument parsing and main program */
static
int
static
int
match_argument
(
const
char
*
given
,
const
char
*
name
)
match_argument
(
const
char
*
given
,
const
char
*
name
)
{
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment