//if (!strcmp("filename",create_params[0])) short_filename = ap_pstrdup(p, create_params[1]);
//else short_filename = "undefined";
id_catalog = atoi(coa_GetElement(cnx, create_params, 3));

stupidstring = ap_pstrndup(p,cnx->post_args,strstr(cnx->post_args,"\n")-cnx->post_args-1);

filename = strstr(cnx->post_args,"filename");
filename = strstr(filename,"\"")+1;

filename = ap_pstrndup(p,filename,strstr(filename,"\"")-filename);
short_filename = filename;
i = 0;
j = 0;
while (short_filename[i])
{
if (short_filename[i]=='\\') j = i+1;
i++;
}
short_filename+= j;

filedata = strstr(cnx->post_args,"Content-Type:");
filedata = strstr(filedata,"\n")+3;
// assuming that stupidstring is a substring of filedata, find the
// beginning of such substring
i = 0; j = 0;
while (j<strlen(stupidstring))
{
if (filedata[i+j]==stupidstring[j]) j++;
else { i++; j = 0; }
}
i -= 2;

@co_call(par_area,'"generic_acl"',"create",par_area=>par_area,par_class=>'"attachment"',par_id=>-1,dont_set_acl=>dont_set_acl);

__GET_RETURNED_INTEGER(new_id)

__SEND_MESG_DEBUG("id_catalog=%d",id_catalog)
@co_call(par_area,'"attachment"',"cloneACL",par_area=>par_area,par_class=>'"attachment"',par_id=>new_id,area_parent=>par_area,class_parent=>'"catalog"',id_parent=>id_catalog);

@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>new_id,par_prop=>'"filename"',new_value=>'short_filename',version=>0);

// __CREATE_QUERY("UPDATE co_sys_attachment SET filename='%s' WHERE id=%d", short_filename, new_id)
// __SQL_EXEC

@co_call(par_area,'"attachment"',"getPath",par_id=>new_id,par_area=>par_area,par_class=>par_class);

new_filename = ap_psprintf( p, "%s/%s", cou_getCODataPath(), (char *) cou_getReturnValue(cnx,CO_STRING,&err));
__SEND_MESG_DEBUG("new_filename %s", new_filename)

new_dirname = new_filename;
k = strlen(new_dirname) - 1;
// find catalog path

while (new_dirname[k] != '/') k--;

__SEND_MESG_DEBUG("loop finished %d", k)

new_dirname = ap_pstrndup( p, new_filename, k);

// = ap_pstrndup( p, new_dirname, k);

// __SEND_MESG_DEBUG("value returned by mkdir = %d",mkdir(new_dirname, S_IREAD | S_IWRITE | S_IEXEC))
__ASSERT(mkdir(new_dirname, S_IREAD | S_IWRITE | S_IEXEC) >= -1, "couldn't create directory %s", new_dirname)

// new_filename = ap_psprintf(p, "%s/%s", new_dirname, short_filename);
fd = ap_popenf(p, new_filename, O_WRONLY | O_TRUNC | O_CREAT, S_IREAD | S_IWRITE);

__ASSERT(fd != -1 , "couldn't open file %s", new_filename)

__ASSERT(write(fd,filedata,i) == i, "couldn't write to file %s", new_filename)
__ASSERT(ap_pclosef(p,fd) != -1 , "couldn't close file %s", new_filename)

// subsequent lines should be put into file

ap_rputs("<HEAD>
<SCRIPT>
         window.opener.eval(\"catalog_showAdd('right')\");
         </SCRIPT>
        </HEAD>
        <BODY bgcolor=black>",r);

ap_rputs("<FONT color=white>",r);
ap_rprintf(r,"file <FONT color=green>%s</FONT> upload successfull!<BR>",short_filename);
ap_rputs("<BR>uploaded file can now be achieved from catalog",r);
ap_rputs("</FONT>",r);
ap_rputs("</BODY>",r);

__RETURN_INTEGER(new_id)