new uvs2 releases : uppsrc-2630 tutorial-38 examples-142 reference-115

git-svn-id: svn://ultimatepp.org/upp/trunk@324 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
mdelfede 2008-08-02 14:54:22 +00:00
parent b87ea83029
commit 52ee2f6360
42 changed files with 1178 additions and 125 deletions

View file

@ -58,6 +58,7 @@
#ifdef flagSOLARIS
#define PLATFORM_SOLARIS
#define PLATFORM_POSIX
#define __NOASSEMBLY__
#ifdef flagGUI
#define PLATFORM_X11
#endif

View file

@ -81,7 +81,7 @@ int CPU_Cores()
n += !!(sa & (1 << i));
#endif
#elif defined(PLATFORM_POSIX)
#ifdef PLATFORM_FREEBSD
#if defined(PLATFORM_FREEBSD) || defined(PLATFORM_SOLARIS)
n = minmax((int)sysconf(_SC_NPROCESSORS_ONLN), 1, 256);
#else
n = minmax(get_nprocs(), 1, 256);

View file

@ -1,4 +1,4 @@
#pragma BLITZ_APPROVE
//#BLITZ_APPROVE
#define DLISTR__(s) #s
#define DLISTR_(s) DLISTR__(s)

View file

@ -305,7 +305,7 @@ void Heap::Free48(void *ptr)
}
Heap::Page dummy;
#define DI { 0, 0, 0, 0, &dummy, &dummy }
#define DI { { 0, 0, 0, 0, &dummy, &dummy } }
thread__ Heap heap = {
{ DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI, DI }

View file

@ -1,11 +1,11 @@
TITLE("Design decisions and tradeoffs")
COMPRESSED
120,156,133,86,107,111,27,199,21,253,43,131,200,9,36,121,73,236,188,246,65,162,69,12,41,40,130,198,177,17,215,205,7,65,40,135,187,67,114,234,125,48,51,187,146,153,162,254,237,61,119,118,169,8,181,138,90,48,41,174,230,190,206,227,14,239,4,123,245,42,77,210,139,244,255,252,91,221,218,157,25,155,225,254,174,17,69,177,118,121,170,214,134,231,235,119,229,250,203,151,47,203,178,20,107,74,197,145,138,167,74,114,193,185,74,83,37,114,174,203,180,212,5,47,82,153,43,161,243,84,175,142,198,155,246,254,206,20,114,125,253,75,134,40,145,232,11,201,37,79,121,38,20,78,165,50,21,138,11,205,139,66,241,92,23,178,204,178,85,101,142,131,235,187,251,187,45,197,81,49,137,176,52,47,50,197,17,164,180,144,185,86,8,86,138,115,252,206,117,158,229,249,106,112,67,99,239,239,28,117,189,229,89,190,54,74,80,215,55,148,65,37,217,5,218,20,57,82,40,161,50,37,11,33,121,33,68,86,74,85,42,244,207,197,202,13,22,221,110,17,70,161,20,166,81,88,
105,197,37,128,81,185,150,56,150,227,93,165,37,23,168,94,164,90,163,176,253,124,70,139,128,162,184,12,229,68,174,233,116,161,10,46,243,66,40,145,9,52,144,230,152,150,170,235,85,109,67,133,56,41,248,122,64,75,235,155,239,245,154,35,56,79,242,11,145,150,169,200,242,18,5,209,44,6,151,101,201,101,129,130,138,235,148,203,85,213,215,24,118,43,116,42,99,197,2,124,100,200,28,177,209,25,71,195,66,22,40,153,115,41,241,170,85,145,175,130,37,70,134,222,223,223,93,127,127,153,46,211,165,208,250,138,194,75,132,23,82,73,169,178,82,241,84,162,12,114,40,194,43,75,193,41,215,162,88,109,77,64,205,65,17,184,17,85,78,130,2,1,178,208,18,165,51,188,128,92,12,40,129,141,40,85,33,101,145,174,170,198,132,240,12,160,107,26,146,243,132,243,139,156,112,213,82,168,146,192,145,2,0,139,76,151,28,8,235,76,165,98,229,237,111,163,243,182,181,29,32,118,208,200,250,76,207,172,71,52,51,233,81,36,92,64,145,58,203,82,194,75,67,21,66,106,
0,158,242,66,161,35,252,128,226,97,150,228,246,143,25,100,194,229,69,41,148,68,39,165,82,64,0,9,120,201,57,79,11,252,96,50,224,18,181,193,103,117,61,23,22,87,9,87,23,57,180,12,166,74,69,229,75,73,248,9,192,47,178,84,131,7,49,133,11,66,93,188,2,238,92,20,244,63,34,207,117,194,97,10,180,200,181,198,220,18,80,139,2,179,107,96,47,163,206,121,94,172,126,182,143,225,214,12,118,22,204,245,205,171,73,105,60,75,120,118,145,82,188,46,74,16,200,21,225,39,149,42,69,41,165,22,165,150,89,10,28,195,228,105,10,38,95,69,79,62,37,201,19,158,195,97,152,85,107,76,31,195,48,121,206,169,21,81,148,25,161,48,39,217,44,26,215,81,31,80,198,122,18,195,245,205,107,206,115,74,84,192,48,69,145,165,178,4,24,192,32,213,80,58,182,66,1,162,193,179,128,13,104,45,84,159,204,222,110,22,179,101,255,245,143,127,127,251,195,207,139,143,31,216,93,16,107,118,107,131,219,119,172,182,149,11,216,3,129,153,174,102,131,55,53,34,
250,221,46,124,119,127,23,210,181,131,15,214,91,41,215,239,210,53,123,51,176,225,96,89,219,147,80,18,246,104,89,24,124,223,237,155,19,219,153,135,222,227,163,25,92,197,208,249,39,215,237,89,191,99,31,55,175,55,175,217,220,74,88,178,31,119,172,235,135,3,253,213,54,193,38,204,13,172,53,159,108,152,79,154,227,49,176,96,155,221,102,81,245,221,96,128,65,205,46,135,126,111,81,217,179,71,55,28,88,56,5,240,76,217,151,141,57,197,190,151,174,109,216,206,53,54,92,197,207,166,9,61,107,199,234,128,198,112,216,179,161,103,77,111,106,230,58,246,147,235,198,207,236,242,159,99,24,88,213,183,144,42,205,97,60,134,115,45,26,161,174,127,237,125,61,23,195,176,236,175,183,63,48,178,37,158,225,15,155,197,209,247,149,13,161,247,87,75,246,225,128,4,53,219,142,174,169,3,48,65,54,215,30,155,104,38,60,111,49,2,240,65,125,60,245,253,131,157,78,206,181,28,17,176,29,247,192,180,182,203,23,32,191,121,255,145,29,76,160,248,173,101,214,69,20,26,
55,128,209,205,194,118,181,51,29,3,240,91,183,127,250,120,105,63,247,196,130,241,213,1,134,168,134,17,138,98,52,37,144,103,97,60,30,123,143,206,174,18,170,190,107,204,192,164,216,44,182,68,4,154,160,108,120,158,169,103,143,38,32,220,239,182,223,93,186,110,184,98,127,222,252,137,41,208,114,64,176,11,12,203,99,136,24,118,181,241,53,48,185,25,189,199,248,52,183,13,132,2,141,241,117,63,14,171,51,97,111,222,222,102,10,111,191,188,141,212,189,239,129,225,251,155,255,5,6,29,33,214,192,181,143,73,226,64,68,13,32,154,135,99,111,129,179,217,54,22,45,250,209,178,29,102,50,221,137,237,171,138,29,49,48,62,183,49,209,219,15,127,191,153,100,71,204,53,205,213,75,85,127,181,209,36,245,84,2,158,233,81,21,37,131,219,58,48,113,34,193,108,190,233,199,129,124,179,89,180,182,237,253,105,243,13,179,159,43,27,175,216,201,90,222,86,232,202,159,162,7,158,196,222,184,202,208,25,182,239,73,122,227,64,217,166,20,209,27,129,180,116,98,71,15,220,
67,116,159,245,30,227,64,60,1,142,154,76,107,125,235,58,108,45,248,235,111,7,240,241,68,201,209,155,125,27,45,9,200,251,102,140,149,54,11,212,241,104,239,104,189,179,93,101,233,252,68,229,51,54,161,234,122,178,82,215,245,39,242,43,134,55,96,208,66,194,190,223,194,61,29,122,96,7,18,60,157,67,112,69,103,7,18,170,183,141,3,1,103,254,151,236,13,12,153,64,77,240,220,153,129,48,233,234,193,249,97,52,205,60,52,158,53,13,236,27,79,238,188,181,191,91,24,23,213,183,118,71,184,255,23,204,152,176,7,207,45,171,65,51,177,3,207,117,193,161,197,35,161,19,30,1,49,122,135,34,251,174,131,244,192,161,11,1,103,1,66,61,125,3,155,21,117,60,225,165,195,62,27,43,220,220,127,248,197,52,13,4,25,169,31,14,190,127,124,78,43,124,50,17,121,73,196,64,149,45,224,245,214,4,188,125,125,126,130,234,209,132,175,134,64,225,218,209,145,171,153,192,198,181,110,152,116,17,241,136,136,182,144,79,92,96,187,145,44,68,24,163,20,72,127,65,
179,111,205,103,215,142,45,235,198,118,11,159,64,83,118,218,72,177,105,242,194,211,110,62,175,89,204,12,115,87,205,88,19,217,127,249,248,227,83,72,130,126,62,217,103,185,48,86,204,115,235,251,227,79,46,96,33,160,103,113,183,97,146,179,123,32,203,25,246,195,221,183,105,186,72,83,134,111,12,42,79,240,37,37,201,84,190,188,127,161,89,170,133,4,1,117,97,89,160,102,113,9,213,4,5,52,89,147,47,136,136,214,98,183,157,250,241,172,178,154,22,124,51,56,220,111,115,68,76,20,47,16,244,16,215,251,24,160,24,90,191,125,119,78,76,196,64,248,113,5,196,243,211,62,105,199,142,156,56,239,186,158,214,108,128,52,77,220,211,30,158,176,16,205,37,86,193,126,36,213,15,196,82,139,59,169,39,65,225,146,193,221,103,118,54,174,153,71,115,122,113,143,76,112,63,205,67,189,189,251,176,89,192,184,164,215,71,87,227,142,139,14,182,241,210,56,11,137,150,215,48,187,250,153,5,167,243,81,240,126,103,42,27,55,117,195,122,72,173,133,155,40,202,155,163,171,
33,243,7,219,244,71,98,114,74,222,208,0,88,43,88,148,166,27,206,101,206,59,32,150,194,8,243,50,136,119,40,78,184,233,14,165,171,250,172,27,143,21,136,171,112,118,243,146,189,235,226,126,138,216,97,125,116,117,194,110,14,166,133,138,144,62,224,11,65,71,194,154,47,239,121,12,64,49,141,223,244,253,167,205,119,59,107,155,4,87,46,37,242,113,47,153,249,178,35,206,42,235,30,226,86,175,221,14,88,199,213,69,115,226,222,35,52,125,4,29,223,108,238,255,3,174,207,47,212,
120,156,133,86,107,111,27,199,21,253,43,131,200,9,36,121,73,236,188,246,65,162,69,12,41,40,130,198,177,17,215,205,7,65,45,135,187,67,114,234,125,176,51,187,150,152,162,254,237,61,119,118,169,8,181,138,90,48,41,174,230,190,206,227,14,239,4,123,245,42,77,210,139,244,255,252,91,221,218,157,25,155,225,254,174,17,69,177,118,121,170,214,134,231,235,119,229,250,203,151,47,203,178,20,107,74,197,145,138,167,74,114,193,185,74,83,37,114,174,203,180,212,5,47,82,153,43,161,243,84,175,142,198,155,246,254,206,20,114,125,253,75,134,40,145,232,11,201,37,79,121,38,20,78,165,50,21,138,11,205,139,66,241,92,23,178,204,178,85,101,142,131,235,187,251,187,45,197,81,49,137,176,52,47,50,197,17,164,180,144,185,86,8,86,138,115,252,206,117,158,229,249,106,112,67,99,239,239,28,117,189,229,89,190,54,74,80,215,55,148,65,37,217,5,218,20,57,82,40,161,50,37,11,33,121,33,68,86,74,85,42,244,207,197,202,13,22,221,110,17,70,161,20,166,81,88,
105,197,37,128,81,185,150,56,150,227,93,165,37,23,168,94,164,90,163,176,125,60,163,69,64,81,92,134,114,34,215,116,186,80,5,151,121,33,148,200,4,26,72,115,76,75,213,245,170,182,161,66,156,20,124,61,160,165,245,205,247,122,205,17,156,39,249,133,72,203,84,100,121,137,130,104,22,131,203,178,228,178,64,65,197,117,202,229,170,234,107,12,187,21,58,149,177,98,1,62,50,100,142,216,232,140,163,97,33,11,148,204,185,148,120,213,170,200,87,193,18,35,67,239,239,239,174,191,191,76,151,233,82,104,125,69,225,37,194,11,169,164,84,89,169,120,42,81,6,57,20,225,149,165,224,148,107,81,172,182,38,160,230,160,8,220,136,42,39,65,129,0,89,104,137,210,25,94,64,46,6,148,192,70,148,170,144,178,72,87,85,99,66,120,6,208,53,13,201,121,194,249,69,78,184,106,41,84,73,224,72,1,128,69,166,75,14,132,117,166,82,177,242,246,159,163,243,182,181,29,32,118,208,200,250,76,207,172,71,52,51,233,81,36,92,64,145,58,203,82,194,75,67,21,66,106,
0,158,242,66,161,35,252,128,226,97,150,228,246,247,25,100,194,229,69,41,148,68,39,165,82,64,0,9,120,201,57,79,11,252,96,50,224,18,181,193,103,117,61,23,22,87,9,87,23,57,180,12,166,74,69,229,75,73,248,9,192,47,178,84,131,7,49,133,11,66,93,188,2,238,92,20,244,63,34,207,117,194,97,10,180,200,181,198,220,18,80,139,2,179,107,96,47,163,206,121,94,172,126,182,15,225,214,12,118,22,204,245,205,171,73,105,60,75,120,118,145,82,188,46,74,16,200,21,225,39,149,42,69,41,165,22,165,150,89,10,28,195,228,105,10,38,95,69,79,62,37,201,19,158,195,97,152,85,107,76,31,195,48,121,206,169,21,81,148,25,161,48,39,217,44,26,215,81,31,80,198,122,18,195,245,205,107,206,115,74,84,192,48,69,145,165,178,4,24,192,32,213,80,58,182,66,1,162,193,179,128,13,104,45,84,159,204,222,110,22,179,101,255,245,247,127,127,251,195,207,139,143,31,216,93,16,107,118,107,131,219,119,172,182,149,11,216,3,129,153,174,102,131,55,53,34,
250,221,46,124,119,127,23,210,181,131,15,214,91,41,215,239,210,53,123,51,176,225,96,89,219,147,80,18,246,96,89,24,124,223,237,155,19,219,153,207,189,199,71,51,184,138,161,243,79,174,219,179,126,199,62,110,94,111,94,179,185,149,176,100,63,238,88,215,15,7,250,171,109,130,77,152,27,88,107,62,217,48,159,52,199,99,96,193,54,187,205,162,234,187,193,0,131,154,93,14,253,222,162,178,103,15,110,56,176,112,10,224,153,178,47,27,115,138,125,47,93,219,176,157,107,108,184,138,159,77,19,122,214,142,213,1,141,225,176,103,67,207,154,222,212,204,117,236,39,215,141,143,236,242,31,99,24,88,213,183,144,42,205,97,60,134,115,45,26,161,174,127,237,125,61,23,195,176,236,207,183,63,48,178,37,158,225,15,155,197,209,247,149,13,161,247,87,75,246,225,128,4,53,219,142,174,169,3,48,65,54,215,30,155,104,38,60,111,49,2,240,65,125,60,245,253,103,59,157,156,107,57,34,96,59,238,129,105,109,151,47,64,126,243,254,35,59,152,64,241,91,203,172,139,40,52,
110,0,163,155,133,237,106,103,58,6,224,183,110,255,244,241,210,62,246,196,130,241,213,1,134,168,134,17,138,98,52,37,144,103,97,60,30,123,143,206,174,18,170,190,107,204,192,164,216,44,182,68,4,154,160,108,120,158,169,103,143,38,32,220,111,182,223,93,186,110,184,98,127,220,252,129,41,208,114,64,176,11,12,203,99,136,24,118,181,241,53,48,185,25,189,199,248,52,183,13,132,2,141,241,117,63,14,171,51,97,111,222,222,102,10,111,191,188,141,212,189,239,129,225,251,155,255,5,6,29,33,214,192,181,143,73,226,64,68,13,32,154,135,99,111,129,179,217,54,22,45,250,209,178,29,102,50,221,137,237,171,138,29,49,48,62,183,49,209,219,15,127,189,153,100,71,204,53,205,213,75,85,127,181,209,36,245,84,2,158,233,81,21,37,131,219,58,48,113,34,193,108,190,233,199,129,124,179,89,180,182,237,253,105,243,13,179,143,149,141,87,236,100,45,111,43,116,229,79,209,3,79,98,111,92,101,232,12,219,247,36,189,113,160,108,83,138,232,141,64,90,58,177,163,7,238,
33,186,207,122,143,113,32,158,0,71,77,166,181,190,117,29,182,22,252,245,151,3,248,120,162,228,232,205,190,141,150,4,228,125,51,198,74,155,5,234,120,180,119,180,222,217,174,178,116,126,162,242,25,155,80,117,61,89,169,235,250,19,249,21,195,27,48,104,33,97,223,111,225,158,14,61,176,3,9,158,206,33,184,162,179,3,9,213,219,198,129,128,51,255,75,246,6,134,76,160,38,120,238,204,64,152,116,245,217,249,97,52,205,60,52,158,53,13,236,27,79,238,188,181,191,89,24,23,213,183,118,71,184,255,23,204,152,176,7,207,45,171,65,51,177,3,207,117,193,161,197,35,161,19,30,0,49,122,135,34,251,174,131,244,192,161,11,1,103,1,66,61,125,3,155,21,117,60,225,165,195,62,27,43,220,220,191,251,197,52,13,4,25,169,31,14,190,127,120,78,43,124,50,17,121,73,196,64,149,45,224,245,214,4,188,125,125,126,130,234,193,132,175,134,64,225,218,209,145,171,153,192,198,181,110,152,116,17,241,136,136,182,144,79,92,96,187,145,44,68,24,163,20,72,127,65,
179,111,205,163,107,199,150,117,99,187,133,79,160,41,59,109,164,216,52,121,225,105,55,159,215,44,102,134,185,171,102,172,137,236,63,125,252,241,41,36,65,63,159,236,179,92,24,43,230,185,245,253,241,39,23,176,16,208,179,216,252,237,110,195,36,103,247,192,150,51,108,136,187,111,211,116,145,166,12,223,25,84,158,224,107,74,146,169,124,121,255,66,187,84,13,41,2,42,195,180,192,205,226,26,170,9,12,168,178,38,103,16,21,173,197,118,59,245,227,89,103,53,173,248,102,112,184,225,230,136,152,40,94,33,232,33,46,248,49,64,51,180,128,251,238,156,152,168,129,244,227,18,136,231,167,141,210,142,29,121,113,222,118,61,45,218,0,113,154,184,169,61,92,97,33,155,75,44,131,253,72,186,31,136,167,22,183,82,79,146,194,53,131,219,207,236,108,92,52,15,230,244,226,38,153,0,127,154,135,122,123,247,97,179,128,117,73,177,15,174,198,45,23,61,108,227,181,113,150,18,173,175,97,246,245,51,19,78,231,163,228,253,206,84,54,238,234,134,245,16,91,11,63,81,148,55,
71,87,67,232,159,109,211,31,137,203,41,121,67,3,96,177,96,85,154,110,56,151,57,111,129,88,10,35,204,235,32,222,162,56,225,166,91,148,46,235,179,114,60,150,32,46,195,217,207,75,246,174,139,27,42,98,135,5,210,213,9,187,57,152,22,58,66,250,128,175,4,29,73,107,190,190,231,49,0,197,52,126,211,247,159,54,223,237,172,109,18,92,186,148,200,199,205,100,230,235,142,56,171,172,251,28,247,122,237,118,192,58,46,47,154,19,55,31,161,233,103,208,217,253,127,0,51,64,48,144,

View file

@ -1,7 +1,31 @@
TOPIC("BRC$en-us")
#include "BRC$en-us.tpp"
END_TOPIC
TOPIC("Caveats$en-us")
#include "Caveats$en-us.tpp"
END_TOPIC
TOPIC("Charset$en-us")
#include "Charset$en-us.tpp"
END_TOPIC
TOPIC("Configuration$en-us")
#include "Configuration$en-us.tpp"
END_TOPIC
TOPIC("CoreTutorial$en-us")
#include "CoreTutorial$en-us.tpp"
END_TOPIC
TOPIC("Decisions$en-us")
#include "Decisions$en-us.tpp"
END_TOPIC
TOPIC("DLI$en-us")
#include "DLI$en-us.tpp"
END_TOPIC
TOPIC("i18n$en-us")
#include "i18n$en-us.tpp"
END_TOPIC
@ -18,6 +42,14 @@ TOPIC("NTLvsSTL$en-us")
#include "NTLvsSTL$en-us.tpp"
END_TOPIC
TOPIC("Packages$en-us")
#include "Packages$en-us.tpp"
END_TOPIC
TOPIC("PickTypes$en-us")
#include "PickTypes$en-us.tpp"
END_TOPIC
TOPIC("pick_$en-us")
#include "pick_$en-us.tpp"
END_TOPIC
@ -26,47 +58,15 @@ TOPIC("std$en-us")
#include "std$en-us.tpp"
END_TOPIC
TOPIC("UserValue$en-us")
#include "UserValue$en-us.tpp"
END_TOPIC
TOPIC("PickTypes$en-us")
#include "PickTypes$en-us.tpp"
END_TOPIC
TOPIC("Decisions$en-us")
#include "Decisions$en-us.tpp"
END_TOPIC
TOPIC("Charset$en-us")
#include "Charset$en-us.tpp"
END_TOPIC
TOPIC("BRC$en-us")
#include "BRC$en-us.tpp"
END_TOPIC
TOPIC("DLI$en-us")
#include "DLI$en-us.tpp"
END_TOPIC
TOPIC("Packages$en-us")
#include "Packages$en-us.tpp"
TOPIC("Translating$en-us")
#include "Translating$en-us.tpp"
END_TOPIC
TOPIC("Tutorial$en-us")
#include "Tutorial$en-us.tpp"
END_TOPIC
TOPIC("CoreTutorial$en-us")
#include "CoreTutorial$en-us.tpp"
END_TOPIC
TOPIC("Caveats$en-us")
#include "Caveats$en-us.tpp"
END_TOPIC
TOPIC("Translating$en-us")
#include "Translating$en-us.tpp"
TOPIC("UserValue$en-us")
#include "UserValue$en-us.tpp"
END_TOPIC

View file

@ -178,6 +178,9 @@ static void sPanicMessageBox(const char *title, const char *text)
XFreeFont(display, font_info);
XFreeGC(display, gc);
XCloseDisplay(display);
#ifdef _DEBUG
__BREAK__;
#endif
return;
case Expose:
int y = 20;

View file

@ -294,9 +294,9 @@ void DHCtrl::Terminate(void)
// State handler
void DHCtrl::State(int reason)
{
Window dummy;
int x, y;
unsigned int width, height, border, depth;
// Window dummy;
// int x, y;
// unsigned int width, height, border, depth;
Rect r;
// No handling if in error state

View file

@ -136,14 +136,13 @@ void DnDLoop::Sync()
XSendEvent(Xdisplay, target, XFalse, 0, &e);
XFlush(Xdisplay);
Xdnd_waiting_status = true;
int timeout = GetTickCount() + 200;
dword timeout = GetTickCount();
LLOG("Waiting for XdndStatus");
TimeStop tm;
while(Xdnd_waiting_status && GetTickCount() < timeout) {
while(Xdnd_waiting_status && GetTickCount() - timeout < 200) {
GuiSleep(0);
ProcessEvents();
}
LLOG("Waiting status " << tm << "ms");
LLOG("Waiting status " << GetTickCount() - timeout << "ms");
if(Xdnd_waiting_status) {
LLOG("XdndStatus timeout");
Xdnd_status = DND_NONE;
@ -193,14 +192,13 @@ void DnDLoop::LeftUp(Point, dword)
XSendEvent(Xdisplay, target, XFalse, 0, &e);
XFlush(Xdisplay);
Xdnd_waiting_finished = true;
int timeout = GetTickCount() + 200;
int timeout = GetTickCount();
LLOG("Waiting for XdndFinished");
TimeStop tm;
while(Xdnd_waiting_finished && GetTickCount() < timeout) {
while(Xdnd_waiting_finished && GetTickCount() - timeout < 200) {
GuiSleep(0);
ProcessEvents();
}
LLOG("Waiting finished " << tm << "ms");
LLOG("Waiting finished " << GetTickCount() - timeout << "ms");
if(Xdnd_waiting_status) {
LLOG("XdndFinished timeout");
Xdnd_status = DND_NONE;

View file

@ -977,7 +977,7 @@ void Ctrl::SyncNativeWindows(void)
Rect r = xw.ctrl->GetRectInParentWindow();
if( (x != r.left || y != r.top) && ((int)width == r.Width() && (int)height == r.Height()))
XMoveWindow(Xdisplay, w, r.left, r.top);
else if( (x == r.left || y == r.top) && ((int)width != r.Width() || (int)height != r.Height()))
else if( (x == r.left && y == r.top) && ((int)width != r.Width() || (int)height != r.Height()))
XResizeWindow(Xdisplay, w, r.Width(), r.Height());
else if( x != r.left || y != r.top || (int)width != r.Width() || (int)height != r.Height())
XMoveResizeWindow(Xdisplay, w, r.left, r.top, r.Width(), r.Height());

View file

@ -6,7 +6,7 @@
NAMESPACE_UPP
#define LLOG(x) // LOG(x)
#define LLOG(x) LOG(x)
#define LTIMING(x) // RTIMING(x)
static ColorF xpmenuborder[] = {
@ -199,7 +199,7 @@ void MenuBar::SetupRestoreFocus()
q = q->submenu;
}
restorefocus = GetFocusCtrl();
LLOG("SetupRestoreFocus -> " << ::Name(restorefocus));
LLOG("SetupRestoreFocus -> " << UPP::Name(restorefocus));
}
void MenuBar::PostDeactivate()
@ -287,10 +287,11 @@ INITBLOCK
bool MenuBar::Key(dword key, int count)
{
LLOG("KEY " << GetKeyDesc(key));
bool horz = IsChild();
if((horz ? key == K_RIGHT : key == K_DOWN)) {
Ctrl *ctrl = GetFocusChildDeep();
LLOG("MenuBar::Key(" << key << ") -> IterateFocusForward for " << ::Name(ctrl) << ", pane " << ::Name(&pane));
LLOG("MenuBar::Key(" << key << ") -> IterateFocusForward for " << UPP::Name(ctrl) << ", pane " << UPP::Name(&pane));
if(HasMouseDeep())
GetMouseCtrl()->Refresh();
if(ctrl && IterateFocusForward(ctrl, &pane, false, false, true))
@ -306,7 +307,7 @@ bool MenuBar::Key(dword key, int count)
else
if((horz ? key == K_LEFT : key == K_UP)) {
Ctrl *ctrl = GetFocusChildDeep();
LLOG("MenuBar::Key(" << key << ") -> IterateFocusBackward for " << ::Name(ctrl) << ", pane " << ::Name(&pane));
LLOG("MenuBar::Key(" << key << ") -> IterateFocusBackward for " << UPP::Name(ctrl) << ", pane " << UPP::Name(&pane));
if(HasMouseDeep())
GetMouseCtrl()->Refresh();
if(ctrl && IterateFocusBackward(ctrl, &pane, false, true))
@ -342,6 +343,7 @@ bool MenuBar::Key(dword key, int count)
parentmenu->pane.GetFirstChild() && parentmenu->submenuitem) {
Ctrl *smi = parentmenu->submenuitem;
Ctrl *q = smi;
q->Refresh();
if(key == K_RIGHT)
for(;;) {
q = q->GetNext();
@ -350,6 +352,7 @@ bool MenuBar::Key(dword key, int count)
if(q == smi)
break;
if(PullMenu(q)) {
q->Refresh();
SyncState();
return true;
}
@ -362,6 +365,7 @@ bool MenuBar::Key(dword key, int count)
if(q == smi)
break;
if(PullMenu(q)) {
q->Refresh();
SyncState();
return true;
}
@ -485,7 +489,7 @@ void MenuBar::PopUp(Ctrl *owner, Point p, Size rsz)
}
Rect r = GetWorkArea();
restorefocus = GetFocusCtrl();
LLOG("PopUp " << ::Name(this) << " set restorefocus:" << ::Name(restorefocus));
LLOG("PopUp " << UPP::Name(this) << " set restorefocus:" << UPP::Name(restorefocus));
DistributeAccessKeys();
frame.Set(style->popupframe);
if(GUI_GlobalStyle() >= GUISTYLE_XP)
@ -563,7 +567,7 @@ MenuBar::~MenuBar()
{
lock++;
LLOG("~MenuBar " << Name());
LLOG("Parent menu " << ::Name(parentmenu));
LLOG("Parent menu " << UPP::Name(parentmenu));
if(parentmenu)
parentmenu->SetActiveSubmenu(NULL, NULL);
LLOG("~MenuBar 1");

View file

@ -140,6 +140,8 @@ public:
virtual void Paint(Draw& w);
virtual void MouseEnter(Point, dword);
virtual void MouseLeave();
virtual void GotFocus();
virtual void LostFocus();
virtual void LeftDown(Point, dword);
virtual void SyncState();
virtual Size GetMinSize() const;

View file

@ -491,6 +491,16 @@ bool TopSubMenuItem::Key(dword key, int) {
return false;
}
void TopSubMenuItem::GotFocus()
{
Refresh();
}
void TopSubMenuItem::LostFocus()
{
Refresh();
}
bool TopSubMenuItem::HotKey(dword key)
{
if(BarCtrl::Scan(proc, key))

View file

@ -153,6 +153,8 @@ String System(const char *cmd, const String& in)
c << " <" << ifn;
system(c);
String q = LoadFile(ofn);
FileDelete(ofn);
FileDelete(ifn);
return q;
}

View file

@ -40,6 +40,9 @@ public:
Pusher& SetFont(Font fnt);
Pusher& SetLabel(const char *text);
Font GetFont() const { return font; }
String GetLabel() const { return label; }
void PseudoPush();
int GetVisualState() const;

View file

@ -46,7 +46,7 @@ TreeCtrl::Node::Node(const Image& img, Ctrl& ctrl, int cx, int cy)
Init();
SetCtrl(ctrl);
image = img;
size = ctrl.GetMinSize();
size = Null;
if(cx > 0)
size.cx = cx;
if(cy > 0)
@ -128,34 +128,6 @@ Size TreeCtrl::Item::GetSize() const
return sz;
}
/*
Size TreeCtrl::Item::GetValueSize() const
{
if(IsNull(size))
if(ctrl)
return ctrl->GetMinSize();
else
return display ? display->GetStdSize(value) : StdDisplay().GetStdSize(value);
else
return size;
}
Size TreeCtrl::Item::GetCtrlSize() const
{
return size;
}
Size TreeCtrl::Item::GetSize() const
{
Size sz = GetValueSize();
sz += Size(2 * margin, 2 * margin);
Size isz = image.GetSize();
sz.cx += isz.cx;
sz.cy = max(sz.cy, isz.cy);
return sz;
}
*/
void TreeCtrl::SetRoot(const TreeCtrl::Node& n)
{
(TreeCtrl::Node &)item[0] = n;

View file

@ -319,6 +319,7 @@ public:
int Add(int parent, const char *text);
void SetLabel(int id, const char *text);
String GetLabel(int id) const { return option[id]->GetLabel(); }
int Get(int id) const { return option[id]->Get(); }

View file

@ -40,3 +40,4 @@ file
Copying,
Copying-plain,
Authors;

View file

@ -1,8 +1,6 @@
#include "SqlCtrl.h"
#include <Report/Report.h>
#pragma hdrstop
NAMESPACE_UPP
#define IMAGEFILE <SqlCtrl/SqlCtrl.iml>
@ -120,7 +118,6 @@ bool MacroSet::Define(const char *s) {
}
String MacroSet::Expand(const char *s, Index<int>& used) const {
bool again = false;
String text;
while(*s)
if(IsId(*s)) {

View file

@ -1,12 +1,8 @@
#include "SqlCtrl.h"
#pragma hdrstop
#include "SqlDlg.h"
NAMESPACE_UPP
static bool StringLessNoCase(String a, String b) { return CompareNoCase(a, b) < 0; }
class DlgSqlExport : public WithSqlExportLayout<TopWindow>
{
public:

View file

@ -348,6 +348,90 @@ void TopicCtrl::OpenTopic()
WhenTopic();
}
struct SlideShow : TopWindow {
virtual bool Key(dword key, int count);
RichTextView text;
Vector<String> path;
int page;
int rp;
void SetPage();
SlideShow();
};
bool SlideShow::Key(dword key, int count)
{
switch(key) {
case K_ESCAPE:
Break();
break;
case K_LEFT:
case K_UP:
case K_PAGEUP:
page--;
SetPage();
break;
case K_RIGHT:
case K_DOWN:
case K_PAGEDOWN:
page++;
SetPage();
break;
}
return true;
}
void SlideShow::SetPage()
{
page = minmax(page, 0, path.GetCount() - 1);
if(page != rp) {
rp = page;
text <<= ReadTopic(LoadFile(path[page])).text;
}
}
SlideShow::SlideShow()
{
FullScreen();
Add(text.SizePos());
text.NoHyperlinkDecoration();
text.NoSb();
text.VCenter();
text.SetZoom(Zoom(1, 5));
text.Margins(8);
rp = -1;
}
void TopicCtrl::SShow()
{
SlideShow ss;
TopicLink tl = ParseTopicLink(GetCurrent());
if(IsNull(tl.package))
return;
String folder = AppendFileName(PackageDirectory(tl.package), tl.group + ".tpp");
FindFile ff(AppendFileName(folder, "*.tpp"));
Array<String> l;
while(ff) {
if(ff.IsFile())
l.Add(GetFileTitle(ff.GetName()));
ff.Next();
}
if(l.GetCount() == 0)
return;
Sort(l);
for(int i = 0; i < l.GetCount(); i++) {
if(tl.topic == l[i])
ss.page = i;
ss.path.Add(AppendFileName(folder, l[i] + ".tpp"));
}
ss.SetPage();
ss.Run();
tl.topic = l[ss.page];
GoTo(TopicLinkString(tl));
}
void TopicCtrl::Search()
{
if(issearch) {
@ -411,6 +495,8 @@ void TopicCtrl::BarEx(Bar& bar)
.Check(issearch);
bar.Add("Highlight search keywords in topic", IdeImg::ShowWords(), THISBACK(ShowWords))
.Check(showwords);
bar.Add(!internal && GetCurrent().StartsWith("topic:"),
IdeImg::show(), THISBACK(SShow));
bar.GapRight();
bar.Separator();
bar.Add(!internal && GetCurrent().StartsWith("topic:"),

View file

@ -216,8 +216,6 @@ void LocalHost::Launch(const char *_cmdline, bool console)
<< "echo \"<--- Finished, press any key to close the window --->\"\nread\n";
cmdline = LinuxHostConsole + " bash " + script;
}
DUMP(LoadFile(script));
SaveFile(GetHomeDirFile("test"), LoadFile(script));
Buffer<char> cmd_buf(strlen(cmdline) + 1);
char *cmd_out = cmd_buf;
Vector<char *> args;

View file

@ -31,11 +31,9 @@ void Ide::Valgrind()
String cmdline;
String fn = GetTempFileName();
cmdline << "valgrind --xml=yes --num-callers=40 " << ValgrindLogFile << fn << ' ';
// 2008/06/01 -- add valgrind suppression file
String ValgSupp = ConfigFile("valgrind.supp");
if(!IsNull(LoadFile(ValgSupp)))
cmdline << "--suppressions=" << ValgSupp << ' ';
// 2008/06/01 -- END
cmdline << '\"' << h->GetHostPath(target) << "\" ";
cmdline << runarg;
ConsoleClear();

View file

@ -93,3 +93,4 @@ END_TOPIC
TOPIC("Topic$en-us")
#include "Topic$en-us.tpp"
END_TOPIC

View file

@ -265,6 +265,7 @@ private:
void ShowWords();
void All();
void Lang();
void SShow();
Label search_label;
WithDropChoice<EditString> search;

View file

@ -63,6 +63,7 @@ IMAGE_ID(HelpSearch)
IMAGE_ID(HelpAll)
IMAGE_ID(sponsor)
IMAGE_ID(index)
IMAGE_ID(show)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,153,77,178,155,48,12,199,125,129,206,188,93,103,186,234,117,122,43,159,168,103,200,57,114,132,46,219,101,23)
@ -3839,9 +3840,11 @@ IMAGE_DATA(140,172,235,169,228,243,54,200,196,40,92,138,207,132,9,19,38,76,152,4
IMAGE_END_DATA(5088, 20)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,99,16,96,16,96,160,38,40,236,92,246,159,28,140,172,255,255,127,6,20,188,106,213,170,255,248,0,86,253,207)
IMAGE_DATA(129,184,3,136,11,17,250,235,235,235,225,24,198,199,170,31,164,55,18,136,181,80,245,147,100,63,200,110,71,76,253,216)
IMAGE_DATA(220,128,213,126,144,221,11,200,244,127,7,84,63,200,29,231,201,240,191,22,3,2,47,32,195,126,71,136,189,96,253,207)
IMAGE_DATA(49,245,163,187,3,67,255,121,164,240,35,55,254,29,161,102,252,39,51,254,181,160,126,32,199,254,5,72,225,143,197,126)
IMAGE_DATA(244,112,64,215,79,73,254,161,4,0,0,124,78,86,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(160, 1)
IMAGE_DATA(120,156,189,148,193,17,132,32,12,69,83,130,117,112,165,2,202,216,50,172,128,61,186,93,112,218,3,205,88,134,101,68)
IMAGE_DATA(88,17,17,193,129,196,217,239,252,3,51,60,126,18,84,24,96,128,39,53,126,190,72,113,202,35,194,201,214,90,188,83)
IMAGE_DATA(145,95,156,39,231,241,224,181,214,209,251,186,200,123,246,229,44,206,124,87,190,207,86,87,190,84,67,49,223,103,27,98)
IMAGE_DATA(255,83,224,125,29,51,161,127,1,135,13,33,95,109,185,63,126,185,242,121,29,23,126,78,230,71,189,127,21,206,64,226)
IMAGE_DATA(253,139,208,3,37,223,36,243,47,228,231,115,200,121,206,247,195,210,211,63,3,39,36,58,242,189,42,241,16,30,47,41)
IMAGE_DATA(101,213,45,60,55,127,219,243,142,110,225,185,253,239,186,235,251,31,249,20,158,249,254,228,170,157,223,42,14,95,219,219)
IMAGE_DATA(122,6,151,239,210,10,36,118,222,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(224, 2)

View file

@ -401,7 +401,7 @@ LAYOUT(SetupEditorLayout, 488, 280)
ITEM(DropList, charset, LeftPosZ(112, 104).TopPosZ(76, 19))
ITEM(Option, showtabs, SetLabel(t_("Show tabs")).LeftPosZ(12, 72).TopPosZ(100, 18))
ITEM(Option, indent_spaces, SetLabel(t_("Indent using spaces")).LeftPosZ(12, 118).TopPosZ(120, 18))
ITEM(Option, no_parenthesis_indent, SetLabel(t_("No indent after parenthesis")).LeftPosZ(12, 148).TopPosZ(140, 18))
ITEM(Option, no_parenthesis_indent, SetLabel(t_("No indent after parenthesis")).LeftPosZ(12, 176).TopPosZ(140, 18))
ITEM(Option, numbers, SetLabel(t_("Show line numbers")).LeftPosZ(12, 112).TopPosZ(160, 18))
ITEM(Option, bookmark_pos, SetLabel(t_("Bookmarks restore position")).LeftPosZ(12, 152).TopPosZ(180, 18))
ITEM(Option, filetabs, SetLabel(t_("File tabs")).LeftPosZ(12, 64).TopPosZ(200, 18))

View file

@ -1 +1 @@
#define IDE_VERSION "807.r126"
#define IDE_VERSION "807.r127"

View file

@ -23,10 +23,10 @@
#define DATE_(x) COLUMN_("date", Date, x, 0, 0)
#define DATE_ARRAY_(x, items) COLUMN_ARRAY_("date", Date, x, 0, 0, items)
#define TIME(x) COLUMN("date", Time, x, 0, 0)
#define TIME_ARRAY(x, items) COLUMN_ARRAY("date", Time, x, 0, 0, items)
#define TIME_(x) COLUMN_("date", Time, x, 0, 0)
#define TIME_ARRAY_(x, items) COLUMN_ARRAY_("date", Time, x, 0, 0, items)
#define TIME(x) COLUMN("datetime", Time, x, 0, 0)
#define TIME_ARRAY(x, items) COLUMN_ARRAY("datetime", Time, x, 0, 0, items)
#define TIME_(x) COLUMN_("datetime", Time, x, 0, 0)
#define TIME_ARRAY_(x, items) COLUMN_ARRAY_("datetime", Time, x, 0, 0, items)
#define BOOL(x) COLUMN("text", bool, x, 0, 0)
#define BOOL_ARRAY(x, items) COLUMN_ARRAY("text", bool, x, 0, 0, items)

56
uppsrc/usvn/Console.cpp Normal file
View file

@ -0,0 +1,56 @@
#include "usvn.h"
SysConsole::SysConsole()
{
CtrlLayoutExit(*this, "System Console");
list.NoHeader().NoGrid().NoCursor().AddColumn();
font = Courier(Ctrl::VertLayoutZoom(12));
list.SetLineCy(font.Info().GetHeight());
}
void SysConsole::AddResult(const String& out)
{
DUMP(out);
Vector<String> h = Split(out, '\n');
for(int i = 0; i < h.GetCount(); i++) {
String s = " " + h[i];
list.Add(AttrText(s).SetFont(font), s);
}
list.GoEnd();
}
int SysConsole::System(const char *cmd)
{
DLOG("=== System =======================================");
DDUMP(cmd);
if(!IsOpen())
Open();
list.Add(AttrText(cmd).SetFont(font().Bold()).Ink(LtBlue));
int ii = list.GetCount();
LocalProcess p;
if(!p.Start(cmd))
return -1;
String out;
while(p.IsRunning()) {
DLOG("Get1");
out.Cat(p.Get());
int lf = out.ReverseFind('\n');
if(lf >= 0) {
AddResult(out.Mid(0, lf + 1));
out = out.Mid(lf + 1);
}
ProcessEvents();
Sleep(1); // p.Wait would be much better here!
}
DLOG("Get2");
out.Cat(p.Get());
AddResult(out);
ProcessEvents();
int code = p.GetExitCode();
if(code)
while(ii < list.GetCount()) {
list.Set(ii, 0, AttrText(list.Get(ii, 1)).SetFont(font).Ink(LtRed));
ii++;
}
return code;
}

View file

@ -0,0 +1,404 @@
#include "SlaveProcess.h"
NAMESPACE_UPP
#ifdef PLATFORM_POSIX
//#BLITZ_APPROVE
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#endif
#define LLOG(x) LOG(x)
void LocalProcess::Init() {
#ifdef PLATFORM_WIN32
hProcess = hOutputRead = hInputWrite = NULL;
#endif
#ifdef PLATFORM_POSIX
pid = 0;
rpipe[0] = rpipe[1] = wpipe[0] = wpipe[1] = -1;
output_read = false;
#endif
exit_code = Null;
}
void LocalProcess::Free() {
#ifdef PLATFORM_WIN32
if(hProcess) {
CloseHandle(hProcess);
hProcess = NULL;
}
if(hOutputRead) {
CloseHandle(hOutputRead);
hOutputRead = NULL;
}
if(hInputWrite) {
CloseHandle(hInputWrite);
hInputWrite = NULL;
}
#endif
#ifdef PLATFORM_POSIX
LLOG("\nLocalProcess::Free, pid = " << (int)getpid());
LLOG("rpipe[" << rpipe[0] << ", " << rpipe[1] << "]");
LLOG("wpipe[" << wpipe[0] << ", " << wpipe[1] << "]");
if(rpipe[0] >= 0) { close(rpipe[0]); rpipe[0] = -1; }
if(rpipe[1] >= 0) { close(rpipe[1]); rpipe[1] = -1; }
if(wpipe[0] >= 0) { close(wpipe[0]); wpipe[0] = -1; }
if(wpipe[1] >= 0) { close(wpipe[1]); wpipe[1] = -1; }
if(pid) waitpid(pid, 0, WNOHANG | WUNTRACED);
pid = 0;
output_read = false;
#endif
}
bool LocalProcess::Start(const char *command, const char *envptr)
{
LLOG("LocalProcess::Start(\"" << command << "\")");
Kill();
while(*command && (byte)*command <= ' ')
command++;
#ifdef PLATFORM_WIN32
HANDLE hOutputReadTmp, hInputRead;
HANDLE hInputWriteTmp, hOutputWrite;
HANDLE hErrorWrite;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
HANDLE hp = GetCurrentProcess();
CreatePipe(&hOutputReadTmp, &hOutputWrite, &sa, 0);
DuplicateHandle(hp, hOutputWrite, hp, &hErrorWrite, 0, TRUE, DUPLICATE_SAME_ACCESS);
CreatePipe(&hInputRead, &hInputWriteTmp, &sa, 0);
DuplicateHandle(hp, hOutputReadTmp, hp, &hOutputRead, 0, FALSE, DUPLICATE_SAME_ACCESS);
DuplicateHandle(hp, hInputWriteTmp, hp, &hInputWrite, 0, FALSE, DUPLICATE_SAME_ACCESS);
CloseHandle(hOutputReadTmp);
CloseHandle(hInputWriteTmp);
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdInput = hInputRead;
si.hStdOutput = hOutputWrite;
si.hStdError = hErrorWrite;
int n = (int)strlen(command) + 1;
Buffer<char> cmd(n);
memcpy(cmd, command, n);
bool h = CreateProcess(NULL, cmd, &sa, &sa, TRUE,
NORMAL_PRIORITY_CLASS, (void *)envptr, NULL, &si, &pi);
LLOG("CreateProcess " << (h ? "succeeded" : "failed"));
CloseHandle(hErrorWrite);
CloseHandle(hInputRead);
CloseHandle(hOutputWrite);
if(h) {
hProcess = pi.hProcess;
CloseHandle(pi.hThread);
}
else {
Free();
return false;
// throw Exc(NFormat("Error running process: %s\nCommand: %s", GetErrorMessage(GetLastError()), command));
}
#endif
#ifdef PLATFORM_POSIX
// parse command line for execve
cmd_buf.Alloc(strlen(command) + 1);
char *cmd_out = cmd_buf;
const char *p = command;
const char *b = p;
while(*p && (byte)*p > ' ')
if(*p++ == '\"')
while(*p && *p++ != '\"')
;
const char *app = cmd_out;
args.Add(cmd_out);
memcpy(cmd_out, b, p - b);
cmd_out += p - b;
*cmd_out++ = '\0';
while(*p)
if((byte)*p <= ' ')
p++;
else {
args.Add(cmd_out);
while(*p && (byte)*p > ' ')
if(*p == '\\') {
if(*++p)
*cmd_out++ = *p++;
}
else if(*p == '\"') {
p++;
while(*p && *p != '\"')
if(*p == '\\') {
if(*++p)
*cmd_out++ = *p++;
}
else
*cmd_out++ = *p++;
if(*p == '\"')
p++;
}
else
*cmd_out++ = *p++;
*cmd_out++ = '\0';
}
args.Add(NULL);
String app_full = GetFileOnPath(app, getenv("PATH"), true);
if(IsNull(app_full))
return false;
// throw Exc(Format("Cannot find executable '%s'\n", app));
if(pipe(rpipe) || pipe(wpipe))
return false;
// throw Exc(NFormat(t_("pipe() error; error code = %d"), errno));
LLOG("\nLocalProcess::Start");
LLOG("rpipe[" << rpipe[0] << ", " << rpipe[1] << "]");
LLOG("wpipe[" << wpipe[0] << ", " << wpipe[1] << "]");
pid = fork();
LLOG("\tfork, pid = " << (int)pid << ", getpid = " << (int)getpid());
if(pid < 0)
return false;
// throw Exc(NFormat(t_("fork() error; error code = %d"), errno));
if(pid) {
LLOG("parent process - continue");
return true;
}
LLOG("child process - execute application");
// rpipe[1] = wpipe[0] = -1;
dup2(rpipe[0], 0);
dup2(wpipe[1], 1);
dup2(wpipe[1], 2);
#if DO_LLOG
LLOG(args.GetCount() << "arguments:");
for(int a = 0; a < args.GetCount(); a++)
LLOG("[" << a << "]: <" << (args[a] ? args[a] : "NULL") << ">");
#endif//DO_LLOG
LLOG("running execve, app = " << app << ", #args = " << args.GetCount());
if(envptr) {
const char *from = envptr;
Vector<const char *> env;
while(*from) {
env.Add(from);
from += strlen(from) + 1;
}
env.Add(NULL);
execve(app_full, args.Begin(), (char *const *)env.Begin());
}
else
execv(app_full, args.Begin());
LLOG("execve failed, errno = " << errno);
// printf("Error running '%s', error code %d\n", command, errno);
exit(-errno);
#endif
}
#ifdef PLATFORM_POSIX
bool LocalProcess::DecodeExitCode(int status)
{
if(WIFEXITED(status)) {
exit_code = (byte)WEXITSTATUS(status);
return true;
}
else if(WIFSIGNALED(status) || WIFSTOPPED(status)) {
static const struct {
const char *name;
int code;
}
signal_map[] = {
#define SIGDEF(s) { #s, s },
SIGDEF(SIGHUP) SIGDEF(SIGINT) SIGDEF(SIGQUIT) SIGDEF(SIGILL) SIGDEF(SIGABRT)
SIGDEF(SIGFPE) SIGDEF(SIGKILL) SIGDEF(SIGSEGV) SIGDEF(SIGPIPE) SIGDEF(SIGALRM)
SIGDEF(SIGPIPE) SIGDEF(SIGTERM) SIGDEF(SIGUSR1) SIGDEF(SIGUSR2) SIGDEF(SIGTRAP)
SIGDEF(SIGURG) SIGDEF(SIGVTALRM) SIGDEF(SIGXCPU) SIGDEF(SIGXFSZ) SIGDEF(SIGIOT)
SIGDEF(SIGIO) SIGDEF(SIGWINCH)
#ifndef PLATFORM_FREEBSD
//SIGDEF(SIGCLD) SIGDEF(SIGPWR)
#endif
//SIGDEF(SIGSTKFLT) SIGDEF(SIGUNUSED) // not in Solaris, make conditional if needed
#undef SIGDEF
};
int sig = (WIFSIGNALED(status) ? WTERMSIG(status) : WSTOPSIG(status));
exit_code = (WIFSIGNALED(status) ? 1000 : 2000) + sig;
exit_string << "\nProcess " << (WIFSIGNALED(status) ? "terminated" : "stopped") << " on signal " << sig;
for(int i = 0; i < __countof(signal_map); i++)
if(signal_map[i].code == sig)
{
exit_string << " (" << signal_map[i].name << ")";
break;
}
exit_string << "\n";
return true;
}
return false;
}
#endif//PLATFORM_POSIX
void LocalProcess::Kill() {
#ifdef PLATFORM_WIN32
if(hProcess && IsRunning()) {
TerminateProcess(hProcess, (DWORD)-1);
exit_code = 255;
}
#endif
#ifdef PLATFORM_POSIX
if(IsRunning()) {
LLOG("\nLocalProcess::Kill, pid = " << (int)pid);
exit_code = 255;
kill(pid, SIGTERM);
GetExitCode();
int status;
if(pid && waitpid(pid, &status, 0) == pid)
DecodeExitCode(status);
exit_string = "Child process has been killed.\n";
}
#endif
Free();
}
void LocalProcess::Detach()
{
Free();
}
bool LocalProcess::IsRunning() {
#ifdef PLATFORM_WIN32
dword exitcode;
if(!hProcess)
return false;
if(GetExitCodeProcess(hProcess, &exitcode) && exitcode == STILL_ACTIVE)
return true;
dword n;
if(PeekNamedPipe(hOutputRead, NULL, 0, NULL, &n, NULL) && n)
return true;
exit_code = exitcode;
return false;
#endif
#ifdef PLATFORM_POSIX
if(!pid || !IsNull(exit_code)) {
LLOG("IsRunning() -> no");
return false;
}
int status = 0, wp;
if((wp = waitpid(pid, &status, WNOHANG | WUNTRACED)) != pid || !DecodeExitCode(status))
return true;
LLOG("IsRunning() -> no, just exited, exit code = " << exit_code);
return false;
#endif
}
int LocalProcess::GetExitCode() {
#ifdef PLATFORM_WIN32
return IsRunning() ? (int)Null : exit_code;
#endif
#ifdef PLATFORM_POSIX
if(!IsRunning())
return Nvl(exit_code, -1);
int status;
if(waitpid(pid, &status, WNOHANG | WUNTRACED) != pid || !DecodeExitCode(status)) {
LLOG("GetExitCode() -> -1 (waitpid would hang)");
return -1;
}
exit_code = WEXITSTATUS(status);
LLOG("GetExitCode() -> " << exit_code << " (just exited)");
return exit_code;
#endif
}
bool LocalProcess::Read(String& res) {
LLOG("LocalProcess::Read");
res = Null;
#ifdef PLATFORM_WIN32
if(!hOutputRead) return false;
dword n;
if(!PeekNamedPipe(hOutputRead, NULL, 0, NULL, &n, NULL) || n == 0)
return IsRunning();
char buffer[1024];
if(!ReadFile(hOutputRead, buffer, sizeof(buffer), &n, NULL))
return false;
res.Cat(buffer, n);
return true;
#endif
#ifdef PLATFORM_POSIX
//??!
DDUMP(wpipe[0]);
if(wpipe[0] < 0) return false;
bool was_running = IsRunning();
LLOG("output_read = " << (output_read ? "yes" : "no"));
if(!was_running && output_read) {
if(exit_string.IsEmpty())
return false;
res = exit_string;
exit_string = Null;
return true;
}
fd_set set[1];
FD_ZERO(set);
FD_SET(wpipe[0], set);
timeval tval = { 0, 0 };
int sv;
while((sv = select(wpipe[0] + 1, set, NULL, NULL, &tval)) > 0) {
LLOG("Read() -> select");
char buffer[1024];
int done = read(wpipe[0], buffer, sizeof(buffer));
LLOG("Read(), read -> " << done << ": " << String(buffer, done));
if(done > 0)
res.Cat(buffer, done);
}
DDUMP(res);
if(sv < 0) {
LLOG("select -> " << sv);
}
if(!was_running)
output_read = true;
return !IsNull(res) || was_running;
#endif
}
void LocalProcess::Write(String s)
{
#ifdef PLATFORM_WIN32
dword n;
WriteFile(hInputWrite, s, s.GetLength(), &n, NULL);
#endif
#ifdef PLATFORM_POSIX
write(rpipe[1], s, s.GetLength());
#endif
}
int Sys(const char *cmd, String& out)
{
out.Clear();
LocalProcess p;
if(!p.Start(cmd))
return -1;
while(p.IsRunning()) {
out.Cat(p.Get());
Sleep(1); // p.Wait would be much better here!
}
out.Cat(p.Get());
return p.GetExitCode();
}
String Sys(const char *cmd)
{
String r;
return Sys(cmd, r) ? String::GetVoid() : r;
}
END_UPP_NAMESPACE

View file

@ -0,0 +1,73 @@
#ifndef _usvn_SlaveProcess_h_
#define _usvn_SlaveProcess_h_
#include <Core/Core.h>
NAMESPACE_UPP
class SlaveProcess {
SlaveProcess(const SlaveProcess& sp);
void operator = (const SlaveProcess& sp);
public:
virtual void Kill() = 0;
virtual bool IsRunning() = 0;
virtual void Write(String s) = 0;
virtual bool Read(String& s) = 0;
virtual int GetExitCode() = 0;
virtual void Detach() {};
String Get() { String x; if(Read(x)) return x; return String::GetVoid(); }
SlaveProcess() {}
virtual ~SlaveProcess() {}
};
class LocalProcess : public SlaveProcess {
public:
virtual void Kill();
virtual bool IsRunning();
virtual void Write(String s);
virtual bool Read(String& s);
virtual int GetExitCode();
virtual void Detach();
private:
void Init();
void Free();
#ifdef PLATFORM_POSIX
bool DecodeExitCode(int code);
#endif
private:
#ifdef PLATFORM_WIN32
HANDLE hProcess;
HANDLE hOutputRead;
HANDLE hInputWrite;
#endif
#ifdef PLATFORM_POSIX
Buffer<char> cmd_buf;
Vector<char *> args;
pid_t pid;
int rpipe[2], wpipe[2];
String exit_string;
bool output_read;
#endif
int exit_code;
public:
typedef LocalProcess CLASSNAME;
bool Start(const char *cmdline, const char *envptr = NULL);
LocalProcess() { Init(); }
LocalProcess(const char *cmdline, const char *envptr = NULL) { Init(); Start(cmdline, envptr); }
virtual ~LocalProcess() { Kill(); }
};
int Sys(const char *cmd, String& output);
String Sys(const char *cmd);
END_UPP_NAMESPACE
#endif

56
uppsrc/usvn/SvnSync.cpp Normal file
View file

@ -0,0 +1,56 @@
#include "usvn.h"
SvnSync::SvnSync()
{
CtrlLayoutOKCancel(*this, "SvnSynchronize SVN repositories");
list.AddIndex();
list.AddIndex();
list.AddColumn("Action");
list.AddColumn("Path");
list.ColumnWidths("153 619");
list.NoCursor().EvenRowColor();
Sizeable().Zoomable();
}
void SvnSync::Add(const char *working)
{
String path = GetFullPath(working);
list.Add(REPOSITORY, path,
AttrText("Working directory").SetFont(StdFont().Bold()).Ink(White).Paper(Blue),
AttrText(path).SetFont(Arial(20).Bold()).Paper(Blue).Ink(White));
list.SetLineCy(list.GetCount() - 1, 26);
Vector<String> ln = Split(Sys("svn status " + path), '\n');
bool actions = false;
for(int i = 0; i < ln.GetCount(); i++) {
String h = ln[i];
if(h.GetCount() > 7) {
String file = h.Mid(7);
if(IsFullPath(file)) {
h.Trim(7);
int action = h.Mid(1, 6) == " " ? String("MC?!").Find(h[0]) : -1;
String an;
Color color;
if(action < 0)
color = Gray;
else {
static const char *as[] = { "Modify", "Conflict resolved", "Add", "Remove" };
static Color c[] = { LtBlue, Magenta, Green, LtRed };
an = as[action];
color = c[action];
actions = true;
}
int ii = list.GetCount();
list.Add(action, file,
action < 0 ? Value(AttrText("Unknown: " + h.Mid(0, 7)).Ink(color)) : Value(true),
AttrText(" " + file.Mid(path.GetCount() + 1)).Ink(color));
if(action >= 0)
list.SetCtrl(ii, 0, confirm.Add().SetLabel(an).NoWantFocus());
}
}
}
if(actions) {
list.Add(MESSAGE, Null, AttrText("Commit message:").SetFont(StdFont().Bold()));
list.SetLineCy(list.GetCount() - 1, EditField::GetStdHeight() + 4);
list.SetCtrl(list.GetCount() - 1, 1, message.Add());
}
}

157
uppsrc/usvn/SvnWorks.cpp Normal file
View file

@ -0,0 +1,157 @@
#include "usvn.h"
FileSel& sSD() {
static FileSel fs;
ONCELOCK {
fs.AllFilesType();
}
return fs;
}
String NormalizePathNN(const String& path)
{
return IsNull(path) ? path : NormalizePath(path);
}
static void sSetFolder(EditField *f)
{
if(!sSD().ExecuteSelectDir()) return;
*f <<= NormalizePathNN(~sSD());
}
void SvnWorks::DirSel(EditField& f)
{
f.AddFrame(dirsel);
dirsel <<= callback1(&sSetFolder, &f);
dirsel.SetImage(CtrlImg::smallright()).NoWantFocus();
}
void SvnWorks::Add(const String& working, const String& user, const String& data)
{
list.Add(working, user, data);
Sync();
}
void SvnWorks::New()
{
WithSvnFolderLayout<TopWindow> dlg;
CtrlLayoutOKCancel(dlg, "Add SVN working directory");
DirSel(dlg.working);
if(dlg.Execute() != IDOK)
return;
Add(~dlg.working, ~dlg.user, ~dlg.password);
}
void SvnWorks::Edit()
{
if(!list.IsCursor())
return;
WithSvnFolderLayout<TopWindow> dlg;
CtrlLayoutOKCancel(dlg, "Edit SVN working directory item");
DirSel(dlg.working);
dlg.working <<= list.Get(0);
dlg.user <<= list.Get(1);
dlg.password <<= list.Get(2);
if(dlg.Execute() != IDOK)
return;
list.Set(0, ~dlg.working);
list.Set(1, ~dlg.user);
list.Set(2, ~dlg.password);
Sync();
}
void SvnWorks::Checkout()
{
WithSvnCheckoutLayout<TopWindow> dlg;
CtrlLayoutOKCancel(dlg, "Checkout SVN repository");
DirSel(dlg.working);
if(dlg.Execute() != IDOK)
return;
String working = ~dlg.working;
working = GetFullPath(working);
if(working.GetCount() == 0) {
Exclamation("Empty working directory");
return;
}
RealizeDirectory(working);
Add(~dlg.working, ~dlg.user, ~dlg.password);
String cmd;
cmd << "svn checkout --non-interactive";
if(!IsNull(dlg.user))
cmd << " --user \"" << ~dlg.user << "\"";
if(!IsNull(dlg.password))
cmd << " --user \"" << ~dlg.password << "\"";
cmd << ' ' << ~dlg.repository << ' ' << ~dlg.working;
SysConsole con;
con.System(cmd);
con.Execute();
}
void SvnWorks::Remove()
{
if(list.IsCursor() && PromptYesNo("Remove the item?"))
list.Remove(list.GetCursor());
Sync();
}
void SvnWorks::Sync()
{
edit.Enable(list.IsCursor());
remove.Enable(list.IsCursor());
}
int SvnWorks::GetCount() const
{
return list.GetCount();
}
SvnWork SvnWorks::operator[](int i) const
{
SvnWork w;
w.working = list.Get(i, 0);
w.user = list.Get(i, 1);
w.password = list.Get(i, 2);
return w;
}
void SvnWorks::Clear()
{
list.Clear();
Sync();
}
void SvnWorks::Load(const String& text)
{
list.Clear();
Vector<String> ln = Split(text, '\n');
for(int i = 0; i < ln.GetCount(); i++) {
Vector<String> q = Split(ln[i], ';');
if(q.GetCount() >= 1)
Add(q[0], q.At(1), q.At(2));
}
Sync();
}
String SvnWorks::Save() const
{
String h;
for(int i = 0; i < list.GetCount(); i++)
h << list.Get(i, 0) << ';' << list.Get(i, 1) << ';' << list.Get(i, 2) << '\n';
return h;
}
SvnWorks::SvnWorks()
{
CtrlLayoutExit(*this, "SVN Working directories");
list.AddColumn("Working directory");
list.AddColumn("User");
list.AddColumn("Password");
list.Moving();
list.ColumnWidths("364 100 100");
add <<= THISBACK(New);
remove <<= THISBACK(Remove);
checkout <<= THISBACK(Checkout);
edit <<= THISBACK(Edit);
Sync();
}

4
uppsrc/usvn/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _usvn_icpp_init_stub
#define _usvn_icpp_init_stub
#include "CtrlLib/init"
#endif

28
uppsrc/usvn/main.cpp Normal file
View file

@ -0,0 +1,28 @@
#include "usvn.h"
GUI_APP_MAIN
{
/* SysConsole con;
for(int i = 0; i < 5; i++)
con.System("ls");
con.System("svn");
// con.System("ls /usr/lib");
// con.System("ls /usr/bin");
con.System("ls *.wert");
con.Execute();
return;*/
SvnWorks works;
works.Load(LoadFile(ConfigFile("svnworks")));
works.Execute();
SaveFile(ConfigFile("svnworks"), works.Save());
return;
SvnSync sync;
sync.Add("/home/cxl/uppsrc.svn/upp");
sync.Add("/home/cxl/centrum/SocNet");
sync.Run();
return;
DUMP(Sys("ls"));
DUMP(Sys("svn status /home/cxl/centrum/SocNet"));
DUMP(Sys("svn update /home/cxl/centrum/SocNet"));
return;
}

48
uppsrc/usvn/notes.txt Normal file
View file

@ -0,0 +1,48 @@
* /home/cxl/uppout/GCC.Debug.Debug_full.Gui.Shared/usvn 31.07.2008 15:53:12, user: cxl
Sys("ls") =
Sys("svn status /home/cxl/centrum/SocNet") = M /home/cxl/centrum/SocNet/BACKEND/UPP/pb/pb.cpp
M /home/cxl/centrum/SocNet/BACKEND/UPP/asv/asv.txt
M /home/cxl/centrum/SocNet/BACKEND/UPP/asw/asw.h
M /home/cxl/centrum/SocNet/BACKEND/UPP/asw/Worker.cpp
M /home/cxl/centrum/SocNet/BACKEND/UPP/asw/Request.cpp
Sys("svn update /home/cxl/centrum/SocNet") = U /home/cxl/centrum/SocNet/frontend/trunk/ajax/views.py
U /home/cxl/centrum/SocNet/frontend/trunk/views.py
U /home/cxl/centrum/SocNet/frontend/trunk/static/search-field.gif
A /home/cxl/centrum/SocNet/frontend/trunk/static/gallery-r-bg.png
U /home/cxl/centrum/SocNet/frontend/trunk/static/js/jquery/jquery.iMenu.0.1.js
U /home/cxl/centrum/SocNet/frontend/trunk/static/js/wall.js
U /home/cxl/centrum/SocNet/frontend/trunk/static/js/boxes.js
A /home/cxl/centrum/SocNet/frontend/trunk/static/img/user-empty.png
D /home/cxl/centrum/SocNet/frontend/trunk/static/img/friend-empty.png
U /home/cxl/centrum/SocNet/frontend/trunk/static/select-l.gif
A /home/cxl/centrum/SocNet/frontend/trunk/static/badge-select.gif
U /home/cxl/centrum/SocNet/frontend/trunk/static/css/blueprint/screen.css
U /home/cxl/centrum/SocNet/frontend/trunk/static/css/layout.css
U /home/cxl/centrum/SocNet/frontend/trunk/static/css/profile.css
U /home/cxl/centrum/SocNet/frontend/trunk/static/search-btn.gif
A /home/cxl/centrum/SocNet/frontend/trunk/static/arrow-bull.gif
A /home/cxl/centrum/SocNet/frontend/trunk/static/login-icon.gif
A /home/cxl/centrum/SocNet/frontend/trunk/static/imenu-bg.gif
A /home/cxl/centrum/SocNet/frontend/trunk/static/gallery-l-bg.png
U /home/cxl/centrum/SocNet/frontend/trunk/templates/groups/index.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/profile/panel.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/profile/index.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/profile/friends.html
A /home/cxl/centrum/SocNet/frontend/trunk/templates/registr.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/activate.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/events/index.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/search.html
A /home/cxl/centrum/SocNet/frontend/trunk/templates/maintainance.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/login.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/logout.html
U /home/cxl/centrum/SocNet/frontend/trunk/templates/base.html
U /home/cxl/centrum/SocNet/frontend/trunk/locale/cs/LC_MESSAGES/django.po
U /home/cxl/centrum/SocNet/frontend/trunk/profile/admin.py
U /home/cxl/centrum/SocNet/frontend/trunk/profile/views.py
U /home/cxl/centrum/SocNet/frontend/trunk/profile/models.py
U /home/cxl/centrum/SocNet/frontend/trunk/urls.py
U /home/cxl/centrum/SocNet/frontend/trunk/forms.py
U /home/cxl/centrum/SocNet/redmine/report/assets/stylesheets/default.css
Updated to revision 631.

89
uppsrc/usvn/usvn.h Normal file
View file

@ -0,0 +1,89 @@
#ifndef _usvn_usvn_h_
#define _usvn_usvn_h_
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
#include "SlaveProcess.h"
#define LAYOUTFILE <usvn/usvn.lay>
#include <CtrlCore/lay.h>
struct Repo {
String repo;
String work;
String user;
String pswd;
void Save(String& s);
void Load(CParser& p);
};
struct SvnWork {
String working;
String user;
String password;
};
class SvnWorks : public WithSvnWorksLayout<TopWindow> {
void New();
void Edit();
void Remove();
void Checkout();
void Sync();
FrameRight<Button> dirsel;
void DirSel(EditField& f);
public:
void Clear();
void Add(const String& working, const String& user, const String& data);
void Load(const String& text);
String Save() const;
int GetCount() const;
SvnWork operator[](int i) const;
typedef SvnWorks CLASSNAME;
SvnWorks();
};
struct SvnSync : WithSvnSyncLayout<TopWindow> {
enum {
MODIFY,
CONFLICT,
ADD,
REMOVE,
REPOSITORY,
MESSAGE,
};
Array<Option> confirm;
Array<EditString> message;
void Add(const char *working);
SvnSync();
};
class SysConsole : public WithConsoleLayout<TopWindow> {
typedef SysConsole CLASSNAME;
Font font;
bool canceled;
void AddResult(const String& out);
public:
int System(const char *s);
void Cancel();
void IsCanceled();
void ClearCanceled();
SysConsole();
};
#endif

44
uppsrc/usvn/usvn.lay Normal file
View file

@ -0,0 +1,44 @@
LAYOUT(SvnSyncLayout, 672, 592)
ITEM(ArrayCtrl, list, HSizePosZ(4, 4).VSizePosZ(4, 36))
ITEM(Button, ok, SetLabel(t_("Synchronize!")).RightPosZ(4, 84).BottomPosZ(4, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(4, 64).BottomPosZ(4, 24))
END_LAYOUT
LAYOUT(SvnWorksLayout, 456, 212)
ITEM(ArrayCtrl, list, LeftPosZ(4, 448).TopPosZ(4, 172))
ITEM(Button, add, SetLabel(t_("Add")).LeftPosZ(4, 64).TopPosZ(184, 24))
ITEM(Button, checkout, SetLabel(t_("Checkout")).LeftPosZ(72, 64).TopPosZ(184, 24))
ITEM(Button, edit, SetLabel(t_("Edit")).LeftPosZ(140, 64).TopPosZ(184, 24))
ITEM(Button, remove, SetLabel(t_("Remove")).LeftPosZ(208, 64).TopPosZ(184, 24))
ITEM(Button, exit, SetLabel(t_("Close")).LeftPosZ(388, 64).TopPosZ(184, 24))
END_LAYOUT
LAYOUT(SvnCheckoutLayout, 404, 140)
ITEM(Label, dv___0, SetLabel(t_("Repository")).LeftPosZ(8, 88).TopPosZ(8, 20))
ITEM(EditString, repository, LeftPosZ(100, 296).TopPosZ(8, 19))
ITEM(Label, dv___2, SetLabel(t_("Working folder")).LeftPosZ(8, 88).TopPosZ(32, 20))
ITEM(EditString, working, LeftPosZ(100, 296).TopPosZ(32, 19))
ITEM(Label, dv___4, SetLabel(t_("User name")).LeftPosZ(8, 88).TopPosZ(56, 20))
ITEM(EditString, user, LeftPosZ(100, 296).TopPosZ(56, 19))
ITEM(Label, dv___6, SetLabel(t_("Password")).LeftPosZ(8, 88).TopPosZ(80, 20))
ITEM(EditString, password, LeftPosZ(100, 296).TopPosZ(80, 19))
ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(264, 64).TopPosZ(108, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(332, 64).TopPosZ(108, 24))
END_LAYOUT
LAYOUT(SvnFolderLayout, 404, 116)
ITEM(Label, dv___0, SetLabel(t_("Working folder")).LeftPosZ(8, 88).TopPosZ(8, 20))
ITEM(EditString, working, LeftPosZ(100, 296).TopPosZ(8, 19))
ITEM(Label, dv___2, SetLabel(t_("User name")).LeftPosZ(8, 88).TopPosZ(32, 20))
ITEM(EditString, user, LeftPosZ(100, 296).TopPosZ(32, 19))
ITEM(Label, dv___4, SetLabel(t_("Password")).LeftPosZ(8, 88).TopPosZ(56, 20))
ITEM(EditString, password, LeftPosZ(100, 296).TopPosZ(56, 19))
ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(264, 64).TopPosZ(84, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(332, 64).TopPosZ(84, 24))
END_LAYOUT
LAYOUT(ConsoleLayout, 740, 544)
ITEM(ArrayCtrl, list, HSizePosZ(4, 4).VSizePosZ(4, 32))
ITEM(Button, exit, SetLabel(t_("Close")).RightPosZ(4, 64).BottomPosZ(4, 24))
END_LAYOUT

17
uppsrc/usvn/usvn.upp Normal file
View file

@ -0,0 +1,17 @@
uses
CtrlLib;
file
usvn.h,
SlaveProcess.h,
SlaveProcess.cpp,
Console.cpp,
SvnWorks.cpp,
SvnSync.cpp,
main.cpp,
notes.txt,
usvn.lay;
mainconfig
"" = "GUI";