view README.md @ 13:41b74137e201

include: make header guards sane double underscores are reserved to the implementation by the C standard
author Paper <paper@paper.us.eu.org>
date Wed, 03 Apr 2024 20:48:51 -0400
parents 0cc2555db371
children
line wrap: on
line source

# libedl
libedl is a library for parsing Vegas Pro EDL files and translating them into usable C structures.

## Build
```console
$ autoreconf -i
$ mkdir build
$ cd build
$ ../configure
$ make
$ sudo make install
```

## Example
```c
#include <stdio.h>
#include <stdlib.h>

#include <edl.h>

int file_get_contents(const char* f, char** contents, long* size) {
    /* open the file */
    FILE* file = fopen(f, "rb");
    if (!file)
        return 1;

    /* get filesize */
    fseek(file, 0L, SEEK_END);
    *size = ftell(file);
    fseek(file, 0L, SEEK_SET);

    /* grab the contents */
    *contents = malloc(*size + 1);
    if (!*contents)
        return 1;

    /* hope and pray that `char` is 8-bit */
    fread(*contents, *size, 1, file);

    (*contents)[*size] = '\0';

    fclose(file);
}

int main(int argc, char** argv) {
    char* data = NULL;
    long size = 0;
    EDL edl = {0};

    if (argc != 2)
        return 1;

    if (file_get_contents(argv[1], &data, &size))
        return 1;

    /* if you know the amount of lines beforehand,
     * you can preallocate the memory for libedl to use */
    EDL_reallocate(&edl, 1024);

    /* pass the file data to libedl
     *
     * it is also perfectly valid to use mmap() or
     * variations of it (ex MapViewOfFile()) here... */
    EDL_parse(&edl, data, size + 1);

    /* dump the data to a valid EDL string */
    char* edl_str = EDL_dump(&edl);
    printf("%s\n", edl_str);
    free(edl_str);

    /* free our used memory; libedl allocates on the heap */
    EDL_free(&edl);
    free(data);

    return 0;
}
```