X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/a1e745ad3b306d1e5173588e39d71b132466365e..18b3351a3791f19a63c0af05640719db8eb5d184:/cc.h diff --git a/cc.h b/cc.h index b7a2b27..04ff17f 100644 --- a/cc.h +++ b/cc.h @@ -289,6 +289,97 @@ Options:\n\ extern int cmd_encode(int /*argc*/, char */*argv*/[]); extern int cmd_decode(int /*argc*/, char */*argv*/[]); +/*----- Hash encoding functions -------------------------------------------*/ + +/* --- Table --- */ + +#define ENCODINGS(_) \ + _(HEX, hex) \ + _(BASE64, base64) \ + _(BASE32, base32) + +enum { +#define ENUM(tag, name) ENC_##tag, + ENCODINGS(ENUM) +#undef ENUM + ENC_LIMIT +}; + +typedef struct encodeops { + const char *name; + void (*put)(const octet *, size_t, FILE *); + size_t (*get)(const char *, octet *, size_t, char **); +} encodeops; + +extern const encodeops encodingtab[]; + +/* --- @getencoding@ --- * + * + * Arguments: @const char *ename@ = encoding name + * + * Returns: Pointer to encoding table entry, or null. + * + * Use: Finds an encoding entry given its name. + */ + +extern const encodeops *getencoding(const char */*ename*/); + +/*----- File hashing ------------------------------------------------------*/ + +/* --- @fhash@ --- * + * + * Arguments: @const gchash *gch@ = pointer to hash function to use + * @unsigned f@ = flags to set + * @const char *file@ = file name to be hashed (null for stdin) + * @void *buf@ = pointer to hash output buffer + * + * Returns: Zero if it worked, nonzero on error. + * + * Use: Hashes a file. + */ + +#define FHF_BINARY 256u +#define FHF_PROGRESS 512u + +#define FHF_MASK 3840 + +extern int fhash(const gchash */*gch*/, unsigned /*f*/, + const char */*file*/, void */*buf*/); + +/*----- String I/O --------------------------------------------------------*/ + +#define GSF_RAW 4096u +#define GSF_FILE 0u +#define GSF_STRING 8192u + +#define GSF_MASK 61440u + +/* --- @getstring@ --- * + * + * Arguments: @void *in@ = input source + * @dstr *d@ = destination string + * @unsigned f@ = input flags + * + * Returns: Zero if OK, nonzero on end-of-file. + * + * Use: Reads a filename (or something similar) from a stream. + */ + +extern int getstring(void */*in*/, dstr */*d*/, unsigned /*f*/); + +/* --- @putstring@ --- * + * + * Arguments: @FILE *fp@ = stream to write on + * @const char *p@ = pointer to text + * @unsigned f@ = output flags + * + * Returns: --- + * + * Use: Emits a string to a stream. + */ + +extern void putstring(FILE */*fp*/, const char */*p*/, unsigned /*f*/); + /*----- Lists of things ---------------------------------------------------*/ /* --- @LIST(STRING, FP, END-TEST, NAME-EXPR)@ --- *