# HG changeset patch
# User igor@book.xt.vpn
# Date 1259835802 -7200
# Node ID 0414adc0605976493ba6afc87431b58aad120615
# Parent  a2bd59599719e9fce95f9549b90c8d3891a04ab2
Создана программа l3prompt.c (аналог l3prompt, написанного на Perl).
Занимается тем, что разбивает строку на блоки
и вставляет между ними строки-разделители.

По сути это нужно, чтобы сделать приглашение невидимым.

Сишная версия работает в 2-3 раза быстрее чем перловая.

По умолчанию не инсталлируется.

Для использования нужно откомпилировать
и положить вместо l3prompt

gcc -o l3prompt l3prompt.c
mv l3prompt ~/.lilalo/

diff -r a2bd59599719 -r 0414adc06059 README
--- a/README	Tue Jun 23 01:24:33 2009 +0300
+++ b/README	Thu Dec 03 12:23:22 2009 +0200
@@ -1,7 +1,7 @@
 
 LiLaLo - Live Lab Log
 
-(c) Игорь Чубин, 2004-2008
+(c) Игорь Чубин, 2004-2009
 
 Лицензия, по которой распространяется 
 приведена в файле LICENSE
diff -r a2bd59599719 -r 0414adc06059 l3prompt.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/l3prompt.c	Thu Dec 03 12:23:22 2009 +0200
@@ -0,0 +1,52 @@
+
+/*
+ *  export PS1='\[$($L3_HOME/l3prompt "v3#\!#$?#$UID#$$#$(/bin/date +%s)#$PWD#$RANDOM#")$(l3_save_last_line >& /dev/null)\]'$PS1
+ *  
+ *
+ *  l3prompt perl code:
+ *
+ *  my $string=$ARGV[0];
+ *  my $insert="\e[1K\e[10D";
+ *  my $max=5;
+ *
+ *  while (length($string) > $max) {
+ *      $res .= substr($string, 0, $max).$insert;
+ *      $string = substr($string, $max);
+ *  }
+ *  $res .= $string.$insert;
+ *  print "$res";
+ *
+ */
+#include <stdio.h>
+#define N 5
+#define BUF_SIZE N+1
+char* mixin="\e[1K\e[10D";
+char buf[BUF_SIZE];
+int main(int argc, char **argv)
+{
+    char *i,*j;
+    int n;
+    argc--;
+    argv++;
+    while (argc > 0) {
+        i=argv[0];
+        j=&buf[0];
+        n=0;
+        while(*i) {
+            *j=*i;i++;j++;
+            n++;
+            if (n==N) {
+                *j=0;
+                fputs(buf, stdout);
+                fputs(mixin,stdout);
+                j=&buf[0];
+                n=0;
+            }
+        } 
+        *j=*i;
+        fputs (buf, stdout);
+        if (n) fputs(mixin,stdout);
+        argc--;
+        argv++;
+    };
+}