You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
MBC/runtime.bas

2357 lines
93 KiB

SUB RunTimeFunctions
LOCAL X1$
LOCAL O1$ ' "%o"
LOCAL D1$ ' "%.15G"
LOCAL D2$ ' "%.19LG"
LOCAL T0$ ' "%H:%M:%S"
LOCAL T1$ ' "%H"
LOCAL T2$ ' "%M"
LOCAL T3$ ' "%S"
LOCAL T4$ ' "%p"
LOCAL T5$ ' "%Y"
LOCAL T6$ ' "%m"
LOCAL T7$ ' "%d"
LOCAL T8$ ' "%A"
LOCAL T9$ ' "%w"
LOCAL T10$ ' "%j"
LOCAL T11$ ' "%V" [ISO week date standard (ISO-8601)]
LOCAL T12$ ' "%m/%d/%y"
LOCAL T13$ ' %A, %B %d, %Y [DAY OF WEEK, MONTH NAME, DAY, FULL YEAR]
LOCAL TDIR$
D1$ = VCHR$(8,34,37,32,46,49,53,71,34)
D2$ = VCHR$(9,34,37,32,46,49,57,76,71,34)
O1$ = VCHR$(4,34,37,111,34)
T0$ = VCHR$(10,34,37,72,58,37,77,58,37,83,34)
T1$ = VCHR$(4,34,37, 72,34)
T2$ = VCHR$(4,34,37, 77,34)
T3$ = VCHR$(4,34,37, 83,34)
T4$ = VCHR$(4,34,37,112,34)
T5$ = VCHR$(4,34,37, 89,34)
T6$ = VCHR$(4,34,37,109,34)
T7$ = VCHR$(4,34,37,100,34)
T8$ = VCHR$(4,34,37, 65,34)
T9$ = VCHR$(4,34,37,119,34)
T10$ = VCHR$(4,34,37,106,34)
T11$ = VCHR$(4,34,37, 86,34)
T12$ = VCHR$(10,34,37,109,47,37,100,47,37,121,34)
T13$ = VCHR$(15,34,37,65,44,32,37,66,32,37,100,44,32,37,89,34)
X1$ = VCHR$(4,34,37,88,34)
TDIR$= ENC$("/tmp/mbc.XXXXXXXX")
'U1$ = VCHR$(7,37,39,42,46,42,32,102)
FPRINT Outfile,""
FPRINT Outfile,"// *************************************************"
FPRINT Outfile,"// " + $BCX_STR_RUNTIME
FPRINT Outfile,"// *************************************************"
FPRINT Outfile,""
IF NoRT=TRUE THEN EXIT SUB
IF UseFlag THEN
IF Use_Turbo THEN
FPRINT Outfile,"char *BCX_TmpStr (size_t Bites)"
FPRINT Outfile,"{"
FPRINT Outfile," static int StrCnt;"
FPRINT Outfile," static char *StrFunc[",TurboSize,"];"
FPRINT Outfile," StrCnt=((StrCnt+1) &",TurboSize-1,");"
FPRINT Outfile," #if defined BCX_MAX_VAR_SIZE"
FPRINT Outfile," if(Bites*sizeof(char)>BCX_MAX_VAR_SIZE)"
FPRINT Outfile," {"
FPRINT Outfile," printf(";ENC$("Buffer Overflow caught in BCX_TmpStr - requested space of %d EXCEEDS %d\\n");",(int)(Bites*sizeof(char)),BCX_MAX_VAR_SIZE);"
FPRINT Outfile," abort();"
FPRINT Outfile," }"
FPRINT Outfile," #endif"
FPRINT Outfile," StrFunc[StrCnt]=(char*)realloc(StrFunc[StrCnt],Bites + 128);"
FPRINT Outfile," return (char*)memset(StrFunc[StrCnt],0,Bites+128);"
FPRINT Outfile,"}\n\n"
ELSE
FPRINT Outfile,"char *BCX_TmpStr (size_t Bites)"
FPRINT Outfile,"{"
FPRINT Outfile," static int StrCnt;"
FPRINT Outfile," static char *StrFunc[65535];"
FPRINT Outfile," StrCnt=(StrCnt + 1) & 65535;"
FPRINT Outfile," if(StrFunc[StrCnt]) free (StrFunc[StrCnt]);"
FPRINT Outfile," #if defined BCX_MAX_VAR_SIZE"
FPRINT Outfile," if(Bites*sizeof(char)>BCX_MAX_VAR_SIZE)"
FPRINT Outfile," {"
FPRINT Outfile," printf(",ENC$("Buffer Overflow caught in BCX_TmpStr - requested space of %d EXCEEDS %d\\n"),",(int)(Bites*sizeof(char)),BCX_MAX_VAR_SIZE);"
FPRINT Outfile," abort();"
FPRINT Outfile," }"
FPRINT Outfile," #endif"
FPRINT Outfile," return StrFunc[StrCnt]=(char*)calloc(Bites+128,sizeof(char));"
FPRINT Outfile,"}\n\n"
END IF
END IF
IF Use_CopyFile THEN
FPRINT Outfile,"void CopyFile (char *InFile,char *TmpFile,int OverWrite)"
FPRINT Outfile,"{"
FPRINT Outfile," #define BLOCKCOPYSIZE (10 * 1000*1024)"
FPRINT Outfile," char* tmp=0;"
FPRINT Outfile," UINT blocks=1;"
FPRINT Outfile," UINT overage=0;"
FPRINT Outfile," UINT i;"
FPRINT Outfile," FILE *FP1,*FP2;"
FPRINT Outfile," if(!OverWrite)"
FPRINT Outfile," {"
FPRINT Outfile," if(Exist(TmpFile)) return;"
FPRINT Outfile," }"
FPRINT Outfile," if(Exist(InFile))"
FPRINT Outfile," {"
FPRINT Outfile," UINT length = lof(InFile);"
FPRINT Outfile," if(length > BLOCKCOPYSIZE)"
FPRINT Outfile," {"
FPRINT Outfile," blocks = length/BLOCKCOPYSIZE;"
FPRINT Outfile," overage= length % BLOCKCOPYSIZE;"
FPRINT Outfile," length = BLOCKCOPYSIZE;"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," tmp=(char*)calloc(16+length,1);"
FPRINT Outfile,""
FPRINT Outfile," if((FP1=fopen(InFile,",ENC$("rb"),"))==0)"
FPRINT Outfile," {"
FPRINT Outfile," fprintf(stderr,",ENC$("Can't open file %s\\n"),",InFile);"
FPRINT Outfile," exit(1);"
FPRINT Outfile," }"
FPRINT Outfile," if((FP2=fopen(TmpFile,",ENC$("wb+"),"))==0)"
FPRINT Outfile," {"
FPRINT Outfile," fprintf(stderr,",ENC$("Can't open file %s\\n"),",TmpFile);"
FPRINT Outfile," exit(1);"
FPRINT Outfile," }"
FPRINT Outfile," for(i=0; i<blocks; i+=1)"
FPRINT Outfile," {"
FPRINT Outfile," fread(tmp,1,length,FP1);"
FPRINT Outfile," fwrite(tmp,1,length,FP2);"
FPRINT Outfile," }"
FPRINT Outfile," if(overage>0)"
FPRINT Outfile," {"
FPRINT Outfile," fread(tmp,1,overage,FP1);"
FPRINT Outfile," fwrite(tmp,1,overage,FP2);"
FPRINT Outfile," }"
FPRINT Outfile," fclose(FP2); fclose(FP1);"
FPRINT Outfile," if(tmp) free(tmp);"
FPRINT Outfile," struct stat st;"
FPRINT Outfile," if(stat(InFile, &st) != -1)"
FPRINT Outfile," chmod(TmpFile,st.st_mode);"
FPRINT Outfile," }"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Str_Cmp THEN
FPRINT Outfile,"int str_cmp (char *a, char *b)"
FPRINT Outfile,"{"
FPRINT Outfile," int counter=0;"
FPRINT Outfile," for(;;)"
FPRINT Outfile," {"
FPRINT Outfile," if((a[counter]^b[counter]))"
FPRINT Outfile," {"
FPRINT Outfile," if((UINT) a[counter]>= (UINT) b[counter])"
FPRINT Outfile," return 1;"
FPRINT Outfile," return -1;"
FPRINT Outfile," }"
FPRINT Outfile," if(!a[counter]) return 0;"
FPRINT Outfile," counter++;"
FPRINT Outfile," }"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Eof THEN
FPRINT Outfile,"int EoF (FILE* stream)"
FPRINT Outfile,"{"
FPRINT Outfile," int c, status = ((c = fgetc(stream)) == EOF);"
FPRINT Outfile," ungetc(c,stream);"
FPRINT Outfile," return status;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cint THEN
FPRINT Outfile,"int Cint (double A)"
FPRINT Outfile,"{"
FPRINT Outfile," return (A >=0 ? (int)(A+0.5) : (int)(A-0.5));"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Clng THEN
FPRINT Outfile,"long CLNG (double A)"
FPRINT Outfile,"{"
FPRINT Outfile," float r=.5;"
FPRINT Outfile," double a=A-(long)A;"
FPRINT Outfile," if(A<0) { r=-.5; a=-a; }"
FPRINT Outfile," if(((long)A % 2)==0&&a<=.5)"
FPRINT Outfile," return (long)A;"
FPRINT Outfile," else"
FPRINT Outfile," return (long)(A+r);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Left THEN
FPRINT Outfile,"char *left (char *S, int length)"
FPRINT Outfile,"{"
FPRINT Outfile," int tmplen = strlen(S);"
FPRINT Outfile," if(length<1) return BCX_TmpStr(1);"
FPRINT Outfile," if(length<tmplen) tmplen=length;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(tmplen);"
FPRINT Outfile," return (char*)memcpy(strtmp,S,tmplen);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Right THEN
FPRINT Outfile,"char *right (char *S, int length)"
FPRINT Outfile,"{"
FPRINT Outfile," int tmplen = strlen(S);"
FPRINT Outfile," char *BCX_RetStr = BCX_TmpStr(tmplen);"
FPRINT Outfile," tmplen -= length;"
FPRINT Outfile," if (tmplen<0) tmplen = 0;"
FPRINT Outfile," return strcpy(BCX_RetStr, &S[tmplen]);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Rpad THEN
FPRINT Outfile,"char *rpad (char *a, int L, int c)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp;"
FPRINT Outfile," int s = strlen(a);"
FPRINT Outfile," if((L-s)<1) return a;"
FPRINT Outfile," strtmp=BCX_TmpStr(L);"
FPRINT Outfile," strcpy(strtmp,a);"
FPRINT Outfile," memset(&strtmp[s],c,(L-s));"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Lpad THEN
FPRINT Outfile,"char *lpad (char *a, int L, int c)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp;"
FPRINT Outfile," L=L-strlen(a);"
FPRINT Outfile," if(L<1) return a;"
FPRINT Outfile," strtmp = BCX_TmpStr(L);"
FPRINT Outfile," memset(strtmp,c,L);"
FPRINT Outfile," return strcat(strtmp,a);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mid THEN
FPRINT Outfile,"char *mid (char *S, int start, int length)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp;"
FPRINT Outfile," int tmplen = strlen(S);"
FPRINT Outfile," if(start>tmplen||start<1) return BCX_TmpStr(1);"
FPRINT Outfile," if (length<0 || length>(tmplen-start)+1)"
FPRINT Outfile," length = (tmplen-start)+1;"
FPRINT Outfile," strtmp = BCX_TmpStr(length);"
FPRINT Outfile," return (char*)memcpy(strtmp,&S[start-1],length);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Trim THEN
FPRINT Outfile,"char *trim (char *S)"
FPRINT Outfile,"{"
FPRINT Outfile," while(*S==32 || *S==9 || *S==10 || *S==11 || *S==13)"
' tab ,carriage return, vertical tab, newline, space
FPRINT Outfile," S++;"
FPRINT Outfile," int i = strlen(S);"
FPRINT Outfile," while( i>0 && (S[i-1]==32 || S[i-1]==9 || S[i-1]==10"
FPRINT Outfile," || S[i-1]==11 || S[i-1]==13))"
FPRINT Outfile," i--;"
FPRINT Outfile," char *strtmp=BCX_TmpStr(i);"
FPRINT Outfile," return (char*)memcpy(strtmp,S,i);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Ltrim THEN
FPRINT Outfile,"char *ltrim (char *S, char c)"
FPRINT Outfile,"{"
FPRINT Outfile," if(S[0]==0) return S;"
FPRINT Outfile," while((*S==32 || *S==c) && *S !=0) S++;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(strlen(S));"
FPRINT Outfile," return strcpy(strtmp,S);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Rtrim THEN
FPRINT Outfile,"char *rtrim (char *S,char c)"
FPRINT Outfile,"{"
FPRINT Outfile," if(S[0]==0) return S;"
FPRINT Outfile," int i = strlen(S);"
FPRINT Outfile," while(i>0 && (S[i-1]==c || S[i-1]==32))"
FPRINT Outfile," i--;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(i);"
FPRINT Outfile," return (char*)memcpy(strtmp,S,i);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Strim THEN
FPRINT Outfile,"char *strim (char *src)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(strlen(src));"
FPRINT Outfile," char *dst = strtmp;"
FPRINT Outfile," while (isspace((unsigned char)*src)) src++;"
FPRINT Outfile," do"
FPRINT Outfile," {"
FPRINT Outfile," while (*src && !isspace((unsigned char)*src)) *dst++ = *src++;"
FPRINT Outfile," if (*src)"
FPRINT Outfile," {"
FPRINT Outfile," *dst++ = *src++;"
FPRINT Outfile," while (isspace((unsigned char)*src)) src++;"
FPRINT Outfile," }"
FPRINT Outfile," } while (*src);"
FPRINT Outfile," if (isspace((unsigned char)*(--dst))) *dst = 0;"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Command THEN
FPRINT Outfile,"char *command (int nArg)"
FPRINT Outfile," {"
FPRINT Outfile," int i = 0;"
FPRINT Outfile," char *retstr=BCX_TmpStr(1);"
FPRINT Outfile," if(nArg < i) // return entire commandline"
FPRINT Outfile," {"
FPRINT Outfile," retstr = BCX_TmpStr(G_argc * 2048);"
FPRINT Outfile," for(i=1; i < G_argc; i++)"
FPRINT Outfile," {"
FPRINT Outfile," strcat(retstr, G_argv[i]);"
FPRINT Outfile," strcat(retstr, SPC);"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," else if(nArg < G_argc)"
FPRINT Outfile," {"
FPRINT Outfile," retstr = BCX_TmpStr(strlen(G_argv[nArg]) + 1);"
FPRINT Outfile," strcpy(retstr, G_argv[nArg]);"
FPRINT Outfile," }"
FPRINT Outfile," return retstr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Extract THEN
FPRINT Outfile,"char *extract (char *mane, char *match)"
FPRINT Outfile,"{"
FPRINT Outfile," char *a;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(strlen(mane));"
FPRINT Outfile," if(*match!=0)"
FPRINT Outfile," {"
FPRINT Outfile," a=_strstr_(mane,match);"
FPRINT Outfile," if(a) return (char*)memcpy(strtmp,mane,a-mane);"
FPRINT Outfile," }"
FPRINT Outfile," return strcpy(strtmp,mane);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Remain THEN
FPRINT Outfile,"char *remain (char *mane, char *mat)"
FPRINT Outfile,"{"
FPRINT Outfile," char *p = strstr(mane,mat);"
FPRINT Outfile," if(p)"
FPRINT Outfile," {"
FPRINT Outfile," p+=(strlen(mat));"
FPRINT Outfile," return p;"
FPRINT Outfile," }"
FPRINT Outfile," return mane;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Replace THEN
FPRINT Outfile,"char *replace (char *src, char *pat, char *rep)"
FPRINT Outfile,"{"
FPRINT Outfile," size_t patsz, repsz, tmpsz, delta;"
FPRINT Outfile," char *strtmp, *p, *q, *r;"
FPRINT Outfile," if (!pat || !*pat)"
FPRINT Outfile," {"
FPRINT Outfile," strtmp = BCX_TmpStr(strlen(src));"
FPRINT Outfile," if (!strtmp) return NULL;"
FPRINT Outfile," return strcpy(strtmp, src);"
FPRINT Outfile," }"
FPRINT Outfile," repsz = strlen(rep);"
FPRINT Outfile," patsz = strlen(pat);"
FPRINT Outfile," for (tmpsz=0, p=src; (q=_strstr_(p,pat))!=0; p=q+patsz)"
FPRINT Outfile," tmpsz += (size_t) (q - p) + repsz;"
FPRINT Outfile," tmpsz += strlen(p);"
FPRINT Outfile," strtmp = BCX_TmpStr(tmpsz);"
FPRINT Outfile," if (!strtmp) return NULL;"
FPRINT Outfile," for (r=strtmp,p=src; (q=_strstr_(p,pat))!=0;p=q+patsz)"
FPRINT Outfile," {"
FPRINT Outfile," delta = (size_t) (q-p);"
FPRINT Outfile," memcpy(r,p,delta); r += delta;"
FPRINT Outfile," strcpy(r,rep); r += repsz;"
FPRINT Outfile," }"
FPRINT Outfile," strcpy(r,p);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Reverse THEN
FPRINT Outfile,"char *reverse (char *s)"
FPRINT Outfile,"{"
FPRINT Outfile," int j=strlen(s);"
FPRINT Outfile," char *rstr = BCX_TmpStr(j);"
FPRINT Outfile," while(j) rstr[--j] = *(s++);"
FPRINT Outfile," return rstr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Findfirst THEN
FPRINT Outfile,"char *findfirst (char *filespec, FILE_FIND_DATA *FindData)"
FPRINT Outfile,"{"
FPRINT Outfile," struct dirent *dp;"
FPRINT Outfile," struct stat st;"
FPRINT Outfile,""
FPRINT Outfile," if(FindData->FileHandle)"
FPRINT Outfile," closedir(FindData->FileHandle);"
FPRINT Outfile,""
FPRINT Outfile," strcpy(FindData->path, BcxSplitPath(filespec, FDRV|FPATH));"
FPRINT Outfile," strcpy(FindData->cFileSpec,BcxSplitPath(filespec, FNAME|FEXT));"
FPRINT Outfile," if(*FindData->path==0) strcpy(FindData->path, ",ENC$("."),");"
FPRINT Outfile,""
FPRINT Outfile," FindData->FileHandle=opendir(FindData->path);"
FPRINT Outfile,""
FPRINT Outfile," while(FindData->FileHandle)"
FPRINT Outfile," {"
FPRINT Outfile," dp=readdir(FindData->FileHandle);"
FPRINT Outfile," if(dp==NULL) break;"
FPRINT Outfile,""
FPRINT Outfile," if(like(dp->d_name,FindData->cFileSpec))"
FPRINT Outfile," {"
FPRINT Outfile," strcpy(FindData->cFileName,dp->d_name);"
FPRINT Outfile," lstat(join(2,FindData->path,dp->d_name), &st);"
FPRINT Outfile," FindData->dwFileAttributes = st.st_mode;"
FPRINT Outfile," return FindData->cFileName;"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," *FindData->cFileName=0;"
FPRINT Outfile," return FindData->cFileName;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Findnext THEN
FPRINT Outfile,"char *findnext (FILE_FIND_DATA *FindData)"
FPRINT Outfile,"{"
FPRINT Outfile," struct dirent *dp;"
FPRINT Outfile," struct stat st;"
FPRINT Outfile,""
FPRINT Outfile," while(FindData->FileHandle)"
FPRINT Outfile," {"
FPRINT Outfile," dp=readdir(FindData->FileHandle);"
FPRINT Outfile," if(dp==NULL) break;"
FPRINT Outfile,""
FPRINT Outfile," if(like(dp->d_name,FindData->cFileSpec))"
FPRINT Outfile," {"
FPRINT Outfile," strcpy(FindData->cFileName,dp->d_name);"
FPRINT Outfile," lstat(join(2,FindData->path,dp->d_name), &st);"
FPRINT Outfile," FindData->dwFileAttributes = st.st_mode;"
FPRINT Outfile," return FindData->cFileName;"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," *FindData->cFileName=0;"
FPRINT Outfile," return FindData->cFileName;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Ucase THEN
FPRINT Outfile,"char *ucase (char *S)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(strlen(S));"
FPRINT Outfile," return _strupr_(strcpy(strtmp,S));"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Lcase THEN
FPRINT Outfile,"char *lcase (char *S)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(strlen(S));"
FPRINT Outfile," return _strlwr_(strcpy(strtmp,S));"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mcase THEN
FPRINT Outfile,"char *mcase (char *S)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(strlen(S)+1);"
FPRINT Outfile," char *s = strtmp;"
FPRINT Outfile," _strlwr_(strcpy(strtmp,S));"
FPRINT Outfile," while(*s)"
FPRINT Outfile," {"
FPRINT Outfile," if(islower(*s))"
FPRINT Outfile," {"
FPRINT Outfile," *s-=32;"
FPRINT Outfile," while(isalpha(*++s));"
FPRINT Outfile," }"
FPRINT Outfile," s++;"
FPRINT Outfile," }"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Remove THEN
FPRINT Outfile,"char *RemoveStr (char *a, char *b)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp, *p, *d;"
FPRINT Outfile," int tmplen;"
FPRINT Outfile," strtmp = d = BCX_TmpStr(strlen(a));"
FPRINT Outfile," if(!b || !*b) return strcpy(strtmp,a);"
FPRINT Outfile," p=_strstr_(a,b); tmplen = strlen(b);"
FPRINT Outfile," while(p)"
FPRINT Outfile," {"
FPRINT Outfile," memcpy(d,a,p-a);"
FPRINT Outfile," d+= (p-a);"
FPRINT Outfile," a=p+tmplen;"
FPRINT Outfile," p=_strstr_(a,b);"
FPRINT Outfile," }"
FPRINT Outfile," strcpy(d,a);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_IRemove THEN
FPRINT Outfile,"char *IRemoveStr (char *a, char *b)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp, *p, *d;"
FPRINT Outfile," int tmplen;"
FPRINT Outfile," strtmp = d = BCX_TmpStr(strlen(a));"
FPRINT Outfile," if(!b || !*b) return strcpy(strtmp,a);"
FPRINT Outfile," p=_stristr_(a,b); tmplen = strlen(b);"
FPRINT Outfile," while(p)"
FPRINT Outfile," {"
FPRINT Outfile," memcpy(d,a,p-a);"
FPRINT Outfile," d+= (p-a);"
FPRINT Outfile," a=p+tmplen;"
FPRINT Outfile," p=_stristr_(a,b);"
FPRINT Outfile," }"
FPRINT Outfile," strcpy(d,a);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Ins THEN
FPRINT Outfile,"char *ins (char *S, int i, char *a)"
FPRINT Outfile,"{"
FPRINT Outfile," int j = strlen(S);"
FPRINT Outfile," if(i<1 || i>j+1) return S;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(j + strlen(a));"
FPRINT Outfile," memcpy(strtmp,S,--i);"
FPRINT Outfile," strcpy(&strtmp[i],a);"
FPRINT Outfile," return strcat(strtmp,&S[i]);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Del THEN
FPRINT Outfile,"char *del (char *S, int i, int j)"
FPRINT Outfile,"{"
FPRINT Outfile," int ln = strlen(S);"
FPRINT Outfile," if(i<1 || i>ln) return S;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(ln);"
FPRINT Outfile," memcpy(strtmp,S,--i);"
FPRINT Outfile," return strcat(strtmp,&S[i+j]);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Str THEN
FPRINT Outfile,"char *str (double d)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(16);"
FPRINT Outfile," sprintf(strtmp,";D1$;",d);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Strl THEN
FPRINT Outfile,"char *strl (long double d)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(27);"
FPRINT Outfile," sprintf(strtmp,";D2$;",d);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Curdir THEN
FPRINT Outfile,"char *curdir (void)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2048);"
FPRINT Outfile," char *res=getcwd(strtmp, 1024);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Hex THEN
FPRINT Outfile,"char *hex (int a)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(16);"
FPRINT Outfile," sprintf(strtmp,";enc$("%02X");",a);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Tempdir THEN
FPRINT Outfile,"char *tempdir (void)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2048);"
FPRINT Outfile," if(!Exist(";enc$("/tmp/mbc.compiler");")) {"
FPRINT Outfile," mkdir (";enc$("/tmp/mbc.compiler");",0755);"
FPRINT Outfile," }"
FPRINT Outfile," strcpy(strtmp,";enc$("/tmp/mbc.compiler");");"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Sysdir THEN
FPRINT Outfile,"char *sysdir (void)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2048);"
FPRINT Outfile," GetSystemDirectory (strtmp,2048);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Repeat THEN
FPRINT Outfile,"char *repeat (int count, char *a)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr((1+count)*strlen(a));"
FPRINT Outfile," while(count-->0) strtmp = strcat(strtmp, a);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_String THEN
FPRINT Outfile,"char *stringx (int count, int a)"
FPRINT Outfile,"{"
FPRINT Outfile," if(count<1) return BCX_TmpStr(1);"
FPRINT Outfile," char *strtmp = BCX_TmpStr(count);"
FPRINT Outfile," return (char*)memset(strtmp,a,count);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Shell THEN
FPRINT Outfile,"void Shell (char *cmd)"
FPRINT Outfile,"{"
FPRINT Outfile," int res=system(cmd);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Space THEN
FPRINT Outfile,"char *space (int count)"
FPRINT Outfile,"{"
FPRINT Outfile," if(count<1) return BCX_TmpStr(1);"
FPRINT Outfile," char *strtmp = BCX_TmpStr(count);"
FPRINT Outfile," return (char*)memset(strtmp,32,count);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Time THEN
FPRINT Outfile,"char *timef (int t)"
FPRINT Outfile,"{"
FPRINT Outfile," time_t elapse_time;"
FPRINT Outfile," struct tm *tp;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(256);"
FPRINT Outfile," time (&elapse_time);"
FPRINT Outfile," tp = localtime(&elapse_time);"
FPRINT Outfile," switch (t)"
FPRINT Outfile," {"
FPRINT Outfile," case 0:"
FPRINT Outfile," strftime(strtmp,256,",T0$, ",tp); break;"
FPRINT Outfile," case 1:"
FPRINT Outfile," strftime(strtmp,256,",T1$, ",tp); break;"
FPRINT Outfile," case 2:"
FPRINT Outfile," strftime(strtmp,256,",T2$, ",tp); break;"
FPRINT Outfile," case 3:"
FPRINT Outfile," strftime(strtmp,256,",T3$, ",tp); break;"
FPRINT Outfile," case 4:"
FPRINT Outfile," strftime(strtmp,256,",T4$, ",tp); break;"
FPRINT Outfile," case 5:"
FPRINT Outfile," strftime(strtmp,256,",T5$, ",tp); break;"
FPRINT Outfile," case 6:"
FPRINT Outfile," strftime(strtmp,256,",T6$, ",tp); break;"
FPRINT Outfile," case 7:"
FPRINT Outfile," strftime(strtmp,256,",T7$, ",tp); break;"
FPRINT Outfile," case 8:"
FPRINT Outfile," strftime(strtmp,256,",T8$, ",tp); break;"
FPRINT Outfile," case 9:"
FPRINT Outfile," strftime(strtmp,256,",T9$, ",tp); break;"
FPRINT Outfile," case 10:"
FPRINT Outfile," strftime(strtmp,256,",T10$, ",tp); break;"
FPRINT Outfile," case 11:"
FPRINT Outfile," strftime(strtmp,256,",T11$, ",tp); break;"
FPRINT Outfile," case 12:"
FPRINT Outfile," strftime(strtmp,256,",T12$, ",tp); break;"
FPRINT Outfile," case 13:"
FPRINT Outfile," strftime(strtmp,256,",T13$, ",tp); break;"
FPRINT Outfile," }"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Enclose THEN
FPRINT Outfile,"char *enc (char *A, int L, int R)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr = BCX_TmpStr(strlen(A)+3);"
FPRINT Outfile," if(L==0) L=34;"
FPRINT Outfile," if(R==0) R=L;"
FPRINT Outfile," sprintf(BCX_RetStr,",ENC$("%c%s%c%s"),",L,A,R,",ENC$("\0"),");"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Chr THEN
FPRINT Outfile,"char *chr (int a,int b,int c,int d,int e,int f,int g,int h,int i,int j)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(11);"
FPRINT Outfile," strtmp[0] = a;"
FPRINT Outfile," strtmp[1] = b;"
FPRINT Outfile," strtmp[2] = c;"
FPRINT Outfile," strtmp[3] = d;"
FPRINT Outfile," strtmp[4] = e;"
FPRINT Outfile," strtmp[5] = f;"
FPRINT Outfile," strtmp[6] = g;"
FPRINT Outfile," strtmp[7] = h;"
FPRINT Outfile," strtmp[8] = i;"
FPRINT Outfile," strtmp[9] = j;"
FPRINT Outfile," strtmp[10] = 0;"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_VChr THEN
FPRINT Outfile,"char *vchr(int charcount, ...)"
FPRINT Outfile,"{"
FPRINT Outfile," int c = 0, i = charcount;"
FPRINT Outfile," char *s_ = BCX_TmpStr(charcount + 1);"
FPRINT Outfile," va_list marker;"
FPRINT Outfile," s_[i] = 0;"
FPRINT Outfile," va_start(marker, charcount);"
FPRINT Outfile," while(i-- > 0) s_[c++] = va_arg(marker,int);"
FPRINT Outfile," va_end(marker);"
FPRINT Outfile," return s_;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Join THEN
FPRINT Outfile,"char * join(int n, ...)"
FPRINT Outfile,"{"
FPRINT Outfile," int i = n, tmplen = 0;"
FPRINT Outfile," char *strtmp, *s_;"
FPRINT Outfile,""
FPRINT Outfile," va_list marker;"
FPRINT Outfile," va_start(marker, n); // Initialize variable arguments"
FPRINT Outfile," while(i-- > 0)"
FPRINT Outfile," {"
FPRINT Outfile," s_ = va_arg(marker, char *);"
FPRINT Outfile," if(s_) tmplen += strlen(s_);"
FPRINT Outfile," }"
FPRINT Outfile," strtmp = BCX_TmpStr(tmplen);"
FPRINT Outfile," va_end(marker); // Reset variable arguments"
FPRINT Outfile," i = n;"
FPRINT Outfile," va_start(marker, n); // Initialize variable arguments"
FPRINT Outfile," while(i-- > 0)"
FPRINT Outfile," {"
FPRINT Outfile," s_ = va_arg(marker, char *);"
FPRINT Outfile," if(s_) strcat(strtmp, s_);"
FPRINT Outfile," }"
FPRINT Outfile," va_end(marker); // Reset variable arguments"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Environ THEN
FPRINT Outfile,"char* Environ(char *S)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp, *tmp;"
FPRINT Outfile,""
FPRINT Outfile," tmp = getenv(S);"
FPRINT Outfile," if(tmp != NULL) {"
FPRINT Outfile," strtmp = BCX_TmpStr(strlen(tmp)+1);"
FPRINT Outfile," return strcpy(strtmp, tmp);"
FPRINT Outfile," }"
FPRINT Outfile," return BCX_TmpStr(1);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Oct THEN
FPRINT Outfile,"char *oct (int a)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2048);"
FPRINT Outfile," sprintf(strtmp,";O1$;",a);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Bin THEN
FPRINT Outfile,"char* Bin(int number)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2048);"
FPRINT Outfile," itoa(number,strtmp,2);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Pause THEN
FPRINT Outfile,"void Pause(void)"
FPRINT Outfile,"{"
FPRINT Outfile," printf(", ENC$("\\n%s\\n"), ",", ENC$("Press any key to continue . . ."), ");"
FPRINT Outfile," _getch_(TRUE);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Keypress THEN
FPRINT Outfile,"int keypress(void)"
FPRINT Outfile,"{"
FPRINT Outfile," return _getch_(TRUE);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Inkey THEN
FPRINT Outfile,"char* inkey(void)"
FPRINT Outfile,"{"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2);"
FPRINT Outfile," strtmp[0] = _getch_(FALSE);"
FPRINT Outfile," if(strtmp[0] == -1) strtmp[0] = 0;"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_InkeyD THEN
FPRINT Outfile,"int inkeyd(void)"
FPRINT Outfile,"{"
FPRINT Outfile," return _getch_(TRUE);"
FPRINT Outfile,"}\n\n"
END IF
'/***** 2010-12-08 Added to support INSTAT -AIR *****/
IF Use_Instat THEN
FPRINT Outfile,"int kbhit(void)"
FPRINT Outfile,"{"
FPRINT Outfile," struct termios oldt, newt;"
FPRINT Outfile," int ch;"
FPRINT Outfile," int oldf;"
FPRINT Outfile," tcgetattr(STDIN_FILENO, &oldt);"
FPRINT Outfile," newt = oldt;"
FPRINT Outfile," newt.c_lflag &= ~(ICANON | ECHO);"
FPRINT Outfile," tcsetattr(STDIN_FILENO, TCSANOW, &newt);"
FPRINT Outfile," oldf = fcntl(STDIN_FILENO, F_GETFL, 0);"
FPRINT Outfile," fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);"
FPRINT Outfile," ch = getchar();"
FPRINT Outfile," tcsetattr(STDIN_FILENO, TCSANOW, &oldt);"
FPRINT Outfile," fcntl(STDIN_FILENO, F_SETFL, oldf);"
FPRINT Outfile," if(ch != EOF)"
FPRINT Outfile," {"
FPRINT Outfile," ungetc(ch, stdin);"
FPRINT Outfile," return 1;"
FPRINT Outfile," }"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_GetCh THEN
FPRINT Outfile,"int _getch_(int waitkey)"
FPRINT Outfile,"{"
FPRINT Outfile," struct termios initial_settings, new_settings;"
FPRINT Outfile," unsigned char ch;"
FPRINT Outfile,""
FPRINT Outfile," tcgetattr(0,&initial_settings);"
FPRINT Outfile," new_settings = initial_settings;"
FPRINT Outfile," new_settings.c_lflag &= ~ICANON;"
FPRINT Outfile," new_settings.c_lflag &= ~ECHO;"
FPRINT Outfile," new_settings.c_lflag &= ~ISIG;"
FPRINT Outfile," new_settings.c_cc[VMIN] = waitkey;"
FPRINT Outfile," new_settings.c_cc[VTIME] = 0;"
FPRINT Outfile," tcsetattr(0, TCSANOW, &new_settings);"
FPRINT Outfile,""
FPRINT Outfile," //read(0,&ch,1);"
FPRINT Outfile," ch = getchar();"
FPRINT Outfile," tcsetattr(0, TCSANOW, &initial_settings);"
FPRINT Outfile," return ch;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Now THEN
FPRINT Outfile,"char *now (void)"
FPRINT Outfile,"{"
FPRINT Outfile," time_t elapse_time;"
FPRINT Outfile," struct tm *tp;"
FPRINT Outfile," char *strtmp = BCX_TmpStr(2048);"
FPRINT Outfile," time(&elapse_time);"
FPRINT Outfile," tp=localtime(&elapse_time);"
FPRINT Outfile," strftime(strtmp,256,", ENC$("%m/%d/%y %I:%M:%S: %p"), ",tp);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}"
END IF
IF Use_AppExePath THEN
FPRINT Outfile,"char *AppExePath (void)"
FPRINT Outfile,"{"
FPRINT Outfile," char fullpath[MAX_PATH];"
FPRINT Outfile," int length;"
!#if defined (__APPLE__)
FPRINT Outfile," pid_t pid = getpid();"
FPRINT Outfile," length = proc_pidpath (pid, fullpath, sizeof(fullpath));"
!#else
FPRINT Outfile," length = readlink(", ENC$("/proc/self/exe"),", fullpath, MAX_PATH);"
!#endif
FPRINT Outfile," if(length < 1) return BCX_TmpStr(1);"
FPRINT Outfile,""
FPRINT Outfile," fullpath[length] = 0;"
FPRINT Outfile," return BcxSplitPath(fullpath, FDRV|FPATH);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_AppExeName THEN
FPRINT Outfile,"char *AppExeName (void)"
FPRINT Outfile,"{"
FPRINT Outfile," return BcxSplitPath(G_argv[0], FNAME|FEXT);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_TempFileName THEN
FPRINT Outfile,"char * TempFileName (char *dr, char *prefix)"
FPRINT Outfile,"{"
FPRINT Outfile," static unsigned int count;"
FPRINT Outfile," char *f, *tmpstr = BCX_TmpStr(MAX_PATH);"
FPRINT Outfile," int i, length;"
FPRINT Outfile,""
FPRINT Outfile," if(!count) srand(time(0));"
FPRINT Outfile,""
FPRINT Outfile," if(dr) strcpy(tmpstr, dr);"
FPRINT Outfile," length = strlen(tmpstr);"
FPRINT Outfile," if(length && (tmpstr[length-1] != '\\\\' && tmpstr[length-1] != '/'))"
FPRINT Outfile," tmpstr[length++] = '/';"
FPRINT Outfile," if(prefix) strcpy(&tmpstr[length], prefix);"
FPRINT Outfile," f = &tmpstr[strlen(tmpstr)];"
FPRINT Outfile,""
FPRINT Outfile," do {"
FPRINT Outfile," count++;"
FPRINT Outfile," for(i=0; i<5; i+=1)"
FPRINT Outfile," {"
FPRINT Outfile," do {"
FPRINT Outfile," f[i]=(char)(rnd()*122);"
FPRINT Outfile," }while((f[i]<65)||(f[i]>90&&f[i]<97));"
FPRINT Outfile," }"
FPRINT Outfile," snprintf(&f[5],3,",ENC$("%x"),", count);"
FPRINT Outfile," } while (Exist(tmpstr));"
FPRINT Outfile,""
FPRINT Outfile," return tmpstr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Boolstr THEN
FPRINT Outfile,"char * BoolStr (int a)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr=BCX_TmpStr(5);"
FPRINT Outfile," if(a) return strcpy(BCX_RetStr,",ENC$("True"),");"
FPRINT Outfile," return strcpy(BCX_RetStr,",ENC$("False"),");"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Using THEN
FPRINT Outfile,"char *Using (char *Mask, double Num)"
FPRINT Outfile,"{"
FPRINT Outfile," int Spaces = 0;"
FPRINT Outfile," int CntDec = 0;"
FPRINT Outfile," int Decimals = 0;"
FPRINT Outfile," int Dollar = 0;"
FPRINT Outfile," char* BCX_RetStr = BCX_TmpStr(512);"
FPRINT Outfile," char Buf_1[512]={0};"
FPRINT Outfile," char* p = Mask;"
FPRINT Outfile," char* r;"
FPRINT Outfile," int len;"
FPRINT Outfile,""
FPRINT Outfile," while (*p)"
FPRINT Outfile," {"
FPRINT Outfile," if (*p == 36) Dollar++;"
FPRINT Outfile," if (*p == 32) Spaces++;"
FPRINT Outfile," if ((*p == 32 || *p == 35)&& CntDec) Decimals++;"
FPRINT Outfile," if (*p == 46) CntDec = 1;"
FPRINT Outfile," p++;"
FPRINT Outfile," }"
FPRINT Outfile," sprintf(Buf_1,", ENC$("%1.*f"), ",Decimals,Num);"
FPRINT Outfile,""
FPRINT Outfile," len = strlen(Buf_1)-Decimals-(Decimals>0?1:0);"
FPRINT Outfile," r = BCX_RetStr+Dollar+Spaces;"
FPRINT Outfile," p = Buf_1;"
FPRINT Outfile," while (*p)"
FPRINT Outfile," {"
FPRINT Outfile," *r++ = *p++;"
FPRINT Outfile," if (--len>2 && *(p-1) != '-' && len % 3 == 0)"
FPRINT Outfile," {"
FPRINT Outfile," *r++ = ',';"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," if(Dollar) BCX_RetStr[Spaces]=36;"
FPRINT Outfile," if(Spaces) memset(BCX_RetStr,32,Spaces);"
FPRINT Outfile,""
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_SearchPath THEN
FPRINT Outfile,"char *SEARCHPATH (char *szFile)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr=BCX_TmpStr(MAX_PATH+1);"
FPRINT Outfile," PCHAR lpbs=0;"
FPRINT Outfile," SearchPath(0,szFile,0,MAX_PATH,BCX_RetStr,&lpbs);"
FPRINT Outfile," if(lpbs) *lpbs=0;"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Instrrev THEN
FPRINT Outfile,"int InstrRev (char *s, char *p, int os, int sens)"
FPRINT Outfile,"{"
FPRINT Outfile," int sl, pl, ox;"
FPRINT Outfile," int (*cmp)(const char *, const char *, size_t );"
FPRINT Outfile,""
FPRINT Outfile," if (!s || !p) return 0;"
FPRINT Outfile," sl = strlen(s); pl = strlen(p);"
FPRINT Outfile," if (os > sl || sl == 0 || pl == 0 || (ox = sl - pl) < 0)"
FPRINT Outfile," return 0;"
FPRINT Outfile,""
FPRINT Outfile," if (os <= 0) "
FPRINT Outfile," os = ox ;"
FPRINT Outfile," else if(os >= pl)"
FPRINT Outfile," os = os - pl ;"
FPRINT Outfile," else"
FPRINT Outfile," return 0;"
FPRINT Outfile,""
FPRINT Outfile," cmp = (sens ? strncasecmp : strncmp);"
FPRINT Outfile," do { if (cmp(s + os , p, pl) == 0)"
FPRINT Outfile," return os+1;"
FPRINT Outfile," } while (os--);"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Instr THEN
FPRINT Outfile,"int instr_b(char* mane,char* match,int offset,int sensflag)"
FPRINT Outfile,"{"
FPRINT Outfile," char *s;"
FPRINT Outfile," if (!mane || !match || ! *match || offset>(int)strlen(mane)) return 0;"
FPRINT Outfile," if (sensflag)"
FPRINT Outfile," s = _stristr_(offset>0 ? mane+offset-1 : mane,match);"
FPRINT Outfile," else"
FPRINT Outfile," s = _strstr_(offset>0 ? mane+offset-1 : mane,match);"
FPRINT Outfile," return s ? (int)(s-mane)+1 : 0;"
FPRINT Outfile,"}\n\n"
END IF
IF UseLCaseTbl THEN
FPRINT Outfile,"char *MakeLCaseTbl (void)"
FPRINT Outfile,"{"
FPRINT Outfile," static char tbl[256];"
FPRINT Outfile," if(!tbl['a'])"
FPRINT Outfile," {"
FPRINT Outfile," int i; for (i=0; i < 256; i++)"
FPRINT Outfile," tbl[i] = (char)(int)tolower(i);"
FPRINT Outfile," }"
FPRINT Outfile," return tbl;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Stristr THEN
FPRINT Outfile,"char *_stristr_(char *String, char *Pattern)"
FPRINT Outfile,"{"
FPRINT Outfile," int mi=-1;"
FPRINT Outfile," char *LowCase = MakeLCaseTbl();"
FPRINT Outfile," while(Pattern[++mi])"
FPRINT Outfile," {"
FPRINT Outfile," if(String[mi]==0) return 0;"
FPRINT Outfile," if(LowCase[(unsigned char)String[mi]]!=LowCase[(unsigned char)Pattern[mi]])"
FPRINT Outfile," { String++; mi=-1; }"
FPRINT Outfile," }"
FPRINT Outfile," return String;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_StrStr THEN
FPRINT Outfile,"char *_strstr_(char *String, char *Pattern)"
FPRINT Outfile,"{"
FPRINT Outfile," int mi=-1;"
FPRINT Outfile," while(Pattern[++mi])"
FPRINT Outfile," {"
FPRINT Outfile," if(String[mi]==0) return 0;"
FPRINT Outfile," if(String[mi]!=Pattern[mi])"
FPRINT Outfile," { String++; mi=-1; }"
FPRINT Outfile," }"
FPRINT Outfile," return String;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Inchr THEN
FPRINT Outfile,"int inchr (char *A, char *B)"
FPRINT Outfile,"{"
FPRINT Outfile," char* C=A;"
FPRINT Outfile," while(*C)"
FPRINT Outfile," {"
FPRINT Outfile," if(*C==*B) return C-A+1;"
FPRINT Outfile," C++;"
FPRINT Outfile," }"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Asc THEN
FPRINT Outfile,"extern int asc (char *z,int index)"
FPRINT Outfile,"{"
FPRINT Outfile," return (unsigned char) z[index];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Sgn THEN
FPRINT Outfile,"double sgn (double a)"
FPRINT Outfile,"{"
FPRINT Outfile," if(a<0) return -1;"
FPRINT Outfile," if(a>0) return 1;"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Round THEN
FPRINT Outfile,"double Round (double n, int d)"
FPRINT Outfile,"{"
FPRINT Outfile," return (floor((n)*pow(10.0,(d))+0.5)/pow(10.0,(d)));"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Embed THEN
FPRINT Outfile,"char* GetResource (int *resource)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr={0};"
FPRINT Outfile," static char* dat;"
FPRINT Outfile," memset(&dat,0,sizeof(char *));"
FPRINT Outfile," dat=(char*)resource;"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(strlen(dat));"
FPRINT Outfile," strcpy(BCX_RetStr,dat);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Exist THEN
FPRINT Outfile,"bool Exist (char *szFilePath)"
FPRINT Outfile,"{"
FPRINT Outfile," int retstat;"
FPRINT Outfile," struct stat sb;"
FPRINT Outfile," retstat = stat(szFilePath, &sb);"
FPRINT Outfile," if(retstat != -1)"
FPRINT Outfile," return TRUE;"
FPRINT Outfile," return FALSE;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Tally THEN
FPRINT Outfile,"int tally (char *szLine, char *szChar, int sensflag)"
FPRINT Outfile,"{"
FPRINT Outfile," if(!*szChar) return 0;"
FPRINT Outfile," int mlen = strlen(szChar);"
FPRINT Outfile," int iCount = 0;"
FPRINT Outfile," char *p = (sensflag == 0 ? _strstr_(szLine, szChar) : _stristr_(szLine, szChar));"
FPRINT Outfile," while (p)"
FPRINT Outfile," {"
FPRINT Outfile," iCount++;"
FPRINT Outfile," p+=mlen;"
FPRINT Outfile," p = (sensflag == 0 ? _strstr_(p, szChar) : _stristr_(p, szChar));"
FPRINT Outfile," }"
FPRINT Outfile," return iCount;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Timer THEN
FPRINT Outfile,"float timer (void)"
FPRINT Outfile,"{"
FPRINT Outfile," return ((double)clock()/CLOCKS_PER_SEC);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Rnd THEN
FPRINT Outfile,"float rnd (void)"
FPRINT Outfile,"{"
FPRINT Outfile," return (float)rand()/RAND_MAX;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Exp THEN
FPRINT Outfile,"double Exp (double arg)"
FPRINT Outfile,"{"
FPRINT Outfile," return pow(2.718281828459045,arg);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Randomize THEN
FPRINT Outfile,"void randomize (unsigned int seed)"
FPRINT Outfile,"{"
FPRINT Outfile," srand(seed);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Max THEN
FPRINT Outfile,"double _MAX_ (double a, double b)"
FPRINT Outfile,"{"
FPRINT Outfile," if(a>b)"
FPRINT Outfile," return a;"
FPRINT Outfile," return b;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Min THEN
FPRINT Outfile,"double _MIN_ (double a, double b)"
FPRINT Outfile,"{"
FPRINT Outfile," if(a<b)"
FPRINT Outfile," return a;"
FPRINT Outfile," return b;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Locate THEN
FPRINT Outfile,"void locate (int row,int col,int show,int shape)"
FPRINT Outfile,"{"
FPRINT Outfile," printf(",ENC$("%c%s%u%s%u%s"),",27,",ENC$("["),",row,",ENC$(";"),",col,",ENC$("H"),");"
FPRINT Outfile," // find cursor size/shape function!"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cls THEN
FPRINT Outfile,"void cls (void)"
FPRINT Outfile,"{"
FPRINT Outfile," printf(",ENC$("%s%s%s%s"),",ESC,",ENC$("[2J"),",ESC,",ENC$("[H"),");"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Color THEN
FPRINT Outfile,"void color (int fg,int bg)"
FPRINT Outfile,"{"
FPRINT Outfile," printf(",ENC$("%c%s%u%s%u%s"),",27,",ENC$("["),",30+(fg&7),",ENC$(";"),",40+(bg&7),",ENC$("m"),");"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Midstr THEN
FPRINT Outfile,"void midstr (char *src, int st, int length, char *rep)"
FPRINT Outfile,"{"
FPRINT Outfile," int srclen = strlen(src);"
FPRINT Outfile," if(st>srclen++ || st<1) return;"
FPRINT Outfile," int replen = strlen(rep);"
FPRINT Outfile," if(replen < length || length==-1) length=replen;"
FPRINT Outfile," if((st+length) > srclen) length=srclen-st;"
FPRINT Outfile," memcpy(&src[st-1],rep,length);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Swap THEN
FPRINT Outfile,"void swap ( UCHAR* A, UCHAR* B, int length)"
FPRINT Outfile,"{"
FPRINT Outfile," UCHAR t;"
FPRINT Outfile," while(length--)"
FPRINT Outfile," {"
FPRINT Outfile," t = *A;"
FPRINT Outfile," *(A++) = *B;"
FPRINT Outfile," *(B++) = t;"
FPRINT Outfile," }"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Like THEN
FPRINT Outfile,"int like (char *raw, char *pat)"
FPRINT Outfile,"{"
FPRINT Outfile," char a, b, d;"
FPRINT Outfile," char *r, *p;"
FPRINT Outfile," int star = 0;"
FPRINT Outfile," for(;;) {"
FPRINT Outfile," if ((d = *pat++)==0) return (star || !*raw);"
FPRINT Outfile," else if (d == '*') star = 1;"
FPRINT Outfile," else if (d == '?') { if (!*raw++) return 0; }"
FPRINT Outfile," else break;"
FPRINT Outfile," }"
FPRINT Outfile," b = d;"
FPRINT Outfile," do if ((a = *raw++) == b) {"
FPRINT Outfile," r = raw;"
FPRINT Outfile," p = pat;"
FPRINT Outfile," do {"
FPRINT Outfile," if ((d = *p++) == '*')"
FPRINT Outfile," if (like(r, p - 1)) return 1;"
FPRINT Outfile," else break;"
FPRINT Outfile," else if (!d) {"
FPRINT Outfile," if (!*r) return 1;"
FPRINT Outfile," else break;"
FPRINT Outfile," }"
FPRINT Outfile," } while (*r++ == d || d == '?');"
FPRINT Outfile," } while (star && a);"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Lof THEN
FPRINT Outfile,"DWORD lof (char *FileName)"
FPRINT Outfile,"{"
FPRINT Outfile,""
FPRINT Outfile," int retstat;"
FPRINT Outfile," struct stat sb;"
FPRINT Outfile," retstat = stat(FileName, &sb);"
FPRINT Outfile," if(retstat != -1)"
FPRINT Outfile," return sb.st_size;"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Iif THEN
FPRINT Outfile,"double iif (bool cond, double tp, double fp)"
FPRINT Outfile,"{"
FPRINT Outfile," if(cond) return tp;"
FPRINT Outfile," return fp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_sziif THEN
FPRINT Outfile,"char * sziif (bool i, char *a, char *b)"
FPRINT Outfile,"{"
FPRINT Outfile," if(i) return a;"
FPRINT Outfile," return b;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_DynamicA THEN
FPRINT Outfile,"void *CreateArr(void *a, int elem_size, int update, int num_dims, ... )"
FPRINT Outfile,"{"
FPRINT Outfile," va_list ap;"
FPRINT Outfile," void *RetPtr;"
FPRINT Outfile,""
FPRINT Outfile," va_start(ap, num_dims);"
FPRINT Outfile," RetPtr = CreateArr_internal(a, elem_size, update, num_dims, ap);"
FPRINT Outfile," va_end(ap);"
FPRINT Outfile," return (RetPtr);"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"void *CreateArr_internal(void *a, int elem_size, int update, int num_dims, va_list ap)"
FPRINT Outfile,"{"
FPRINT Outfile," size_t s, s1, s2;"
FPRINT Outfile," void **vp;"
FPRINT Outfile," va_list marker;"
FPRINT Outfile," "
FPRINT Outfile,"#ifdef va_copy"
FPRINT Outfile," va_copy(marker, ap);"
FPRINT Outfile,"#else"
FPRINT Outfile," marker = ap;"
FPRINT Outfile,"#endif"
FPRINT Outfile," s = va_arg(marker, size_t);"
FPRINT Outfile," s2 = s + 2;"
FPRINT Outfile," if(num_dims == 1)"
FPRINT Outfile," {"
FPRINT Outfile," if(update && a)"
FPRINT Outfile," a=realloc(a,s2*elem_size);"
FPRINT Outfile," else"
FPRINT Outfile," a=calloc(s2,elem_size);"
FPRINT Outfile," return a;"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," if(update && a)"
FPRINT Outfile," {"
FPRINT Outfile," s1 = 0;"
FPRINT Outfile," vp = (void**)a;"
FPRINT Outfile," while(*vp && s1 <= s)"
FPRINT Outfile," {"
FPRINT Outfile," vp++;"
FPRINT Outfile," s1++;"
FPRINT Outfile," }"
FPRINT Outfile," if(s1 > s)"
FPRINT Outfile," {"
FPRINT Outfile," vp--;"
FPRINT Outfile," DestroyArr(vp, num_dims, 0);"
FPRINT Outfile," }"
FPRINT Outfile," a=realloc(a,s2*sizeof(int));"
FPRINT Outfile," s1 = 0;"
FPRINT Outfile," vp = (void**)a;"
FPRINT Outfile," while(*vp && s1 <= s)"
FPRINT Outfile," {"
FPRINT Outfile," vp++;"
FPRINT Outfile," s1++;"
FPRINT Outfile," }"
FPRINT Outfile," while(s1 < s2)"
FPRINT Outfile," {"
FPRINT Outfile," *(((int *)vp)) = 0;"
FPRINT Outfile," vp++;"
FPRINT Outfile," s1++;"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," a=calloc(s2*sizeof(int),1);"
FPRINT Outfile," vp = (void**)a;"
FPRINT Outfile," if(--num_dims > 0)"
FPRINT Outfile," {"
FPRINT Outfile," for(s1 = 0; s1 < s; s1++)"
FPRINT Outfile," {"
FPRINT Outfile," vp[s1] = CreateArr_internal(vp[s1], elem_size, update, num_dims, marker);"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," return a;"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"void DestroyArr (void** a,int num_dims, int top_free)"
FPRINT Outfile,"{"
FPRINT Outfile," int i = 0;"
FPRINT Outfile," static int s = 0;"
FPRINT Outfile," if(num_dims == 1)"
FPRINT Outfile," {"
FPRINT Outfile," free(a);"
FPRINT Outfile," return;"
FPRINT Outfile," }"
FPRINT Outfile," s++;"
FPRINT Outfile," num_dims--; "
FPRINT Outfile," while(a[i])"
FPRINT Outfile," {"
FPRINT Outfile," DestroyArr((void**)a[i], num_dims, top_free);"
FPRINT Outfile," if(num_dims > 1)"
FPRINT Outfile," free(a[i]);"
FPRINT Outfile," a[i++]=NULL;"
FPRINT Outfile," }"
FPRINT Outfile," s--;"
FPRINT Outfile," if(s == 0 && top_free)"
FPRINT Outfile," free(a);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Idxqsort THEN
FPRINT Outfile,"int IdxCompare (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," int *ptr1 = (int *)(one);"
FPRINT Outfile," int *ptr2 = (int *)(two);"
FPRINT Outfile," return strcasecmp (pppStr[Key][*ptr1],pppStr[Key][*ptr2]);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_IdxqsortSt THEN
FPRINT Outfile,"int IdxCompareSt (const void* one, const void* two)"
FPRINT Outfile,"{"
FPRINT Outfile,"#define compare1 cmp1+(StructSize * (*(UINT *)(one)))"
FPRINT Outfile,"#define compare2 cmp1+(StructSize * (*(UINT *)(two)))"
FPRINT Outfile,""
FPRINT Outfile," if (Key==0)" 'String
FPRINT Outfile," return strcasecmp(compare1, compare2);"
FPRINT Outfile,""
FPRINT Outfile," if (Key==1)" 'Integer
FPRINT Outfile," {"
FPRINT Outfile," if (*(int*)(compare1) < *(int*)(compare2)) return -1;"
FPRINT Outfile," if (*(int*)(compare1) > *(int*)(compare2)) return 1;"
FPRINT Outfile," return 0;"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," if (Key==2)" 'Double
FPRINT Outfile," {"
FPRINT Outfile," if (*(double*)(compare1) < *(double*)(compare2)) return -1;"
FPRINT Outfile," if (*(double*)(compare1) > *(double*)(compare2)) return 1;"
FPRINT Outfile," return 0;"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," if (Key==3)" 'Unsigned integer
FPRINT Outfile," {"
FPRINT Outfile," if (*(UINT*)(compare1) < *(UINT*)(compare2)) return -1;"
FPRINT Outfile," if (*(UINT*)(compare1) > *(UINT*)(compare2)) return 1;"
FPRINT Outfile," }"
FPRINT Outfile,"return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_PtrqsortSt THEN
FPRINT Outfile,"int PtrCompareSt (const void* one, const void* two)"
FPRINT Outfile,"{"
FPRINT Outfile,"#define pcompare1 ((char*)(one)+OffSet)"
FPRINT Outfile,"#define pcompare2 ((char*)(two)+OffSet)"
FPRINT Outfile,""
FPRINT Outfile," if (Key==0)"
FPRINT Outfile," return strcasecmp(pcompare1, pcompare2);"
FPRINT Outfile,""
FPRINT Outfile," if (Key==1)"
FPRINT Outfile," {"
FPRINT Outfile," if (*(int*)(pcompare1) < *(int*)(pcompare2)) return -1;"
FPRINT Outfile," if (*(int*)(pcompare1) > *(int*)(pcompare2)) return 1;"
FPRINT Outfile," return 0;"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," if (Key==2)"
FPRINT Outfile," {"
FPRINT Outfile," if (*(double*)(pcompare1) < *(double*)(pcompare2)) return -1;"
FPRINT Outfile," if (*(double*)(pcompare1) > *(double*)(pcompare2)) return 1;"
FPRINT Outfile," return 0;"
FPRINT Outfile," }"
FPRINT Outfile,""
FPRINT Outfile," if (Key==3)"
FPRINT Outfile," {"
FPRINT Outfile," if (*(UINT*)(pcompare1) < *(UINT*)(pcompare2)) return -1;"
FPRINT Outfile," if (*(UINT*)(pcompare1) > *(UINT*)(pcompare2)) return 1;"
FPRINT Outfile," }"
FPRINT Outfile,"return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Strqsorta THEN
FPRINT Outfile,"int StrCompareA (const void *arg1, const void *arg2)"
FPRINT Outfile,"{"
FPRINT Outfile," char *v1 = (char*) arg1;"
FPRINT Outfile," char *v2 = (char*) arg2;"
FPRINT Outfile," return strcasecmp (v1,v2);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Strqsortd THEN
FPRINT Outfile,"int StrCompareD (const void *arg1, const void *arg2)"
FPRINT Outfile,"{"
FPRINT Outfile," char *v1 = (char*) arg1;"
FPRINT Outfile," char *v2 = (char*) arg2;"
FPRINT Outfile," return strcasecmp (v2,v1);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_DynStrqsorta THEN
FPRINT Outfile,"int DynStrCompareA (const void *arg1, const void *arg2)"
FPRINT Outfile,"{"
FPRINT Outfile," char *v1 = *(char **) arg1;"
FPRINT Outfile," char *v2 = *(char **) arg2;"
FPRINT Outfile," return strcasecmp(v1, v2);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_DynStrqsortd THEN
FPRINT Outfile,"int DynStrCompareD (const void *arg1, const void *arg2)"
FPRINT Outfile,"{"
FPRINT Outfile," char *v1 = *(char **) arg1;"
FPRINT Outfile," char *v2 = *(char **) arg2;"
FPRINT Outfile," return strcasecmp(v2, v1);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Numqsortaint THEN
FPRINT Outfile,"int NumCompareAint (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," int *ptr1 = (int *)(one);"
FPRINT Outfile," int *ptr2 = (int *)(two);"
FPRINT Outfile," if (*ptr1 < *ptr2) return -1;"
FPRINT Outfile," else if (*ptr1 == *ptr2) return 0;"
FPRINT Outfile," else return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Numqsortdint THEN
FPRINT Outfile,"int NumCompareDint (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," int *ptr1 = (int *)(one);"
FPRINT Outfile," int *ptr2 = (int *)(two);"
FPRINT Outfile," if (*ptr1 > *ptr2) return -1;"
FPRINT Outfile," else if (*ptr1 == *ptr2) return 0;"
FPRINT Outfile," else return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Numqsortafloat THEN
FPRINT Outfile,"int NumCompareAfloat (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," float *ptr1 = (float *)(one);"
FPRINT Outfile," float *ptr2 = (float *)(two);"
FPRINT Outfile," if (*ptr1 < *ptr2) return -1;"
FPRINT Outfile," else if (*ptr1 == *ptr2) return 0;"
FPRINT Outfile," else return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Numqsortdfloat THEN
FPRINT Outfile,"int NumCompareDfloat (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," float *ptr1 = (float *)(one);"
FPRINT Outfile," float *ptr2 = (float *)(two);"
FPRINT Outfile," if (*ptr1 > *ptr2) return -1;"
FPRINT Outfile," else if (*ptr1 == *ptr2) return 0;"
FPRINT Outfile," else return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Numqsortadouble THEN
FPRINT Outfile,"int NumCompareAdouble (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," double *ptr1 = (double *)(one);"
FPRINT Outfile," double *ptr2 = (double *)(two);"
FPRINT Outfile," if (*ptr1 < *ptr2) return -1;"
FPRINT Outfile," else if (*ptr1 == *ptr2) return 0;"
FPRINT Outfile," else return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Numqsortddouble THEN
FPRINT Outfile,"int NumCompareDdouble (const void *one, const void *two)"
FPRINT Outfile,"{"
FPRINT Outfile," double *ptr1 = (double *)(one);"
FPRINT Outfile," double *ptr2 = (double *)(two);"
FPRINT Outfile," if (*ptr1 > *ptr2) return -1;"
FPRINT Outfile," else if (*ptr1 == *ptr2) return 0;"
FPRINT Outfile," else return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_FillArray THEN
FPRINT Outfile,"int fillarray(char *input, int ArrayType, int MaxCnt, void *Array)"
FPRINT Outfile,"{"
FPRINT Outfile," if(MaxCnt < 1) return -1;"
FPRINT Outfile," int c = 0, cnt=-1, cnt2;"
FPRINT Outfile," char A[65535];"
FPRINT Outfile," int *intptr = (int *)Array;"
FPRINT Outfile," float *floatptr = (float *)Array;"
FPRINT Outfile," double *doubleptr = (double *)Array;"
FPRINT Outfile," long double *ldoubleptr = (long double *)Array;"
FPRINT Outfile," for(;;)"
FPRINT Outfile," {"
FPRINT Outfile," cnt2=0;"
FPRINT Outfile," while(input[++cnt]!=',')"
FPRINT Outfile," {"
FPRINT Outfile," if(input[cnt]==0) break;"
FPRINT Outfile," A[cnt2++]=input[cnt];"
FPRINT Outfile," }"
FPRINT Outfile," A[cnt2]=0;"
FPRINT Outfile," if(cnt2==0||c==MaxCnt) break;"
FPRINT Outfile," "
FPRINT Outfile," if(ArrayType==2)"
FPRINT Outfile," intptr[c++] = atoi(A);"
FPRINT Outfile," else if(ArrayType==3)"
FPRINT Outfile," floatptr[c++] = atof(A);"
FPRINT Outfile," else if(ArrayType==4)"
FPRINT Outfile," doubleptr[c++] = atof(A);"
FPRINT Outfile," else if(ArrayType==5)"
FPRINT Outfile," ldoubleptr[c++] = atof(A);"
FPRINT Outfile,""
FPRINT Outfile," if(input[cnt]==0) break;"
FPRINT Outfile," } "
FPRINT Outfile," return (c-1);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Loc THEN
FPRINT Outfile,"int loc(FILE *fp, int fplen)"
FPRINT Outfile,"{"
FPRINT Outfile," fpos_t t;"
FPRINT Outfile," fgetpos(fp, &t);"
FPRINT Outfile,"#if defined( __POCC__ )"
FPRINT Outfile," t.off %= fplen;"
FPRINT Outfile," return (int)t.off;"
FPRINT Outfile,"#else"
FPRINT Outfile," t %= fplen;"
FPRINT Outfile," return (int)t;"
FPRINT Outfile,"#endif"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Rec THEN
FPRINT Outfile,"int rec(FILE *fp, int fplen)"
FPRINT Outfile,"{"
FPRINT Outfile," fpos_t t;"
FPRINT Outfile," fgetpos(fp, &t);"
FPRINT Outfile,"#if defined( __POCC__ )"
FPRINT Outfile," t.off /= fplen;"
FPRINT Outfile," return (int)++t.off;"
FPRINT Outfile,"#else"
FPRINT Outfile," t /= fplen;"
FPRINT Outfile," return (int)++t;"
FPRINT Outfile,"#endif"
FPRINT Outfile,"}\n\n"
END IF
IF Use_RecCount THEN
FPRINT Outfile,"int reccount(FILE *fp, int fplen)"
FPRINT Outfile,"{"
FPRINT Outfile," fpos_t t;"
FPRINT Outfile," fseek(fp,0,SEEK_END);"
FPRINT Outfile," fgetpos(fp, &t);"
FPRINT Outfile,"#if defined( __POCC__ )"
FPRINT Outfile," t.off /= fplen;"
FPRINT Outfile," return (int)t.off;"
FPRINT Outfile,"#else"
FPRINT Outfile," t /= fplen;"
FPRINT Outfile," return (int)t;"
FPRINT Outfile,"#endif"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Scan THEN
FPRINT Outfile,"int scan(char *input, char *format, ... )"
FPRINT Outfile,"{"
FPRINT Outfile," int c,d ;"
FPRINT Outfile," char *s_;"
FPRINT Outfile," int *intptr;"
FPRINT Outfile," float *floatptr;"
FPRINT Outfile," double *doubleptr;"
FPRINT Outfile," char A[50][65535];"
FPRINT Outfile," va_list marker;"
FPRINT Outfile," c = 0;"
FPRINT Outfile," d = Split(A,input,"; ENC$(",") ; ");"
FPRINT Outfile," va_start(marker, format); //Initialize arguments"
FPRINT Outfile," while(d && *format)"
FPRINT Outfile," {"
FPRINT Outfile," if(*format == '%') format++;"
FPRINT Outfile," if(*format == 's')"
FPRINT Outfile," {"
FPRINT Outfile," s_ = va_arg(marker, char *);"
FPRINT Outfile," strcpy(s_, A[c]);"
FPRINT Outfile," c++;"
FPRINT Outfile," d--;"
FPRINT Outfile," }"
FPRINT Outfile," if(*format == 'd')"
FPRINT Outfile," {"
FPRINT Outfile," intptr = va_arg(marker, int *);"
FPRINT Outfile," *intptr = atoi(A[c]);"
FPRINT Outfile," c++;"
FPRINT Outfile," d--;"
FPRINT Outfile," }"
FPRINT Outfile," if(*format == 'g')"
FPRINT Outfile," {"
FPRINT Outfile," floatptr = va_arg(marker, float *);"
FPRINT Outfile," *floatptr = atof(A[c]);"
FPRINT Outfile," c++;"
FPRINT Outfile," d--;"
FPRINT Outfile," }"
FPRINT Outfile," if(*format == 'l')"
FPRINT Outfile," {"
FPRINT Outfile," format++;"
FPRINT Outfile," doubleptr = va_arg(marker, double *);"
FPRINT Outfile," *doubleptr = atof(A[c]);"
FPRINT Outfile," c++;"
FPRINT Outfile," d--;"
FPRINT Outfile," }"
FPRINT Outfile," format++;"
FPRINT Outfile," }"
FPRINT Outfile," va_end(marker); // Reset variable arguments"
FPRINT Outfile," if(d) return(1); // More data than variables"
FPRINT Outfile," if(*format == 0) return(0); // OK"
FPRINT Outfile," return(-1); // More variables than data"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Split THEN
FPRINT Outfile,"int Split (char Buf[][65535], char *T, char *Delim, int Flg)"
FPRINT Outfile,"{"
FPRINT Outfile," int Begin = 0;"
FPRINT Outfile," int Count = 0;"
FPRINT Outfile," int Quote = 0;"
FPRINT Outfile," int Index,i;"
FPRINT Outfile," int lenT = strlen(T);"
FPRINT Outfile," char Chr34[2]={34,0};"
FPRINT Outfile," for(Index=1;Index<=lenT;Index++)"
FPRINT Outfile," {"
FPRINT Outfile," if(instr_b(Delim,mid(T,Index,1))&&!Quote)"
FPRINT Outfile," {"
FPRINT Outfile," strcpy(Buf[Count],(char*)mid(T,Begin,Index-Begin));"
FPRINT Outfile," if ((Flg & 2) == 0) // 0 if old version"
FPRINT Outfile," Count++;"
FPRINT Outfile," else"
FPRINT Outfile," if (Buf[Count][0] != 0) Count++;"
FPRINT Outfile," Begin=0;"
FPRINT Outfile," if((Flg & 1) == 1) // 1 if true"
FPRINT Outfile," strcpy(Buf[Count++],(char*)mid(T,Index,1));"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," {"
FPRINT Outfile," if(strcmp(mid(T,Index,1),Chr34)==0) Quote=!Quote;"
FPRINT Outfile," if(Begin==0) Begin=Index;"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," if(Begin)"
FPRINT Outfile," strcpy(Buf[Count++],(char*)mid(T,Begin,Index-Begin));"
FPRINT Outfile," if((Flg & 1) == 0) // 0 if false"
FPRINT Outfile," for(i=0;i<Count;i++) strcpy(Buf[i],(char*)RemoveStr(Buf[i],Chr34));"
FPRINT Outfile," return Count;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_DSplit THEN
FPRINT Outfile,"int DSplit (PCHAR *Buf, char *T, char *Delim, int Flg)"
FPRINT Outfile,"{"
FPRINT Outfile," int Begin=0;"
FPRINT Outfile," int Count=0;"
FPRINT Outfile," int Quote=0;"
FPRINT Outfile," int Index=0;"
FPRINT Outfile," int lenT = strlen(T);"
FPRINT Outfile," char Chr34[2]={34,0};"
FPRINT Outfile," for(Index=1;Index<=lenT;Index++)"
FPRINT Outfile," {"
FPRINT Outfile," if(instr_b(Delim,mid(T,Index,1))&&!Quote)"
FPRINT Outfile," {"
FPRINT Outfile," strcpy(Buf[Count],(char*)mid(T,Begin,Index-Begin));"
FPRINT Outfile," if ((Flg & 2) == 0) // 0 if old version"
FPRINT Outfile," Count++;"
FPRINT Outfile," else"
FPRINT Outfile," if (Buf[Count][0] != 0) Count++;"
FPRINT Outfile," Begin=0;"
FPRINT Outfile," if((Flg & 1) == 1) // 1 if true"
FPRINT Outfile," strcpy(Buf[Count++],(char*)mid(T,Index,1));"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," {"
FPRINT Outfile," if(strcmp(mid(T,Index,1),Chr34)==0) Quote=!Quote;"
FPRINT Outfile," if(Begin==0) Begin=Index;"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," if(Begin) strcpy(Buf[Count++],(char*)mid(T,Begin,Index-Begin));"
FPRINT Outfile," if((Flg & 1) == 0) // 0 if false"
FPRINT Outfile," for(Index=0;Index<Count;Index++) strcpy(Buf[Index],(char*)RemoveStr(Buf[Index],Chr34));"
FPRINT Outfile," return Count;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Bin2dec THEN
FPRINT Outfile,"int Bin2Dec (char *cptr)"
FPRINT Outfile,"{"
FPRINT Outfile," int i, j = 0;"
FPRINT Outfile," while(cptr && *cptr && strchr(";ENC$("01");", *cptr))"
FPRINT Outfile," {"
FPRINT Outfile," i = *cptr++ - '0';"
FPRINT Outfile," j <<= 1;"
FPRINT Outfile," j |= (i & 0x01);"
FPRINT Outfile," }"
FPRINT Outfile," return(j);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Hex2Dec THEN
FPRINT Outfile,"int Hex2Dec (char *szInput)"
FPRINT Outfile,"{"
FPRINT Outfile," char ch;"
FPRINT Outfile," char *dwLen = szInput+strlen(szInput);"
FPRINT Outfile," char *LowCase = MakeLCaseTbl();"
FPRINT Outfile," DWORD dwOut = 0;"
FPRINT Outfile," while(*szInput)"
FPRINT Outfile," {"
FPRINT Outfile," ch = LowCase[(unsigned char)*szInput++];"
FPRINT Outfile," if((ch >= 'a' && ch <= 'f') || (ch >= '0' && ch <= '9'))"
FPRINT Outfile," dwOut |=((int)ch - (ch>'9' ? 'a'-10 : '0')) << ((dwLen - szInput) << 2);"
FPRINT Outfile," }"
FPRINT Outfile," return dwOut;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Verify THEN
FPRINT Outfile,"int Verify (char *Src, char *Allowed)"
FPRINT Outfile,"{"
FPRINT Outfile," int i, j;"
FPRINT Outfile," for (i=1; i<=strlen(Src); i++)"
FPRINT Outfile," {"
FPRINT Outfile," j=VerifyInstr(Allowed,mid(Src,i,1));"
FPRINT Outfile," if (!j) return 0;"
FPRINT Outfile," }"
FPRINT Outfile," return TRUE;"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"int VerifyInstr(char* mane,char* match,int offset)"
FPRINT Outfile,"{"
FPRINT Outfile," char *s;"
FPRINT Outfile," if (!mane || !match || !*match || offset>(int)strlen(mane)) return 0;"
FPRINT Outfile," s = strstr (offset>0 ? mane+offset-1 : mane,match);"
FPRINT Outfile," return s ? (int)(s-mane)+1 : 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Retain THEN
FPRINT Outfile,"char *Retain (char *Text, char *ValidChars)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr=BCX_TmpStr(strlen(Text));"
FPRINT Outfile," char *temp=BCX_RetStr;"
FPRINT Outfile," while(*Text)"
FPRINT Outfile," {"
FPRINT Outfile," if(strchr(ValidChars,*Text)) *(temp++) = *Text;"
FPRINT Outfile," Text++;"
FPRINT Outfile," }"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_LoadFile THEN
FPRINT Outfile,"char* LoadFile (char *N)"
FPRINT Outfile,"{"
FPRINT Outfile," FILE* FP1;"
FPRINT Outfile," char* BCX_RetStr;"
FPRINT Outfile," if(Exist(N))"
FPRINT Outfile," {"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(lof(N));"
FPRINT Outfile," if((FP1=fopen(N,", ENC$("rb"), "))!=0)"
FPRINT Outfile," GET(FP1,BCX_RetStr,lof(N));"
FPRINT Outfile," fclose(FP1);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," {"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(64);"
FPRINT Outfile," return strcpy(BCX_RetStr,", ENC$("File Not Found"), ");"
FPRINT Outfile," }"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Freefile THEN
FPRINT Outfile,"FILE* FreeFile (void)"
FPRINT Outfile,"{"
FPRINT Outfile," static FILE *pf;"
FPRINT Outfile," if(pf){free(pf);pf=NULL;}"
FPRINT Outfile," pf = (FILE*)calloc(sizeof(FILE*),sizeof(FILE*));"
FPRINT Outfile," return pf;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Run THEN
FPRINT Outfile,"int Run (char* Cmdline, int ShowHide, int WaitState)"
FPRINT Outfile,"{"
FPRINT Outfile," int processId;"
FPRINT Outfile," char *s, *p, *cmd_line;"
FPRINT Outfile,""
FPRINT Outfile," cmd_line=(char*)malloc(strlen(Cmdline)+1);"
FPRINT Outfile," if(cmd_line==NULL) return -2;"
FPRINT Outfile,""
FPRINT Outfile," strcpy(cmd_line, Cmdline);"
FPRINT Outfile," p = s = cmd_line;"
FPRINT Outfile," processId=fork();"
FPRINT Outfile," if(processId==0)"
FPRINT Outfile," {"
FPRINT Outfile," PCHAR argv[30];"
FPRINT Outfile," int i=0;"
FPRINT Outfile," while(*p)"
FPRINT Outfile," {"
FPRINT Outfile," if(*p==34)"
FPRINT Outfile," {"
FPRINT Outfile," while(*(++p)!=34) {}"
FPRINT Outfile," }"
FPRINT Outfile," if(*p==32)"
FPRINT Outfile," {"
FPRINT Outfile," while(*(p+1)==32) p++;"
FPRINT Outfile," argv[i++]=s;"
FPRINT Outfile," *p=0; s=p+1;"
FPRINT Outfile," }"
FPRINT Outfile," p++;"
FPRINT Outfile," }"
FPRINT Outfile," argv[i] = s;"
FPRINT Outfile," argv[i+1]= 0;"
FPRINT Outfile," execvp(argv[0],argv);"
FPRINT Outfile," printf(",ENC$("Failed to run%s\\n"),",argv[0]);"
FPRINT Outfile," exit(-1);"
FPRINT Outfile," }"
FPRINT Outfile," else if(processId!=-1)"
FPRINT Outfile," {"
FPRINT Outfile," if(WaitState) waitpid(processId,NULL,0);"
FPRINT Outfile," }"
FPRINT Outfile," waitpid(-1,NULL,WNOHANG);"
FPRINT Outfile," free(cmd_line), cmd_line=NULL;"
FPRINT Outfile," return processId;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Download THEN
FPRINT Outfile,"int Download (char *URL,char *Localname)"
FPRINT Outfile,"{"
FPRINT Outfile," int RetVal;"
'~ FPRINT Outfile," RetVal=BCX_DynaCall (", ENC$("URLDownloadToFile"), "," ;
'~ FPRINT Outfile, ENC$("urlmon.dll"), ",5,NULL,URL,Localname,0,NULL);"
FPRINT Outfile," return RetVal=!RetVal;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_PeekStr THEN
FPRINT Outfile,"char *peekstr (LPVOID Src, int Count)"
FPRINT Outfile,"{"
FPRINT Outfile," char *Des=BCX_TmpStr(Count);"
FPRINT Outfile," memmove(Des,Src,Count);"
FPRINT Outfile," return Des;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_QBColor THEN
FPRINT Outfile,"int qbcolor (int N)"
FPRINT Outfile,"{"
FPRINT Outfile," switch (N)"
FPRINT Outfile," {"
FPRINT Outfile," case 0 : return RGB(0,0,0);"
FPRINT Outfile," case 1 : return RGB(0,0,128);"
FPRINT Outfile," case 2 : return RGB(0,128,0);"
FPRINT Outfile," case 3 : return RGB(0,128,128);"
FPRINT Outfile," case 4 : return RGB(196,0,0);"
FPRINT Outfile," case 5 : return RGB(128,0,128);"
FPRINT Outfile," case 6 : return RGB(128,64,0);"
FPRINT Outfile," case 7 : return RGB(196,196,196);"
FPRINT Outfile," case 8 : return RGB(128,128,128);"
FPRINT Outfile," case 9 : return RGB(0,0, 255);"
FPRINT Outfile," case 10 : return RGB(0,255,0);"
FPRINT Outfile," case 11 : return RGB(0,255,255);"
FPRINT Outfile," case 12 : return RGB(255,0,0);"
FPRINT Outfile," case 13 : return RGB(255,0,255);"
FPRINT Outfile," case 14 : return RGB(255,255,0);"
FPRINT Outfile," case 15 : return RGB(255,255,255);"
FPRINT Outfile," case 16 : return RGB(164,164,164);"
FPRINT Outfile," case 17 : return RGB(128,160,255);"
FPRINT Outfile," case 18 : return RGB(160,255,160);"
FPRINT Outfile," case 19 : return RGB(160,255,255);"
FPRINT Outfile," case 20 : return RGB(255,160,160);"
FPRINT Outfile," case 21 : return RGB(255,160,255);"
FPRINT Outfile," case 22 : return RGB(255,255,160);"
FPRINT Outfile," case 23 : return RGB(212,212,212);"
FPRINT Outfile," case 24 : return RGB(180,180,180);"
FPRINT Outfile," case 25 : return RGB(188,220,255);"
FPRINT Outfile," case 26 : return RGB(220,255,220);"
FPRINT Outfile," case 27 : return RGB(220,255,255);"
FPRINT Outfile," case 28 : return RGB(255,220,220);"
FPRINT Outfile," case 29 : return RGB(255,220,255);"
FPRINT Outfile," case 30 : return RGB(255,255,220);"
FPRINT Outfile," case 31 : return RGB(228,228,228);"
FPRINT Outfile," }"
FPRINT Outfile,"return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cvi THEN
FPRINT Outfile,"short CVI (char *s)"
FPRINT Outfile,"{"
FPRINT Outfile," return ((short*)s)[0];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mki THEN
FPRINT Outfile,"char *MKI (short cvt)"
FPRINT Outfile,"{"
FPRINT Outfile," static char temp[3];"
FPRINT Outfile," return (char *)memmove(temp,&cvt,2);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cvl THEN
FPRINT Outfile,"long CVL (char *s)"
FPRINT Outfile,"{"
FPRINT Outfile," return ((long*)s)[0];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mkl THEN
FPRINT Outfile,"char *MKL (int cvt)"
FPRINT Outfile,"{"
FPRINT Outfile," static char temp[5];"
FPRINT Outfile," return (char *) memmove(temp,&cvt,4);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cvs THEN
FPRINT Outfile,"float CVS (char *s)"
FPRINT Outfile,"{"
FPRINT Outfile," return ((float*)s)[0];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mks THEN
FPRINT Outfile,"char *MKS (float cvt)"
FPRINT Outfile,"{"
FPRINT Outfile," static char temp[5];"
FPRINT Outfile," return (char *) memmove(temp,&cvt,4);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cvd THEN
FPRINT Outfile,"double CVD (char *s)"
FPRINT Outfile,"{"
FPRINT Outfile," return ((double*)s)[0];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Cvld THEN
FPRINT Outfile,"long double CVLD (char *s)"
FPRINT Outfile,"{"
FPRINT Outfile," return ((long double*)s)[0];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mkd THEN
FPRINT Outfile,"char *MKD (double cvt)"
FPRINT Outfile,"{"
FPRINT Outfile," static char temp[9];"
FPRINT Outfile," return (char *) memmove(temp,&cvt,8);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_Mkld THEN
FPRINT Outfile,"char *MKLD (long double cvt)"
FPRINT Outfile,"{"
FPRINT Outfile," static char temp[11];"
FPRINT Outfile," return (char *) memmove(temp,&cvt,10);"
FPRINT Outfile,"}\n\n"
END IF
IF Use_BcxSplitPath THEN
FPRINT Outfile,"char *BcxSplitPath (char *FPath, int mask)"
FPRINT Outfile,"{"
FPRINT Outfile," if(!FPath) return BCX_TmpStr(1);"
FPRINT Outfile," char *BCX_RetStr=BCX_TmpStr(strlen(FPath));"
FPRINT Outfile," char tmp[MAX_PATH*4];"
FPRINT Outfile," _splitpath_(FPath,tmp,&tmp[MAX_PATH],&tmp[MAX_PATH*2],&tmp[MAX_PATH*3]);"
FPRINT Outfile," if(mask & FDRV) strcat(BCX_RetStr,tmp);"
FPRINT Outfile," if(mask & FPATH)strcat(BCX_RetStr,&tmp[MAX_PATH]);"
FPRINT Outfile," if(mask & FNAME)strcat(BCX_RetStr,&tmp[MAX_PATH*2]);"
FPRINT Outfile," if(mask & FEXT) strcat(BCX_RetStr,&tmp[MAX_PATH*3]);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
FPRINT Outfile," void _splitpath_(const char* path, char* drv, char* dir, char* name, char* ext)"
FPRINT Outfile," {"
FPRINT Outfile," const char* pend; /* end of processed string */"
FPRINT Outfile," const char* p; /* search pointer */"
FPRINT Outfile," const char* s; /* copy pointer */"
FPRINT Outfile," "
FPRINT Outfile," /* extract drive name */"
FPRINT Outfile," if (path[0] && path[1]==':') {"
FPRINT Outfile," if (drv) {"
FPRINT Outfile," *drv++ = *path++;"
FPRINT Outfile," *drv++ = *path++;"
FPRINT Outfile," *drv = 0;"
FPRINT Outfile," }"
FPRINT Outfile," } else if (drv)"
FPRINT Outfile," *drv = 0;"
FPRINT Outfile," "
FPRINT Outfile," /* search for end of string or stream separator */"
FPRINT Outfile," for(pend=path; *pend && *pend!=':'; )"
FPRINT Outfile," pend++;"
FPRINT Outfile," "
FPRINT Outfile," /* search for begin of file extension */"
FPRINT Outfile," for(p=pend; p > path && *--p != '\\\\' && *p!='/'; )"
FPRINT Outfile," if (*p == '.') {"
FPRINT Outfile," pend = p;"
FPRINT Outfile," break;"
FPRINT Outfile," }"
FPRINT Outfile," "
FPRINT Outfile," if (ext)"
FPRINT Outfile," {"
FPRINT Outfile," s=pend;"
FPRINT Outfile," do{ *ext++ = *s; } while(*s++);"
FPRINT Outfile," }"
FPRINT Outfile," /* search for end of directory name */"
FPRINT Outfile," for(p=pend; p > path; )"
FPRINT Outfile," if (*--p == '\\\\' || *p == '/') {"
FPRINT Outfile," p++;"
FPRINT Outfile," break;"
FPRINT Outfile," }"
FPRINT Outfile," "
FPRINT Outfile," if (name) {"
FPRINT Outfile," for(s=p; s<pend; )"
FPRINT Outfile," *name++ = *s++;"
FPRINT Outfile," "
FPRINT Outfile," *name = 0;"
FPRINT Outfile," }"
FPRINT Outfile," "
FPRINT Outfile," if (dir) {"
FPRINT Outfile," for(s=path; s<p; )"
FPRINT Outfile," *dir++ = *s++;"
FPRINT Outfile," "
FPRINT Outfile," *dir = 0;"
FPRINT Outfile," }"
FPRINT Outfile," }\n"
END IF
IF Use_StrUpLow THEN
FPRINT Outfile,"char *_strupr_(char *string)"
FPRINT Outfile,"{"
FPRINT Outfile," char *s;"
FPRINT Outfile,""
FPRINT Outfile," if (string)"
FPRINT Outfile," {"
FPRINT Outfile," for(s = string; *s; ++s)"
FPRINT Outfile," *s = toupper(*s);"
FPRINT Outfile," }"
FPRINT Outfile," return string;"
FPRINT Outfile,"}\n"
FPRINT Outfile,"char *_strlwr_(char *string)"
FPRINT Outfile,"{"
FPRINT Outfile," char *s;"
FPRINT Outfile,""
FPRINT Outfile," if (string)"
FPRINT Outfile," {"
FPRINT Outfile," for (s = string; *s; ++s)"
FPRINT Outfile," *s = tolower(*s);"
FPRINT Outfile," }"
FPRINT Outfile," return string;"
FPRINT Outfile,"}\n"
END IF
IF Use_Strtoken THEN
FPRINT Outfile,"char * StrToken (char *Source, char *TokenChar, int n)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr={0};"
FPRINT Outfile," char *RetVal;"
FPRINT Outfile," char *Copy;"
FPRINT Outfile," int Posn=0;"
FPRINT Outfile," int Find=0;"
FPRINT Outfile," int LenSrc=strlen(Source);"
FPRINT Outfile," RetVal=(char*)calloc(LenSrc+1,1);"
FPRINT Outfile," Copy=Source;"
FPRINT Outfile," if(tally(Source,TokenChar)==0)"
FPRINT Outfile," {"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(1);"
FPRINT Outfile," if(RetVal)free(RetVal);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile," }"
FPRINT Outfile," if(n==1)"
FPRINT Outfile," {"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(LenSrc);"
FPRINT Outfile," strcpy(BCX_RetStr,(char*)extract(Source,TokenChar));"
FPRINT Outfile," if(RetVal)free(RetVal);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile," }"
FPRINT Outfile," if(n>tally(Source,TokenChar)+1)"
FPRINT Outfile," {"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(1);"
FPRINT Outfile," if(RetVal)free(RetVal);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile," }"
FPRINT Outfile," while(*Copy)"
FPRINT Outfile," {"
FPRINT Outfile," if(*Copy==TokenChar[0]) Find++;"
FPRINT Outfile," if(Find==n) break;"
FPRINT Outfile," Copy++;"
FPRINT Outfile," Posn++;"
FPRINT Outfile," }"
FPRINT Outfile," if(n==tally(Source,TokenChar)+1)"
FPRINT Outfile," {"
FPRINT Outfile," Posn=LenSrc;"
FPRINT Outfile," Copy=Source+Posn;"
FPRINT Outfile," while(*Copy&&Source[Posn]!=TokenChar[0])"
FPRINT Outfile," {"
FPRINT Outfile," Posn--;"
FPRINT Outfile," Copy--;"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," strcpy(RetVal,(char*)mid(Source,1,Posn));"
FPRINT Outfile," strcpy(RetVal,(char*)mid(RetVal,InstrRev(RetVal,TokenChar)));"
FPRINT Outfile," BCX_RetStr=BCX_TmpStr(LenSrc);"
FPRINT Outfile," strcpy(BCX_RetStr,(char*)RemoveStr(RetVal,TokenChar));"
FPRINT Outfile," if(RetVal)free(RetVal);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_iReplace THEN
FPRINT Outfile,"char *iReplace (char *src, char *pat, char *rep)"
FPRINT Outfile,"{"
FPRINT Outfile," size_t patsz, repsz, tmpsz, delta;"
FPRINT Outfile," char *strtmp, *p, *q, *r;"
FPRINT Outfile," if (!pat || !*pat)"
FPRINT Outfile," {"
FPRINT Outfile," strtmp = BCX_TmpStr(strlen(src));"
FPRINT Outfile," if (!strtmp) return NULL;"
FPRINT Outfile," return strcpy(strtmp, src);"
FPRINT Outfile," }"
FPRINT Outfile," repsz = strlen(rep);"
FPRINT Outfile," patsz = strlen(pat);"
FPRINT Outfile," for (tmpsz=0, p=src;(q=_stristr_(p,pat))!=0; p=q+patsz)"
FPRINT Outfile," tmpsz += (size_t) (q - p) + repsz;"
FPRINT Outfile," tmpsz += strlen(p);"
FPRINT Outfile," strtmp = BCX_TmpStr(tmpsz);"
FPRINT Outfile," if (!strtmp) return NULL;"
FPRINT Outfile," for (r=strtmp,p=src;(q=_stristr_(p,pat))!=0;p=q+patsz)"
FPRINT Outfile," {"
FPRINT Outfile," delta = (size_t) (q-p);"
FPRINT Outfile," memcpy(r,p,delta); r += delta;"
FPRINT Outfile," strcpy(r,rep); r += repsz;"
FPRINT Outfile," }"
FPRINT Outfile," strcpy(r,p);"
FPRINT Outfile," return strtmp;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_WideToAnsi THEN
FPRINT Outfile,"char* WideToAnsi (wchar_t *WideStr, UINT CodePage,DWORD dwFlags)"
FPRINT Outfile,"{"
FPRINT Outfile," char *BCX_RetStr={0};"
FPRINT Outfile," UINT uLen;"
FPRINT Outfile," uLen=wcstombs(NULL, WideStr, 0); //WideCharToMultiByte(CodePage,dwFlags,WideStr,-1,0,0,0,0);"
FPRINT Outfile," BCX_RetStr=(char*)BCX_TmpStr(uLen);"
FPRINT Outfile," wcstombs(BCX_RetStr, WideStr, uLen); //WideCharToMultiByte(CodePage,dwFlags,WideStr,-1,BCX_RetStr,uLen,0,0);"
FPRINT Outfile," return BCX_RetStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_SysStr THEN
FPRINT Outfile,"BSTR SysStr (char * szIn, int widstr, int bfree)"
FPRINT Outfile,"{"
FPRINT Outfile," static BSTR bStr[32];"
FPRINT Outfile," static int index;"
FPRINT Outfile," if(bfree)"
FPRINT Outfile," {"
FPRINT Outfile," for(index=0; index<32; index+=1) "
FPRINT Outfile," SysFreeString(bStr[index]);"
FPRINT Outfile," return 0;"
FPRINT Outfile," }"
FPRINT Outfile," index=(++index & 31);"
FPRINT Outfile," SysFreeString(bStr[index]);"
FPRINT Outfile," int length=strlen(szIn);"
FPRINT Outfile," if(widstr)"
FPRINT Outfile," {"
FPRINT Outfile," bStr[index]=SysAllocStringLen(NULL, (2*length));"
FPRINT Outfile," MultiByteToWideChar(CP_ACP,0,szIn,-1,bStr[index],(2*length+1));"
FPRINT Outfile," }else{"
FPRINT Outfile," bStr[index]=SysAllocStringByteLen(szIn, length);"
FPRINT Outfile," }"
FPRINT Outfile," return bStr[index];"
FPRINT Outfile,"}\n\n"
END IF
IF Use_AnsiToWide THEN
FPRINT Outfile,"wchar_t *AnsiToWide (char *AnsiStr, UINT CodePage,DWORD dwFlags)"
FPRINT Outfile,"{"
FPRINT Outfile," UINT uLen;"
FPRINT Outfile," wchar_t *WideStr;"
FPRINT Outfile," uLen=mbstowcs(NULL, AnsiStr, 0); //MultiByteToWideChar(CodePage,dwFlags,AnsiStr,-1,0,0);"
FPRINT Outfile," if(uLen<=1) return (wchar_t*)BCX_TmpStr(2);"
FPRINT Outfile," WideStr = (wchar_t*)BCX_TmpStr(2*uLen);"
FPRINT Outfile," mbstowcs(WideStr, AnsiStr, uLen); //MultiByteToWideChar(CodePage,dwFlags,AnsiStr,uLen,WideStr,uLen);"
FPRINT Outfile," return WideStr;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_FileLocked THEN
FPRINT Outfile,"int FileLocked (char *Filename)"
FPRINT Outfile,"{"
FPRINT Outfile," FILE *FP=fopen(Filename,", ENC$("rb+"), ");"
FPRINT Outfile," if(FP==0) return 1;"
FPRINT Outfile," fclose(FP);"
FPRINT Outfile," return 0;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_ContainedIn THEN
FPRINT Outfile,"int containedin(char * Token,char **Contain ,int c)"
FPRINT Outfile," {"
FPRINT Outfile," int i=0;"
FPRINT Outfile," while(Contain[i][0])"
FPRINT Outfile," {"
FPRINT Outfile," if(0 == ((c == 0 || c == 2) ? strcmp(Contain[i],Token) : strcasecmp(Contain[i],Token)))"
FPRINT Outfile," {"
FPRINT Outfile," return ((c < 2) ? 0 : i);"
FPRINT Outfile," }"
FPRINT Outfile," i++;"
FPRINT Outfile," }"
FPRINT Outfile," return -1;"
FPRINT Outfile," }\n\n"
END IF
IF Use_FindInType THEN
FPRINT Outfile,"int FindInType(char *Token,char *StOffset,int StSize,int start,int finish,int c,int *idx)"
FPRINT Outfile," {"
FPRINT Outfile," int j;"
FPRINT Outfile," char *Srch;"
FPRINT Outfile," int (*cmp)(const char*,const char*);"
FPRINT Outfile," cmp = ((c == 0 || c == 2) ? strcmp : strcasecmp);"
FPRINT Outfile," for(j=start; j<=finish; j++)"
FPRINT Outfile," {"
FPRINT Outfile," Srch = StOffset + ((idx==0) ? j*StSize : idx[j]*StSize);"
FPRINT Outfile," if(cmp(Srch,Token)==0)"
FPRINT Outfile," {"
FPRINT Outfile," return ((c < 2) ? 0 : j);"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," return -1;"
FPRINT Outfile," }\n\n"
END IF
IF Use_StartupCode THEN
FPRINT Outfile,"int BCX_StartupCode_(void)"
FPRINT Outfile,"{"
FOR INTEGER i = 1 TO StartNdx
FPRINT Outfile," " + StartSub$[i] + "();"
NEXT
FPRINT Outfile," return 1;"
FPRINT Outfile,"}\n\n"
END IF
IF Use_ExitCode THEN
FPRINT Outfile,"int BCX_ExitCode_(void)"
FPRINT Outfile,"{"
FOR INTEGER i = 1 TO ExitNdx
FPRINT Outfile," atexit(" + ExitSub$[i] + ");"
NEXT
FPRINT Outfile," return 1;"
FPRINT Outfile,"}\n\n"
END IF
if Use_Socket then
FPRINT Outfile,"sockaddr_in sock_addr (char *ServerName,int port)"
FPRINT Outfile,"{"
FPRINT Outfile," in_addr iaHost;"
FPRINT Outfile," hostent* lpHostEntry;"
FPRINT Outfile," sockaddr_in saServer;"
FPRINT Outfile," iaHost.s_addr=inet_addr(ServerName);"
FPRINT Outfile," if(iaHost.s_addr==INADDR_NONE)"
FPRINT Outfile," {"
FPRINT Outfile," lpHostEntry=gethostbyname(ServerName);"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," {"
FPRINT Outfile," lpHostEntry=gethostbyaddr((char*)&iaHost,sizeof(in_addr),AF_INET);"
FPRINT Outfile," }"
FPRINT Outfile," if(lpHostEntry==NULL)"
FPRINT Outfile," {"
FPRINT Outfile," printf("+enc$("Error! HOST NOT FOUND: %s\\n")+", ServerName);"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," {"
FPRINT Outfile," saServer.sin_port=htons(port);"
FPRINT Outfile," saServer.sin_family=AF_INET;"
FPRINT Outfile," saServer.sin_addr=*(in_addr*)lpHostEntry->h_addr;"
FPRINT Outfile," }"
FPRINT Outfile," return saServer;"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"int connect_socket (sockaddr_in saServer)"
FPRINT Outfile,"{"
FPRINT Outfile," int Socket, nRet;"
FPRINT Outfile," Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);"
FPRINT Outfile," if(Socket==-1)"
FPRINT Outfile," {"
FPRINT Outfile," return Socket;"
FPRINT Outfile," }"
FPRINT Outfile," nRet=connect(Socket,(sockaddr*)&saServer,sizeof(sockaddr_in));"
FPRINT Outfile," if(nRet==-1)"
FPRINT Outfile," {"
FPRINT Outfile," close(Socket);"
FPRINT Outfile," return nRet;"
FPRINT Outfile," }"
FPRINT Outfile," return Socket;"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"int BcxSocket (char *ServerName,int port)"
FPRINT Outfile,"{"
FPRINT Outfile," sockaddr_in saServer;"
FPRINT Outfile," saServer=sock_addr(ServerName,port);"
FPRINT Outfile," return connect_socket(saServer);"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"int BcxSocketSend (int Socket, char *szBuffer)"
FPRINT Outfile,"{"
FPRINT Outfile," static int nRet;"
FPRINT Outfile," nRet=send(Socket,szBuffer,strlen(szBuffer),0);"
FPRINT Outfile," if(nRet==-1)"
FPRINT Outfile," {"
FPRINT Outfile," close(Socket);"
FPRINT Outfile," }"
FPRINT Outfile," return nRet;"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"int BcxSocketRead (int Socket, char *szBuffer)"
FPRINT Outfile,"{"
FPRINT Outfile," return read(Socket,szBuffer,strlen(szBuffer));"
FPRINT Outfile,"}\n\n"
FPRINT Outfile,"void BcxSocketClose(int Socket) {"
FPRINT Outfile," close(Socket);"
FPRINT Outfile,"}\n\n"
end if
'/***** 2013-06-26 New REGEX Keywords -AIR *****/
'/***** 2018-12-12 Changed to regmatch -AIR *****/
IF Use_RegEx THEN
FPRINT Outfile,"bool regmatch (char *buffer, char *pattern, REGEX* retval)"
FPRINT Outfile,"{"
FPRINT Outfile," static int t;"
' FPRINT Outfile," memset(&t,0,sizeof(t));"
FPRINT Outfile," static int i;"
' FPRINT Outfile," memset(&i,0,sizeof(i));"
FPRINT Outfile," static regex_t re;"
' FPRINT Outfile," memset(&re,0,sizeof(re));"
FPRINT Outfile," t=regcomp( &re,pattern,REG_ICASE|REG_EXTENDED);"
FPRINT Outfile," if(t)"
FPRINT Outfile," {"
FPRINT Outfile," regerror(t, &re,buffer,sizeof(buffer));"
FPRINT Outfile," printf("+enc$("regex error: %s %s")+",buffer,pattern);"
FPRINT Outfile," return 0;"
FPRINT Outfile," }"
FPRINT Outfile," t=regexec( &re,buffer,1023,(*retval).matches,0);"
FPRINT Outfile," (*retval).count=re.re_nsub;"
FPRINT Outfile," if(!t)"
FPRINT Outfile," {"
FPRINT Outfile," for(i=1; i<=(*retval).count; i+=1)"
FPRINT Outfile," {"
FPRINT Outfile," if((*retval).matches[i].rm_so>=0)"
FPRINT Outfile," {"
FPRINT Outfile," (*retval).results[i]=peekstr( &buffer[(*retval).matches[i].rm_so],((*retval).matches[i].rm_eo-(*retval).matches[i].rm_so));"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," }"
FPRINT Outfile," regfree( &re);"
FPRINT Outfile," if(!t)"
FPRINT Outfile," {"
FPRINT Outfile," return TRUE;"
FPRINT Outfile," }"
FPRINT Outfile," else"
FPRINT Outfile," {"
FPRINT Outfile," return FALSE;"
FPRINT Outfile," }"
FPRINT Outfile,"}\n\n"
END IF
END SUB 'RunTimeFunctions