home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
maprog.zip
/
MAProg.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-10-02
|
7KB
|
261 lines
/*
* This file was generated by the SOM Compiler and Emitter Framework.
* Generated using:
* SOM Emitter emitctm: 2.42
*/
#ifndef SOM_Module_maprog_Source
#define SOM_Module_maprog_Source
#endif
#define MAProg_Class_Source
#define M_MAProg_Class_Source
#if 0
#include <stdio.h>
#define MAProgMethodDebug(c,m) maTrace((c),(m))
#endif
#include "MAProg.ih"
#if 0
void maTrace(PSZ c, PSZ m)
{
FILE *fp ;
if ((fp = fopen("C:\\MATRACE.LOG", "a")) != NULL) {
fputs(c, fp) ;
fputs(" - ", fp) ;
fputs(m, fp) ;
fputs("\n", fp) ;
fclose(fp) ;
}
}
#endif
typedef struct _info {
MAProg *somSelf ;
int ac ;
char **av ;
} info ;
void freeArgs(MAProg * somSelf, int ac, char **av)
{
int i ;
for (i = 0 ; i < ac ; i++) {
if (av[i]) {
_wpFreeMem(somSelf, (PBYTE) av[i]) ;
}
av[i] = NULL ;
}
_wpFreeMem(somSelf, (PBYTE) av) ;
av = NULL ;
}
void _Optlink startThread(void *pArg)
{
MAProg *somSelf = ((info *) pArg)->somSelf ;
int ac = ((info *) pArg)->ac ;
char **av = ((info *) pArg)->av ;
PPROGDETAILS pProgDetails = NULL ;
ULONG size = 0 ;
int i ;
char *paramList ;
char *paramPos ;
MAProgMethodDebug("MAProg","startThread");
/*
* Query Program Details
*/
if (_wpQueryProgDetails(somSelf, NULL, &size) == TRUE) {
pProgDetails = (PPROGDETAILS) _wpAllocMem(somSelf, size, NULL) ;
}
if (pProgDetails == NULL) {
MAProgMethodDebug("MAProg","startThread - alloc pProgDetails");
freeArgs(somSelf, ac, av) ;
_wpFreeMem(somSelf, (PBYTE) pArg) ;
return ;
}
if (_wpQueryProgDetails(somSelf, pProgDetails, &size) != TRUE) {
MAProgMethodDebug("MAProg","startThread - query pProgDetails");
freeArgs(somSelf, ac, av) ;
_wpFreeMem(somSelf, (PBYTE) pProgDetails) ;
_wpFreeMem(somSelf, (PBYTE) pArg) ;
return ;
}
/*
* expand arguments
* not perfect. only replaces "%*" with dropped objects
*/
paramList = (char *) _wpAllocMem(somSelf,
size + ac * 3 + strlen(pProgDetails->pszParameters), NULL) ;
paramPos = strstr(pProgDetails->pszParameters, "%*") ;
if (paramList == NULL) {
MAProgMethodDebug("MAProg","startThread - alloc paramList");
freeArgs(somSelf, ac, av) ;
_wpFreeMem(somSelf, (PBYTE) pProgDetails) ;
_wpFreeMem(somSelf, (PBYTE) pArg) ;
return ;
}
/*
* copy params before '%*'
*/
if (paramPos != NULL) {
strncpy(paramList, pProgDetails->pszParameters,
paramPos - pProgDetails->pszParameters) ;
paramList[paramPos - pProgDetails->pszParameters] = '\0' ;
} else {
paramList[0] = '\0' ;
}
/*
* replace '%*' with dropped object names
*/
for (i = 0 ; i < ac ; i++) {
strcat(paramList, "\"") ;
strcat(paramList, av[i]) ;
strcat(paramList, "\" ") ;
}
/*
* copy params after '%*'
*/
if (paramPos != NULL) {
strcat(paramList, paramPos + 2) ;
}
MAProgMethodDebug("MAProg",paramList);
/*
* Start Application
*/
pProgDetails->pszParameters = paramList ;
WinStartApp(NULLHANDLE, pProgDetails, paramList, NULL, SAF_STARTCHILDAPP) ;
/*
* dispose resources
*/
MAProgMethodDebug("MAProg", "startThread - finalize");
_wpFreeMem(somSelf, (PBYTE) paramList) ;
_wpFreeMem(somSelf, (PBYTE) pProgDetails) ;
freeArgs(somSelf, ac, av) ;
_wpFreeMem(somSelf, (PBYTE) pArg) ;
}
SOM_Scope MRESULT SOMLINK MAProgwpDrop(MAProg *somSelf, HWND hwndCnr,
PDRAGINFO pdrgInfo, PDRAGITEM pdrgItem)
{
info *pi = (info *) _wpAllocMem(somSelf, sizeof(info), NULL) ;
int i ;
int ac = DrgQueryDragitemCount(pdrgInfo) ;
char **av = (char **) _wpAllocMem(somSelf, ac * sizeof(char *), NULL) ;
/* MAProgData *somThis = MAProgGetData(somSelf); */
MAProgMethodDebug("MAProg","MAProgwpDrop");
if (pi == NULL || av == NULL) {
MAProgMethodDebug("MAProg","MAProgwpDrop - allocation failed");
if (pi) _wpFreeMem(somSelf, (PBYTE) pi) ;
if (av) _wpFreeMem(somSelf, (PBYTE) av) ;
return (MRESULT) RC_DROP_ERROR ;
}
if (! DrgAccessDraginfo(pdrgInfo)) {
MAProgMethodDebug("MAProg","MAProgwpDrop - DrgAccessDraginfo");
if (pi) _wpFreeMem(somSelf, (PBYTE) pi) ;
if (av) _wpFreeMem(somSelf, (PBYTE) av) ;
return (MRESULT) RC_DROP_ERROR ;
}
for (i = 0 ; i < ac ; i++) {
char *s = NULL ;
PDRAGITEM p = DrgQueryDragitemPtr(pdrgInfo, i) ;
int lenCnr = DrgQueryStrNameLen(p->hstrContainerName) ;
int lenSrc = DrgQueryStrNameLen(p->hstrSourceName) ;
av[i] = (char *) _wpAllocMem(somSelf, lenCnr + lenSrc, NULL) ;
if (av[i]) {
DrgQueryStrName(p->hstrContainerName, lenCnr + 1, av[i]) ;
DrgQueryStrName(p->hstrSourceName, lenSrc + 1, av[i] + lenCnr) ;
MAProgMethodDebug("MAProg",av[i]);
}
}
pi->somSelf = somSelf ;
pi->ac = ac ;
pi->av = av ;
_beginthread(startThread, NULL, (1024 * 8), (PVOID) pi) ;
DrgDeleteDraginfoStrHandles(pdrgInfo) ;
DrgFreeDraginfo(pdrgInfo) ;
return (MRESULT) RC_DROP_DROPCOMPLETE ; /* no more wpDrop */
}
SOM_Scope void SOMLINK M_MAProgwpclsInitData(M_MAProg *somSelf)
{
PSZ psz ;
somId maprogId ;
int stat ;
M_MAProgData *somThis = M_MAProgGetData(somSelf);
M_MAProgMethodDebug("M_MAProg","M_MAProgwpclsInitData");
/*
* query module handle
*/
maprogId = somIdFromString("MAProg") ;
psz = _somLocateClassFile(SOMClassMgrObject,
maprogId, MAProg_MajorVersion, MAProg_MinorVersion) ;
SOMFree(maprogId) ;
if (psz != NULL) {
DosQueryModuleHandle(psz, &_hmod) ;
}
/*
* query Icon and Title String
*/
_hicon = WinLoadPointer(HWND_DESKTOP, _hmod, ID_ICON) ;
M_MAProg_parent_M_WPProgram_wpclsInitData(somSelf);
}
SOM_Scope PSZ SOMLINK M_MAProgwpclsQueryTitle(M_MAProg *somSelf)
{
M_MAProgData *somThis = M_MAProgGetData(somSelf);
M_MAProgMethodDebug("M_MAProg","M_MAProgwpclsQueryTitle");
return "Multiple Argument Program" ;
}
SOM_Scope ULONG SOMLINK M_MAProgwpclsQueryIconData(M_MAProg *somSelf,
PICONINFO pIconInfo)
{
M_MAProgData *somThis = M_MAProgGetData(somSelf);
M_MAProgMethodDebug("M_MAProg","M_MAProgwpclsQueryIconData");
if (pIconInfo != NULL) {
pIconInfo->fFormat = ICON_RESOURCE ;
pIconInfo->hmod = _hmod ;
pIconInfo->resid = ID_ICON ;
}
return sizeof(ICONINFO) ;
}