home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / maprog.zip / MAProg.c < prev    next >
C/C++ Source or Header  |  1998-10-02  |  7KB  |  261 lines

  1. /*
  2.  *  This file was generated by the SOM Compiler and Emitter Framework.
  3.  *  Generated using: 
  4.  *      SOM Emitter emitctm: 2.42
  5.  */
  6.  
  7. #ifndef SOM_Module_maprog_Source
  8. #define SOM_Module_maprog_Source
  9. #endif
  10. #define MAProg_Class_Source
  11. #define M_MAProg_Class_Source
  12.  
  13. #if 0
  14. #include <stdio.h>
  15. #define MAProgMethodDebug(c,m)      maTrace((c),(m))
  16. #endif
  17.  
  18. #include "MAProg.ih"
  19.  
  20. #if 0
  21. void    maTrace(PSZ c, PSZ m)
  22. {
  23.     FILE    *fp ;
  24.     
  25.     if ((fp = fopen("C:\\MATRACE.LOG", "a")) != NULL) {
  26.         fputs(c, fp) ;
  27.     fputs(" - ", fp) ;
  28.     fputs(m, fp) ;
  29.     fputs("\n", fp) ;
  30.     fclose(fp) ;
  31.     }
  32. }
  33. #endif
  34.  
  35. typedef struct _info {
  36.     MAProg      *somSelf  ;
  37.     int         ac        ;
  38.     char        **av      ;
  39. } info ;
  40.  
  41. void    freeArgs(MAProg * somSelf, int ac, char **av)
  42. {
  43.     int     i ;
  44.     
  45.     for (i = 0 ; i < ac ; i++) {
  46.         if (av[i]) {
  47.             _wpFreeMem(somSelf, (PBYTE) av[i]) ;
  48.         }
  49.     av[i] = NULL ;
  50.     }
  51.     _wpFreeMem(somSelf, (PBYTE) av) ;
  52.     av = NULL ;
  53. }
  54.  
  55. void    _Optlink    startThread(void *pArg)
  56. {
  57.     MAProg      *somSelf  = ((info *) pArg)->somSelf ;
  58.     int         ac        = ((info *) pArg)->ac      ;
  59.     char        **av      = ((info *) pArg)->av      ;
  60.     PPROGDETAILS    pProgDetails = NULL ;
  61.     ULONG       size = 0 ;
  62.     int         i ;
  63.     char        *paramList ;
  64.     char        *paramPos  ;
  65.  
  66.     MAProgMethodDebug("MAProg","startThread");
  67.  
  68.     /*
  69.      * Query Program Details
  70.      */
  71.      
  72.     if (_wpQueryProgDetails(somSelf, NULL, &size) == TRUE) {
  73.         pProgDetails = (PPROGDETAILS) _wpAllocMem(somSelf, size, NULL) ;
  74.     }
  75.     if (pProgDetails == NULL) {
  76.         MAProgMethodDebug("MAProg","startThread - alloc pProgDetails");
  77.         freeArgs(somSelf, ac, av) ;
  78.         _wpFreeMem(somSelf, (PBYTE) pArg) ;
  79.         return ;
  80.     }
  81.     if (_wpQueryProgDetails(somSelf, pProgDetails, &size) != TRUE) {
  82.         MAProgMethodDebug("MAProg","startThread - query pProgDetails");
  83.         freeArgs(somSelf, ac, av) ;
  84.         _wpFreeMem(somSelf, (PBYTE) pProgDetails) ;
  85.         _wpFreeMem(somSelf, (PBYTE) pArg) ;
  86.     return ;
  87.     }
  88.  
  89.     /*
  90.      * expand arguments
  91.      *      not perfect. only replaces "%*" with dropped objects
  92.      */
  93.      
  94.     paramList = (char *) _wpAllocMem(somSelf, 
  95.             size + ac * 3 + strlen(pProgDetails->pszParameters), NULL) ;
  96.     paramPos  = strstr(pProgDetails->pszParameters, "%*") ;
  97.     
  98.     if (paramList == NULL) {
  99.         MAProgMethodDebug("MAProg","startThread - alloc paramList");
  100.         freeArgs(somSelf, ac, av) ;
  101.         _wpFreeMem(somSelf, (PBYTE) pProgDetails) ;
  102.         _wpFreeMem(somSelf, (PBYTE) pArg) ;
  103.     return ;
  104.     }
  105.     
  106.     /*
  107.      * copy params before '%*'
  108.      */
  109.      
  110.     if (paramPos != NULL) {
  111.         strncpy(paramList, pProgDetails->pszParameters, 
  112.                             paramPos - pProgDetails->pszParameters) ;
  113.         paramList[paramPos - pProgDetails->pszParameters] = '\0' ;
  114.     } else {
  115.         paramList[0] = '\0' ;
  116.     }
  117.  
  118.     /*
  119.      * replace '%*' with dropped object names
  120.      */
  121.      
  122.     for (i = 0 ; i < ac ; i++) {
  123.         strcat(paramList, "\"")  ;
  124.     strcat(paramList, av[i]) ;
  125.         strcat(paramList, "\" ") ;
  126.     }
  127.  
  128.     /*
  129.      * copy params after '%*'
  130.      */
  131.      
  132.     if (paramPos != NULL) {
  133.         strcat(paramList, paramPos + 2) ;
  134.     }
  135.  
  136.     MAProgMethodDebug("MAProg",paramList);
  137.  
  138.     /*
  139.      * Start Application
  140.      */
  141.      
  142.     pProgDetails->pszParameters = paramList ;
  143.     WinStartApp(NULLHANDLE, pProgDetails, paramList, NULL, SAF_STARTCHILDAPP) ;
  144.  
  145.     /*
  146.      * dispose resources
  147.      */
  148.  
  149.     MAProgMethodDebug("MAProg", "startThread - finalize");
  150.  
  151.     _wpFreeMem(somSelf, (PBYTE) paramList)    ;
  152.     _wpFreeMem(somSelf, (PBYTE) pProgDetails) ;
  153.     freeArgs(somSelf, ac, av) ;
  154.     _wpFreeMem(somSelf, (PBYTE) pArg) ;
  155.  
  156. }
  157.  
  158. SOM_Scope MRESULT  SOMLINK MAProgwpDrop(MAProg *somSelf, HWND hwndCnr, 
  159.                                         PDRAGINFO pdrgInfo, PDRAGITEM pdrgItem)
  160. {
  161.     info    *pi = (info *) _wpAllocMem(somSelf, sizeof(info), NULL) ;
  162.     int     i ;
  163.     int     ac = DrgQueryDragitemCount(pdrgInfo) ;
  164.     char    **av = (char **) _wpAllocMem(somSelf, ac * sizeof(char *), NULL) ;
  165.  
  166.     /* MAProgData *somThis = MAProgGetData(somSelf); */
  167.     MAProgMethodDebug("MAProg","MAProgwpDrop");
  168.  
  169.     if (pi == NULL || av == NULL) {
  170.         MAProgMethodDebug("MAProg","MAProgwpDrop - allocation failed");
  171.         if (pi) _wpFreeMem(somSelf, (PBYTE) pi) ;
  172.     if (av) _wpFreeMem(somSelf, (PBYTE) av) ;
  173.     return (MRESULT) RC_DROP_ERROR ;
  174.     }
  175.     if (! DrgAccessDraginfo(pdrgInfo)) {
  176.         MAProgMethodDebug("MAProg","MAProgwpDrop - DrgAccessDraginfo");
  177.         if (pi) _wpFreeMem(somSelf, (PBYTE) pi) ;
  178.     if (av) _wpFreeMem(somSelf, (PBYTE) av) ;
  179.     return (MRESULT) RC_DROP_ERROR ;
  180.     }
  181.     
  182.     for (i = 0 ; i < ac ; i++) {
  183.         char        *s = NULL ;
  184.     PDRAGITEM   p = DrgQueryDragitemPtr(pdrgInfo, i) ;
  185.     int     lenCnr = DrgQueryStrNameLen(p->hstrContainerName) ;
  186.     int     lenSrc = DrgQueryStrNameLen(p->hstrSourceName)    ;
  187.  
  188.         av[i] = (char *) _wpAllocMem(somSelf, lenCnr + lenSrc, NULL) ;
  189.  
  190.         if (av[i]) {
  191.         DrgQueryStrName(p->hstrContainerName, lenCnr + 1, av[i]) ;
  192.         DrgQueryStrName(p->hstrSourceName, lenSrc + 1, av[i] + lenCnr) ;
  193.             MAProgMethodDebug("MAProg",av[i]);
  194.         }
  195.     }
  196.     
  197.     pi->somSelf   = somSelf ;
  198.     pi->ac        = ac      ;
  199.     pi->av        = av      ;
  200.     
  201.     _beginthread(startThread, NULL, (1024 * 8), (PVOID) pi) ;
  202.  
  203.     DrgDeleteDraginfoStrHandles(pdrgInfo) ;
  204.     DrgFreeDraginfo(pdrgInfo) ;
  205.  
  206.     return (MRESULT) RC_DROP_DROPCOMPLETE ;     /* no more wpDrop */
  207. }
  208.  
  209.  
  210. SOM_Scope void  SOMLINK M_MAProgwpclsInitData(M_MAProg *somSelf)
  211. {
  212.     PSZ     psz ;
  213.     somId   maprogId ;
  214.     int     stat ;
  215.     
  216.     M_MAProgData *somThis = M_MAProgGetData(somSelf);
  217.     M_MAProgMethodDebug("M_MAProg","M_MAProgwpclsInitData");
  218.  
  219.     /*
  220.      * query module handle
  221.      */
  222.     maprogId = somIdFromString("MAProg") ;
  223.     psz = _somLocateClassFile(SOMClassMgrObject, 
  224.                 maprogId, MAProg_MajorVersion, MAProg_MinorVersion) ;
  225.     SOMFree(maprogId) ;
  226.     
  227.     if (psz != NULL) {
  228.         DosQueryModuleHandle(psz, &_hmod) ;
  229.     }
  230.  
  231.     /*
  232.      * query Icon and Title String
  233.      */
  234.      
  235.     _hicon = WinLoadPointer(HWND_DESKTOP, _hmod, ID_ICON) ;
  236.  
  237.     M_MAProg_parent_M_WPProgram_wpclsInitData(somSelf);
  238. }
  239.  
  240. SOM_Scope PSZ  SOMLINK M_MAProgwpclsQueryTitle(M_MAProg *somSelf)
  241. {
  242.     M_MAProgData *somThis = M_MAProgGetData(somSelf);
  243.     M_MAProgMethodDebug("M_MAProg","M_MAProgwpclsQueryTitle");
  244.  
  245.     return "Multiple Argument Program" ;
  246. }
  247.  
  248. SOM_Scope ULONG  SOMLINK M_MAProgwpclsQueryIconData(M_MAProg *somSelf, 
  249.                                                     PICONINFO pIconInfo)
  250. {
  251.     M_MAProgData *somThis = M_MAProgGetData(somSelf);
  252.     M_MAProgMethodDebug("M_MAProg","M_MAProgwpclsQueryIconData");
  253.  
  254.     if (pIconInfo != NULL) {
  255.         pIconInfo->fFormat = ICON_RESOURCE ;
  256.         pIconInfo->hmod    = _hmod         ;
  257.         pIconInfo->resid   = ID_ICON       ;
  258.     }
  259.     return sizeof(ICONINFO) ;
  260. }
  261.