From 5580d1af5e5ab6f5229bbc94072e548ff7519099 Mon Sep 17 00:00:00 2001 From: rupa Date: Tue, 24 Dec 2013 17:33:45 -0500 Subject: [PATCH] Trying to write teh prompt command in C. --- c/Makefile | 2 ++ c/_z_prompt_command | Bin 0 -> 9188 bytes c/z_prompt_command.c | 58 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 c/Makefile create mode 100755 c/_z_prompt_command create mode 100644 c/z_prompt_command.c diff --git a/c/Makefile b/c/Makefile new file mode 100644 index 0000000..23728ab --- /dev/null +++ b/c/Makefile @@ -0,0 +1,2 @@ +all: + cc -Wall -Wextra -pedantic -o _z_prompt_command z_prompt_command.c diff --git a/c/_z_prompt_command b/c/_z_prompt_command new file mode 100755 index 0000000000000000000000000000000000000000..9d80e3b9f431910b6b2dda8c83b34b365622f3aa GIT binary patch literal 9188 zcmeHNU2IfE6rSZr3KX^Wt=WDPyIWe>Zkye$Ed*n$ z+{n$cNgqIoHiieIgn&T<#vrXFn81UPYKS35jSncdQS<>42qdoGH+OD(_ZEo{Jl;uW z&iQ7}IdkUBxx05~_S}uj|4b4hG+v1AaYBeH)GZT*FhvBM5ci=Ps8ZI~JsaB?TeF(I zT*_$J_vxJ!>onNM})M+N=%hNfUK81BP@ScoS$ ztkX^q-CihVF5l6R8|m`fOHX&~xh}idRjAPRM*X8b*_=wZr?L?8+Z)vO`m_OJ#(kuW z@vkwL&$eW?Y5~8!SHg~ewR)V`Tgq%>K+29xXGyHMca&JXwkjlyXJgx;l>t@}VqG+bvkdZQ-xSfC1+FrZ1 zN9?u7=VFE)BN=^8<13$kF1BK&o3IgI+<;jwYGbsc;;MRun1j!OMdTySS}H)766;bM z!7~NEYPJxRV}5aOcLU!II`lFd>4bV%)@%A$Il6G z;XGV7$LMn?bOawGq0zZ9|Jv=je5$qPnHu=f(f}cpM^QOnE#kpkcuZphm}LPf$BAn} zgAzm_h(Hj5AOd$L0_zRyH>2mzUVLsFg^4wIbuLHNf8~9ouA>+j8+|w@5LZP1$E3Lt!!afJ{mU$R>xCX*wH9nY&Pd^FgFJI0A%8bOw{(!blS?BDxz{K?m zFdKB^mU)14SpEA!>=z+0*1KwFJ(P$Slzg3a3O-&(?BHFAvpME0b1%(Y@U46}QH->uxSzu`w=A6H}_r2%K3c6|#O%%av^EPg{Liso4mqquKK5v2-$4k>?* ztF4DUj9F$cTKioL=v{xwv9^&ue}QgQt{CC@gRZ$kKOMdju2OSd32!)iCA{&JQBb*r zb%*SSpywnN4Or$L%rQI%EZn?=E?QEHQI_D?WhJ(oV$(~dQcu5|kYSVW5Kud>)tI%8 z1EUiP`-sxt1$_*v09jOX1TC|hYwT2pj;ri+H)AIUc4MGC<< zDxa^y`s>D%Lsqd1%3+f~844zOqvvZriJMN_e4j2wKY~grdQi2Dd?|WZwV$Y#J6MW- zrrKkw{am$-c`15AwI@|OpxQyS@#2GZAa!d?(Z!&>&6r0F|Bi??-$U*va*vbyp4>8W zXUQ4l2FR@^cZ^(;+#z!O={9_TTsOIQ$n7DwhunMQ-X!-ixh`_Y$z{l$CYJ;!H#$FJ zqPc}NJA|=%RZK*4B8#RbniQQP`ts(Tn|4N}BBBR9WC%7n{G+B9HT_G|>zaX|xVg9ro>2qF+fAc#N^fgl1w1cC?z5eOm>L?DPj z5P>@!ff;kEH`C;dTFI;MMB_Hu*t|_{?MP&k;)QHgZ!Is`)FruWz`ZdpwYzPcZKx9J z71?S>vmJNT`6lWLbVhvUni4H(_Rm9qQ)9XZga#nw z8atCj^$tp9UL)E7lucyR$QJUc3@@WG(hQVyhuR5pjfqSXhq{RJ*~Zp(qV5o2zC~$? zki`ED#>v)Znd(Y4cH~pI%TI9Gvs)7_84=~-%Xl%w!zC7%x$#RS|EBO1s(Y$36MYn! zr~7yWM(wGdt3yENT9*UikaIIi1G5x%&UuJ={sZdTR`-Zr%+oqAuJ_>$J}iB>$%or~ zm`8BB`I-s{7CKK!8%AM#-*?4$n$;ZbA->SR=2-SWPf(Vm8iqbY%7C3VlL z@5pO$4zGgG^D%A|H{<`>h~Tz +#include +#include +#include +#include +#include + +int main() { + char * _Z_DATA; + char datafile[PATH_MAX]; + char tmpfile[PATH_MAX]; + FILE *read; + FILE *write; + char line[LINE_MAX]; + char cwd[PATH_MAX]; + char pth[PATH_MAX]; + float rank; + int timestamp; + time_t epoch = time(NULL); + int found = 0; + + if (getcwd(cwd, sizeof(cwd)) == NULL) return EXIT_FAILURE; + + _Z_DATA = getenv("_Z_DATA"); + if( _Z_DATA == NULL ) { + sprintf(datafile, "%s/.z", getenv("HOME")); + } else { + sprintf(datafile, "%s", _Z_DATA); + } + + read = fopen(datafile, "r"); + if (read == NULL) return EXIT_FAILURE; + + srand(time(NULL)); + sprintf(tmpfile, "%s.%d", datafile, rand()); + + write = fopen(tmpfile, "w"); + if (write == NULL) return EXIT_FAILURE; + + while (fgets(line, sizeof line, read) != NULL) { + sscanf(line, "%[^|]|%f|%d\n", pth, &rank, ×tamp); + if (strcmp(pth, cwd) == 0) { + fprintf(write, "%s|%f|%d\n", pth, rank + 1, (int) epoch); + found = 1; + } else fprintf(write, "%s", line); + } + if (!found) fprintf(write, "%s|1|%d\n", cwd, (int) epoch); + + fclose(read); + fclose(write); + + if (rename(tmpfile, datafile) == 0) return EXIT_SUCCESS; + + return EXIT_FAILURE; + +}