
libcpy is a library written in C, that:
- implements commonly-used data-type operations
- brings the best/relevant from
libnica c-utils sc libstb awesome-c ...
- modules:
json, request, ...
- attempts to simplify general-purpose scripting in C
Build
- To build libcpy from source, run:
make all
- To compile a simple script written using libcpy, run:
make script file=./path/to/script.c link=<static|shared>
API :: Core
| Description |
Signature |
| Enumerated types |
List_t Str_t Num_t ... |
| Initialize a variable |
new(type_t); |
| Print |
print(<any>, ...); |
| Input |
void input(char* name, const char* prompt); |
| Type |
type(variable); |
| Count variadic args |
va_argc(args...); |
| Overload a function |
va_argv(func, args...); |
#include <cpy.h>
int main() {
char* name = new(Str_t);
List* ls = new(List_t);
bool t = type(ls) == List_t; //true
double arr[] = { 1.2, -3.4 };
input(name, "👨🏻💻 Username: ");
listAdd(ls, 1.2, -3.4, name);
print(ls, name);
print("🔥 anything", -5.6, t, arr);
}
// Count variadic args
#define function(args...) ({ \
int count = va_argc(args); \
print("Count: ", count); \
})
function(0, 1, 2, 3); // Count: 4
// Overload a function
void _add(int argc, unsigned short argv[], ...);
#define Add(args...) ({ va_argv(_add, args); })
Add(1, 2, 3, 4, 5);
API :: List
- Initialize:
List* ls = new(List_t);
- Arguments with
<any> tag can be of any type.
- Arguments with
<optional> tag can be omitted. They have a default value.
| Description |
Signature |
| Append items |
void listAdd(List* ls, ...); |
| Find/Index an item |
int listIndex(List* ls, <any> item, int start <optional>, int end <optional>); |
| Remove an item |
void listRemove(List* ls, <any> item); |
| Count items |
int listLen(List* ls); |
| Includes |
bool listIncludes(List* ls, <any> item); |
| Slice |
List* listSlice(List* ls, int start <optional>, int end <optional>); |
| Splice |
void listSplice(List* ls, int index <optional>, int count <optional>); |
| Copy & return a list |
List* listDup(List* ls); |
| Min item among numbers |
double listMin(List* ls); |
| Max item among numbers |
double listMax(List* ls); |
| Sum of numbers |
double listSum(List* ls); |
| Sort & return a list |
List* listSort(List* ls); |
| Free |
void listFree(List* ls); |
API :: String
- Initialize:
char* name = new(Str_t);.
- Arguments with
<optional> tag can be omitted. They have a default value.
| Description |
Signature |
| Append strings |
void strAdd(char* str, const char* items, ...); |
| Strings equal? |
bool strEq(const char* foo, const char* bar); |
| Reverse |
char* strReverse(const char* str); |
| Substring exists? |
bool strSub(const char* str, const char* sub); |
| Index/Find a string |
int strIndex(const char* str, const char* sub); |
| Count occurencences of a string |
int strCount(const char* str, const char* sub); |
| Alphanumeric? |
bool strAlnum(const char* str); |
| Replace |
void strReplace(const char* str, const char* a, const char* b); |
| Slice |
char* strSlice(const char* str, int start <optional>, int end <optional>); |
| Split |
List* strSplit(const char* str, const char* delimiter); |
| Free |
void strFree(const char* string); |
API :: File
- Initialize:
<none>
- The following are for overly simple operations, and can be made better/powerful.
| Description |
Signature |
| File exists? |
bool fileExists(const char* filepath); |
| Directory/Folder exists? |
bool dirExists(const char* path); |
| Read a file |
bool fileRead(const char* filepath, char* content); |
| Write to a file |
bool fileWrite(const char* filepath, const char* content); |
| Append to a file |
bool fileWrite(const char* filepath, const char* content); |
| Remove a file |
bool fileRemove(const char* filepath); |
| File size |
int fileSize(const char* filepath); |
| Remove a directory/folder |
bool dirRemove(const char* path, bool recursive); |
TODO Asynchronously read/write a huge file |
void fileReadAsync(...); void fileWriteAsync(...); |