diff --git a/README.md b/README.md index 8426fc2..ad9082f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # unixodbc-gui-qt +Qt based GUI bits for unixODBC. Includes configuration interface and data manager. + diff --git a/unixodbc-gui-qt-2.3.0-ODBCTestQ4_xpm.patch b/unixodbc-gui-qt-2.3.0-ODBCTestQ4_xpm.patch new file mode 100644 index 0000000..65d45c6 --- /dev/null +++ b/unixodbc-gui-qt-2.3.0-ODBCTestQ4_xpm.patch @@ -0,0 +1,457 @@ +diff -Nu unixodbc-gui-qt-2.3.0.orig/ODBCTestQ4//ODBCTestQ4-48.xpm unixodbc-gui-qt-2.3.0/ODBCTestQ4//ODBCTestQ4-48.xpm +--- unixodbc-gui-qt-2.3.0.orig/ODBCTestQ4//ODBCTestQ4-48.xpm 1970-01-01 01:00:00.000000000 +0100 ++++ unixodbc-gui-qt-2.3.0/ODBCTestQ4//ODBCTestQ4-48.xpm 2010-12-27 13:58:37.877841798 +0100 +@@ -0,0 +1,453 @@ ++/* XPM */ ++static const char * xpmODBCTestQ4_48[] = { ++"48 48 402 2", ++" c None", ++". c #974C2E", ++"+ c #9A4D2F", ++"@ c #9C4F31", ++"# c #9D5032", ++"$ c #9D4F31", ++"% c #9C4E30", ++"& c #994E2F", ++"* c #954F30", ++"= c #B3130A", ++"- c #CC1E1E", ++"; c #D01F1F", ++"> c #D21F1F", ++", c #D52A2A", ++"' c #D42323", ++") c #D31F1F", ++"! c #CC2121", ++"~ c #9F2812", ++"{ c #B80E06", ++"] c #CA0000", ++"^ c #CF0000", ++"/ c #D20202", ++"( c #E87E7E", ++"_ c #F6D0D0", ++": c #E88181", ++"< c #D20000", ++"[ c #CB0101", ++"} c #A22610", ++"| c #BC0E06", ++"1 c #CE0000", ++"2 c #D50202", ++"3 c #E14545", ++"4 c #F1A3A3", ++"5 c #E24C4C", ++"6 c #D60000", ++"7 c #D40000", ++"8 c #D00101", ++"9 c #A7240F", ++"0 c #C00E06", ++"a c #D50404", ++"b c #EE9898", ++"c c #FEFAFA", ++"d c #FEFEFE", ++"e c #F7CECE", ++"f c #E24242", ++"g c #D70000", ++"h c #D40101", ++"i c #AB240E", ++"j c #973116", ++"k c #C63A35", ++"l c #C40E06", ++"m c #D50000", ++"n c #E35454", ++"o c #F4B9B9", ++"p c #F9D9D9", ++"q c #FCEDED", ++"r c #FAE1E1", ++"s c #DB0303", ++"t c #D80101", ++"u c #AF250F", ++"v c #9D351A", ++"w c #C82F2C", ++"x c #C80503", ++"y c #CF0909", ++"z c #DA3435", ++"A c #C74237", ++"B c #C90E06", ++"C c #D90101", ++"D c #ED8B8B", ++"E c #FBE6E6", ++"F c #DF2F2F", ++"G c #F19F9F", ++"H c #F3ADAD", ++"I c #EE8787", ++"J c #DD0707", ++"K c #DC0101", ++"L c #B4250F", ++"M c #C6261E", ++"N c #D41919", ++"O c #CE0808", ++"P c #C3231C", ++"Q c #B11E0C", ++"R c #D40202", ++"S c #D90000", ++"T c #DB0000", ++"U c #DF1010", ++"V c #E53D3D", ++"W c #C23F2E", ++"X c #CF0E06", ++"Y c #DE0606", ++"Z c #E86060", ++"` c #E34A4A", ++" . c #FCEEEE", ++".. c #E86363", ++"+. c #E01C1C", ++"@. c #DF0101", ++"#. c #E00101", ++"$. c #BE210E", ++"%. c #C5291B", ++"&. c #E11D1E", ++"*. c #D71515", ++"=. c #A1371B", ++"-. c #D50403", ++";. c #DE0000", ++">. c #E30000", ++",. c #E60000", ++"'. c #E70000", ++"). c #E70101", ++"!. c #E91F1F", ++"~. c #E5423E", ++"{. c #C2432E", ++"]. c #D8120A", ++"^. c #E20000", ++"/. c #E42929", ++"(. c #F5B8B8", ++"_. c #FAE3E3", ++":. c #ED8989", ++"<. c #E12828", ++"[. c #E10000", ++"}. c #E30202", ++"|. c #CC3728", ++"1. c #C3321E", ++"2. c #E6201E", ++"3. c #E70E0F", ++"4. c #DD0202", ++"5. c #D71C1B", ++"6. c #C41108", ++"7. c #DE0202", ++"8. c #ED0000", ++"9. c #F00000", ++"0. c #EF0000", ++"a. c #EE0202", ++"b. c #EF2626", ++"c. c #ED1212", ++"d. c #E80000", ++"e. c #E60909", ++"f. c #E73737", ++"g. c #F5B3B3", ++"h. c #FEFBFB", ++"i. c #EE8686", ++"j. c #DF0707", ++"k. c #EC2222", ++"l. c #EE1B1B", ++"m. c #F10000", ++"n. c #EC0000", ++"o. c #DF0E0E", ++"p. c #B82B1A", ++"q. c #AB250F", ++"r. c #D90303", ++"s. c #F20000", ++"t. c #F60000", ++"u. c #F70000", ++"v. c #F50000", ++"w. c #F40000", ++"x. c #F30000", ++"y. c #E40909", ++"z. c #E32323", ++"A. c #EE8484", ++"B. c #FEF8F8", ++"C. c #F29E9E", ++"D. c #DB1C1B", ++"E. c #C80905", ++"F. c #DA0101", ++"G. c #E50000", ++"H. c #F80000", ++"I. c #F90000", ++"J. c #EA0000", ++"K. c #E31B1B", ++"L. c #FAE0E0", ++"M. c #EC7676", ++"N. c #FDF5F5", ++"O. c #EC5656", ++"P. c #EE0000", ++"Q. c #DA0808", ++"R. c #C3221A", ++"S. c #A71F0D", ++"T. c #CF0303", ++"U. c #DA0000", ++"V. c #E40000", ++"W. c #FA0000", ++"X. c #EB0000", ++"Y. c #E11414", ++"Z. c #E44B4B", ++"`. c #F3ABAB", ++" + c #F5ABAB", ++".+ c #D80000", ++"++ c #D21919", ++"@+ c #9C3016", ++"#+ c #BE0301", ++"$+ c #E00000", ++"%+ c #E40303", ++"&+ c #DF1414", ++"*+ c #FCEBEB", ++"=+ c #EA7878", ++"-+ c #EE8E8E", ++";+ c #F5B0B0", ++">+ c #DF0000", ++",+ c #CA0202", ++"'+ c #B2150B", ++")+ c #B01709", ++"!+ c #D00000", ++"~+ c #E90000", ++"{+ c #E51C1C", ++"]+ c #F8D2D2", ++"^+ c #FEFDFD", ++"/+ c #EA7979", ++"(+ c #F0A0A0", ++"_+ c #EE7272", ++":+ c #AC1C0B", ++"<+ c #C21006", ++"[+ c #E00707", ++"}+ c #DF4040", ++"|+ c #F9DBDB", ++"1+ c #E01111", ++"2+ c #C11106", ++"3+ c #A92C12", ++"4+ c #D90301", ++"5+ c #DE0808", ++"6+ c #ED8D8D", ++"7+ c #F2B2B2", ++"8+ c #E55555", ++"9+ c #DF0404", ++"0+ c #D60602", ++"a+ c #BF1F0C", ++"b+ c #E97B7B", ++"c+ c #DC2B2B", ++"d+ c #DC1010", ++"e+ c #B52911", ++"f+ c #C92317", ++"g+ c #E30303", ++"h+ c #DE3232", ++"i+ c #E98383", ++"j+ c #F5C5C5", ++"k+ c #D50101", ++"l+ c #E51515", ++"m+ c #C04432", ++"n+ c #AC2F1A", ++"o+ c #D81E1E", ++"p+ c #DD0C0C", ++"q+ c #DD0000", ++"r+ c #D90C0C", ++"s+ c #F8D5D5", ++"t+ c #EA9090", ++"u+ c #F2B9B9", ++"v+ c #D30000", ++"w+ c #DE1C1C", ++"x+ c #DC3E3D", ++"y+ c #A64329", ++"z+ c #983017", ++"A+ c #C4231F", ++"B+ c #D11313", ++"C+ c #E14D4D", ++"D+ c #F7D9D9", ++"E+ c #DF5E5E", ++"F+ c #FAE8E8", ++"G+ c #D92D2D", ++"H+ c #D40303", ++"I+ c #D5292A", ++"J+ c #C6443D", ++"K+ c #AC261C", ++"L+ c #C51A1A", ++"M+ c #C80202", ++"N+ c #DC0000", ++"O+ c #D70101", ++"P+ c #E36262", ++"Q+ c #F3C4C4", ++"R+ c #DB5353", ++"S+ c #D21010", ++"T+ c #C80606", ++"U+ c #CC3737", ++"V+ c #AE4235", ++"W+ c #AE0706", ++"X+ c #B90909", ++"Y+ c #C00000", ++"Z+ c #C90000", ++"`+ c #D10000", ++" @ c #D83535", ++".@ c #FCF2F2", ++"+@ c #DE6D6D", ++"@@ c #F1BEBE", ++"#@ c #CC0000", ++"$@ c #BF0000", ++"%@ c #BB1313", ++"&@ c #A41B12", ++"*@ c #8D2810", ++"=@ c #B60000", ++"-@ c #C10000", ++";@ c #D31D1D", ++">@ c #E17474", ++",@ c #FBEEEE", ++"'@ c #DF7474", ++")@ c #CA0303", ++"!@ c #CD0000", ++"~@ c #B50000", ++"{@ c #AB0A04", ++"]@ c #BE0000", ++"^@ c #C70000", ++"/@ c #CC0202", ++"(@ c #D12A2A", ++"_@ c #D44545", ++":@ c #EFBABA", ++"<@ c #EAA4A4", ++"[@ c #CB0909", ++"}@ c #C60000", ++"|@ c #BD0000", ++"1@ c #A21408", ++"2@ c #B90000", ++"3@ c #C20000", ++"4@ c #D03333", ++"5@ c #F3CECE", ++"6@ c #E07B7B", ++"7@ c #E48888", ++"8@ c #CB0000", ++"9@ c #B70100", ++"0@ c #BB0000", ++"a@ c #C80000", ++"b@ c #C50000", ++"c@ c #CB2424", ++"d@ c #F5D7D7", ++"e@ c #D75C5C", ++"f@ c #ECB3B3", ++"g@ c #C40202", ++"h@ c #BA0000", ++"i@ c #991E0C", ++"j@ c #B10100", ++"k@ c #B50D05", ++"l@ c #B80C05", ++"m@ c #C30000", ++"n@ c #C40000", ++"o@ c #C61515", ++"p@ c #EAA8A8", ++"q@ c #EAAAAA", ++"r@ c #E7A0A0", ++"s@ c #C10202", ++"t@ c #A51E0C", ++"u@ c #903515", ++"v@ c #BA0602", ++"w@ c #B80000", ++"x@ c #AF0301", ++"y@ c #8C250F", ++"z@ c #AF0000", ++"A@ c #B30000", ++"B@ c #B40201", ++"C@ c #8A3414", ++"D@ c #B00E06", ++"E@ c #C51111", ++"F@ c #E38E8E", ++"G@ c #E69C9C", ++"H@ c #D35656", ++"I@ c #BE0202", ++"J@ c #BC0101", ++"K@ c #9D210D", ++"L@ c #912C11", ++"M@ c #AE0000", ++"N@ c #8A2810", ++"O@ c #A20301", ++"P@ c #A70000", ++"Q@ c #A80100", ++"R@ c #8E230E", ++"S@ c #AA0E06", ++"T@ c #E18686", ++"U@ c #CA2B2B", ++"V@ c #C51E1E", ++"W@ c #B70101", ++"X@ c #93250F", ++"Y@ c #941C0B", ++"Z@ c #A90000", ++"`@ c #990D05", ++" # c #7F2810", ++".# c #8F1307", ++"+# c #A40E06", ++"@# c #C41212", ++"## c #D96666", ++"$# c #BC0000", ++"%# c #B30101", ++"&# c #8F240E", ++"*# c #940C05", ++"=# c #9F0E06", ++"-# c #B00000", ++";# c #C01010", ++"># c #D76868", ++",# c #AF0101", ++"'# c #8B240E", ++")# c #990E06", ++"!# c #AA0000", ++"~# c #BE1818", ++"{# c #D26161", ++"]# c #AA0101", ++"^# c #87240E", ++"/# c #930E06", ++"(# c #A40000", ++"_# c #BC2424", ++":# c #C12F2F", ++"<# c #B10000", ++"[# c #A40101", ++"}# c #81250F", ++"|# c #8D0E05", ++"1# c #9D0000", ++"2# c #A30000", ++"3# c #AB0000", ++"4# c #A20000", ++"5# c #80220D", ++" ", ++" ", ++" ", ++" ", ++" ", ++" ", ++" ", ++" . + @ # # $ % & * ", ++" = - ; > , ' ) > ; ! ~ ", ++" { ] ^ / ( _ : < ^ [ } ", ++" | 1 < 2 3 4 5 6 7 8 9 ", ++" 0 < a b c d e f g h i ", ++" j k l m n d o p q r s t u v w ", ++" x y z A B C D E F G H I J K L M N O P ", ++" Q R S T U V W X Y Z c ` ...+.@.#.$. %.&.J T S *.=. ", ++" -.;.>.,.'.).!.~.{.].^./.(._.:.<.;.[.}.|.1.2.3.'.'.,.>.4.5. ", ++" 6.7.'.8.9.9.9.0.a.b.c.d.e.f.g.h.i.j.>.,.k.l.8.0.9.m.0.n.,.o.p. ", ++" q.r.>.n.s.t.u.t.v.w.x.9.8.d.y.z.A.B.C.>.d.n.9.x.v.t.u.v.s.n.>.D. ", ++" E.F.G.0.w.H.I.I.I.H.t.x.0.J.G.K.L.M.N.O.d.8.s.t.H.I.I.u.w.P.G.Q.R. ", ++" S.T.U.V.8.x.u.I.I.W.I.H.v.m.X.G.Y.q Z.`. +'.P.x.t.I.I.I.t.x.n.>..+++@+ ", ++" #+] 6 $+d.0.x.t.H.H.H.u.w.9.J.%+&+*+=+-+;+,.n.s.t.u.u.t.x.P.'.>+m ,+'+ ", ++" )+!+S ^.~+P.s.w.t.t.t.s.P.d.{+]+^+/+(+_+G.X.m.w.v.w.s.8.d.[..+1 :+ ", ++" <+U.^.~+8.m.x.w.x.0.X.G.[+p B.}+|+1+G.X.0.m.s.9.8.d.^.S 2+ ", ++" 3+4+V.~+8.9.m.9.n.d.^.5+6+ .7+8+9+V.J.P.0.0.8.~+>.0+ ", ++" a+,.~+n.P.n.~+V.>+S b+|+c+d+>+V.~+n.8.n.~+G.e+ ", ++" f+g+'.~+J.~+,.$+T h+i+j+k+S ;.V.'.J.X.J.,.l+m+ ", ++" n+o+p+[.G.'.'.,.^.q+r+s+t+u+v+.+q+^.,.~+~+'.G.[.w+x+y+ ", ++" z+A+B+k+T $+>.V.V.^.;.S C+D+E+F+G+6 T $+>.,.,.G.^.$+U.H+I+J+ ", ++" K+L+M+^ 6 T >+[.^.[.$+N+O+P+Q+R+N.S+7 S ;.[.>.>.>.[.>+U.6 1 T+U+V+ ", ++" W+X+Y+Z+`+g T q+>+$+;.N+S 2 @.@+@@@#@!+m U.q+>+$+$+;.q+T 6 !+Z+$@%@&@ ", ++" *@=@-@] `+g U.T N+N+T S 6 < ;@>@,@'@)@!@< m S T N+q+N+T U.6 `+Z+$@~@ ", ++" {@]@^@^ 7 g .+.+.+g m < ^ /@(@_@:@<@[@!@`+7 6 g .+.+.+g 7 1 }@|@1@ ", ++" 2@3@] ^ < < < `+`+!+1 #@Z+^@4@5@6@7@Z+8@!@^ `+`+< v+`+^ Z+-@9@ ", ++" 1@0@3@^@] 8@] ] Z+Z+Z+a@^@b@c@d@e@f@g@}@^@a@a@Z+] 8@] ^@3@h@i@ ", ++" j@2@]@Y+-@Y+Y+k@ l@m@n@m@o@p@q@r@s@-@t@u@v@Y+Y+-@Y+|@w@x@ ", ++" y@z@A@~@=@B@C@ D@$@Y+-@E@F@G@H@I@J@K@ L@=@=@~@A@M@N@ ", ++" O@P@Q@R@ S@h@]@Y+E@T@U@V@0@W@X@ Y@Z@P@`@ ", ++" #.# +#=@0@]@@###$@$#w@%#&# *# ", ++" =#-#=@h@;#>#$#2@~@,#'# ", ++" )#!#-#~@~#{#w@~@z@]#^# ", ++" /#(#!#M@_#:#<#M@Z@[#}# ", ++" |#1#2#P@!#3#!#P@4#1#5# ", ++" ", ++" ", ++" ", ++" ", ++" ", ++" "}; diff --git a/unixodbc-gui-qt-2.3.0-missing_headers.patch b/unixodbc-gui-qt-2.3.0-missing_headers.patch new file mode 100644 index 0000000..7113259 --- /dev/null +++ b/unixodbc-gui-qt-2.3.0-missing_headers.patch @@ -0,0 +1,639 @@ +diff -Nru unixodbc-gui-qt-2.3.0.orig//gtrtstQ4/autotest.h unixodbc-gui-qt-2.3.0/gtrtstQ4/autotest.h +--- unixodbc-gui-qt-2.3.0.orig//gtrtstQ4/autotest.h 1970-01-01 01:00:00.000000000 +0100 ++++ unixodbc-gui-qt-2.3.0/gtrtstQ4/autotest.h 2010-12-24 21:44:28.711639647 +0100 +@@ -0,0 +1,154 @@ ++/*--------------------------------------------------------------------------------- ++ | Title: AUTOTEST.H ++ | ++ | This file contains constants and prototypes required to compile an ++ | Auto Test DLL. ++ | ++ | Should be consistant with MS version ++ | ++ *---------------------------------------------------------------------------------*/ ++#ifndef AUTOTEST_DEFS ++#define AUTOTEST_DEFS ++ ++#include ++#include ++#include "sql.h" ++#include "sqlext.h" ++#include "sqltypes.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++#ifdef PATH_MAX ++#define _MAX_PATH PATH_MAX ++#else ++#define _MAX_PATH 256 ++#endif ++ ++extern HINSTANCE hLoadedInst; ++ ++/*---------------------------------------------------------------------------------- ++ Defines and Macros ++----------------------------------------------------------------------------------*/ ++ ++#define TEST_ABORTED (-1) ++ ++#define AUTO_MAX_TEST_NAME 35 ++#define AUTO_MAX_TESTCASE_NAME 35 ++#define AUTO_MAX_TESTDESC_NAME 75 ++ ++#define MAXFLUSH 300 ++#define MAX_USER_INFO 50 ++#define MAX_KEYWORD_LEN 149 ++ ++#define EXTFUNCDECL ++#define EXTFUN ++ ++#define InitTest(lps) \ ++{ lps->cErrors=0; } ++#define AbortTest(lps) \ ++{ lps->cErrors=TEST_ABORTED; } ++ ++#define AllocateMemory(cb) (calloc(cb,1)) ++#define ReleaseMemory(lp) (free(lp)) ++ ++#define NumItems(s) (sizeof(s) / sizeof(s[0])) ++ ++/* Following will access bit number pos in a bit array and return */ ++/* TRUE if it is set, FALSE if it is not */ ++#define CQBITS (sizeof(unsigned int) * 8) ++#define getqbit(lpa, pos) \ ++ (lpa[((pos) / CQBITS)] & (1 << ((pos) - (CQBITS * ((pos) / CQBITS))))) ++#define GETBIT(p1,p2) getqbit(p1,(p2)-1) ++ ++/* ++ * Message box defines ++ */ ++ ++#define MB_OK (0x0000) ++#define MB_ABORTRETRYIGNORE (0x0001) ++#define MB_OKCANCEL (0x0002) ++#define MB_RETRYCANCEL (0x0003) ++#define MB_YESNO (0x0004) ++#define MB_YESNOCANCEL (0x0005) ++ ++#define MB_ICONEXCLAMATION (0x0000) ++#define MB_ICONWARNING MB_ICONEXCLAMATION ++#define MB_ICONINFORMATION (0x0010) ++#define MB_ICONASTERISK MB_ICONINFORMATION ++#define MB_ICONQUESTION (0x0020) ++#define MB_ICONSTOP (0x0030) ++#define MB_ICONERROR MB_ICONSTOP ++#define MB_ICONHAND MB_ICONSTOP ++ ++#define MB_DEFBUTTON1 (0x0000) ++#define MB_DEFBUTTON2 (0x0100) ++#define MB_DEFBUTTON3 (0x0200) ++#define MB_DEFBUTTON4 (0x0300) ++ ++#define MB_APPMODAL (0x0000) ++#define MB_SYSTEMMODAL (0x1000) ++#define MB_TASKMODAL (0x2000) ++ ++#define MB_DEFAULT_DESKTOP_ONLY (0x0000) ++#define MB_HELP (0x0000) ++#define MB_RIGHT (0x0000) ++#define MB_RTLREADING (0x0000) ++#define MB_SETFOREGROUND (0x0000) ++#define MB_TOPMOST (0x0000) ++#define MB_SERVICE_NOTIFICATION (0x0000) ++#define MB_SERVICE_NOTIFICATION_NT3X (0x0000) ++ ++/* ++// This structure contains the information found in the .INI file for a ++// data source. The filled out structure is in turn passed to AutoTestFunc ++// to drive the individual tests. ++*/ ++typedef struct tagSERVERINFO { ++ HWND hwnd; /* Output edit window */ ++ CHAR szLogFile[_MAX_PATH]; /* Output log file */ ++ HENV henv; /* .EXE's henv */ ++ HDBC hdbc; /* .EXE's hdbc */ ++ HSTMT hstmt; /* .EXE's hstmt */ ++ ++ /* The following items are gathered from the .INI file and may be defined */ ++ /* via the "Manage Test Sources" menu item from ODBC Test */ ++ CHAR szSource[SQL_MAX_DSN_LENGTH+1]; ++ CHAR szValidServer0[SQL_MAX_DSN_LENGTH+1]; ++ CHAR szValidLogin0[MAX_USER_INFO+1]; ++ CHAR szValidPassword0[MAX_USER_INFO+1]; ++ CHAR szKeywords[MAX_KEYWORD_LEN+1]; ++ ++ /* Following are used for run-time */ ++ UINT FAR * rglMask; /* Run test mask */ ++ int failed; /* Track failures on a test case basis */ ++ int cErrors; /* Count of errors */ ++ BOOL fDebug; /* TRUE if debugging is to be enabled */ ++ BOOL fScreen; /* TRUE if test output goes to screen */ ++ BOOL fLog; /* TRUE if test output goes to log */ ++ BOOL fIsolate; /* TRUE to isolate output */ ++ UDWORD vCursorLib; /* Value for SQL_ODBC_CURSOR on SQLSetConnectOption */ ++ HINSTANCE hLoadedInst; /* Instance handle of loaded test */ ++ ++ /* Following are used for buffering output to edit window */ ++ CHAR szBuff[MAXFLUSH]; /* Hold temporary results */ ++ UINT cBuff; /* Number of TCHARs in szBuff */ ++ } SERVERINFO; ++typedef SERVERINFO FAR * lpSERVERINFO; ++ ++ ++/*---------------------------------------------------------------------------------- ++// Function prototypes ++//---------------------------------------------------------------------------------*/ ++BOOL EXTFUNCDECL FAR szLogPrintf(lpSERVERINFO lps, BOOL fForce, LPTSTR szFmt, ...); ++int EXTFUNCDECL FAR szMessageBox(HWND hwnd, UINT style, LPTSTR szTitle, LPTSTR szFmt, ...); ++LPTSTR EXTFUN GetRCString(HINSTANCE hInst, LPTSTR buf, int cbbuf, UINT ids); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++ +diff -Nru unixodbc-gui-qt-2.3.0.orig//ini/ini.h unixodbc-gui-qt-2.3.0/ini/ini.h +--- unixodbc-gui-qt-2.3.0.orig//ini/ini.h 1970-01-01 01:00:00.000000000 +0100 ++++ unixodbc-gui-qt-2.3.0/ini/ini.h 2010-12-24 21:44:22.367568102 +0100 +@@ -0,0 +1,477 @@ ++/********************************************************************************** ++ * ini.h ++ * ++ * Include file for libini.a. Coding? Include this and link against libini.a. ++ * ++ * ++ ************************************************** ++ * This code was created by Peter Harvey @ CodeByDesign. ++ * Released under LGPL 28.JAN.99 ++ * ++ * Contributions from... ++ * ----------------------------------------------- ++ * Peter Harvey - pharvey@codebydesign.com ++ **************************************************/ ++ ++#ifndef INCLUDED_INI_H ++#define INCLUDED_INI_H ++ ++/*********[ CONSTANTS AND TYPES ]**************************************************/ ++#include ++#include ++#include ++#include ++ ++#ifndef TRUE ++#define TRUE 1 ++#endif ++ ++#ifndef FALSE ++#define FALSE 0 ++#endif ++ ++#define STDINFILE ((char*)-1) ++ ++#define INI_NO_DATA 2 ++#define INI_SUCCESS 1 ++#define INI_ERROR 0 ++ ++#define INI_MAX_LINE 1000 ++#define INI_MAX_OBJECT_NAME INI_MAX_LINE ++#define INI_MAX_PROPERTY_NAME INI_MAX_LINE ++#define INI_MAX_PROPERTY_VALUE INI_MAX_LINE ++ ++#if HAVE_LIMITS_H ++#include ++#endif ++ ++#ifdef PATH_MAX ++#define ODBC_FILENAME_MAX PATH_MAX ++#elif MAXPATHLEN ++#define ODBC_FILENAME_MAX MAXPATHLEN ++#else ++#define ODBC_FILENAME_MAX FILENAME_MAX ++#endif ++ ++/******************************************** ++ * tINIPROPERTY ++ * ++ * Each property line has Name=Value pair. ++ * They are stored in this structure and linked together to provide a list ++ * of all properties for a given Object. ++ ********************************************/ ++ ++typedef struct tINIPROPERTY ++{ ++ struct tINIPROPERTY *pNext; ++ struct tINIPROPERTY *pPrev; ++ ++ char szName[INI_MAX_PROPERTY_NAME+1]; ++ char szValue[INI_MAX_PROPERTY_VALUE+1]; ++ ++} INIPROPERTY, *HINIPROPERTY; ++ ++/******************************************** ++ * tINIOBJECT ++ * ++ * Each object line has just an object name. This structure ++ * stores the object name and its subordinate information. ++ * The lines that follow are considered to be properties ++ * and are stored in a list of tINIPROPERTY. ++ ********************************************/ ++ ++typedef struct tINIOBJECT ++{ ++ struct tINIOBJECT *pNext; ++ struct tINIOBJECT *pPrev; ++ ++ char szName[INI_MAX_OBJECT_NAME+1]; ++ ++ HINIPROPERTY hFirstProperty; ++ HINIPROPERTY hLastProperty; ++ int nProperties; ++ ++} INIOBJECT, *HINIOBJECT; ++ ++/******************************************** ++ * tINI ++ * ++ * Each INI file contains a list of objects. This ++ * structure stores each object in a list of tINIOBJECT. ++ ********************************************/ ++ ++typedef struct tINI ++{ ++#ifdef __OS2__ ++ int iniFileType; /* ini file type 0 = text, 1 = binary (OS/2 only) */ ++#endif ++ char szFileName[ODBC_FILENAME_MAX+1]; /* FULL INI FILE NAME */ ++ char cComment[ 5 ]; /* COMMENT CHAR MUST BE IN FIRST COLUMN */ ++ char cLeftBracket; /* BRACKETS DELIMIT THE OBJECT NAME, THE LEFT BRACKET MUST BE IN COLUMN ONE */ ++ char cRightBracket; ++ char cEqual; /* SEPERATES THE PROPERTY NAME FROM ITS VALUE */ ++ int bChanged; /* IF true, THEN THE WHOLE FILE IS OVERWRITTEN UPON iniCommit */ ++ int bReadOnly; /* TRUE IF AT LEAST ONE CALL HAS BEEN MADE TO iniAppend() */ ++ ++ HINIOBJECT hFirstObject; ++ HINIOBJECT hLastObject; ++ HINIOBJECT hCurObject; ++ int nObjects; ++ ++ HINIPROPERTY hCurProperty; ++ ++} INI, *HINI; ++ ++/******************************************** ++ * tINIBOOKMARK ++ * ++ * Used to store the current Object and Property pointers so ++ * that the caller can quickly return to some point in the ++ * INI data. ++ ********************************************/ ++ ++typedef struct tINIBOOKMARK ++{ ++ HINI hIni; ++ HINIOBJECT hCurObject; ++ HINIPROPERTY hCurProperty; ++ ++} INIBOOKMARK, *HINIBOOKMARK; ++ ++#if defined(__cplusplus) ++ extern "C" { ++#endif ++ ++/*********[ PRIMARY INTERFACE ]*****************************************************/ ++ ++/****************************** ++ * iniOpen ++ * ++ * 1. make sure file exists ++ * 2. allocate memory for HINI ++ * 3. initialize HINI ++ * 4. load entire file into structured memory ++ * 5. set TRUE if you want to create file if non-existing ++ ******************************/ ++#ifdef __OS2__ ++int iniOpen( HINI *hIni, char *pszFileName, char *cComment, char cLeftBracket, char cRightBracket, char cEqual, int bCreate, int bFileType ); ++#else ++int iniOpen( HINI *hIni, char *pszFileName, char *cComment, char cLeftBracket, char cRightBracket, char cEqual, int bCreate ); ++#endif ++/****************************** ++ * iniAppend ++ * ++ * 1. append Sections in pszFileName that do not already exist in hIni ++ * 2. Makes hIni ReadOnly! ++ ******************************/ ++int iniAppend( HINI hIni, char *pszFileName ); ++ ++/****************************** ++ * iniDelete ++ * ++ * 1. simple removes all objects (and their properties) from the list using iniObjectDelete() in a loop ++ ******************************/ ++int iniDelete( HINI hIni ); ++ ++/****************************** ++ * iniClose ++ * ++ * 1. free memory previously allocated for HINI ++ * 2. DO NOT SAVE ANY CHANGES (see iniCommit) ++ ******************************/ ++int iniClose( HINI hIni ); ++ ++/****************************** ++ * iniCommit ++ * ++ * 1. replaces file contents with memory contents (overwrites the file) ++ ******************************/ ++int iniCommit( HINI hIni ); ++ ++/****************************** ++ * iniObjectFirst ++ * ++ ******************************/ ++int iniObjectFirst( HINI hIni ); ++ ++/****************************** ++ * iniObjectLast ++ * ++ ******************************/ ++int iniObjectLast( HINI hIni ); ++ ++/****************************** ++ * iniObjectNext ++ * ++ * 1. iniObjects() if no current object name else ++ * 2. find and store next object name ++ ******************************/ ++int iniObjectNext( HINI hIni ); ++ ++/****************************** ++ * iniObjectSeek ++ * ++ * 1. find and store object name ++ ******************************/ ++int iniObjectSeek( HINI hIni, char *pszObject ); ++ ++/****************************** ++ * iniObjectSeekSure ++ * ++ * 1. find and store object name ++ * 2. ensure that it exists ++ ******************************/ ++int iniObjectSeekSure( HINI hIni, char *pszObject ); ++ ++/****************************** ++ * iniObjectEOL ++ * ++ ******************************/ ++int iniObjectEOL( HINI hIni ); ++ ++/****************************** ++ * iniObject ++ * ++ * 1. returns the current object name ++ ******************************/ ++int iniObject( HINI hIni, char *pszObject ); ++ ++/****************************** ++ * iniObjectDelete ++ * ++ * 1. deletes current Object ++ ******************************/ ++int iniObjectDelete( HINI hIni ); ++ ++/****************************** ++ * iniObjectUpdate ++ * ++ * 1. update current Object ++ ******************************/ ++int iniObjectUpdate( HINI hIni, char *pszObject ); ++ ++/****************************** ++ * iniPropertyObject ++ * ++ * 1. inserts a new Object ++ * 2. becomes current ++ ******************************/ ++int iniObjectInsert( HINI hIni, char *pszObject ); ++ ++/****************************** ++ * iniPropertyFirst ++ * ++ ******************************/ ++int iniPropertyFirst( HINI hIni ); ++ ++/****************************** ++ * iniPropertyLast ++ * ++ ******************************/ ++int iniPropertyLast( HINI hIni ); ++ ++/****************************** ++ * iniPropertyNext ++ * ++ * 1. iniProperties() if no current property name else ++ * 2. find and store next property name ++ ******************************/ ++int iniPropertyNext( HINI hIni ); ++ ++/****************************** ++ * iniPropertySeek ++ * ++ * 1. set current Object & Property positions where matching parameters ++ * 2. any parms which are empty strings (ie pszObject[0]) are ignored ++ * 3. it is kinda pointless to pass empty strings for all parms... you will get 1st Property in 1st Object ++ ******************************/ ++int iniPropertySeek( HINI hIni, char *pszObject, char *pszProperty, char *pszValue ); ++ ++/****************************** ++ * iniPropertySeekSure ++ * ++ * 1. same as iniPropertySeek but ++ * 2. will ensure that both Object and Property exist ++ ******************************/ ++int iniPropertySeekSure( HINI hIni, char *pszObject, char *pszProperty, char *pszValue ); ++ ++/****************************** ++ * iniPropertyEOL ++ * ++ ******************************/ ++int iniPropertyEOL( HINI hIni ); ++ ++/****************************** ++ * iniProperty ++ * ++ * 1. returns the current property name ++ ******************************/ ++int iniProperty( HINI hIni, char *pszProperty ); ++ ++/****************************** ++ * iniPropertyDelete ++ * ++ * 1. deletes current Property ++ ******************************/ ++int iniPropertyDelete( HINI hIni ); ++ ++/****************************** ++ * iniPropertyUpdate ++ * ++ * 1. update current Property ++ ******************************/ ++int iniPropertyUpdate( HINI hIni, char *pszProperty, char *pszValue ); ++ ++/****************************** ++ * iniPropertyInsert ++ * ++ * 1. inserts a new Property for current Object ++ * 2. becomes current ++ ******************************/ ++int iniPropertyInsert( HINI hIni, char *pszProperty, char *pszValue ); ++ ++/****************************** ++ * iniValue ++ * ++ * 1. returns the value for the current object/property ++ ******************************/ ++int iniValue( HINI hIni, char *pszValue ); ++ ++/****************************** ++ * iniGetBookmark ++ * ++ * 1. Store the current data positions (Object and Property) ++ * into hIniBookmark. ++ * 2. Does not allocate memory for hIniBookmark so pass a ++ * pointer to a valid bookmark. ++ ******************************/ ++int iniGetBookmark( HINI hIni, HINIBOOKMARK hIniBookmark ); ++ ++/****************************** ++ * iniGotoBookmark ++ * ++ * 1. Sets the current Object and Property positions to ++ * those stored in IniBookmark. ++ * 2. Does not account for the bookmark becoming ++ * invalid ie from the Object or Property being deleted. ++ ******************************/ ++int iniGotoBookmark( INIBOOKMARK IniBookmark ); ++ ++/****************************** ++ * iniCursor ++ * ++ * 1. Returns a copy of the hIni with a new ++ * set of position cursors (current Object and Property). ++ * 2. Not safe to use when in the possibility of ++ * deleting data in another cursor on same data. ++ * 3. Use when reading data only. ++ * 4. Does not allocate memory so hIniCursor should be valid. ++ * 5. All calls, other than those for movement, are ++ * global and will affect any other view of the data. ++ ******************************/ ++int iniCursor( HINI hIni, HINI hIniCursor ); ++ ++/*************************************************************************************/ ++/*********[ SUPPORT FUNCS ]***********************************************************/ ++/*************************************************************************************/ ++ ++/****************************** ++ * iniElement ++ * ++ ******************************/ ++int iniElement( char *pszData, char cSeperator, char cTerminator, int nElement, char *pszElement, int nMaxElement ); ++int iniElementMax( char *pData, char cSeperator, int nDataLen, int nElement, char *pszElement, int nMaxElement ); ++int iniElementToEnd( char *pszData, char cSeperator, char cTerminator, int nElement, char *pszElement, int nMaxElement ); ++int iniElementEOL( char *pszData, char cSeperator, char cTerminator, int nElement, char *pszElement, int nMaxElement ); ++ ++/****************************** ++ * iniElementCount ++ * ++ ******************************/ ++int iniElementCount( char *pszData, char cSeperator, char cTerminator ); ++ ++/****************************** ++ * iniPropertyValue ++ * ++ * 1. returns the property value for pszProperty in pszValue ++ * 2. pszString example; ++ * "PropertyName1=Value1;PropertyName2=Value2;..." ++ * 3. cEqual is usually '=' ++ * 4. cPropertySep is usually ';' ++ * ++ * This function can be called without calling any other functions in this lib. ++ ******************************/ ++int iniPropertyValue( char *pszString, char *pszProperty, char *pszValue, char cEqual, char cPropertySep ); ++ ++/****************************** ++ * iniAllTrim ++ * ++ * 1. trims blanks, tabs and newlines from start and end of pszString ++ * ++ * This function can be called without calling any other functions in this lib. ++ ******************************/ ++int iniAllTrim( char *pszString ); ++ ++/****************************** ++ * iniToUpper ++ * ++ * 1. Converts all chars in pszString to upper case. ++ * ++ * This function can be called without calling any other functions in this lib. ++ ******************************/ ++int iniToUpper( char *pszString ); ++ ++ ++/****************************** ++ * _iniObjectRead ++ * ++ ******************************/ ++int _iniObjectRead( HINI hIni, char *szLine, char *pszObjectName ); ++ ++/****************************** ++ * _iniPropertyRead ++ * ++ ******************************/ ++int _iniPropertyRead( HINI hIni, char *szLine, char *pszPropertyName, char *pszPropertyValue ); ++ ++/****************************** ++ * _iniDump ++ * ++ ******************************/ ++int _iniDump( HINI hIni, FILE *hStream ); ++ ++/****************************** ++ * _iniScanUntilObject ++ * ++ ******************************/ ++int _iniScanUntilObject( HINI hIni, FILE *hFile, char *pszLine ); ++int _iniScanUntilNextObject( HINI hIni, FILE *hFile, char *pszLine ); ++ ++/* ++ * Some changes to avoid a 255 file handle limit, thanks MQJoe. ++ * Make it conditional as it does have some performance impact esp with LARGE ini files (like what I have :-) ++ */ ++ ++#if defined( HAVE_VSNPRINTF ) && defined( USE_LL_FIO ) ++ ++FILE *uo_fopen( const char *filename, const char *mode ); ++int uo_fclose( FILE *stream ); ++char *uo_fgets( char *szbuffer, int n, FILE *stream ); ++int uo_fprintf( FILE *stream, const char *fmt, ...); ++int uo_vfprintf( FILE *stream, const char *fmt, va_list ap); ++ ++#else ++ ++#define uo_fopen fopen ++#define uo_fclose fclose ++#define uo_fgets fgets ++#define uo_fprintf fprintf ++#define uo_vfprintf vfprintf ++ ++#endif ++ ++#if defined(__cplusplus) ++ } ++#endif ++ ++#endif diff --git a/unixodbc-gui-qt-2.3.0-qt-4.7.1.patch b/unixodbc-gui-qt-2.3.0-qt-4.7.1.patch new file mode 100644 index 0000000..ed2d0e3 --- /dev/null +++ b/unixodbc-gui-qt-2.3.0-qt-4.7.1.patch @@ -0,0 +1,11 @@ +--- unixodbc-gui-qt-2.3.0.orig/ODBCTestQ4/OdbcHandle.h 2010-12-24 20:19:47.000000000 +0100 ++++ unixodbc-gui-qt-2.3.0/ODBCTestQ4/OdbcHandle.h 2010-12-26 20:16:59.853246107 +0100 +@@ -106,7 +106,7 @@ + { + public: + OdbcHandle( int t, SQLHANDLE h, QList &list ); +- OdbcHandle( int t, SQLHANDLE h, QString desc = NULL, SQLHANDLE stmt = SQL_NULL_HANDLE ); ++ OdbcHandle( int t, SQLHANDLE h, QString desc = QString::null, SQLHANDLE stmt = SQL_NULL_HANDLE ); + OdbcHandle( OdbcHandle &e ); + ~OdbcHandle(); + char * toStr( char * str ); diff --git a/unixodbc-gui-qt.spec b/unixodbc-gui-qt.spec new file mode 100644 index 0000000..6168613 --- /dev/null +++ b/unixodbc-gui-qt.spec @@ -0,0 +1,102 @@ +Name: unixodbc-gui-qt +Version: 2.3.0 +Release: 1mamba +Summary: Qt based GUI bits for unixODBC +Group: Graphical Desktop/Applications/Databases +Vendor: openmamba +Distribution: openmamba +Packager: Silvan Calarco +URL: http://unixodbc-gui-qt.sourceforge.net/ +Source: http://unixodbc-gui-qt.sourceforge.net/unixodbc-gui-qt-%{version}.tar.gz +Patch0: %{name}-2.3.0-missing_headers.patch +Patch1: %{name}-2.3.0-qt-4.7.1.patch +Patch2: %{name}-2.3.0-ODBCTestQ4_xpm.patch +# Create source tarball with: +# svn co https://unixodbc-gui-qt.svn.sourceforge.net/svnroot/unixodbc-gui-qt unixodbc-gui-qt +# cd unixodbc-gui-qt/trunk +# make -f Makefile.svn +# ./configure --with-qt-dir-lib=/usr/lib/qt4 --with-qt-dir-include=/usr/include/qt4 --with-qt-bin=/usr/lib/qt4/bin MOC=/usr/lib/qt4/bin/moc UIC=/usr/lib/qt4/bin/uic +# make dist +License: LGPL +## AUTOBUILDREQ-BEGIN +## note: run 'autospec -u -a6 unixodbc-gui-qt' to get the list of build requirements. +## AUTOBUILDREQ-END +Provides: unixODBC-qt-gui +Obsoletes: unixODBC-qt-gui +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +%description +Qt based GUI bits for unixODBC. Includes configuration interface and data manager. + +%package devel +Summary: Devel package for %{name} +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} + +%description devel +Qt based GUI bits for unixODBC. Includes configuration interface and data manager. + +This package contains static libraries and header files need for development. + +%prep +%setup -q +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 + +%build +%configure \ + --with-qt-dir-lib=%{_qt4_libdir} \ + --with-qt-dir-include=%{_qt4_headerdir} \ + --with-qt-bin=%{_qt4_bindir} \ + MOC=%{_qt4_bindir}/moc \ + UIC=%{_qt4_bindir}/uic + +# quite ugly but don't have a lot of time now +touch gtrtstQ4/gtrtstQ4.exp +cp gtrtstQ4/autotest.h ODBCTestQ4/ +%make + +%install +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" +%makeinstall + +%clean +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" + +## remove this block if no service is provided by this package +%preun +if [ $1 -eq 0 ]; then +/sbin/service stop &>/dev/null || : +/sbin/chkconfig --del +fi +exit 0 + +## remove this block if no service is provided by this package +%postun +if [ $1 -ge 1 ]; then +/sbin/service condrestart &>/dev/null || : +fi +exit 0 + +%files +%defattr(-,root,root) +%{_bindir}/ODBCCreateDataSourceQ4 +%{_bindir}/ODBCManageDataSourcesQ4 +%{_bindir}/ODBCTestQ4 +%{_libdir}/libgtrtstQ4.so.* +%{_libdir}/libodbcinstQ4.so.* +#%doc AUTHORS COPYING ChangeLog NEWS README + +%files devel +%defattr(-,root,root) +%{_libdir}/libgtrtstQ4.a +%{_libdir}/libgtrtstQ4.la +%{_libdir}/libgtrtstQ4.so +%{_libdir}/libodbcinstQ4.a +%{_libdir}/libodbcinstQ4.la +%{_libdir}/libodbcinstQ4.so + +%changelog +* Fri Dec 24 2010 Silvan Calarco 2.3.0-1mamba +- package created by autospec