From 1b68628fee0eccc10130e432c536424795a19c7d Mon Sep 17 00:00:00 2001 From: Hizenberg Date: Sat, 3 Feb 2024 14:05:46 +0530 Subject: [PATCH] Integrating library with application --- AppIntegration/.application.c.un~ | Bin 0 -> 1439 bytes AppIntegration/appexe | Bin 0 -> 16200 bytes AppIntegration/appexed | Bin 0 -> 16192 bytes AppIntegration/application.c | 81 ++++++++++++++++++++++++++++++ AppIntegration/application.o | Bin 0 -> 2408 bytes AppIntegration/dll.c | 60 ++++++++++++++++++++++ AppIntegration/dll.h | 56 +++++++++++++++++++++ AppIntegration/dll.o | Bin 0 -> 1560 bytes AppIntegration/dll_util.c | 68 +++++++++++++++++++++++++ AppIntegration/dll_util.o | Bin 0 -> 1816 bytes AppIntegration/libdll.a | Bin 0 -> 3672 bytes 11 files changed, 265 insertions(+) create mode 100644 AppIntegration/.application.c.un~ create mode 100755 AppIntegration/appexe create mode 100755 AppIntegration/appexed create mode 100644 AppIntegration/application.c create mode 100644 AppIntegration/application.o create mode 100644 AppIntegration/dll.c create mode 100644 AppIntegration/dll.h create mode 100644 AppIntegration/dll.o create mode 100644 AppIntegration/dll_util.c create mode 100644 AppIntegration/dll_util.o create mode 100644 AppIntegration/libdll.a diff --git a/AppIntegration/.application.c.un~ b/AppIntegration/.application.c.un~ new file mode 100644 index 0000000000000000000000000000000000000000..9ada10d6d95da3dd1f9cafd1f1fd3225cecf1a9c GIT binary patch literal 1439 zcmWH`%$*;a=aT=Ff$8g^;GBuRtNy2 zBL*BD3=Cf-fQGUHF+0?7P*lh$Xej`JOKNd)QD#9&W`3TPf`W~6Xi%_!kR4bDR56$W z>42C6X2GOP8^KWx5`(1)kQ6A|g+UAu07o^7E{OOjNv#k7Ms+)KR0|;)3=Vi`G$H3k okP=Xof%7+rGa5~xP@p9MM$=?y0SV4u0Z5jCqKUEAwDI{W0Gc;KM*si- literal 0 HcmV?d00001 diff --git a/AppIntegration/appexe b/AppIntegration/appexe new file mode 100755 index 0000000000000000000000000000000000000000..caf345ea3818a6c30eb5fdbf4adccd19c14cb043 GIT binary patch literal 16200 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 G)xQ93Nccbi literal 0 HcmV?d00001 diff --git a/AppIntegration/application.c b/AppIntegration/application.c new file mode 100644 index 0000000..40056b6 --- /dev/null +++ b/AppIntegration/application.c @@ -0,0 +1,81 @@ +/* + * ===================================================================================== + * + * Filename: application.c + * + * Description: + * + * Version: 1.0 + * Created: 03/02/24 01:50:44 PM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ + +#include "dll.h" +#include +#include +#include + +/*Application specific data structures*/ +typedef struct person_{ + + char name[32]; + int age; + int weight; +} person_t; + +static void +print_person_details(person_t *person){ + + printf("Name = %s\n", person->name); + printf("Age = %d\n", person->age); + printf("weight = %d\n", person->weight); +} + +static void +print_person_db(dll_t *person_db) { + + if(!person_db || !person_db->head) return; + + dll_node_t *head = person_db->head; + person_t *data = NULL; + + while(head){ + data = head->data; + print_person_details(data); + head = head->right; + } +} + +int +main(int argc, char **argv){ + + person_t *person1 = calloc(1, sizeof(person_t)); + strncpy(person1->name, "Abhishek", strlen("Abhishek")); + person1->age = 31; + person1->weight = 75; + person_t *person2 = calloc(1, sizeof(person_t)); + strncpy(person2->name, "Joseph", strlen("Joseph")); + person2->age = 41; + person2->weight = 70; + person_t *person3 = calloc(1, sizeof(person_t)); + strncpy(person3->name, "Jack", strlen("Jack")); + person3->age = 29; + person3->weight = 55; + + /*Create a new Linked List*/ + + dll_t *person_db = get_new_dll(); + add_data_to_dll(person_db, person1); + add_data_to_dll(person_db, person2); + add_data_to_dll(person_db, person3); + + print_person_db(person_db); + + return 0; +} diff --git a/AppIntegration/application.o b/AppIntegration/application.o new file mode 100644 index 0000000000000000000000000000000000000000..04deb591fefe32e543de9073f8e763c14d794153 GIT binary patch literal 2408 zcmbtV%}Z2K6hAYXnrT{u1QtEgLLnb&LiWis8-4U4Wl1fn>CMd38JsWXJ#h*oND3Yj zxM|V<&>v8n5`+eKuB1f^TLc5Pn079r>74uS9k17!7Iom=d(Q8i-#O=g%$?_{Q8X79is0VDQbltK%$F+_+*TLs1p~ZL3DpudQ@m3y zmwnj4b}@KyVH@T)wgNjP`n`p(rZ>0#u?LfUqJ8kYr)XN-hmlA;;l%A((`zE2U}z^W z$XB~>pt_gI>KEX8#<8ahMtwGp(Iq7I`b1Q_$Ep%>fuSN2t>`S%4DGm2DI(<@s?zp) zp-ppXikjRsy$xC|`mwJms;)qkcQ-_4q4?%^xy(|otxi}eTf3~Ca++aehH0^8n70!% zahG5;V0?7+g4T1*jwGzKHZZ6U>ivBKL%m#uBUB$H@N5zS`Sw6(OJmbAZs;+@=p%{I zFmkZ{RdBSmAsEI8-*<^{lqd}q|Kp1PA>k-(bU?yi*BoF0%(Hi((0ce;-s=IVt9s)J zXBT-Fr46m16wlUxSU1Oo&3Z>{2)}mxRJn-2Va!wD4z?E54g9LbkJrHO*1*BaW|N7i z|#bV)@ zEd`j&h&H${4B>sd?U9FKCAJ!mH0#4epDm=n}p+a zs?_bI3xGoTW&B+Kt%T#Rpn|`vfwM=1*OlWn#7Jl#=o4aaMd0E-JyCFR zZ$NjRrd%t6vzznhxX^NT($ZZ!?}AR}271JCK+k1-BbrI2>@@n)8Q0dwC#L!w7oQpo zAetQyPv`Iz;AQ`N(l7&Uk@PphavE#|*x>ueP3afrBb_+W*%`iB84UtahB=@1m{dAr zlB50vr*S5n?x-vs^5#npr5!kfKFay8`~l=rPPLq +#include + +/* Public Function Implementation to create and return + * new empty doubly linked list*/ + +dll_t * +get_new_dll(){ + + dll_t *dll = calloc(1, sizeof(dll_t)); + dll->head = NULL; + return dll; +} + +/* Public Function Implementation to add a new application + * * data to DLL */ +int +add_data_to_dll (dll_t *dll, void *app_data){ + + if(!dll || !app_data) return -1; + + dll_node_t *dll_new_node = calloc(1, sizeof(dll_node_t)); + dll_new_node->left = NULL; + dll_new_node->right = NULL; + dll_new_node->data = app_data; + + /*Now add this to the front of DLL*/ + if(!dll->head){ + dll->head = dll_new_node; + return 0; + } + + dll_node_t *first_node = dll->head; + dll_new_node->right = first_node; + first_node->left = dll_new_node; + dll->head = dll_new_node; + return 0; +} + diff --git a/AppIntegration/dll.h b/AppIntegration/dll.h new file mode 100644 index 0000000..703509e --- /dev/null +++ b/AppIntegration/dll.h @@ -0,0 +1,56 @@ +/* + * ===================================================================================== + * + * Filename: dll.h + * + * Description: + * + * Version: 1.0 + * Created: 28/01/24 07:58:51 PM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ + + +/*Header file for Doubly Linked List*/ + +typedef struct dll_node_{ + + void *data; + struct dll_node_ *left; + struct dll_node_ *right; +} dll_node_t; + +typedef struct dll_{ + dll_node_t *head; +} dll_t; + + +/* Public Function declaration to create and return + * a new empty doubly linked list*/ +dll_t * +get_new_dll(); + +/* Public Function declaration to add the application + * data to DLL*/ +int +add_data_to_dll(dll_t *dll, void *app_data); + + +/*More functions*/ +int /*return 0 on success and -1 on failure*/ +remove_data_from_dll_by_data_ptr (dll_t *dll, void *data); + +/*return 0 if empty, -1 if not empty*/ +int +is_dll_empty (dll_t *dll); + +/* delete all nodes from a dll, but do not free appln data*/ +void +drain_dll (dll_t *dll); + diff --git a/AppIntegration/dll.o b/AppIntegration/dll.o new file mode 100644 index 0000000000000000000000000000000000000000..370597dcb43beaa56ba74b6a8140bd6dd6329245 GIT binary patch literal 1560 zcmbtT&ubG=5S~p-6Kj=NJrt|3C#hnWrg|zWD>3#VqD2VQ)3Qm{R?H7bHduw?q4;CT zrAPk=FWz#hLJy^Xgpi96(L=rUAk_I@-q>Z`lYa1aX1@2$%wyiZSEc)RGnPdHi*C_z zBrMU)*sTQg0^I*oN(qT^Fw%)O{xmHbQc6FmfuL z4ms6UqY*TjYqr9`S$?;^GBOxZ`6Ko q`fnp(O!C5vlli#U +#include + +int +remove_data_from_dll_by_data_ptr (dll_t *dll, void *data ){ + + if( !dll || !dll->head || !data ) return -1; + + /* Searching for data linearly and deleting the data*/ + dll_node_t *tp; + dll_node_t *temp = dll->head; + while( !temp ){ + if( *((int *)temp->data) == *((int *)data) ){ + tp = temp->left; + tp->right = temp->right; + free(temp); + return 0; + } + temp = temp->right; + } + + return -1; +} + +int +is_dll_empty(dll_t *dll){ + + if( !dll || !dll->head ) return 0; + + return -1; +} + + +void +drain_dll (dll_t *dll){ + if( !dll || !dll->head ) return; + + dll_node_t *tp = dll->head; + dll_node_t * temp = dll->head; + while( tp != NULL ){ + tp->right->left = NULL; + temp = tp->right; + tp->right = NULL; + free(tp->data); + free(tp); + tp = temp; + } + +} + diff --git a/AppIntegration/dll_util.o b/AppIntegration/dll_util.o new file mode 100644 index 0000000000000000000000000000000000000000..b87b05c340449d9df87466c2c2fa5d25df05e5c5 GIT binary patch literal 1816 zcmbtTO=}Zj5S~qIQ#DHbI27t3CuzZ~ZSm3~x>94;59$Z>ASiLuY;7=`gv}dCh2o(o zECHzpFa82S5WM9m=1}?%JoX|4;-TJh5bDgkGj>_liw?XyGtWHp@y_nPEZn(~G7Jzg z;0hdif&xs89@>^REy%!eSh0ie_STP_9c=dPptWajZT3N(u{(vn-2wa67nMe64_fK& z0m|U1M1sO_u#C!M_Cxy~MfdGM>!BU&^r?TB9)k&{XOTX{ zMng~^b)(&$o-Ej8G!qhOA{<5M9?`_dAyKZN$8RH9#;=M^4H(AJ2Dih4R@UCJ#;M*P zUk2Z?vWGax+?vLBKpXGHgSS2njP2bXEG;fBrHWI_&CZ!~=1hL}(lnb?k>qTs zzH2PJu6~)JbG=hLUYU)o}L}CtBm)UuV*H^T&)&c zs!}yq!FRp-bGKM_lv7;u>t2y!rHv41C?D2**M&+`|15EQ{x5ir>!eWA5wX}1T<-ZKhRZ#{Y;JhUDWO(=sMp2v-Kt|Mx2?dWJA+wj zHo;u2d!AcEtX5a9xwO2JZz^Z?8JL>xuH$MP&*gUit#Vj_RxlQ;WU+sr_aot$3zHb2 zomxU*Jv9;_o^hr#3h*}Gh$C_M0^(HjU-M@%muk-7iHh{kMM1Qs zzvzVs7Nvd`LKIBk-eoNMjZsRM^V{S^MD{1pEi{t$-$>Yh8o81$`=>VX-c);r!4Kr1 m9K%B;4kyPj~fE?p{BFzfxp} zR^4c7+im06q#2O;V1s=vH(KeqQESUxUFkrWMYRR3f%T^-55Gk3dqen0+RLFNYBP7! z$@T1Zam$Tzn4{yi!M$_8bxPaCZG_j!t^1m+MpKWe7`I(~>_*op2kVmt68!Mh_>0~yN=c!6af|Uj)HFmKHUyWtz-}(r zLT?6j7-&5&R^V4XJM@=Au<3Y#J=1K0U2fEBejTxTBlPVnSBoRf&?|omwsQC9OS6Gj z^Cj=U)fR3*@9Ma*k;C&p44i!9auz4lJ0}jJeS@2mXZ!?eid82AH60z2mvImtJGKPF zi)JE)YF{>$qCV4}|1`dUv6M>cL{o|6w|Fi}$`U<+3u228={J(V1m6!Ci+@WL?{NGL zn#4r4pTerxnk5yCrFGx$W!`ku2hp2L;k#%L zSytDr+;(haHf#Zv*!sDfSvwGq(a%2!mwiu;J+AszaaEkl&c)X&J6!h(;V56zqZc3j zr(8FPTgSOh)r!~%jwG%dWq;~S_+RLx}c4n-OE{jW9~_x?#uU;xb(k+om-}*9PW{GA#QT_V z8mAsKK8;f)-r~HXB){khTo7A)NZ(BY6MWM+b)Dmv;+vu^oF;G@r!FS+|1g}I=a2pe ZPIOpK{hj0Al|osYZAs-+u75vH{Tn@_|B(Oy literal 0 HcmV?d00001