X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fblds%2Fbsd.patch;h=afc1e14fb97cae2b6e46d5a971c1efdbd16922b9;hp=31d18ba62bccc97451129f67c3a4aed6959f8b86;hb=502b6f3b6fd04f6b01c6d70dcb81aa304dd0db1c;hpb=4a894820c0dad2eef6a281f00988aea48696765b diff --git a/cinelerra-5.1/blds/bsd.patch b/cinelerra-5.1/blds/bsd.patch index 31d18ba6..afc1e14f 100644 --- a/cinelerra-5.1/blds/bsd.patch +++ b/cinelerra-5.1/blds/bsd.patch @@ -176,10 +176,10 @@ index 1014baf5..f38094e9 100644 #define DVD_PAL_4x3 0 diff --git a/cinelerra-5.1/cinelerra/file.C b/cinelerra-5.1/cinelerra/file.C -index 03348e0a..552a140d 100644 +index 13e1b457..9cc2f116 100644 --- a/cinelerra-5.1/cinelerra/file.C +++ b/cinelerra-5.1/cinelerra/file.C -@@ -1584,7 +1584,10 @@ int File::record_fd() +@@ -1594,7 +1594,10 @@ int File::record_fd() void File::get_exe_path(char *result, char *bnp) { // Get executable path, basename @@ -205,10 +205,10 @@ index 3d21d2af..f3064199 100644 // check for isofs volume_id for dvd/cdrom diff --git a/cinelerra-5.1/configure.ac b/cinelerra-5.1/configure.ac -index 94f9b382..4c4bee11 100644 +index 1157b0a3..8c5ba61a 100644 --- a/cinelerra-5.1/configure.ac +++ b/cinelerra-5.1/configure.ac -@@ -16,15 +16,26 @@ CFG_CFLAGS+=" -Wno-unused-result" +@@ -16,8 +16,18 @@ CFG_CFLAGS+=" -Wno-unused-result" CFG_CFLAGS+=" -Wno-stringop-overflow" CFG_CFLAGS+=" -Wno-format-truncation" CFG_CFLAGS+=" -Wno-format-overflow" @@ -227,18 +227,7 @@ index 94f9b382..4c4bee11 100644 CFG_CFLAGS+=" -D__STDC_CONSTANT_MACROS" CFG_CFLAGS+=" -D__STDC_LIMIT_MACROS" CFG_CFLAGS+=" -DPNG_SKIP_SETJMP_CHECK=1" - CFG_CFLAGS+=" -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" --CFG_CFLAGS+=" -I/usr/include/freetype2" --CFG_CFLAGS+=" -I/usr/include/uuid" --CFG_CFLAGS+=" -I/usr/include/mjpegtools" -+CFG_CFLAGS+=" -I/usr/local/include" -+CFG_CFLAGS+=" -I/usr/local/include/freetype2 -I/usr/include/freetype2" -+CFG_CFLAGS+=" -I/usr/local/include/uuid -I/usr/include/uuid" -+CFG_CFLAGS+=" -I/usr/local/include/mjpegtools -I/usr/include/mjpegtools" - - AC_DEFUN([CHECK_WITH], [ - AC_ARG_WITH([$1], -@@ -126,7 +137,7 @@ AC_SUBST(MAK_INSTALLS) +@@ -127,7 +137,7 @@ AC_SUBST(MAK_INSTALLS) AC_SUBST(MAK_UNINSTALLS) if test "x$WANT_JOBS" = "xauto"; then @@ -290,7 +279,7 @@ index 40f5971f..73d47586 100644 float* get_values(); diff --git a/cinelerra-5.1/guicast/bcresources.C b/cinelerra-5.1/guicast/bcresources.C -index e3400600..f201028c 100644 +index 1e927303..165883de 100644 --- a/cinelerra-5.1/guicast/bcresources.C +++ b/cinelerra-5.1/guicast/bcresources.C @@ -38,6 +38,7 @@ @@ -340,169 +329,6 @@ index e3400600..f201028c 100644 shm_reply = 1; // Initialize -@@ -1681,6 +1671,87 @@ BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style, - return style_match; - } - -+ -+class utf8conv { -+ uint8_t *obfr, *out, *oend; -+ uint8_t *ibfr, *inp, *iend; -+public: -+ utf8conv(void *out, int olen, void *inp, int ilen) { -+ this->obfr = this->out = (uint8_t*)out; -+ this->oend = this->out + olen; -+ this->ibfr = this->inp = (uint8_t*)inp; -+ this->iend = this->inp + ilen; -+ } -+ int cur() { return inp>=iend ? -1 : *inp; } -+ int next() { return inp>=iend ? -1 : *inp++; } -+ int next(int ch) { return out>=oend ? -1 : *out++ = ch; } -+ int ilen() { return inp-ibfr; } -+ int olen() { return out-obfr; } -+ int wnext(); -+ int wnext(unsigned int v); -+}; -+ -+int utf8conv:: -+wnext(unsigned int v) -+{ -+ if( v < 0x00000080 ) { next(v); return 1; } -+ int n = v < 0x00000800 ? 2 : v < 0x00010000 ? 3 : -+ v < 0x00200000 ? 4 : v < 0x04000000 ? 5 : 6; -+ int m = (0xff00 >> n), i = n-1; -+ next((v>>(6*i)) | m); -+ while( --i >= 0 ) next(((v>>(6*i)) & 0x3f) | 0x80); -+ return n; -+} -+ -+int utf8conv:: -+wnext() -+{ -+ int v = 0, n = 0, ch = next(); -+ if( ch == '\\' ) { -+ switch( (ch=next()) ) { -+ case 'n': return '\n'; -+ case 't': return '\t'; -+ case 'r': return '\r'; -+ case 'b': return '\b'; -+ case 'f': return '\f'; -+ case 'v': return '\v'; -+ case 'a': return '\a'; -+ case '0': case '1': case '2': case '3': -+ case '4': case '5': case '6': case '7': -+ v = ch - '0'; -+ for( int i=3; --i>0; v=v*8+ch, next() ) -+ if( (ch=cur()-'0') < 0 || ch >= 8 ) break; -+ return v; -+ case 'x': n = 2; break; -+ case 'u': n = 4; break; -+ case 'U': n = 8; break; -+ default: return ch; -+ } -+ for( int i=n; --i>=0; v=v*16+ch, next() ) { -+ if( (ch=cur()-'0')>=0 && ch<10 ) continue; -+ if( (ch-='A'-'0'-10)>=10 && ch<16 ) continue; -+ if( (ch-='a'-'A')<10 || ch>=16 ) break; -+ } -+ } -+ else if( ch >= 0x80 ) { -+ static const unsigned char byts[] = { -+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 5, -+ }; -+ int i = ch - 0xc0; -+ n = i<0 ? 0 : byts[i/4]; -+ for( v=ch, i=n; --i>=0; v+=next() ) v <<= 6; -+ static const unsigned int ofs[6] = { -+ 0x00000000U, 0x00003080U, 0x000E2080U, -+ 0x03C82080U, 0xFA082080U, 0x82082080U -+ }; -+ v -= ofs[n]; -+ } -+ else -+ v = ch; -+ return v; -+} -+ -+ - size_t BC_Resources::encode(const char *from_enc, const char *to_enc, - char *input, int input_length, char *output, int output_length) - { -@@ -1688,10 +1759,12 @@ size_t BC_Resources::encode(const char *from_enc, const char *to_enc, - iconv_t cd; - char *outbase = output; - -- if(!from_enc || *from_enc == 0) -+ if( !from_enc || *from_enc == 0 || -+ !strcmp(from_enc,"UTF8") || !strcmp(from_enc, "US-ASCII") ) - from_enc = "UTF-8"; - -- if(!to_enc || *to_enc == 0) -+ if( !to_enc || *to_enc == 0 || -+ !strcmp(to_enc,"UTF8") || !strcmp(to_enc, "US-ASCII") ) - to_enc = "UTF-8"; - - if(input_length < 0) -@@ -1701,32 +1774,45 @@ size_t BC_Resources::encode(const char *from_enc, const char *to_enc, - - if(strcmp(from_enc, to_enc) && inbytes) - { -- if((cd = iconv_open(to_enc, from_enc)) == (iconv_t)-1) -+ if( !strcmp(from_enc, "UTF-8") && !strcmp(to_enc,"UTF32LE") ) { -+ utf8conv uc(0,0, input,inbytes); -+ uint32_t *op = (uint32_t *)output; -+ uint32_t *ep = (uint32_t *)(output+output_length); -+ for( int wch; op=0; *op++=wch ); -+ output = (char *)op; -+ outbytes = (char*)ep - output; -+ } -+ else if( !strcmp(from_enc, "UTF32LE") && !strcmp(to_enc,"UTF-8") ) { -+ utf8conv uc(output,output_length, 0,0); -+ uint32_t *ip = (uint32_t *)input; -+ uint32_t *ep = (uint32_t *)(input+inbytes); -+ for( ; ip=0; ++ip ); -+ output += uc.olen(); -+ outbytes = output_length-uc.olen(); -+ } -+ else if((cd = iconv_open(to_enc, from_enc)) == (iconv_t)-1) - { - printf(_("Conversion from %s to %s is not available\n"), - from_enc, to_enc); - return 0; - } -- -- outbytes = output_length - 1; -- -- iconv(cd, &input, &inbytes, &output, &outbytes); -- -- iconv_close(cd); -- inbytes = output - outbase; -+ else { -+ outbytes = output_length - 1; -+ iconv(cd, &input, &inbytes, &output, &outbytes); -+ iconv_close(cd); -+ } - } - else if(inbytes) - { - memcpy(output, input, inbytes); -+ output += inbytes; - outbytes -= inbytes; - } -- for(int i = 0; i < 4; i++) -- { -+ if( outbytes > sizeof(uint32_t) ) -+ outbytes = sizeof(uint32_t); -+ for(int i = 0; i < outbytes; i++) - output[i] = 0; -- if(outbytes-- == 0) -- break; -- } -- return inbytes; -+ return output - outbase; - } - - void BC_Resources::encode_to_utf8(char *buffer, int buflen) diff --git a/cinelerra-5.1/guicast/bcsignals.C b/cinelerra-5.1/guicast/bcsignals.C index ed50cfb1..f1b894ba 100644 --- a/cinelerra-5.1/guicast/bcsignals.C