blob: 876b68af3d6c2a6da4316f5d895b51c28a78127d [file] [log] [blame]
# this awk script helps create the vb6 declarations
function splittypenamedefault(s,tnd, i,t,n,d,a)
{
i = index(s,"=");
if(i>0) {
d = substr(s,i+1);
s = substr(s,1,i-1);
} else {
d = "";
}
for(i=length(s);substr(s,i,1)~/[A-Za-z0-9_]/&&i>0;i--) { }
if(i>0) {
t = substr(s,1,i);
n = substr(s,i+1);
if(t~/\/\*.*\*\//) {
split(t,a,/\/\*/);
t = a[2];
split(t,a,/\*\//);
t = a[1];
}
if(substr(t,1,1)==" ") {
t = substr(t,2);
}
if(substr(t,length(t),1)==" ") {
t = substr(t,1,length(t)-1);
}
} else {
t = s;
n = "";
}
if(t=="...") {
n = "VarArgs()";
}
if(n=="type") {
n = n "_";
}
if(d=="FALSE"||d=="NULL") {
d = "0";
}
if(d=="TRUE") {
d = "1";
}
tnd[0] = t;
tnd[1] = n;
tnd[2] = d;
}
function vbpasstypesize(t,pts, a)
{
if(t=="void") {
t = "";
} else if(t=="char"||t=="unsigned char") {
t = "ByVal,Byte,4";
} else if(t=="char *"||t=="unsigned char *"||t=="const char *"||t=="const char*") {
t = "ByVal,String,4";
} else if(t=="WORD") {
t = "ByVal,Integer,4";
} else if(t=="int"||t=="unsigned"||t=="unsigned int"||t=="long"||t=="unsigned long") {
t = "ByVal,Long,4";
} else if(t=="void *"||t=="const void *"||t=="int *"||t=="unsigned int *"||t=="long *"||t=="unsigned long *") {
t = "ByRef,Long,4";
} else if(t=="float") {
t = "ByVal,Single,4";
} else if(t=="float *") {
t = "ByRef,Single,4";
} else if(t=="double") {
t = "ByVal,Double,8";
} else if(t=="double *") {
t = "ByRef,Double,4";
} else if(t=="wchar_t *") {
t = "ByVal,Long,4";
} else if(t=="BYTE") {
t = "ByVal,Byte,4";
} else if(t=="BOOL"||t=="DWORD") {
t = "ByVal,Long,4";
} else if(t=="BYTE *"||t=="DWORD *") {
t = "ByRef,Long,4";
} else if(t=="FREE_IMAGE_FORMAT"||t=="FREE_IMAGE_TYPE"||t=="FREE_IMAGE_COLOR_TYPE"||t=="FREE_IMAGE_QUANTIZE"||t=="FREE_IMAGE_DITHER"||t=="FREE_IMAGE_FILTER"||t=="FREE_IMAGE_COLOR_CHANNEL"||t=="FREE_IMAGE_MDMODEL"||t=="FREE_IMAGE_MDTYPE") {
t = "ByVal," t ",4";
} else if(t=="FIBITMAP *"||t=="FIMULTIBITMAP *"||t=="RGBQUAD *"||t=="BITMAPINFO *"||t=="BITMAPINFOHEADER *"||t=="FIICCPROFILE *"||t=="FreeImageIO *"||t=="fi_handle"||t=="FITAG *"||t=="FIMEMORY *"||t=="FIMETADATA *") {
t = "ByVal,Long,4";
} else if(t=="BYTE **"||t=="FITAG **") {
t = "ByRef,Long,4";
} else if(t=="FI_InitProc"||t=="FreeImage_OutputMessageFunction") {
t = "ByVal,Long,4";
} else if(t~/V:.*/) {
t = "ByVal," substr(t,3);
} else if(t~/R:.*/) {
t = "ByRef," substr(t,3);
} else if(t=="...") {
t = "ParamArray,Variant,0";
} else {
t = "UNKNOWN," t ",0";
}
split(t,a,/,/);
pts[0] = a[1];
pts[1] = a[2];
pts[2] = a[3];
}
{
printf("Public Declare ");
if($1=="void") {
printf("Sub");
} else {
printf("Function");
}
s = 0;
for(i=3; i<NF; i++) {
splittypenamedefault($(i),tnd);
vbpasstypesize(tnd[0],pts);
s += pts[2];
}
printf(" %s Lib \"%s\" Alias \"_%s@%d\" (",$2,ENVIRON["DLL"],$2,s);
for(i=3; i<NF; i++) {
splittypenamedefault($(i),tnd);
vbpasstypesize(tnd[0],pts);
if( pts[1] != "" ) {
if( tnd[2] != "" ) {
printf("Optional %s %s As %s = %s",pts[0],tnd[1],pts[1],tnd[2]);
} else {
printf("%s %s As %s",pts[0],tnd[1],pts[1]);
}
}
if( i != NF-1 ) {
printf(", ");
}
}
printf(")");
if($1!="void") {
vbpasstypesize($1,pts);
if( pts[1] == "String" ) {
pts[1] = "Long";
}
printf(" As %s",pts[1]);
}
printf("\n");
}