From b502e8040cac0a702a75718fe623e5a056d92d75 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 10 Dec 2024 22:06:49 +0100 Subject: [PATCH] modified: Makefile modified: README.md new file: debugOut modified: doc/docu.md new file: doc/overview.drawio new file: doc/overview.png modified: src/config.h modified: src/db.c modified: src/db.h modified: src/iCal.c modified: src/planner.c modified: src/planner.h new file: src/test.c modified: src/ui.c Changes not staged for commit: deleted: debugOut --- Makefile | 16 +++--- README.md | 17 +++++++ debugOut | Bin 0 -> 19296 bytes doc/docu.md | 10 +--- doc/overview.drawio | 116 ++++++++++++++++++++++++++++++++++++++++++++ doc/overview.png | Bin 0 -> 59787 bytes src/config.h | 14 +++--- src/db.c | 34 ++++++------- src/db.h | 3 ++ src/iCal.c | 6 +++ src/planner.c | 11 +++-- src/planner.h | 18 +++++++ src/test.c | 29 +++++++++++ src/ui.c | 1 + 14 files changed, 231 insertions(+), 44 deletions(-) create mode 100755 debugOut create mode 100644 doc/overview.drawio create mode 100644 doc/overview.png create mode 100644 src/test.c diff --git a/Makefile b/Makefile index ba2773f..8e1ba79 100644 --- a/Makefile +++ b/Makefile @@ -12,20 +12,24 @@ CONFIG=src/config.h #config file #targets -debug: ui planner db iCal - gcc ui.o planner.o db.o iCal.o -o debugOut +debug: test ui planner db iCal config + gcc test.o ui.o planner.o db.o iCal.o -o debugOut +config: $(CONFIG) + gcc -c $(CFLAGS) $(CONFIG) +test: src/test.c + gcc -c $(CFLAGS) src/test.c iCal: $(CALF) gcc -c $(CFLAGS) $(CALF) -ui: $(UIF) $(CONFIG) +ui: $(UIF) gcc -c $(CFLAGS) $(UIF) -planner: $(PLF) $(CONFIG) +planner: $(PLF) gcc -c $(CFLAGS) $(PLF) -db: $(DBF) $(CONFIG) +db: $(DBF) gcc -c $(CFLAGS) $(DBF) clean: - rm -rf *.o debugOut + rm -rf *.o debugOut src/*.gch diff --git a/README.md b/README.md index 3ef6a53..54ed37b 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,20 @@ Time management optimisation tool. - Use cake cutting algorithm to calculate timetable based on subject priorities and available time. - output in iCal format + +# Responsiilities + +- Juergen: ui +- carla: ical +- jan: db +- simon: planner + +# Project Overview + + ![Overview Flowchart](doc/overview.png) + +sample files in src/ + +# Datatypes + +[planner.h](src/planner.h) diff --git a/debugOut b/debugOut new file mode 100755 index 0000000000000000000000000000000000000000..590cb1a9d8f28c80d43a008a01dd019ffa300485 GIT binary patch literal 19296 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 lU(LXH?kEdYCwD6P74Aq2eJq}N>f8S~t_ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/overview.png b/doc/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..618518267aa6b27c7e1a1edace10a144ec120f20 GIT binary patch literal 59787 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 z zSnp=}4;0N&|*2VG=)k=pSsEp@R{12oQIq^i)hLq}L;5R4h;UHX+d5lp~K8H$PCOmk~g(_QNmPLoiScRA%2!J>mW-VBT*z<084rt&; z1ZnCmZp~e~`lNkhf7r1*pz(>Tyz-1tzw3oFJJhWiD#_MeDOZa4^EKBVic2JkUBnS| zI=L^DwjRpu^bri5`OPho`ku2{VdFC zA+W6^1oBCi-Nd*nv8I%LwN&90jd`NG=5_*|K`V9mJA17>&^H!G`2E~1vKfG~t$ri< z$g(r1!;MKqCK+Q`i!VF$XZer59c2W3kd7Q~BIxRscG(n2!t_6tnC9CQ2T@!N4^(RX z0BRpr_rOKr4^(X$L(oV3tQton`oIOCoQL#GkCbjXB;~N-f4ha89}S^8p9qKTQt9MK z!{AP8H4gZjZa#W&L)>d)mNVqt*rFxiZ;e(l>Pk&- zn-yZ2uk-Rw(fpo`)4c0^zUW=F-g^LdEUx*pgt4iGus#=a%UJ}mIW>o>6i8Gbiik8l ziDZT$)*UnbAm96(rwryNfi}m9>g1FeoXMV*uK?d!Ij8E_CgUse=f_fh=BJ@i;|5m0 zk4#E_?JXhyDVUodk;u^CN32Li@u7bv0A={;dYaE9XZLzCznnZ;*FvdD;fpK7_l>#U zAr3+r&q=aAjTB+!@%Fonj<}mm4cn*ka1~Q{Pliwo@Qcj14M`2o1tvZmvotR&HmY%a zmJy@}arlg=drm3F5{fGHapZ1%G`}%$$p;BuiTaTS^;j>YY=xrPUDsNF^&uE21XZz* z!K7D{7379-gG)kbiCTGTXVhC2A_pP8nuD2;{hMDL1&}Ph>+=3OVRU1GN3LE7I*{JktZ9dX@8}3F!dvDsofX ztOzH)sV#r`pc&=8Fr#65*yp8yc-uFEVo}du7|>Po8W->9xQa=+#Ib82U-vEh))qu( zU(-jcNXy=YEvs;ZA=f;(^6oQGYfB3v3!gNu_?&?*RN5iZCT@RzyGa&c$y<{%6-2J0 z-=Nf5-oCv2N48DJkfZpUq3+JgsQQ&YPXvef4{97E*l_R}C?4BiWrQg7S>mDH8Zt>^SiF7!wRKpX zMaa76_Hd-Fu;!e>HHZFW{3xzn7x zWus5H{|%29(i>tV!we(lJ@xTw007w^zVg7RSWWx%-50# zFZ8_J5Co#I5Y%R5q@vFvYZ2b3u7hHyKJ`ke4RLy1q?hCH?G8<`zaBV&ggQ&&68%E} z9MFIU=UuF5hi7$WnN8AHNo1BY0^9xAVT;GV+?d!G{Df`r|H|B*ni-J*MnN$Qn zMIi3h^-qW450B~Td+J1e+3)xM$rY|l%2N#EJ?8HpoM>3nFE@HA^4hy+Y3r3u!gWI? zN|qY4YoC#L5J-X`6RG)5ukHljA`zoA8B*1>+CnWE%8u*1Yj|p6AH>bz|3-e>;cjF8 zg$%~arH()3g+pV*9Ko%g7WgNmvp~)wr{Uj_PSyN;v9|vh?F>M;IcKQq2WgNrGE`yL zdN>=~++=iJ*YHL~*;h|3&V&l_{5+x>uH_L8!e`z(iLb}*K~U(5QwfM|%~>~ti|sU& zQUM;jSH}EDUk0P-nOq5D9!2FMtMHI?!n0za$Jo$BgeNMp+#T#hm|wp~h%!xPurknI z4?m5#?CVa_nM|Ro-hHsb6n?N@up=0wPu)pboNc5-6t#^Yp(AiPNiM zuyX8;PgY1jDTfVYynXVW-bQzjgX&YX+EJlO?GCTow1zhF5@=-ON4pg$MF`XUZ}$kA-%UsXxSBd zY@q&zT(2Hx7=7sIl$NN}N=wnE?ZPHuGnhihXA?3#Rxb$=sFA`z;GWtAr}C;r3G)#cegI{$dPA5bywCQQtl=efFD1i5kB3XRiFnD+ z#c``>0<+b3(;6mfmp@pvniM+5<2_cV=M!(da%91t zU!?H$N{qIHArfcSWimLXw~Cvl3;9vFS*1vLCy7J!@W0e2zyDA0xv@tCrM`j0P_Ue4 z=nE^q3LF^)hgu$KjP*QLk4EgTGFMx51089#k<&^_XYfmd5vx{x^E>Wd_mtES%EEib zzQwAQF!;N9(ip(cfL^x3Lv3**XOJE^HRtv zkdG|*$Uzt(L$jRZ>+1Uz?K|>a8b<)`BRo%3AugX zQ{1jHKlc!{af<~!V0?tP1%ip18`hD*orK}#627WK#h50{!nI053)QK*2pym8dvSH+ zNl_)6xo4Ff?3WE93Fevc?xPNuPtqcwkW!d6dwx7Vju|K`7hF<5Our01(GOg44z2C> z!GcZ*y+^}pQ^?4*w8Cl5^pg9{94n1? zRbDqE%*3b>p|FhIeDqn3aUiC0>#3{IIIHXaAhG+V7Rp;0WzyK}!(gn%YxM6=MbeqI zO66esZNx%wd4$3aTseAiTvmoNG`ViPGqZ~E#>NKJ{T4^Pwu`ihc@GnQo9cIU9c$=JozRkCaq}K!S zy2sCM6-3lM(;zA6m|hu#mOUNE+w@loWk01QQBA`gL)WE0hg$7IpCLs->xb%{7Wh01 zRp5}GCEAFH4+x#MmecNn&DaClO@V`ykG}4mrNgcnAJ7+Dk5I#@M?ZM`W$vRPa$nti+B;OOF> z+3&s$zZIW(8{$tJ5%qm9ZO+_g8GtB_(cL{ERA!kY!7b=DYQ#iXr13d|Uf+KIaSTzR z079^u?eu0edNeqnS%50+qE`5%Psv z{_jm78&MZN=Hj|3Q%WE{aAK~O{_~Uv$%$<4~@8( z>l)|Jr|YvD20F{E{SVPRRH7q}>r~ITKeK>IrPK)rcn3TJV}hr?c*C|q{Ka+vHG z%~(iZS^Fid_Ff3p9mhv0owS4B5LPtt(IzBtM!As zA|`l9*VDjdj$&O;Pmhg=)b25SNsl;nziSO!F^-y?pbm+LRw;M;v1s;g{X7f<<+>Mp z-;8LiWw(i8vwuQxiEZoc_F)qy_q5<~X1Z0H%4lJ)0TKmLpSk%8kh*nOzW8l5a()Ofo zyz*1_$pok)lY4e}ZE!+EHW;Mk8Lz#UrwbRLFxAmT<|cZ-sAfUQG4lK28?ZD4>Sor+ zqqJv;7zzOdz#=QFH!y7>1;>>c%8J9(88hZQHZ{_>0UdPumdv!SVWDvoA98}kx1ACPTH2agc5p+ z<5#9r7>6l+%D<7A^y_74-BerA9zzNimgRslXRCSGEV|)*$7xjinh*cqAi4PQE4`AO zz~LTvd5eut>^?**{7j%&tTCGGPO0tqM1zE&n!#OiBz@sDMw7-r^hZSZnJ4J=xC!~6 zSTilQ2&Gh!&#_X~-dhRk03!R%UsK#-sCJ5U)c^_U-a6`LCq^+)Y!s6bm?f@Ev0NwqScpYVCl3QgE3UAov^i~+9dp}*YFd@MCh~O9#$upwtxNLP+UP6%+L;4-T75{TUujf%mT-8{Fcc*Z8W^=dP$M2v2fo0lY5OD zD^t^5nB;@sd$BkF^h{l~S6@|r_1`?&u8rR-rijV^A07VW#a@fxq>Nhk@gjdz5kUma39@nlTZvBMCmm2*XY@667Dd2sze zB#;Ew5yyaji%26Aly)Ad35I}b1t4B5ps(4Rs>m0q29W}n0=prQxO(#jI5Li?l7jPt zQ(Qnp6QJ8m0LNChyk05Z?0?96^Lr}}#afW@slp89(yg;Hn`8C~*2fz)0vyR~%ik4; z*dE)>4#{mtaO}lyxXZ+dh43ry*f@M}$WB-O82_9I!IYJV9alq{%=EC=SS18v3g|`6 z-mFoi0`e+Z%w##lv~Ro&A<6}8A1+|gR(W^n{F*wwesVj> zk`92*>BJpyaVl1n#;}|x5VvO;oe*BN|AVFc&YO8Hk!vBgxV*0gVed>0oV(x>)QsIY zdprwD-PA<`sf!`>dgJ$jlhpEf6yF zB^_5k3dwITyvT{IIP}GAtnWpD0)G`=XEmVm!{yoO6p6G-)@usOjZayIB@~YKz1Uc^r(OXWx?_QE>|{9#HaRq$+Bo0hkK@y3 zNZ8?ua6UpN!VVjf(k91V_-wTxzN#pem!bxF`{drg4Znb`W~q)Mxrr%+mC_hN!`YXm zIk?$LuD`XQ^-pE{ikv1_2@OvwpCCH}J@hdRORswb|0NSH9obk4a%LDB%|5!J{cgzZ z6rDp>w2Zg~Oo*lviAHs~Eraa|EwPNf$o-{8r!9%bl%!UFFB!R5n`tMz&v*RJqIpzK{O*O15& zc?CoocB<4IzfxkEp+2BLqV@>F@a6=hQK7A1QMl@0pz1DYkIRhfOG^pA+cw-$d8EBQ zXnOA?8;M3xjp6y9hu!D`eh@F&-N$`gsvjY^b*YPEGI=SF!2OK{p#Rs_N99nBgd&UXNZOI5}qh57(L8jj}XY`5Z|@as%Si6e(Sm}gVw_I^K7{U)8)-58T)J{uG6X{{XLqts#Vc;J zzyVFAvX9y42^F9a5xeu)uBAriB>cn8!0DoG+hWLh=<*$N$2)`iuO;T`8pioyy7B&) zCFRX8Bq^<*`FaA1LboMUlkGE)zt}_FK=pt>U+yy24nK z^tY6$M3WzqLsmZF-6qU5`Sw6Tz4K&_5JhfksbOPR$o_yYX=i)a_ z^9#N8WPfsGqY|lxMh{trpn30neKGS3YqwzCTBNiq>`zU`Ff7G^JyHeiXIrVA~ zAT|GUyFcvy46_bBYt9w_-ca&rNvee5R8UO(LJ-^4D%jy4UU>FjZQAcev_3iEK+UVi zPk~It2vQO&{rLV{gPM7#XYgo&ZI@>>Ht2n@6dJQ{{|)eYl0v_{ZWF7wB)DA*cK?MQ zm^(}JmE^MI>=Wnrot{*GeEu4K6Ix3WA6a#oJsFTPfQ3&58G`Q7t{)%n^< zSD*bi0O`fv(So;>wsmBP48`E<9$axP?*x~k_^Rg|YqVf5!xnO{8T>wD=lY#P1+jRl$*Fx!9ZT+>p-z+c`Oki^#~XfG=4 zyjP5%c~f=$%?(q@@9JCd^*afDdGlz%*y58N6rk$PK^lQyKr(zk*O%`-)fQtf>^B2{ Nrc4W?d;`bu{{fu-E?fWr literal 0 HcmV?d00001 diff --git a/src/config.h b/src/config.h index 532710f..85f65c0 100644 --- a/src/config.h +++ b/src/config.h @@ -1,15 +1,15 @@ -/* Global config file should be importet by all +/* Global config file */ #ifndef CONFIG #define CONFIG #include +// #define seconds(n) (n * CLOCKS_PER_SEC) +#define minutes(n) (60 * n) +#define hours(n) (60 * minutes(n)) +#define days(n) (24 * hours(n)) -#define seconds(n) (n * CLOCKS_PER_SEC) -#define minutes(n) (n * 60 * seconds(n)) -#define hours(n) (n * 60 *(minutes(n)) - -const time_t pauseLenght = minutes(15); -const time_t minIntervalLen = minutes(30); +static const time_t pauseLenght = minutes(15); +static const time_t minIntervalLen = minutes(30); #endif diff --git a/src/db.c b/src/db.c index f3de444..a41e013 100644 --- a/src/db.c +++ b/src/db.c @@ -1,24 +1,20 @@ /* - * databse - * stores current state and reads previous + * INPUT: query for sotred date + * linked list of subjects to sotore + * + * OUTPUT: + * linked list of subjects from file + * OK + * + * */ - + +#include "planner.h" #include -const char format[] = "{ %s = { %s}\n"; -struct A { - char *s1; - char *s2; -}A; -int main(){ - -struct A test; - - test.s1 = "asdasd"; - test.s2 = "asdad"; - - -printf(format, test.s1, test.s2); - - +// serialize struct test +const char format[] = "{%s = {%lu, %lu, %d}\n"; // +int serialize(Subject *s) { + printf(format, s->name, s->created, s->deadline, s->priority); + return 0; } diff --git a/src/db.h b/src/db.h index 5db617d..01cea33 100644 --- a/src/db.h +++ b/src/db.h @@ -1,4 +1,7 @@ #ifndef DB #define DB +#include "planner.h" +int serialize(Subject *s); + #endif diff --git a/src/iCal.c b/src/iCal.c index e69de29..dd9b037 100644 --- a/src/iCal.c +++ b/src/iCal.c @@ -0,0 +1,6 @@ +/* INPUT: linked list of events and generate ical file + * OUTPUT: Ical File, OK to caller + * + */ + +#include "planner.h" // for subject and event structs diff --git a/src/planner.c b/src/planner.c index ecd8c57..5583fd8 100644 --- a/src/planner.c +++ b/src/planner.c @@ -1,7 +1,10 @@ /* - * Main Plannder - * gets data from user or db - * generates timetable - * modify data for next day and send to db + * INPUT: linked list of subjects + * OUTPUT: ll of events to iCal + * ll of updated subjects to db for next day + * return events_ll to caller(ui)?? * */ + +#include "planner.h" // for subject and event structs +#include "config.h" diff --git a/src/planner.h b/src/planner.h index cdfdf7f..3b2c37d 100644 --- a/src/planner.h +++ b/src/planner.h @@ -1,4 +1,22 @@ #ifndef PLANNER #define PLANNER +#include + +typedef struct Subject { + char *name; + time_t created; + time_t deadline; + int priority; + unsigned long long spare; +} Subject; + +typedef struct Event { + Subject subject; + time_t plannedStartTime; + time_t plannedEndTime; + unsigned long long spare; +} Event; + +int genPlan(Subject *head); #endif // !PLANNER diff --git a/src/test.c b/src/test.c new file mode 100644 index 0000000..0427e6c --- /dev/null +++ b/src/test.c @@ -0,0 +1,29 @@ +#include "config.h" +#include "db.h" +#include "iCal.h" +#include "planner.h" // for subject and event structs +#include "ui.h" +#include + +int main() { + + time_t now = time(NULL); + + Subject t1 = {.name = "LinAlg", + .created = now, + .deadline = now + days(5), + .priority = 3}; + + Subject t2 = { + .name = "Phys", .created = now, .deadline = now + days(2), .priority = 7}; + + // create plan + // planner([t1,t2]) + // + printf("%s\n", ctime(&now)); + + serialize(&t1); + serialize(&t2); + + return 0; +} diff --git a/src/ui.c b/src/ui.c index 5e247da..9a032b3 100644 --- a/src/ui.c +++ b/src/ui.c @@ -2,3 +2,4 @@ * command line interface for user input * */ +#include "planner.h" // for subject and event structs