From fce10a08ad3202021481097902a90a253cc540e0 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 3 May 2020 19:10:13 -0500 Subject: [PATCH] Working on custom library for C development --- bh.h | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ demo.onyx | 10 ++++++ onyx | Bin 20160 -> 20776 bytes onyx.c | 78 +++++++++++++---------------------------- 4 files changed, 136 insertions(+), 54 deletions(-) create mode 100644 bh.h create mode 100644 demo.onyx diff --git a/bh.h b/bh.h new file mode 100644 index 00000000..24afa216 --- /dev/null +++ b/bh.h @@ -0,0 +1,102 @@ +#include +#include +#include +#include + +#include // TODO: Replace with neede functions + +//------------------------------------------------------------------------------------- +// Better types +//------------------------------------------------------------------------------------- +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef unsigned long u64; +typedef unsigned long long u128; +typedef signed char i8; +typedef signed short i16; +typedef signed int i32; +typedef signed long i64; +typedef signed long long i128; + +typedef struct bh_string { + u8* data; + u64 length; + u64 capacity; +} bh_string; + +#define bh_string_new(x) _Generic((x), \ + unsigned long: bh_string_new_cap, \ + const char*: bh_string_new_str, \ + char*: bh_string_new_str)(x) + +bh_string bh_string_new_cap(unsigned long cap) { + bh_string str; + str.data = (u8*) malloc(sizeof(u8) * cap); + str.length = 0; + str.capacity = cap; + return str; +} + +bh_string bh_string_new_str(const char* cstr) { + const int len = strlen(cstr); + bh_string str; + int i; + + str.data = (u8*) malloc(sizeof(u8) * len); + for (i = 0; i < len; i++) { + str.data[i] = cstr[i]; + } + + str.length = len; + str.capacity = len; + return str; +} + +int bh_string_delete(bh_string* str) { + free(str->data); + str->length = 0; + str->capacity = 0; + return 1; +} + + + +//------------------------------------------------------------------------------------- +// Better files +//------------------------------------------------------------------------------------- +typedef struct File { + i32 fd; + u8 open : 1; + const char* path; +} File; + +int file_open(File *f, const char* path, int flags) { + f->fd = open(path, flags, + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH // +rw-rw-rw + ); + + if (f->fd < 0) + return 1; + + f->open = 1; + f->path = path; + return 0; +} + +int file_close(File* f) { + if (close(f->fd) < 0) { + return errno; + } + + f->open = 0; + return 0; +} + +unsigned char file_read_byte(File* f) { + if (!f->open) return 0; + + unsigned char byte; + read(f->fd, &byte, 1); + return byte; +} diff --git a/demo.onyx b/demo.onyx new file mode 100644 index 00000000..27b20f74 --- /dev/null +++ b/demo.onyx @@ -0,0 +1,10 @@ + +use "core"; + +Foo :: struct { + x, y i32; +} + +main :: (argc i32, argv []*u8) int { + print("Hello World!"); +} diff --git a/onyx b/onyx index e8adb76455dd27e120c61eb3bf1f51764899959d..8853feca6175d062c3fed89324cf3fc5f652b1dc 100755 GIT binary patch delta 4830 zcmZ`-e{fS(7QXi-FL^IX)1*n7q@YbIB1K8ckJ6U5G$}28Ed^U$6cA}co04j`EhWWL z-AxrxW2du?S6SEr7ueBt*?&+*2gTW~3kr_Rs5_&=%B(PpYjxONP~2senmy;fmrA?i zn|be?@0{h|3>+0DOB|W{-ZuVz= zfxe?J8f9PWH+ThtofL=;?u^bYtVi?~ZU!F?TYp}sjI4)2$7{S&m69sRe)f{+_BPp7 z*czJZZDkikhgYX@QJk+*fdPcXvJ7r7q@TPl-{7^dN`sqq8H%XD_8IED7?HU`Ayvay zXk-(HTe6yNu$YfraeOB|ZQGxfzV%R$kQmaw=w zWu)>^P?QmI5JlOwxJwxp{~7>&=U7}$pU=)8f;{B7CV}6~`Na*)Y@bPAVRP&^&&>i8 z>0h{7*$Mjpij?Hf&M3+L_m$z=_m$+y z@pr#ZrG$TRO8UkxoO+b@M6 z;VDQs2G%i5xC9a=YtIeWo>O)sen4x08xqjexaQ(*oPw|)Y2(yn8#ZX;8W7=z{+%2@ zIsr8!JQ?ECLeu%GJBm|&GSbH*ll_;It1k_&yri(hc8BoE1bfSVr+FP@**UgN9`{eM z{G3SM_t(?u>{o0513kXht}JxkItMbv#qqbVvtQ*DB$N>-bfmb-f@6Ggd>(cSO`z`p z{ir&4Q$xEUN5)!_rKKW62b$#-i@K3_Y>#LQK zd8fgAcVpoMjI1>N-gnT(n-jWt{`^ml>~WklKkd^elqjq+-@QG3UG09%NoVNFTS1!P zwp>o9p8>fSD90rKx4&w;G}DxJO#ay!VGFi>BBtN=Od>vVcO$R|NQ0`d~b zy&%_LO{Xt{bV3YXbnq_5e6E{3kRRtAsWI|Fp9Sh7xO@MVPLHy;e79`;02s~42wQEB z3(K+$LZih9FKZ^49)VkcirS|5H%$8Xg1r{}OK$Y{b2pEF1MDqV*q6RM!#Pl&zrsxZ zJn=fHW313WWA;p_SPwm0b7Q=4H&0LlwhHhoU$F=L)#46Ndyl;2|J*F^*S3@6Glhf=#po)&M3xRxplSb0Ec`_=hBtAt!9b^7rkhZes zU_Py3n}eU)U(mi2S~Akg))tk@ztaj?!DzXIH3|B}G03DAB2g=lEel{9IR~XrQUPZ! zAqtxA19uq;$=Cuko!;0ELNDp4v=p&mG(v=q8bTb2_W@Vbi=EwZV&LJDH~}VMJ+Sn< z6W+}T<{;QJ19hXc3!V^P2k{2fr3!eQ5$8*Vz>)_6hzpIFipU>?D3zbbph^xx@+(LSaiGZU2*MmR z$*VA3H3w_tml4$DRs*3`4kK;3Qvnf^%Md8M>|Qy6pdLYj#N`5PsKGn{u>-ON!OEN_ z07LQtr~`Re{t#U)rg;F4%J*PUD=&3Seil6&r9rTrAVLTT2BY^N z2-8)h-EK8+28L0p1Z0%ZVZnEXg=OJ1L2EGp^AntaLubYjF-kq~v?P#>C3CWaSg}-N z(z=UN@P%9dhU!z?V!eX-hE=^5bSck*6TyP>;9a=0iD3-s(mt>n-Uros93Ik)JoM@$ z@fz4+=B|U9ZOBQ;`9ih;E6*t5B(mZHGtIJc9aLgkz#FhW2LYxMReujsnaa6t?=L0P z?5+o@klF;DJe$C>ev9U2Ue-ho z=x~**0Js`?YlZ^MJg)b4BO`98H1YM_ow8pl%!h=QkKvXh!{8ZC`DhEaOq&x;&gw zh%M_+My~9p(j3LjiYA=N>F7bvS!9z&yqG<*=yOSUD7h%97AMdzcUCmTCw$G&Fd`^ z4aY?B6xf)^#!6c<0FN*HZL_wMlsU1Qt%PZY4!w;A4t(|>6-RuvgLHov7 z3%u>l?oBP-(T7^#)v-&Z3&L$U10sE!wvv{fuJ)Fmj*czSIDvVvDIO#7=$1GJk^b&2 zotwI&?Y_2Hgwx@NPoy`})*0W%!etNIe#qS(?TW^u?3FVAv<4v!`>^byJV|9om)yZF zEZIcou=(XKoq-InNVyvh3n@Sn91l`}MmaK(CiZ4|9X-shl)Lm+g6EZr0ClqF3O5~q zr;Gi(Vvw$37b;vj4~a2*<;ULhHf^G6!iBSxWDy&qOWm}Id6(AF{VcMyMX(gGKP}w~ z>B_2ZqYW%ll`r%<*<)3++0aV(1zF|PH^2mdW*iA(f|cVVZn7pcHG2mzav=Nk<=+c- z8}MV(_z!9P>Fd;qb^*IMHGh)x*{-S_x{sx*+}_u;1k?AY6X>NM^XC_wDM86t!t|0| z?1Qj7JPW*b!A)AH6*wR5@cAM>wGi0E_!R;>b~JNLjCHBmbJtI%E3&5#?tsbu$=2c4MRt>>{TPd+;4(b^>#ttY!d*(Qw zk#NXY60rIr^+9{)U1sE4>_C0cl$oHg7XMPeoZ6YcA!z@ERnw|Q4w?u(97zPkEGcJKu7W54%cDkUsWQg*A;gSXPaiOY8kr6<)3KE@b`-S}r4=*nROnPo9owQ6O~;Ocj}{%`_MHFjs-$=4 z-gCZlzH|Pw|Lgwu#4$ek1Ru|HPS}~e0=i&-d-!9%a<6WjEt_;RYl5Z9&$Ivj@$zS4O9!8QX`*!fVG+z1v8m%Qt#}I+ zq-EkwsZA83w?SrUulQ_qE(DdiaL|y)55Z1@8zu}Tya<8@H{V82Xfqn2-jL0YOK*uW z5Auw8{CPtB7Kj?%jun{9!SYyJfYLIi!A|4C)saX?e}7MJWJhm%G~V6Y!}>d-F*Xp7 zp_z3)(BB>JVC_442Rc}9Uq=t??CbCDiFd+l#s%;%|5Mtx#lg!;Pj4k^avr1WhZs0d|=hxfxzDxw(M1ObbuVHDA;ow@<)x_T0_6INqVL z%%`xe&{*}`I26eor=PJe#u1L75*kzYlc=~F&k2pHpA@71@MK&hFJ=`CQ%z@568T#t zzw~C9M1sS5$d-28La^%Fkxtuxr84fgilfhZbW&KP{r9 zub%c`^54)*!a5e?^qT&~OfvZbrcQnw4UIOO3mur$LZez}tl{EmWMRx7LnCLW6S9?E zMc+~En6#FXj+K6uLAOPdKeUXo;BDcNw}YF*BVPt@4USyf92zUyf#zG9md=C@{9Bvuy>`l< zeclRQ^Tgv`<50t3Uq^eqBj)Yw-qGQW_j=oV@9#s^!q!Dm#K=UGRQfBuHw;*CAe3|YNd?jD7xuEM*G^277qh04jxQ0dDz?M35%FT)+aeDx@*PT1p{v*=~i zZo?K|L&<_R`y)zSrb&4v!>nOKG`)-W)hlq?SF09cM!6eu+#q!T(A1I1)?S8mLsVG&T`z0a)_B};d5366 z<`6Jx34CJc9JHB9*Vf?Ug7GGec31Hr0^>?E6~V+ov=~>5QPef@Yx0yyU>6PKDVHEm zv|=h_g#=zfjTkE>SR(#Fo}nsO8}+Y#&+jg+BT3#09T_>^d^Sz8et6c+Mq&BQcpT&$s(JKZr9hs6we?(*~^m=OC2 z+%4-lA>gN0mng|)^k@Gs+qtmci;LCK8DrdH zk~7o!76x;x1V&z96gMJ~XV|DDjVTnyGYu;-%C(oqpD$M_?nx&#%GhhVVEpLoNXhnM z>wLM57)qikn@gBKgGrP`Acs1guP{>yN}`3i_7Pr~6-H5+$`?bOE`C(Sb)MUa{zB4} z#Fm^cmsKTGyG0eHz>6QPN@dB<)w6Ul_c?N8Nq&0Q=#*^Y zQ;S(SDQ>pxi>yNG3nkH({Sdy<&|R$my}Mxd>RM|Svs%M09Jxgd&a8fLC=*Am(pqJ$ zKx?@bcVINw(gv$F)0$x=v#Xfbc+!r=p0LZoo#sH^Pij3JlVz*l3sUkJ%ULzckc*6O z+aZQqPdHC+>bi_r^g$d51N#KNDtid_mOqeR%7l{s^9CDNEt+4|v?o<_7u;4+yGmVP z+Wmp5eyAF@qwA77caLh`uc}(7x@v=J*pId;Re3-aFRPp>M!wbbfntVVR!kV_H3?fP z{cxo6riIb|?Ymi|cSkJJ+u1qL5of!42D-QR;9Il3E85S{-452O`vjf`dvYtWKxS39e_eJ8k>-*r(Yht_veAPJy6B~xsYB#z$iZ8o129~v zaq|F(KqDWA)<8sg*$2N0?8bCUgNylMXbl!9=UmVqT!f~RL3i{|*u`GvW-Wp5vXOQx z+MSp&-QDTAb`RR^$Zwm)rx%e^q4KZK(*gT}ZVzpZlx_A*f0VrZDfv7pndegZXV>#L z$@z?G4sx8>4#myVC*O37^vZMK9>u)61s9RL=AoThZ%ftI0bA<|Hqv>OtmzLMc~C)q z5wh*yJN>7UFxp^=KYI^ZOLiP^7li8acno-*8&3wldbj6LDq{97aRgfH-Hzwcd)-&Y zsc5~A!;cy^fVyrlJN5k#2sAc@YwIE_idPhu!rpaj@H=GNz(8am9_^2_`=i}G@^j-l zTIy@$IvY3|Z#L;4E2lO$0*4Pn@AE>K3j0O+AXEZ;eVHSDOiIf)AyMOkyVlPYEvnuX zIE&YpiM|x-gI6&seLzaf3m`W59qD6KTAqOLh9PY@)uXU;gBw2D;BcfzAT3KlH2E#* znS=|XwrL$NgOMh`*!GsEoEX}xsINJFrqgq bb<_nTh)Qa8GzC*FWtOk%byUZ}5}yA*bIATB diff --git a/onyx.c b/onyx.c index 59a7d703..ea8e8b04 100644 --- a/onyx.c +++ b/onyx.c @@ -1,60 +1,30 @@ #include // TODO: Replace with custom lib #include // TODO: Replace with custom lib - -#include -#include -#include -#include - -typedef struct File { - int fd; - int open : 1; - const char* path; -} File; - -int file_open(File *f, const char* path, int flags) { - f->fd = open(path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); - - if (f->fd < 0) - return 1; - - f->open = 1; - f->path = path; - return 0; -} - -int file_close(File* f) { - if (close(f->fd) < 0) { - return errno; - } - - f->open = 0; - return 0; -} - -unsigned char file_read_byte(File* f) { - if (!f->open) return 0; - - unsigned char byte; - read(f->fd, &byte, 1); - return byte; -} +#include "bh.h" +// +// int main(int argc, char *argv[]) { +// if (argc < 2) { +// fprintf(stderr, "Expected file to compile\n"); +// return -1; +// } +// +// File file; +// +// if (file_open(&file, argv[1], O_RDONLY)) { +// fprintf(stderr, "Failed to open file: %s\n", argv[1]); +// return -1; +// } +// +// file_close(&file); +// +// return 0; +// } +// int main(int argc, char *argv[]) { + bh_string test_str = bh_string_new("Hello World!"); - if (argc < 2) { - fprintf(stderr, "Expected file to compile\n"); - return -1; - } - - File file; - - if (!file_open(&file, argv[1], O_RDONLY)) { - fprintf(stderr, "Failed to open file: %s\n", argv[1]); - return -1; - } - - file_close(&file); + - return 0; -} + bh_string_delete(&test_str); +} \ No newline at end of file -- 2.25.1