diff --git a/cb/source/a4declar.h b/cb/source/a4declar.h new file mode 100755 index 000000000..31a3f0f0a --- /dev/null +++ b/cb/source/a4declar.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + + S4EXPORT long S4FUNCTION a4indexVersion(DATA4 *); + S4EXPORT int S4FUNCTION a4tagKeyLen(DATA4 *); + S4EXPORT const char * S4FUNCTION a4tagKey(DATA4 *); + S4EXPORT int S4FUNCTION a4lockTest(DATA4 *); + +#ifdef __cplusplus +} +#endif + diff --git a/cb/source/a4functs.c b/cb/source/a4functs.c new file mode 100755 index 000000000..819dab635 --- /dev/null +++ b/cb/source/a4functs.c @@ -0,0 +1,36 @@ +#include "d4all.h" + + +S4EXPORT long S4FUNCTION a4indexVersion(DATA4 * data) +{ +//#ifdef S4FOX +// return((long)i4->indexFile->tagIndex->header.version); +//#else + const TAG4 * t4 = d4tagNext(data, NULL); + + return t4->index->indexFile->tagIndex->header.version; +//#endif +} + +S4EXPORT int S4FUNCTION a4tagKeyLen(DATA4 * data) +{ + const TAG4 * t4 = d4tagDefault(data); + + return t4->tagFile->expr->len; +} + +S4EXPORT const char * S4FUNCTION a4tagKey(DATA4 * data) +{ + const TAG4 * t4 = d4tagDefault(data); + + return tfile4key(t4->tagFile); +} + +S4EXPORT int S4FUNCTION a4lockTest(DATA4 * data) +{ + return d4lockTestFile(data); +} + +S4EXPORT void S4FUNCTION error4hook( CODE4 S4PTR * codebase, int errCode1, long errCode2, const char S4PTR * desc1, const char S4PTR * desc2, const char S4PTR * desc3) +{ +} \ No newline at end of file diff --git a/cb/source/c4code.c b/cb/source/c4code.c index 0c1236367..4fbdbb6cd 100755 --- a/cb/source/c4code.c +++ b/cb/source/c4code.c @@ -407,6 +407,7 @@ int S4FUNCTION code4passwordSet( CODE4 *c4, const char *userId, const char *oldP int S4FUNCTION code4initLow( CODE4 *c4, const char *defaultProtocol, long versionId ) { char v1[10], v2[10] ; + int n; #ifdef S4TESTING int exclusiveFlag ; int openFlag ; @@ -453,7 +454,10 @@ int S4FUNCTION code4initLow( CODE4 *c4, const char *defaultProtocol, long versio no file open/create incorrectly auto-starts the optimization process ***********************************************************************/ - + + #ifdef S4WINDOWS + n = SetHandleCount(40); + #endif #ifndef S4OFF_OPTIMIZE c4->hadOpt = 1 ; #endif diff --git a/cb/source/cb.def b/cb/source/cb.def new file mode 100755 index 000000000..12891553e --- /dev/null +++ b/cb/source/cb.def @@ -0,0 +1,461 @@ +LIBRARY CB6 +DESCRIPTION 'CodeBase 6.1 DLL for Windows' +EXETYPE WINDOWS +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD FIXED SINGLE +HEAPSIZE 4096 + +EXPORTS + + AREA4ADD_OBJECT @1 + AREA4CREATE @2 + AREA4FREE @3 + AREA4NUMOBJECTS @4 + AREA4OBJFIRST @5 + AREA4OBJLAST @6 + AREA4OBJNEXT @7 + AREA4OBJPREV @8 + AREA4PAGEBREAK @9 + AREA4SORT_OBJ_TREE @10 + BMP4FINDDIBBITS @11 + BMP4GETDIB @12 + BMP4PALETTESIZE @13 + BMP4WRITEDIB @14 + C4ATOD @15 + C4ATOD2 @16 + C4ATOI @17 + C4ATOL @18 + C4DLLINST @19 + C4DTOA45 @20 + C4ENCODE @21 + C4LTOA45 @22 + C4LOWER @23 + C4TRIMN @24 + C4UPPER @25 + CODE4ALLOCLOW @26 + CODE4CALCCREATE @27 + CODE4CALCRESET @28 + CODE4CLOSE @29 + CODE4CONNECT @30 + CODE4DATA @31 + CODE4DATEFORMAT @32 + CODE4DATEFORMATSET @33 + CODE4EXIT @34 + CODE4FILENAME @35 + CODE4FILENAMESET @36 + CODE4FLUSH @37 + CODE4INDEXEXTENSION @38 + CODE4INDEXFORMAT @39 + CODE4INFO @40 + CODE4INITLOW @41 + CODE4INITUNDO @42 + CODE4LINENO @43 + CODE4LINENOSET @44 + CODE4LOCK @45 + CODE4LOCKCLEAR @46 + CODE4LOCKFILENAME @47 + CODE4LOCKITEM @48 + CODE4LOCKNETWORKID @49 + CODE4LOCKUSERID @50 + CODE4LOGCREATE @51 + CODE4LOGFILENAME @52 + CODE4LOGOPEN @53 + CODE4LOGOPENOFF @54 + CODE4OPTALL @55 + CODE4OPTSTART @56 + CODE4OPTSUSPEND @57 + CODE4SERVERNAME @58 + CODE4TIMEOUT @59 + CODE4TIMEOUTSET @60 + CODE4TRANCOMMIT @61 + CODE4TRANROLLBACK @62 + CODE4TRANSTART @63 + CODE4UNLOCK @64 + CTRL4ADDCODE @65 + CTRL4CODELISTINIT @66 + CTRL4FREECODELIST @67 + CTRL4FREECTRLNODE @68 + CTRL4GETCTRLCODE @69 + CTRL4GETSERVERNAME @70 + CTRL4INITVBX @71 + CTRL4INITVBXUNDO @72 + CTRL4SETSERVERNAME @73 + D4ALIAS @74 + D4ALIASSET @75 + D4APPEND @76 + D4APPENDBLANK @77 + D4APPENDSTART @78 + D4BLANK @79 + D4BOF @80 + D4BOTTOM @81 + D4CHANGED @82 + D4CHECK @83 + D4CLOSE @84 + D4CREATE @85 + D4CREATETEMP @86 + D4DELETE @87 + D4DELETED @88 + D4EOF @89 + D4FIELD @90 + D4FIELDINFO @91 + D4FIELDJ @92 + D4FIELDNUMBER @93 + D4FILENAME @94 + D4FLUSH @95 + D4FREEBLOCKS @96 + D4GO @97 + D4GOBOF @98 + D4GOEOF @99 + D4INDEX @100 + D4LOCK @101 + D4LOCKADD @102 + D4LOCKADDALL @103 + D4LOCKADDAPPEND @104 + D4LOCKADDFILE @105 + D4LOCKALL @106 + D4LOCKAPPEND @107 + D4LOCKFILE @108 + D4LOCK_GROUP @109 + D4LOCKTEST @110 + D4LOCKTESTAPPENDLOW @111 + D4LOG @112 + D4MEMOCOMPRESS @113 + D4NUMFIELDS @114 + D4OPEN @115 + D4OPENCLONE @116 + D4OPTIMIZE @117 + D4OPTIMIZEWRITE @118 + D4PACK @119 + D4POSITION @120 + D4POSITION2 @121 + D4POSITIONSET @122 + D4RECALL @123 + D4RECCOUNTDO @124 + D4RECNO @125 + D4RECORD @126 + D4RECWIDTH @127 + D4RECPOSITION @128 + D4REFRESH @129 + D4REFRESHRECORD @130 + D4REINDEX @131 + D4REMOVE @132 + D4SEEK @133 + D4SEEKDOUBLE @134 + D4SEEKN @135 + D4SEEKNEXT @136 + D4SEEKNEXTDOUBLE @137 + D4SEEKNEXTN @138 + D4SKIP @139 + D4TAG @140 + D4TAGDEFAULT @141 + D4TAGNEXT @142 + D4TAGPREV @143 + D4TAGSELECT @144 + D4TAGSELECTED @145 + D4TAGSYNC @146 + D4TOP @147 + D4UNLOCK @148 + D4WRITELOW @149 + D4ZAP @150 + DATE4ASSIGN @151 + DATE4CDOW @152 + DATE4CMONTH @153 + DATE4DOW @154 + DATE4FORMAT @155 + DATE4FORMATMDX @156 + DATE4FORMATMDX2 @157 + DATE4INIT @158 + DATE4ISLEAP @159 + DATE4LONG @160 + DATE4TIMENOW @161 + DATE4TODAY @162 + E4LOOKUP @163 + ERROR4DEFAULT @164 + ERROR4DESCRIBEDEFAULT @165 + ERROR4DESCRIBEEXECUTE @166 + ERROR4EXITTEST @167 + ERROR4FILE @168 + ERROR4HOOK @169 + ERROR4SET @170 + ERROR4TEXT @171 + EXPR4CALCDELETE @172 + EXPR4CALCLOOKUP @173 + EXPR4CALCMASSAGE @174 +; EXPR4CALCMODIFY @175 + EXPR4CALCNAMECHANGE @176 + EXPR4DOUBLE @177 + EXPR4DOUBLE2 @178 + EXPR4FUNCTIONS @179 + EXPR4PARSELOW @180 + EXPR4SOURCE @181 + EXPR4STR @182 + EXPR4TRUE @183 + EXPR4VARY @184 + F4ASSIGN @185 + F4ASSIGNCHAR @186 + F4ASSIGNDOUBLE @187 + F4ASSIGNFIELD @188 + F4ASSIGNINT @189 + F4ASSIGNLONG @190 + F4ASSIGNN @191 + F4ASSIGNPTR @192 + F4BLANK @193 + F4CHAR @194 + F4DATA @195 + F4DECIMALS @196 + F4DOUBLE @197 + F4DOUBLE2 @198 + F4FLAGINIT @199 + F4FLAGISSET @200 + F4FLAGSET @201 + F4INT @202 + F4LEN @203 + F4LONG @204 + F4MEMOASSIGN @205 + F4MEMOASSIGNN @206 + F4MEMOFREE @207 + F4MEMOLEN @208 + F4MEMONCPY @209 + F4MEMOPTR @210 + F4MEMOSETLEN @211 + F4MEMOSTR @212 + F4NAME @213 + F4NCPY @214 + F4PTR @215 + F4STR @216 + F4TRUE @217 + F4TYPE @218 + FILE4CLOSE @219 + FILE4CREATE @220 + FILE4FLUSH @221 + FILE4LEN @222 + FILE4LENSET @223 + FILE4LOCK @224 + FILE4OPEN @225 + FILE4OPENTEST @226 + FILE4OPTIMIZELOW @227 + FILE4OPTIMIZEWRITE @228 + FILE4READ @229 + FILE4READALL @230 + FILE4READERROR @231 + FILE4REFRESH @232 + FILE4REPLACE @233 + FILE4SEQREAD @234 + FILE4SEQREADALL @235 + FILE4SEQREADINITDO @236 + FILE4SEQWRITE @237 + FILE4SEQWRITEFLUSH @238 + FILE4SEQWRITEINIT @239 + FILE4SEQWRITEREPEAT @240 + FILE4TEMP @241 + FILE4UNLOCK @242 + FILE4WRITE @243 + GROUP4CREATE @244 + GROUP4FOOTERFIRST @245 + GROUP4FOOTERNEXT @246 + GROUP4FOOTERPREV @247 + GROUP4FREE @248 + GROUP4HEADERFIRST @249 + GROUP4HEADERNEXT @250 + GROUP4HEADERPREV @251 + GROUP4NUMFOOTERS @252 + GROUP4NUMHEADERS @253 + GROUP4POSITIONSET @254 + GROUP4REPEATHEADER @255 + GROUP4RESETEXPRSET @256 + GROUP4RESETPAGE @257 + GROUP4RESETPAGENUM @258 + GROUP4SWAPFOOTER @259 + GROUP4SWAPHEADER @260 + I4CLOSE @261 + I4CREATE @262 + I4FILENAME @263 + I4OPEN @264 + I4REINDEX @265 + I4TAGINFO @266 + L4ADDAFTER @267 + L4ADDBEFORE @268 + L4ADDLOW @269 + L4FIRSTLOW @270 + L4LASTLOW @271 + L4NEXTLOW @272 + L4POP @273 + L4PREV @274 + L4REMOVE @275 + I4TAG @276 + I4TAGADD @277 + MEM4ALLOCDEFAULT @278 + MEM4CHECKMEMORY @279 + MEM4CREATEALLOCDEFAULT @280 + MEM4CREATEDEFAULT @281 + MEM4FREECHECK @282 + MEM4FREEDEFAULT @283 + MEM4RELEASE @284 + MESSAGE4ALLOC @285 + MESSAGE4FREE @286 + OBJ4BITMAPFIELDCREATE @287 + OBJ4BITMAPFIELDFREE @288 + OBJ4BITMAPFILECREATE @289 + OBJ4BITMAPFILEFREE @290 + OBJ4BITMAPSTATICCREATE @291 + OBJ4BITMAPSTATICFREE @292 + OBJ4BRACKETS @293 + OBJ4CALCCREATE @294 + OBJ4CALCFREE @295 + OBJ4DATAFIELDSET @296 + OBJ4DATEFORMAT @297 + OBJ4DECIMALS @298 + OBJ4DELETE @299 + OBJ4DISPLAYONCE @300 + OBJ4DISPLAYZERO @301 + OBJ4EXPRCREATE @302 + OBJ4EXPRFREE @303 + OBJ4FIELDCREATE @304 + OBJ4FIELDFREE @305 + OBJ4FRAMECORNERS @306 + OBJ4FRAMECREATE @307 + OBJ4FRAMEFILL @308 + OBJ4FRAMEFREE @309 + OBJ4JUSTIFY @310 + OBJ4LEADINGZERO @311 + OBJ4LINECREATE @312 + OBJ4LINEFREE @313 + OBJ4LINEWIDTH @314 + OBJ4LOOKAHEAD @315 + OBJ4NUMERICTYPE @316 + OBJ4REMOVE @317 + OBJ4STYLE @318 + OBJ4TEXTCREATE @319 + OBJ4TEXTFREE @320 + OBJ4TOTALCREATE @321 + OBJ4TOTALFREE @322 + RELATE4BOTTOM @323 + RELATE4CHANGED @324 + RELATE4CREATESLAVE @325 + RELATE4DOALL @326 + RELATE4DOONE @327 + RELATE4EOF @328 + RELATE4ERRORACTION @329 + RELATE4FREE @330 + RELATE4FREERELATE @331 + RELATE4INIT @332 + RELATE4LOCK @333 + RELATE4UNLOCK @334 + RELATE4LOCKADD @335 + RELATE4LOOKUP_DATA @336 + RELATE4MATCHLEN @337 + RELATE4NEXT @338 + RELATE4OPTIMIZEABLE @339 + RELATE4QUERYSET @340 + RELATE4RETRIEVE @341 + RELATE4RETRIEVE2 @342 + RELATE4SAVE @343 + RELATE4SAVE2 @344 + RELATE4SKIP @345 + RELATE4SKIPENABLE @346 + RELATE4SORTSET @347 + RELATE4TOP @348 + RELATE4TYPE @349 + REPORT4CAPTION @350 + REPORT4CURRENCY @351 + REPORT4DATADO @352 + REPORT4DATAFILESET @353 + REPORT4DATAGROUP @354 + REPORT4DATEFORMAT @355 + REPORT4DECIMAL @356 + REPORT4DO @357 + REPORT4FREE @358 + REPORT4FREE_STYLES @359 + REPORT4GENERATEPAGE @360 + REPORT4GET_PRINTERIC @361 + REPORT4GROUPFIRST @362 + REPORT4GROUPHARDRESETS @363 + REPORT4GROUPLAST @364 + REPORT4GROUPLOOKUP @365 + REPORT4GROUPNEXT @366 + REPORT4GROUPPREV @367 + REPORT4INIT @368 + REPORT4INDEX_TYPE @369 + REPORT4MARGINS @370 + REPORT4NUMGROUPS @371 + REPORT4NUMSTYLES @372 + REPORT4OFF_WRITE @373 + REPORT4OUTPUT @374 + REPORT4PAGEFREE @375 + REPORT4PAGEHEADERFOOTER @376 + REPORT4PAGEINIT @377 + REPORT4PAGEMARGINSGET @378 + REPORT4PAGEOBJFIRST @379 + REPORT4PAGEOBJNEXT @380 + REPORT4PAGESIZE @381 + REPORT4PAGESIZEGET @382 + REPORT4PARENT @383 + REPORT4PRINTERDC @384 + REPORT4PRINTERSELECT @385 + REPORT4QUERYSET @386 + REPORT4RETRIEVE @387 + REPORT4RETRIEVE2 @388 + REPORT4SAVE @389 + REPORT4SEPARATOR @390 + REPORT4SORTSET @391 + REPORT4STYLEFIRST @392 + REPORT4STYLELAST @393 + REPORT4STYLENEXT @394 + REPORT4STYLESELECT @395 + REPORT4STYLESELECTED @396 + REPORT4STYLESHEETLOAD @397 + REPORT4STYLESHEETSAVE @398 + REPORT4TITLEPAGE @399 + REPORT4TITLESUMMARY @400 + REPORT4TOSCREEN @401 + SOCKET4CODEBASE @402 + SORT4FREE @403 + SORT4GET @404 + SORT4GETINIT @405 + SORT4INIT @409 + SORT4PUT @410 + STYLE4COLOR @411 + STYLE4CREATE @412 + STYLE4DELETE @413 + STYLE4FREE @414 + STYLE4INDEX @415 + STYLE4LOOKUP @416 + T4ALIAS @417 + T4CLOSE @418 + T4EXPRLOW @419 + T4FILTERLOW @420 + T4OPENLOW @421 + T4UNIQUE @422 + T4UNIQUESET @423 + TOTAL4ADDCONDITION @424 + TOTAL4CREATE @425 + TOTAL4FREE @426 + TOTAL4LOOKUP @427 + U4ALLOCAGAINDEFAULT @428 + U4ALLOCDEFAULT @429 + U4ALLOCERDEFAULT @430 + U4ALLOCFIXEDDEFAULT @431 + U4ALLOCFREEDEFAULT @432 + U4DELAYHUNDREDTH @433 + U4FREEDEFAULT @434 + U4FREEFIXEDDEFAULT @435 + U4NAMECHAR @436 + U4NAMECURRENT @437 + U4NAMEEXT @438 + U4NAMEPIECE @439 + U4NCPY @440 + U4REMOVE @441 + U4SWITCH @442 + U4WRITEERR @443 + U4YYMMDD @444 + X4REVERSESHORT @445 + A4INDEXVERSION @500 + A4TAGKEYLEN @501 + A4TAGKEY @502 + A4LOCKTEST @503 + TFILE4BOTTOM @600 + TFILE4EOF @601 + TFILE4RECNO @603 + TFILE4SEEK @605 + TFILE4SKIP @606 + DFILE4LOCKINDEX @607 diff --git a/cb/source/cbapp.def b/cb/source/cbapp.def new file mode 100755 index 000000000..daf207c9b --- /dev/null +++ b/cb/source/cbapp.def @@ -0,0 +1,454 @@ +DESCRIPTION 'CodeBase 6.1 Windows Application' +EXETYPE WINDOWS +STUB 'WINSTUB.EXE' +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD FIXED SINGLE +HEAPSIZE 4096 +STACKSIZE 15000 + + +IMPORTS + + AREA4ADD_OBJECT = CB.1 + AREA4CREATE = CB.2 + AREA4FREE = CB.3 + AREA4NUMOBJECTS = CB.4 + AREA4OBJFIRST = CB.5 + AREA4OBJLAST = CB.6 + AREA4OBJNEXT = CB.7 + AREA4OBJPREV = CB.8 + AREA4PAGEBREAK = CB.9 + AREA4SORT_OBJ_TREE = CB.10 + BMP4FINDDIBBITS = CB.11 + BMP4GETDIB = CB.12 + BMP4PALETTESIZE = CB.13 + BMP4WRITEDIB = CB.14 + C4ATOD = CB.15 + C4ATOD2 = CB.16 + C4ATOI = CB.17 + C4ATOL = CB.18 + CBINST = CB.19 + C4DTOA45 = CB.20 + C4ENCODE = CB.21 + C4LTOA45 = CB.22 + C4LOWER = CB.23 + C4TRIMN = CB.24 + C4UPPER = CB.25 + CODE4ALLOCLOW = CB.26 + CODE4CALCCREATE = CB.27 + CODE4CALCRESET = CB.28 + CODE4CLOSE = CB.29 + CODE4CONNECT = CB.30 + CODE4DATA = CB.31 + CODE4DATEFORMAT = CB.32 + CODE4DATEFORMATSET = CB.33 + CODE4EXIT = CB.34 + CODE4FILENAME = CB.35 + CODE4FILENAMESET = CB.36 + CODE4FLUSH = CB.37 + CODE4INDEXEXTENSION = CB.38 + CODE4INDEXFORMAT = CB.39 + CODE4INFO = CB.40 + CODE4INITLOW = CB.41 + CODE4INITUNDO = CB.42 + CODE4LINENO = CB.43 + CODE4LINENOSET = CB.44 + CODE4LOCK = CB.45 + CODE4LOCKCLEAR = CB.46 + CODE4LOCKFILENAME = CB.47 + CODE4LOCKITEM = CB.48 + CODE4LOCKNETWORKID = CB.49 + CODE4LOCKUSERID = CB.50 + CODE4LOGCREATE = CB.51 + CODE4LOGFILENAME = CB.52 + CODE4LOGOPEN = CB.53 + CODE4LOGOPENOFF = CB.54 + CODE4OPTALL = CB.55 + CODE4OPTSTART = CB.56 + CODE4OPTSUSPEND = CB.57 + CODE4SERVERNAME = CB.58 + CODE4TIMEOUT = CB.59 + CODE4TIMEOUTSET = CB.60 + CODE4TRANCOMMIT = CB.61 + CODE4TRANROLLBACK = CB.62 + CODE4TRANSTART = CB.63 + CODE4UNLOCK = CB.64 + CTRL4ADDCODE = CB.65 + CTRL4CODELISTINIT = CB.66 + CTRL4FREECODELIST = CB.67 + CTRL4FREECTRLNODE = CB.68 + CTRL4GETCTRLCODE = CB.69 + CTRL4GETSERVERNAME = CB.70 + CTRL4INITVBX = CB.71 + CTRL4INITVBXUNDO = CB.72 + CTRL4SETSERVERNAME = CB.73 + D4ALIAS = CB.74 + D4ALIASSET = CB.75 + D4APPEND = CB.76 + D4APPENDBLANK = CB.77 + D4APPENDSTART = CB.78 + D4BLANK = CB.79 + D4BOF = CB.80 + D4BOTTOM = CB.81 + D4CHANGED = CB.82 + D4CHECK = CB.83 + D4CLOSE = CB.84 + D4CREATE = CB.85 + D4CREATETEMP = CB.86 + D4DELETE = CB.87 + D4DELETED = CB.88 + D4EOF = CB.89 + D4FIELD = CB.90 + D4FIELDINFO = CB.91 + D4FIELDJ = CB.92 + D4FIELDNUMBER = CB.93 + D4FILENAME = CB.94 + D4FLUSH = CB.95 + D4FREEBLOCKS = CB.96 + D4GO = CB.97 + D4GOBOF = CB.98 + D4GOEOF = CB.99 + D4INDEX = CB.100 + D4LOCK = CB.101 + D4LOCKADD = CB.102 + D4LOCKADDALL = CB.103 + D4LOCKADDAPPEND = CB.104 + D4LOCKADDFILE = CB.105 + D4LOCKALL = CB.106 + D4LOCKAPPEND = CB.107 + D4LOCKFILE = CB.108 + D4LOCK_GROUP = CB.109 + D4LOCKTEST = CB.110 + D4LOCKTESTAPPENDLOW = CB.111 + D4LOG = CB.112 + D4MEMOCOMPRESS = CB.113 + D4NUMFIELDS = CB.114 + D4OPEN = CB.115 + D4OPENCLONE = CB.116 + D4OPTIMIZE = CB.117 + D4OPTIMIZEWRITE = CB.118 + D4PACK = CB.119 + D4POSITION = CB.120 + D4POSITION2 = CB.121 + D4POSITIONSET = CB.122 + D4RECALL = CB.123 + D4RECCOUNTDO = CB.124 + D4RECNO = CB.125 + D4RECORD = CB.126 + D4RECWIDTH = CB.127 + D4RECPOSITION = CB.128 + D4REFRESH = CB.129 + D4REFRESHRECORD = CB.130 + D4REINDEX = CB.131 + D4REMOVE = CB.132 + D4SEEK = CB.133 + D4SEEKDOUBLE = CB.134 + D4SEEKN = CB.135 + D4SEEKNEXT = CB.136 + D4SEEKNEXTDOUBLE = CB.137 + D4SEEKNEXTN = CB.138 + D4SKIP = CB.139 + D4TAG = CB.140 + D4TAGDEFAULT = CB.141 + D4TAGNEXT = CB.142 + D4TAGPREV = CB.143 + D4TAGSELECT = CB.144 + D4TAGSELECTED = CB.145 + D4TAGSYNC = CB.146 + D4TOP = CB.147 + D4UNLOCK = CB.148 + D4WRITELOW = CB.149 + D4ZAP = CB.150 + DATE4ASSIGN = CB.151 + DATE4CDOW = CB.152 + DATE4CMONTH = CB.153 + DATE4DOW = CB.154 + DATE4FORMAT = CB.155 + DATE4FORMATMDX = CB.156 + DATE4FORMATMDX2 = CB.157 + DATE4INIT = CB.158 + DATE4ISLEAP = CB.159 + DATE4LONG = CB.160 + DATE4TIMENOW = CB.161 + DATE4TODAY = CB.162 + E4LOOKUP = CB.163 + ERROR4DEFAULT = CB.164 + ERROR4DESCRIBEDEFAULT = CB.165 + ERROR4DESCRIBEEXECUTE = CB.166 + ERROR4EXITTEST = CB.167 + ERROR4FILE = CB.168 + ERROR4HOOK = CB.169 + ERROR4SET = CB.170 + ERROR4TEXT = CB.171 + EXPR4CALCDELETE = CB.172 + EXPR4CALCLOOKUP = CB.173 + EXPR4CALCMASSAGE = CB.174 +; EXPR4CALCMODIFY = CB.175 + EXPR4CALCNAMECHANGE = CB.176 + EXPR4DOUBLE = CB.177 + EXPR4DOUBLE2 = CB.178 + EXPR4FUNCTIONS = CB.179 + EXPR4PARSELOW = CB.180 + EXPR4SOURCE = CB.181 + EXPR4STR = CB.182 + EXPR4TRUE = CB.183 + EXPR4VARY = CB.184 + F4ASSIGN = CB.185 + F4ASSIGNCHAR = CB.186 + F4ASSIGNDOUBLE = CB.187 + F4ASSIGNFIELD = CB.188 + F4ASSIGNINT = CB.189 + F4ASSIGNLONG = CB.190 + F4ASSIGNN = CB.191 + F4ASSIGNPTR = CB.192 + F4BLANK = CB.193 + F4CHAR = CB.194 + F4DATA = CB.195 + F4DECIMALS = CB.196 + F4DOUBLE = CB.197 + F4DOUBLE2 = CB.198 + F4FLAGINIT = CB.199 + F4FLAGISSET = CB.200 + F4FLAGSET = CB.201 + F4INT = CB.202 + F4LEN = CB.203 + F4LONG = CB.204 + F4MEMOASSIGN = CB.205 + F4MEMOASSIGNN = CB.206 + F4MEMOFREE = CB.207 + F4MEMOLEN = CB.208 + F4MEMONCPY = CB.209 + F4MEMOPTR = CB.210 + F4MEMOSETLEN = CB.211 + F4MEMOSTR = CB.212 + F4NAME = CB.213 + F4NCPY = CB.214 + F4PTR = CB.215 + F4STR = CB.216 + F4TRUE = CB.217 + F4TYPE = CB.218 + FILE4CLOSE = CB.219 + FILE4CREATE = CB.220 + FILE4FLUSH = CB.221 + FILE4LEN = CB.222 + FILE4LENSET = CB.223 + FILE4LOCK = CB.224 + FILE4OPEN = CB.225 + FILE4OPENTEST = CB.226 + FILE4OPTIMIZELOW = CB.227 + FILE4OPTIMIZEWRITE = CB.228 + FILE4READ = CB.229 + FILE4READALL = CB.230 + FILE4READERROR = CB.231 + FILE4REFRESH = CB.232 + FILE4REPLACE = CB.233 + FILE4SEQREAD = CB.234 + FILE4SEQREADALL = CB.235 + FILE4SEQREADINITDO = CB.236 + FILE4SEQWRITE = CB.237 + FILE4SEQWRITEFLUSH = CB.238 + FILE4SEQWRITEINIT = CB.239 + FILE4SEQWRITEREPEAT = CB.240 + FILE4TEMP = CB.241 + FILE4UNLOCK = CB.242 + FILE4WRITE = CB.243 + GROUP4CREATE = CB.244 + GROUP4FOOTERFIRST = CB.245 + GROUP4FOOTERNEXT = CB.246 + GROUP4FOOTERPREV = CB.247 + GROUP4FREE = CB.248 + GROUP4HEADERFIRST = CB.249 + GROUP4HEADERNEXT = CB.250 + GROUP4HEADERPREV = CB.251 + GROUP4NUMFOOTERS = CB.252 + GROUP4NUMHEADERS = CB.253 + GROUP4POSITIONSET = CB.254 + GROUP4REPEATHEADER = CB.255 + GROUP4RESETEXPRSET = CB.256 + GROUP4RESETPAGE = CB.257 + GROUP4RESETPAGENUM = CB.258 + GROUP4SWAPFOOTER = CB.259 + GROUP4SWAPHEADER = CB.260 + I4CLOSE = CB.261 + I4CREATE = CB.262 + I4FILENAME = CB.263 + I4OPEN = CB.264 + I4REINDEX = CB.265 + I4TAGINFO = CB.266 + L4ADDAFTER = CB.267 + L4ADDBEFORE = CB.268 + L4ADDLOW = CB.269 + L4FIRSTLOW = CB.270 + L4LASTLOW = CB.271 + L4NEXTLOW = CB.272 + L4POP = CB.273 + L4PREV = CB.274 + L4REMOVE = CB.275 + I4TAG = CB.276 + I4TAGADD = CB.277 + MEM4ALLOCDEFAULT = CB.278 + MEM4CHECKMEMORY = CB.279 + MEM4CREATEALLOCDEFAULT = CB.280 + MEM4CREATEDEFAULT = CB.281 + MEM4FREECHECK = CB.282 + MEM4FREEDEFAULT = CB.283 + MEM4RELEASE = CB.284 + MESSAGE4ALLOC = CB.285 + MESSAGE4FREE = CB.286 + OBJ4BITMAPFIELDCREATE = CB.287 + OBJ4BITMAPFIELDFREE = CB.288 + OBJ4BITMAPFILECREATE = CB.289 + OBJ4BITMAPFILEFREE = CB.290 + OBJ4BITMAPSTATICCREATE = CB.291 + OBJ4BITMAPSTATICFREE = CB.292 + OBJ4BRACKETS = CB.293 + OBJ4CALCCREATE = CB.294 + OBJ4CALCFREE = CB.295 + OBJ4DATAFIELDSET = CB.296 + OBJ4DATEFORMAT = CB.297 + OBJ4DECIMALS = CB.298 + OBJ4DELETE = CB.299 + OBJ4DISPLAYONCE = CB.300 + OBJ4DISPLAYZERO = CB.301 + OBJ4EXPRCREATE = CB.302 + OBJ4EXPRFREE = CB.303 + OBJ4FIELDCREATE = CB.304 + OBJ4FIELDFREE = CB.305 + OBJ4FRAMECORNERS = CB.306 + OBJ4FRAMECREATE = CB.307 + OBJ4FRAMEFILL = CB.308 + OBJ4FRAMEFREE = CB.309 + OBJ4JUSTIFY = CB.310 + OBJ4LEADINGZERO = CB.311 + OBJ4LINECREATE = CB.312 + OBJ4LINEFREE = CB.313 + OBJ4LINEWIDTH = CB.314 + OBJ4LOOKAHEAD = CB.315 + OBJ4NUMERICTYPE = CB.316 + OBJ4REMOVE = CB.317 + OBJ4STYLE = CB.318 + OBJ4TEXTCREATE = CB.319 + OBJ4TEXTFREE = CB.320 + OBJ4TOTALCREATE = CB.321 + OBJ4TOTALFREE = CB.322 + RELATE4BOTTOM = CB.323 + RELATE4CHANGED = CB.324 + RELATE4CREATESLAVE = CB.325 + RELATE4DOALL = CB.326 + RELATE4DOONE = CB.327 + RELATE4EOF = CB.328 + RELATE4ERRORACTION = CB.329 + RELATE4FREE = CB.330 + RELATE4FREERELATE = CB.331 + RELATE4INIT = CB.332 + RELATE4LOCK = CB.333 + RELATE4UNLOCK = CB.334 + RELATE4LOCKADD = CB.335 + RELATE4LOOKUP_DATA = CB.336 + RELATE4MATCHLEN = CB.337 + RELATE4NEXT = CB.338 + RELATE4OPTIMIZEABLE = CB.339 + RELATE4QUERYSET = CB.340 + RELATE4RETRIEVE = CB.341 + RELATE4RETRIEVE2 = CB.342 + RELATE4SAVE = CB.343 + RELATE4SAVE2 = CB.344 + RELATE4SKIP = CB.345 + RELATE4SKIPENABLE = CB.346 + RELATE4SORTSET = CB.347 + RELATE4TOP = CB.348 + RELATE4TYPE = CB.349 + REPORT4CAPTION = CB.350 + REPORT4CURRENCY = CB.351 + REPORT4DATADO = CB.352 + REPORT4DATAFILESET = CB.353 + REPORT4DATAGROUP = CB.354 + REPORT4DATEFORMAT = CB.355 + REPORT4DECIMAL = CB.356 + REPORT4DO = CB.357 + REPORT4FREE = CB.358 + REPORT4FREE_STYLES = CB.359 + REPORT4GENERATEPAGE = CB.360 + REPORT4GET_PRINTERIC = CB.361 + REPORT4GROUPFIRST = CB.362 + REPORT4GROUPHARDRESETS = CB.363 + REPORT4GROUPLAST = CB.364 + REPORT4GROUPLOOKUP = CB.365 + REPORT4GROUPNEXT = CB.366 + REPORT4GROUPPREV = CB.367 + REPORT4INIT = CB.368 + REPORT4INDEX_TYPE = CB.369 + REPORT4MARGINS = CB.370 + REPORT4NUMGROUPS = CB.371 + REPORT4NUMSTYLES = CB.372 + REPORT4OFF_WRITE = CB.373 + REPORT4OUTPUT = CB.374 + REPORT4PAGEFREE = CB.375 + REPORT4PAGEHEADERFOOTER = CB.376 + REPORT4PAGEINIT = CB.377 + REPORT4PAGEMARGINSGET = CB.378 + REPORT4PAGEOBJFIRST = CB.379 + REPORT4PAGEOBJNEXT = CB.380 + REPORT4PAGESIZE = CB.381 + REPORT4PAGESIZEGET = CB.382 + REPORT4PARENT = CB.383 + REPORT4PRINTERDC = CB.384 + REPORT4PRINTERSELECT = CB.385 + REPORT4QUERYSET = CB.386 + REPORT4RETRIEVE = CB.387 + REPORT4RETRIEVE2 = CB.388 + REPORT4SAVE = CB.389 + REPORT4SEPARATOR = CB.390 + REPORT4SORTSET = CB.391 + REPORT4STYLEFIRST = CB.392 + REPORT4STYLELAST = CB.393 + REPORT4STYLENEXT = CB.394 + REPORT4STYLESELECT = CB.395 + REPORT4STYLESELECTED = CB.396 + REPORT4STYLESHEETLOAD = CB.397 + REPORT4STYLESHEETSAVE = CB.398 + REPORT4TITLEPAGE = CB.399 + REPORT4TITLESUMMARY = CB.400 + REPORT4TOSCREEN = CB.401 + SOCKET4CODEBASE = CB.402 + SORT4FREE = CB.403 + SORT4GET = CB.404 + SORT4GETINIT = CB.405 + SORT4INIT = CB.409 + SORT4PUT = CB.410 + STYLE4COLOR = CB.411 + STYLE4CREATE = CB.412 + STYLE4DELETE = CB.413 + STYLE4FREE = CB.414 + STYLE4INDEX = CB.415 + STYLE4LOOKUP = CB.416 + T4ALIAS = CB.417 + T4CLOSE = CB.418 + T4EXPRLOW = CB.419 + T4FILTERLOW = CB.420 + T4OPENLOW = CB.421 + T4UNIQUE = CB.422 + T4UNIQUESET = CB.423 + TOTAL4ADDCONDITION = CB.424 + TOTAL4CREATE = CB.425 + TOTAL4FREE = CB.426 + TOTAL4LOOKUP = CB.427 + U4ALLOCAGAINDEFAULT = CB.428 + U4ALLOCDEFAULT = CB.429 + U4ALLOCERDEFAULT = CB.430 + U4ALLOCFIXEDDEFAULT = CB.431 + U4ALLOCFREEDEFAULT = CB.432 + U4DELAYHUNDREDTH = CB.433 + U4FREEDEFAULT = CB.434 + U4FREEFIXEDDEFAULT = CB.435 + U4NAMECHAR = CB.436 + U4NAMECURRENT = CB.437 + U4NAMEEXT = CB.438 + U4NAMEPIECE = CB.439 + U4NCPY = CB.440 + U4REMOVE = CB.441 + U4SWITCH = CB.442 + U4WRITEERR = CB.443 + U4YYMMDD = CB.444 + X4REVERSESHORT = CB.445 + I4CHANGED = CB.500 diff --git a/cb/source/d4all.h b/cb/source/d4all.h index 4e767f05e..6ff3c2fdb 100755 --- a/cb/source/d4all.h +++ b/cb/source/d4all.h @@ -31,7 +31,7 @@ /* #define S4CONSOLE */ /* Specify Library Type (choose one) */ - #define S4STATIC +/* #define S4STATIC */ /* #define S4DLL */ /* #define S4DLL_BUILD */ @@ -40,7 +40,7 @@ /* #define S4OS2 */ /* for OS/2 */ /* #define S4WIN16 */ /* for Windows 3.x */ /* #define S4WIN32 */ /* for Windows NT and Windows 95 */ - #define S4UNIX /* requires CodeBase Portability version */ +/* #define S4UNIX */ /* requires CodeBase Portability version */ /* #define S4MACINTOSH */ /* requires CodeBase Mac version */ /* #define S4PASCAL_WIN */ /* requires CodePascal version */ @@ -62,7 +62,7 @@ /* Error Configuration Options */ /* #define E4ANALYZE */ /* #define E4DEBUG */ -/* #define E4HOOK */ +#define E4HOOK /* #define E4LINK */ /* #define E4MISC */ /* #define E4OFF */ @@ -85,7 +85,7 @@ #endif /* Spoken Language Switches */ -/* #define S4ANSI */ + #define S4ANSI /* #define S4DICTIONARY */ /* #define S4FINNISH */ /* #define S4FRENCH */ @@ -180,5 +180,6 @@ #endif #define S4VERSION 6001 +//#define S4VERSION 6200 #endif /* D4ALL_INC */ diff --git a/cb/source/d4append.c b/cb/source/d4append.c index c369b7d59..3b7039e90 100755 --- a/cb/source/d4append.c +++ b/cb/source/d4append.c @@ -185,7 +185,7 @@ static int d4doAppend( DATA4 *data ) int S4FUNCTION d4append( DATA4 *data ) #endif /* S4CLIENT */ { - int rc ; + int rc , nTag; CODE4 *c4 ; DATA4FILE *d4file ; #ifdef S4CLIENT @@ -368,7 +368,7 @@ int S4FUNCTION d4append( DATA4 *data ) } #endif /* not S4OFF_MULTI */ - for( tagOn = 0 ;; ) + for( tagOn = 0, nTag =0 ;; nTag++) { tagOn = d4tagNext( data, tagOn ) ; if ( !tagOn ) @@ -385,6 +385,8 @@ int S4FUNCTION d4append( DATA4 *data ) if ( rc < 0 || rc == r4unique ) { saveError = error4set( c4, 0 ) ; + if (rc == r4unique) + data->recNum = nTag; /* 2nd hammer shot */ /* Remove the keys which were just added */ for(;;) diff --git a/cb/source/d4bottom.c b/cb/source/d4bottom.c index 7d0e4d6d6..482cfbe6b 100755 --- a/cb/source/d4bottom.c +++ b/cb/source/d4bottom.c @@ -138,11 +138,11 @@ int S4FUNCTION d4bottom( DATA4 *data ) if ( rec < 0 ) return (int)rec ; #ifndef S4INDEX_OFF - } + } else { #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return error4stack( data->codeBase, (short)rc, E91201 ) ; #endif diff --git a/cb/source/d4declar.h b/cb/source/d4declar.h index a3ffe199a..f8064e3a2 100755 --- a/cb/source/d4declar.h +++ b/cb/source/d4declar.h @@ -650,7 +650,7 @@ int dfile4writeData( DATA4FILE *, const long, const char * ) ; int dfile4lockAppendRecord( DATA4FILE *, const long, const long ) ; int dfile4lockFile( DATA4FILE *, const long, const long ) ; #endif - int dfile4lockIndex( DATA4FILE *, const long ) ; + S4EXPORT int S4FUNCTION dfile4lockIndex( DATA4FILE *, const long ) ; int dfile4lockTest( DATA4FILE *, const long, const long, const long ) ; int dfile4lockTestIndex( DATA4FILE *, const long ) ; int dfile4lockTestRecs( DATA4FILE *, const long, const long ) ; @@ -915,13 +915,13 @@ int mem4reset( void ) ; int t4addCalc( TAG4 *, long ) ; /* Calculates expression and adds */ #define tfile4alias( t4 ) ( (t4)->alias ) B4BLOCK *tfile4block( TAG4FILE * ) ; - int tfile4bottom( TAG4FILE * ) ; + S4EXPORT int S4FUNCTION tfile4bottom( TAG4FILE * ) ; int t4check( TAG4 * ) ; long tfile4dskip( TAG4FILE *, long ) ; int tfile4down( TAG4FILE * ) ; int tfile4dump( TAG4FILE *, int, const int ) ; int tfile4empty( TAG4FILE * ) ; - int tfile4eof( TAG4FILE * ) ; + S4EXPORT int S4FUNCTION tfile4eof( TAG4FILE * ) ; int tfile4exprKey( TAG4FILE *, unsigned char * * ) ; int tfile4freeAll( TAG4FILE * ) ; int tfile4freeSaved( TAG4FILE * ) ; @@ -929,20 +929,20 @@ int mem4reset( void ) ; int tfile4goEof( TAG4FILE * ) ; int tfile4go2( TAG4FILE *, const unsigned char *, const long, const int ) ; int tfile4initSeekConv( TAG4FILE *, int ) ; /* Initialize 'stok' and 'dtok' */ - char *tfile4key( TAG4FILE * ) ; + char * tfile4key( TAG4FILE * ) ; B4KEY_DATA *tfile4keyData( TAG4FILE * ) ; /* The current key */ int tfile4outOfDate( TAG4FILE * ) ; int tfile4position2( TAG4FILE *, double * ) ; double tfile4position( TAG4FILE * ) ; /* Returns the position as a percent */ double tfile4positionDbl( TAG4FILE * ) ; /* Returns the position as a percent */ int tfile4positionSet( TAG4FILE *, const double ) ; /* Positions a percentage */ - long tfile4recNo( TAG4FILE * ) ; + S4EXPORT long S4FUNCTION tfile4recNo( TAG4FILE * ) ; int tfile4removeCurrent( TAG4FILE * ) ; /* Remove the current key */ int tfile4remove( TAG4FILE *, const unsigned char *, const long ) ; /* Remove specified key */ int tfile4removeCalc( TAG4FILE *, long ) ; /* Calculates expression and removes */ int tfile4rlBottom( TAG4FILE * ) ; int tfile4rlTop( TAG4FILE * ) ; - int tfile4seek( TAG4FILE *, const void *, const int ) ; /* r4success, r4found, r4after, r4eof */ + S4EXPORT int S4FUNCTION tfile4seek( TAG4FILE *, const void *, const int ) ; /* r4success, r4found, r4after, r4eof */ #ifdef S4VFP_KEY int tfile4vfpKey( TAG4FILE * ) ; #endif @@ -950,7 +950,7 @@ int mem4reset( void ) ; int tfile4setCollatingSeq( TAG4FILE *, const int ) ; int tfile4setCodePage( TAG4FILE *, const int ) ; #endif - long tfile4skip( TAG4FILE *, long ) ; + S4EXPORT long S4FUNCTION tfile4skip( TAG4FILE *, long ) ; int tfile4top( TAG4FILE * ) ; int tfile4type( TAG4FILE * ) ; int tfile4up( TAG4FILE * ) ; @@ -1138,3 +1138,5 @@ S4LONG x4reverseLong( const void S4PTR * ) ; void t4noChangeStr( char *, const char *, const int ) ; void t4noChangeDouble( char *, const double ) ; #endif + +#include "a4declar.h" \ No newline at end of file diff --git a/cb/source/d4defs.h b/cb/source/d4defs.h index 6f7076549..a85ece38a 100755 --- a/cb/source/d4defs.h +++ b/cb/source/d4defs.h @@ -84,11 +84,13 @@ #ifdef S4UNIX #define S4DIR '/' + #define S4DIR1 '\\' #else /* */ /* */ /* */ #define S4DIR '\\' + #define S4DIR1 '/' /* */ #endif diff --git a/cb/source/d4go.c b/cb/source/d4go.c index a96e6b892..f2f794d16 100755 --- a/cb/source/d4go.c +++ b/cb/source/d4go.c @@ -338,7 +338,7 @@ int S4FUNCTION d4goEof( DATA4 *data ) return e4codeBase ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return rc ; #endif diff --git a/cb/source/d4seek.c b/cb/source/d4seek.c index 02f06ff50..06b98643f 100755 --- a/cb/source/d4seek.c +++ b/cb/source/d4seek.c @@ -209,7 +209,7 @@ static int d4seekServer( DATA4 *data, const void *searchData, const int len, con return r4noTag ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return rc ; #endif @@ -353,7 +353,7 @@ int S4FUNCTION d4seekNextN( DATA4 *data, const char *str, const int l ) return r4noTag ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return rc ; #endif @@ -573,7 +573,7 @@ int S4FUNCTION d4seekN( DATA4 *data, const char *str, const int l ) return r4noTag ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1*/ if ( rc ) return rc ; #endif @@ -739,7 +739,7 @@ int S4FUNCTION d4seekDouble( DATA4 *data, const double dkey ) return r4noTag ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return rc ; #endif @@ -886,7 +886,7 @@ int S4FUNCTION d4seekNextDouble( DATA4 *data, const double dkey ) return r4noTag ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return rc ; #endif diff --git a/cb/source/d4skip.c b/cb/source/d4skip.c index d66049e03..86a3ec12a 100755 --- a/cb/source/d4skip.c +++ b/cb/source/d4skip.c @@ -93,7 +93,7 @@ long d4skipRecno( DATA4 *data, long n ) #ifndef S4OFF_WRITE if ( data->recordChanged ) { - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc < 0 ) return rc ; } @@ -668,7 +668,7 @@ int S4FUNCTION d4skip( DATA4 *data, const long nSkip ) #ifndef S4OFF_WRITE if ( data->recordChanged ) { - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc < 0 ) return rc ; } diff --git a/cb/source/d4top.c b/cb/source/d4top.c index d0a761987..b7fce449c 100755 --- a/cb/source/d4top.c +++ b/cb/source/d4top.c @@ -150,7 +150,7 @@ int S4FUNCTION d4top( DATA4 *data ) { tagFile = tag->tagFile ; #ifndef S4OFF_WRITE - rc = d4updateRecord( data, 1 ) ; + rc = d4updateRecord( data, 0 ) ; /* was 1 */ if ( rc ) return rc ; #endif diff --git a/cb/source/df4lock.c b/cb/source/df4lock.c index 875c9c188..edd9071d4 100755 --- a/cb/source/df4lock.c +++ b/cb/source/df4lock.c @@ -604,7 +604,7 @@ int dfile4lockAll( DATA4FILE *data, const long clientId, const long serverId, DA } #else /* not S4CLIENT */ -int dfile4lockIndex( DATA4FILE *data, const long serverId ) +S4EXPORT int S4FUNCTION dfile4lockIndex( DATA4FILE *data, const long serverId ) { #ifndef S4INDEX_OFF int rc, oldAttempts, count ; diff --git a/cb/source/i4key.c b/cb/source/i4key.c index 48b125381..16fb4191c 100755 --- a/cb/source/i4key.c +++ b/cb/source/i4key.c @@ -11,7 +11,7 @@ #ifndef S4INDEX_OFF -char *tfile4key( TAG4FILE *t4 ) +char * tfile4key( TAG4FILE *t4 ) { B4BLOCK *b4 ; diff --git a/cb/source/i4tag.c b/cb/source/i4tag.c index 2e084645f..d7d55329b 100755 --- a/cb/source/i4tag.c +++ b/cb/source/i4tag.c @@ -732,7 +732,7 @@ int tfile4rlBottom( TAG4FILE *t4 ) return 0 ; } -int tfile4bottom( TAG4FILE *t4 ) +S4EXPORT int S4FUNCTION tfile4bottom( TAG4FILE *t4 ) { #ifdef E4PARM_LOW if ( t4 == 0 ) @@ -979,7 +979,7 @@ int tfile4down( TAG4FILE *t4 ) #endif } -int tfile4eof( TAG4FILE *t4 ) +S4EXPORT int S4FUNCTION tfile4eof( TAG4FILE *t4 ) { B4BLOCK *b4 ; @@ -1298,7 +1298,7 @@ B4KEY_DATA *tfile4keyData( TAG4FILE *t4 ) } /* returns 0 if tag is empty */ -long tfile4recNo( TAG4FILE *t4 ) +S4EXPORT long S4FUNCTION tfile4recNo( TAG4FILE *t4 ) { B4BLOCK *blockOn ; @@ -1324,7 +1324,7 @@ long tfile4recNo( TAG4FILE *t4 ) return b4recNo( blockOn, blockOn->keyOn ) ; } -int tfile4seek( TAG4FILE *t4, const void *ptr, const int lenIn ) +S4EXPORT int S4FUNCTION tfile4seek( TAG4FILE *t4, const void *ptr, const int lenIn ) { int rc, rc2, lenPtr ; B4BLOCK *blockOn ; @@ -1480,7 +1480,7 @@ int tfile4seek( TAG4FILE *t4, const void *ptr, const int lenIn ) return rc ; } -long tfile4skip( TAG4FILE *t4, long numSkip ) +S4EXPORT long S4FUNCTION tfile4skip( TAG4FILE *t4, long numSkip ) { long numLeft ; B4BLOCK *blockOn ; diff --git a/cb/source/u4name.c b/cb/source/u4name.c index d37f7ad86..cabb3ea23 100755 --- a/cb/source/u4name.c +++ b/cb/source/u4name.c @@ -38,7 +38,7 @@ int S4FUNCTION u4nameExt( char *name, int lenResult, const char *newExt, const i extPos = onPos ; break ; } - if ( name[onPos] == S4DIR ) + if (name[onPos] == S4DIR || name[onPos] == S4DIR1) break ; if ( onPos == 0 ) break ; @@ -80,22 +80,25 @@ static int u4nameFix( char *buf ) len = strlen( buf ) ; for( i = 0 ; i < len - 2 ; i++ ) - { + { +/* #ifdef S4UNIX if ( c4memcmp(buf+i, "../", 3 ) == 0 ) #else if ( c4memcmp( buf + i, "..\\", 3 ) == 0 ) #endif +*/ + if ( c4memcmp(buf+i, "../", 3 ) == 0 || c4memcmp( buf + i, "..\\", 3 ) == 0 ) { len -= 3 ; c4memmove( buf+i, buf+i+3, (unsigned int)(len - i) ) ; if ( i >= 2 ) /* need to remove previous path part too */ { - if ( buf[i-1] != S4DIR ) + if ( buf[i-1] != S4DIR || buf[i-1] != S4DIR1 ) return error4( 0, e4name, E94510 ) ; for( j = i-2 ; j > 0 ; j-- ) { - if ( buf[j] == S4DIR ) + if ( buf[j] == S4DIR || buf[j] == S4DIR1 ) { c4memmove( buf+j+1, buf+i, (unsigned int)(len - i) ) ; l2 = i - j - 1 ; @@ -110,12 +113,15 @@ static int u4nameFix( char *buf ) } for( i = 0 ; i < len - 1 ; i++ ) - { + { +/* #ifdef S4UNIX if ( c4memcmp( buf + i, "./", 2 ) == 0 ) #else if ( c4memcmp( buf + i, ".\\", 2 ) == 0 ) #endif +*/ + if ( c4memcmp( buf + i, "./", 2 ) == 0 || c4memcmp( buf + i, ".\\", 2 ) == 0 ) { len -= 2 ; c4memmove( buf+i, buf+i+2, (unsigned int)(len - i) ) ; @@ -144,7 +150,7 @@ int S4FUNCTION u4nameCurrent( char *buf, const int bufLen, const char *name ) return error4( 0, e4parm_null, E94509 ) ; #endif - if ( name[0] == S4DIR ) /* full path */ + if ( name[0] == S4DIR || name[0] == S4DIR1 ) /* full path */ { len = strlen( name ) ; if ( len+1 > bufLen ) @@ -179,16 +185,16 @@ int S4FUNCTION u4nameCurrent( char *buf, const int bufLen, const char *name ) if ( len2 == 2 ) break ; len2-- ; - if ( buf[len2] == S4DIR ) + if ( buf[len2] == S4DIR || buf[len2] == S4DIR1 ) break ; } namePos += 3 ; } - if ( buf[len2-1] != S4DIR ) /* need to add the backslash */ + if ( buf[len2-1] != S4DIR || buf[len2-1] != S4DIR1 ) /* need to add the backslash */ { if ( len2 + 1 >= bufLen ) return error4( 0, e4parm, E94509 ) ; - buf[len2] = S4DIR ; + buf[len2] = S4DIR ; /* ???? */ len2++ ; } len = strlen( name + namePos ) ; @@ -238,7 +244,7 @@ int S4FUNCTION u4nameCurrent( char *buf, const int bufLen, const char *name ) #endif buf[0] = 'A' + (char)(driveNo - 1) ; buf[1] = ':' ; - if ( name[0] == '\\' ) /* just append the path */ + if ( name[0] == S4DIR || name[0] == S4DIR1 ) /* just append the path */ { len = strlen( name ) ; if ( len + 3 > bufLen ) @@ -251,7 +257,7 @@ int S4FUNCTION u4nameCurrent( char *buf, const int bufLen, const char *name ) } else { - if ( name[2] == '\\' ) /* have the full path, so done */ + if ( name[2] == S4DIR || name[2] == S4DIR1 ) /* have the full path, so done */ { len = strlen( name ) ; if ( len + 1 > bufLen ) @@ -310,7 +316,7 @@ int S4FUNCTION u4nameCurrent( char *buf, const int bufLen, const char *name ) len2 = strlen( buf ) ; for ( ;; ) { - if ( c4memcmp( name + namePos, "..\\", 3 ) != 0 ) + if ( c4memcmp( name + namePos, "..\\", 3 ) != 0 || c4memcmp( name + namePos, "../", 3 ) != 0 ) break; /* must remove part of the current path */ if ( len2 > 2 ) @@ -320,16 +326,16 @@ int S4FUNCTION u4nameCurrent( char *buf, const int bufLen, const char *name ) if ( len2 == 2 ) break ; len2-- ; - if ( buf[len2] == '\\' ) + if ( buf[len2] == S4DIR || buf[len2] == S4DIR ) break ; } namePos += 3 ; } - if ( name[0] != '\\' && buf[len2-1] != '\\' ) /* need to add the backslash */ + if (( name[0] != S4DIR || name[0] != S4DIR1) && (buf[len2-1] != S4DIR || buf[len2-1] != S4DIR1)) /* need to add the backslash */ { if ( len2 + 1 >= bufLen ) return error4( 0, e4parm, E94509 ) ; - buf[len2] = '\\' ; + buf[len2] = S4DIR ; len2++ ; } len = strlen( name + namePos ) ; @@ -360,12 +366,12 @@ void u4nameMake( char *buf, const int bufLen, const char *defaultDrive, const ch else defaultDirectoryLen = 0 ; - if ( fileName[0] != S4DIR && defaultDirectoryLen > 0 ) + if (( fileName[0] != S4DIR || fileName[0] != S4DIR1 ) && defaultDirectoryLen > 0 ) { if ( pos+2 >= bufLen ) return ; buf[pos++] = S4DIR ; - if ( defaultDirectory[0] == S4DIR ) + if ( defaultDirectory[0] == S4DIR || defaultDirectory[0] == S4DIR1 ) defaultDirectory++ ; defaultDirectoryLen = strlen(defaultDirectory) ; @@ -379,9 +385,9 @@ void u4nameMake( char *buf, const int bufLen, const char *defaultDrive, const ch if ( pos > 0 ) { - if ( buf[pos-1] != S4DIR ) + if ( buf[pos-1] != S4DIR || buf[pos-1] != S4DIR1 ) buf[pos++] = S4DIR ; - if ( fileName[0] == S4DIR ) + if ( fileName[0] == S4DIR || fileName[0] == S4DIR1 ) fileName++ ; } @@ -410,6 +416,7 @@ int S4FUNCTION u4namePiece( char *result, const unsigned int lenResult, const ch switch ( from[onPos] ) { case S4DIR: + case S4DIR1: case ':': if (namePos == 0) namePos = onPos + 1 ; arePastExt = 1 ; @@ -525,7 +532,7 @@ int u4namePath( char *result, const unsigned int lenResult, const char *from ) for( onPos = 0 ; result[onPos] != 0 ; onPos++ ) ; for( ; onPos >= 0 ; onPos-- ) - if( result[onPos] == S4DIR || result[onPos] == ':' ) break ; /* end of path */ + if( result[onPos] == S4DIR || result[onPos] == S4DIR || result[onPos] == ':' ) break ; /* end of path */ if( onPos < (long)lenResult ) result[++onPos] = '\0' ;