mirror of https://github.com/xfarrow/dircomp.git
120 lines
3.0 KiB
Plaintext
120 lines
3.0 KiB
Plaintext
|
#include "config.h"
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
/**
|
||
|
* json - Parse and generate JSON (JavaScript Object Notation)
|
||
|
*
|
||
|
* This is a library for encoding and decoding JSON that strives to be
|
||
|
* easy to learn, use, and incorporate into an application.
|
||
|
*
|
||
|
* JSON (JavaScript Object Notation) facilitates passing data among different
|
||
|
* programming languages, particularly JavaScript. It looks like this:
|
||
|
*
|
||
|
* [
|
||
|
* {
|
||
|
* "id": 1,
|
||
|
* "firstname": "John",
|
||
|
* "lastname": "Smith",
|
||
|
* "email": "john@example.com",
|
||
|
* "likes_pizza": false
|
||
|
* },
|
||
|
* {
|
||
|
* "id": 2,
|
||
|
* "firstname": "Linda",
|
||
|
* "lastname": "Jones",
|
||
|
* "email": null,
|
||
|
* "likes_pizza": true
|
||
|
* }
|
||
|
* ]
|
||
|
*
|
||
|
* Example:
|
||
|
* #include <ccan/json/json.h>
|
||
|
* #include <math.h>
|
||
|
* #include <stdio.h>
|
||
|
* #include <stdlib.h>
|
||
|
*
|
||
|
* static int find_number(JsonNode *object, const char *name, double *out)
|
||
|
* {
|
||
|
* JsonNode *node = json_find_member(object, name);
|
||
|
* if (node && node->tag == JSON_NUMBER) {
|
||
|
* *out = node->number_;
|
||
|
* return 1;
|
||
|
* }
|
||
|
* return 0;
|
||
|
* }
|
||
|
*
|
||
|
* static void solve_pythagorean(JsonNode *triple)
|
||
|
* {
|
||
|
* double a = 0, b = 0, c = 0;
|
||
|
* int a_given, b_given, c_given;
|
||
|
*
|
||
|
* if (triple->tag != JSON_OBJECT) {
|
||
|
* fprintf(stderr, "Error: Expected a JSON object.\n");
|
||
|
* exit(EXIT_FAILURE);
|
||
|
* }
|
||
|
*
|
||
|
* a_given = find_number(triple, "a", &a);
|
||
|
* b_given = find_number(triple, "b", &b);
|
||
|
* c_given = find_number(triple, "c", &c);
|
||
|
*
|
||
|
* if (a_given + b_given + c_given != 2) {
|
||
|
* fprintf(stderr, "Error: I need two sides to compute the length of the third.\n");
|
||
|
* exit(EXIT_FAILURE);
|
||
|
* }
|
||
|
*
|
||
|
* if (a_given && b_given) {
|
||
|
* c = sqrt(a*a + b*b);
|
||
|
* json_append_member(triple, "c", json_mknumber(c));
|
||
|
* } else if (a_given && c_given) {
|
||
|
* b = sqrt(c*c - a*a);
|
||
|
* json_append_member(triple, "b", json_mknumber(b));
|
||
|
* } else if (b_given && c_given) {
|
||
|
* a = sqrt(c*c - b*b);
|
||
|
* json_append_member(triple, "a", json_mknumber(a));
|
||
|
* }
|
||
|
* }
|
||
|
*
|
||
|
* int main(void)
|
||
|
* {
|
||
|
* JsonNode *triples = json_mkarray();
|
||
|
*
|
||
|
* json_append_element(triples, json_decode("{\"a\": 3, \"b\": 4}"));
|
||
|
* json_append_element(triples, json_decode("{\"a\": 5, \"c\": 13}"));
|
||
|
* json_append_element(triples, json_decode("{\"b\": 24, \"c\": 25}"));
|
||
|
*
|
||
|
* JsonNode *triple;
|
||
|
* json_foreach(triple, triples)
|
||
|
* solve_pythagorean(triple);
|
||
|
*
|
||
|
* char *tmp = json_stringify(triples, "\t");
|
||
|
* puts(tmp);
|
||
|
* free(tmp);
|
||
|
*
|
||
|
* json_delete(triples);
|
||
|
* return 0;
|
||
|
* }
|
||
|
*
|
||
|
* Author: Joey Adams
|
||
|
* Version: 0.1
|
||
|
* License: MIT
|
||
|
*/
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
/* Expect exactly one argument */
|
||
|
if (argc != 2)
|
||
|
return 1;
|
||
|
|
||
|
if (strcmp(argv[1], "depends") == 0) {
|
||
|
/* Nothing */
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (strcmp(argv[1], "libs") == 0) {
|
||
|
printf("m\n"); /* Needed for sqrt() used in example code above. */
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|