Modifiche A.G.A.

git-svn-id: svn://10.65.10.50/trunk@4681 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-06-16 13:10:44 +00:00
parent af15e0698b
commit 5432d61de9
18 changed files with 1034 additions and 52 deletions

13
cb/source/a4declar.h Executable file
View File

@ -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

36
cb/source/a4functs.c Executable file
View File

@ -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)
{
}

View File

@ -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

461
cb/source/cb.def Executable file
View File

@ -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

454
cb/source/cbapp.def Executable file
View File

@ -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

View File

@ -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 */

View File

@ -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(;;)

View File

@ -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

View File

@ -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"

View File

@ -84,11 +84,13 @@
#ifdef S4UNIX
#define S4DIR '/'
#define S4DIR1 '\\'
#else
/* */
/* */
/* */
#define S4DIR '\\'
#define S4DIR1 '/'
/* */
#endif

View File

@ -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

View File

@ -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

View File

@ -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 ;
}

View File

@ -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

View File

@ -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 ;

View File

@ -11,7 +11,7 @@
#ifndef S4INDEX_OFF
char *tfile4key( TAG4FILE *t4 )
char * tfile4key( TAG4FILE *t4 )
{
B4BLOCK *b4 ;

View File

@ -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 ;

View File

@ -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' ;