Changeset 562


Ignore:
Timestamp:
Mar 15, 2007, 1:13:12 AM (19 years ago)
Author:
Gregg Young
Message:

Fixed arc viewer hang

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/HISTORY

    r556 r562  
    11New stuff's at the top.  This list is not necessarily complete.
    2 3.05 beta 8 (pending)
     23.05 beta 8
    33 o Add SelectDriveIcon function (Gregg)
    44 o New drive flags - ramdisk, virtual drive & no drive stats (Gregg)
     
    1313 o Source code cleanup (Gregg)
    1414 o Icons update appropriately with drive flag changes (Steven)
     15 o Fixed hang when viewing a file from an archive caused by a viewer as child + archiver activity visible settings. (Steven)
    1516
    16173.05beta07
  • trunk/dll/arccnrs.c

    r551 r562  
    3131  23 Aug 06 SHL Integrate John Small's switch list title logic
    3232  03 Nov 06 SHL Renames
     33  14 Mar 07 SHL ArcObjWndProc/UM_ENTER: delay before starting viewer
    3334
    3435***********************************************************************/
     
    131132          if (*viewer) {
    132133            ExecOnList((HWND) 0, viewer, WINDOWED | SEPARATE |
    133                        ((fViewChild) ? CHILD : 0), NULL, list, NULL);
     134                         (fViewChild ? CHILD : 0),
     135                       NULL, list, NULL);
    134136          }
    135137          else
     
    143145      runemf2(SEPARATEKEEP | WINDOWED | MAXIMIZED,
    144146              hwnd, NULL, NULL, "%s %s%s%s", ad->info->test,
    145               ((needs_quoting(ad->arcname)) ? "\"" : NullStr),
    146               ad->arcname, ((needs_quoting(ad->arcname)) ? "\"" : NullStr));
     147              needs_quoting(ad->arcname) ? "\"" : NullStr,
     148              ad->arcname,
     149              needs_quoting(ad->arcname) ? "\"" : NullStr);
    147150      break;
    148151    }
     
    234237      ret = (SHORT) stricmp(pai1->szFileName, pai2->szFileName);
    235238    if (ret && (sortFlags & SORT_REVERSE))
    236       ret = (ret > 0) ? -1 : 1;
     239      ret = ret > 0 ? -1 : 1;
    237240    return ret;
    238241  }
     
    387390              p,
    388391              info->list,
    389               (needs_quoting(arcname)) ? "\"" : NullStr,
    390               arcname, (needs_quoting(arcname)) ? "\"" : NullStr, arctemp);
     392              needs_quoting(arcname) ? "\"" : NullStr,
     393              arcname,
     394              needs_quoting(arcname) ? "\"" : NullStr,
     395              arctemp);
    391396    }
    392397    else {
     
    415420            runemf2(SEPARATE | INVISIBLE | FULLSCREEN | BACKGROUND | WAIT,
    416421                    hwndCnr, NULL, NULL, "%s %s%s%s", info->list,
    417                     (needs_quoting(arcname)) ? "\"" : NullStr, arcname,
    418                     (needs_quoting(arcname)) ? "\"" : NullStr);
     422                    needs_quoting(arcname) ? "\"" : NullStr,
     423                    arcname,
     424                    needs_quoting(arcname) ? "\"" : NullStr);
    419425            oldstdout = fileno(stdout);
    420426            DosError(FERR_DISABLEHARDERR);
     
    545551            saymsg(MB_ENTER, hwndCnr, DEBUG_STRING,
    546552                   "fname: %s\r\rpp: %s\r\rp: %s\r\rlonename: %s\r\rhighest: %ld\r\rx: %ld\r\rfdate: %s",
    547                    (fname) ? fname : "NULL",
    548                    (pp) ? pp : "NULL",
    549                    (p) ? p : "NULL",
     553                   fname ? fname : "NULL",
     554                   pp ? pp : "NULL",
     555                   p ? p : "NULL",
    550556                   lonename, highest, x, (fdate) ? fdate : "NULL");
    551557#endif
     
    574580              pai->pszFileName = pai->szFileName;
    575581              pai->rc.pszIcon = pai->pszFileName;
    576               pai->rc.hptrIcon = ((pai->flags & ARCFLAGS_REALDIR) != 0) ?
     582              pai->rc.hptrIcon = (pai->flags & ARCFLAGS_REALDIR) != 0 ?
    577583                hptrDir : hptrFile;
    578584              pai->pszDate = pai->szDate;
     
    638644        sprintf(errstr, GetPString(IDS_ARCERRORINFOTEXT),
    639645                arcname,
    640                 (!gotstart) ? GetPString(IDS_NOGOTSTARTTEXT) : NullStr,
    641                 (!numarcfiles) ? GetPString(IDS_NOARCFILESFOUNDTEXT) :
     646                !gotstart ? GetPString(IDS_NOGOTSTARTTEXT) : NullStr,
     647                !numarcfiles ? GetPString(IDS_NOARCFILESFOUNDTEXT) :
    642648                NullStr,
    643                 (!gotend) ? GetPString(IDS_NOENDOFLISTTEXT) : NullStr);
     649                !gotend ? GetPString(IDS_NOENDOFLISTTEXT) : NullStr);
    644650        memset(&ad, 0, sizeof(ARCDUMP));
    645651        ad.info = info;
     
    943949        if (AcceptOneDrop(mp1, mp2))
    944950          return MRFROM2SHORT(DOR_DROP, DO_MOVE);
    945         return MRFROM2SHORT(DOR_NODROP, 0);     /* Drop not valid        */
     951        return MRFROM2SHORT(DOR_NODROP, 0);     /* Drop not valid */
    946952      case DM_DROPHELP:
    947953        DropHelp(mp1, mp2, hwnd, GetPString(IDS_ARCCNRFOLDERDROPHELPTEXT));
     
    12031209          // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"%s %s %s\r[%s]",dcd->info->extract,dcd->arcname,membername,construct);
    12041210          runemf2(SEPARATE | WINDOWED | WAIT |
    1205                   ((fArcStuffVisible) ? 0 : (BACKGROUND | MINIMIZED)) |
    1206                   WAIT, dcd->hwndClient, construct, NULL, "%s %s%s%s %s%s%s",
     1211                    (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED) |
     1212                    WAIT,
     1213                  dcd->hwndClient, construct, NULL, "%s %s%s%s %s%s%s",
    12071214                  dcd->info->extract,
    1208                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
     1215                  needs_quoting(dcd->arcname) ? "\"" : NullStr,
    12091216                  dcd->arcname,
    1210                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
    1211                   (needs_quoting(membername)) ? "\"" : NullStr,
    1212                   membername, (needs_quoting(membername)) ? "\"" : NullStr);
     1217                  needs_quoting(dcd->arcname) ? "\"" : NullStr,
     1218                  needs_quoting(membername) ? "\"" : NullStr,
     1219                  membername,
     1220                  needs_quoting(membername) ? "\"" : NullStr);
    12131221          if (*construct && construct[strlen(construct) - 1] != '\\')
    12141222            strcat(construct, "\\");
     
    13291337        }
    13301338        runemf2(SEPARATE | WINDOWED |
    1331                 ((fArcStuffVisible) ? 0 : (BACKGROUND | MINIMIZED)) |
    1332                 WAIT, dcd->hwndClient, dcd->workdir, NULL, "%s %s%s%s %s%s%s",
    1333                 ((dcd->info->exwdirs) ? dcd->info->exwdirs :
    1334                  dcd->info->extract),
    1335                 (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
     1339                  (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED) |
     1340                  WAIT,
     1341                dcd->hwndClient, dcd->workdir, NULL, "%s %s%s%s %s%s%s",
     1342                dcd->info->exwdirs ? dcd->info->exwdirs :
     1343                                     dcd->info->extract,
     1344                needs_quoting(dcd->arcname) ? "\"" : NullStr,
    13361345                dcd->arcname,
    1337                 (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
    1338                 (needs_quoting(s)) ? "\"" : NullStr,
    1339                 s, (needs_quoting(s)) ? "\"" : NullStr);
    1340 
     1346                needs_quoting(dcd->arcname) ? "\"" : NullStr,
     1347                needs_quoting(s) ? "\"" : NullStr,
     1348                s,
     1349                needs_quoting(s) ? "\"" : NullStr);
     1350
     1351        // printf("%s %d runemf2 returned\n", __FILE__, __LINE__); fflush(stdout);      // 10 Mar 07 SHL
    13411352        if (!dcd->info->exwdirs) {
    13421353          p = s;
     
    13571368          p++;
    13581369        }
     1370        // printf("%s %d UM_ENTER %s %s\n",__FILE__, __LINE__,filename, s); fflush(stdout);     // 10 Mar 07 SHL hang
    13591371        free(s);
    1360         if (IsFile(filename) == 1)
     1372        if (IsFile(filename) == 1) {
     1373          if (fViewChild)
     1374            DosSleep(250);              // Allow unzip session to finish closing 14 Mar 07 SHL
    13611375          WinSendMsg(dcd->hwndCnr, UM_ENTER, MPFROMP(filename), MPVOID);
     1376        }
    13621377      }
    13631378    }
     
    14301445                  strlen(li->list[x]) + 5 > 1024) {
    14311446                runemf2(SEPARATE | WINDOWED |
    1432                         ((fArcStuffVisible) ? 0 :
    1433                          (BACKGROUND | MINIMIZED)) |
    1434                         WAIT, hwnd, NULL, NULL, "%s", szBuffer);
     1447                          (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED) |
     1448                          WAIT,
     1449                        hwnd, NULL, NULL, "%s", szBuffer);
    14351450                *p = 0;
    14361451              }
     
    15001515              z = x;
    15011516              runemf2(SEPARATE | WINDOWED |
    1502                       ((fArcStuffVisible) ? 0 : (BACKGROUND | MINIMIZED)) |
    1503                       WAIT, hwnd, NullStr, NULL, "%s", cl);
     1517                        (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED) |
     1518                        WAIT,
     1519                      hwnd, NullStr, NULL, "%s", cl);
    15041520              *endofit = 0;
    15051521            } while (li->list[x]);
     
    16011617                                       && !li->info->exwdirs)) ? li->info->
    16021618                    extract : li->info->exwdirs,
    1603                     (needs_quoting(li->arcname)) ? "\"" : NullStr,
     1619                    needs_quoting(li->arcname) ? "\"" : NullStr,
    16041620                    li->arcname,
    1605                     (needs_quoting(li->arcname)) ? "\"" : NullStr);
     1621                    needs_quoting(li->arcname) ? "\"" : NullStr);
    16061622            endofit = &cl[strlen(cl)];
    16071623            z = 0;
     
    16241640              z = x;
    16251641              runemf2(SEPARATE | WINDOWED |
    1626                       (fArcStuffVisible ? 0 : (BACKGROUND | MINIMIZED)) |
    1627                       WAIT, hwnd, li->targetpath, NULL, "%s", cl);
     1642                        (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED) |
     1643                        WAIT,
     1644                      hwnd, li->targetpath, NULL, "%s", cl);
    16281645              *endofit = 0;
    16291646            } while (li->list[x]);
     
    17511768                  runemf2(SEPARATE | WINDOWED, HWND_DESKTOP, NULL,
    17521769                          NULL, "%sFM2PLAY.EXE /@$FM2PLAY.$$$",
    1753                           (fAddUtils) ? "UTILS\\" : NullStr);
     1770                          fAddUtils ? "UTILS\\" : NullStr);
    17541771                }
    17551772              }
     
    18481865                    sprintf(fullname, "%s%s%s", dcd->directory,
    18491866                            (dcd->directory[strlen(dcd->directory) - 1] ==
    1850                              '\\') ? NullStr : "\\", p);
     1867                               '\\') ? NullStr : "\\",
     1868                            p);
    18511869                    if (IsFile(fullname) != -1)
    18521870                      if (AddToList(fullname, &list2, &numfiles, &numalloced))
     
    21092127                *tb ? " / " : NullStr,
    21102128                tb,
    2111                 (*dcd->mask.szMask) ? " (" : NullStr,
    2112                 (*dcd->mask.szMask) ? dcd->mask.szMask : NullStr,
    2113                 (*dcd->mask.szMask) ? ")" : NullStr, dcd->arcname);
     2129                *dcd->mask.szMask ? " (" : NullStr,
     2130                *dcd->mask.szMask ? dcd->mask.szMask : NullStr,
     2131                *dcd->mask.szMask ? ")" : NullStr, dcd->arcname);
    21142132        WinSetWindowText(hwndStatus, s);
    21152133        if (!ParentIsDesktop(hwnd, dcd->hwndParent)) {
     
    23762394          ULONG wmsg;
    23772395
    2378           wmsg = (SHORT1FROMMP(mp1) == 0) ? UM_FILESMENU : UM_VIEWSMENU;
     2396          wmsg = SHORT1FROMMP(mp1) == 0 ? UM_FILESMENU : UM_VIEWSMENU;
    23792397          PortholeInit((HWND) WinSendMsg(dcd->hwndClient,
    23802398                                         wmsg, MPVOID, MPVOID), mp1, mp2);
     
    24082426      case IDM_VIEWSMENU:
    24092427        WinCheckMenuItem((HWND) mp2,
    2410                          IDM_MINIICONS, ((dcd->flWindowAttr & CV_MINI) != 0));
     2428                         IDM_MINIICONS, (dcd->flWindowAttr & CV_MINI) != 0);
    24112429        WinEnableMenuItem((HWND) mp2,
    24122430                          IDM_RESELECT, (dcd->lastselection != NULL));
     
    24252443         * add switchlist entries to end of pulldown menu
    24262444         */
    2427         SetupWinList((HWND) mp2,
    2428                      (hwndMain) ? hwndMain : (HWND) 0, dcd->hwndFrame);
     2445        SetupWinList((HWND)mp2,
     2446                     hwndMain ? hwndMain : (HWND)0, dcd->hwndFrame);
    24292447        break;
    24302448      }
     
    25152533
    25162534      case IDM_FOLDERAFTEREXTRACT:
    2517         fFolderAfterExtract = (fFolderAfterExtract) ? FALSE : TRUE;
     2535        fFolderAfterExtract = fFolderAfterExtract ? FALSE : TRUE;
    25182536        PrfWriteProfileData(fmprof, appname, "FolderAfterExtract",
    25192537                            &fFolderAfterExtract, sizeof(BOOL));
     
    26852703        if (dcd->info->extract)
    26862704          runemf2(SEPARATE | WINDOWED |
    2687                   ((fArcStuffVisible) ? 0 : (BACKGROUND | MINIMIZED)),
     2705                    (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED),
    26882706                  hwnd, dcd->directory, NULL, "%s %s%s%s",
    26892707                  dcd->info->extract,
    2690                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
     2708                  needs_quoting(dcd->arcname) ? "\"" : NullStr,
    26912709                  dcd->arcname,
    2692                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr);
     2710                  needs_quoting(dcd->arcname) ? "\"" : NullStr);
    26932711        if (SHORT1FROMMP(mp1) == IDM_ARCEXTRACTEXIT)
    26942712          PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     
    26992717        if (dcd->info->exwdirs)
    27002718          runemf2(SEPARATE | WINDOWED |
    2701                   ((fArcStuffVisible) ? 0 : (BACKGROUND | MINIMIZED)),
     2719                    (fArcStuffVisible ? 0 : BACKGROUND | MINIMIZED),
    27022720                  hwnd, dcd->directory, NULL, "%s %s%s%s",
    27032721                  dcd->info->exwdirs,
    2704                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
     2722                  needs_quoting(dcd->arcname) ? "\"" : NullStr,
    27052723                  dcd->arcname,
    2706                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr);
     2724                  needs_quoting(dcd->arcname) ? "\"" : NullStr);
    27072725        if (SHORT1FROMMP(mp1) == IDM_ARCEXTRACTWDIRSEXIT)
    27082726          PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     
    27732791          runemf2(SEPARATEKEEP | WINDOWED | MAXIMIZED,
    27742792                  hwnd, NULL, NULL, "%s %s%s%s", dcd->info->test,
    2775                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr,
     2793                  needs_quoting(dcd->arcname) ? "\"" : NullStr,
    27762794                  dcd->arcname,
    2777                   (needs_quoting(dcd->arcname)) ? "\"" : NullStr);
     2795                  needs_quoting(dcd->arcname) ? "\"" : NullStr);
    27782796        break;
    27792797
     
    29202938
    29212939          pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
    2922           DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO       */
    2923           DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO         */
     2940          DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO */
     2941          DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO */
    29242942        }
    29252943        return 0;
     
    29292947        if (mp2) {
    29302948
    2931           PDRAGITEM pDItem;     /* Pointer to DRAGITEM   */
    2932           PDRAGINFO pDInfo;     /* Pointer to DRAGINFO   */
     2949          PDRAGITEM pDItem;     /* Pointer to DRAGITEM */
     2950          PDRAGINFO pDInfo;     /* Pointer to DRAGINFO */
    29332951          PARCITEM pci;
    29342952
     
    29372955            pci = NULL;
    29382956          pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
    2939           DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO       */
     2957          DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO */
    29402958          if (*dcd->arcname) {
    29412959            if ((driveflags[toupper(*dcd->arcname) - 'A'] &
     
    29492967            return MRFROM2SHORT(DOR_NODROP, 0);
    29502968          }
    2951           pDItem = DrgQueryDragitemPtr(pDInfo,  /* Access DRAGITEM       */
    2952                                        0);      /* Index to DRAGITEM     */
     2969          pDItem = DrgQueryDragitemPtr(pDInfo,  /* Access DRAGITEM */
     2970                                       0);      /* Index to DRAGITEM */
    29532971          if (DrgVerifyRMF(pDItem,      /* Check valid rendering */
    2954                            DRM_OS2FILE, /* mechanisms and data   */
     2972                           DRM_OS2FILE, /* mechanisms and data */
    29552973                           NULL) && !(pDItem->fsControl & DC_PREPARE)) {
    29562974            DrgFreeDraginfo(pDInfo);    /* Free DRAGINFO         */
    2957             return (MRFROM2SHORT(DOR_DROP,      /* Return okay to drop  */
    2958                                  ((fCopyDefault) ? DO_COPY : DO_MOVE)));
    2959           }
    2960           DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO         */
    2961         }
    2962         return (MRFROM2SHORT(DOR_NEVERDROP, 0));        /* Drop not valid        */
     2975            return MRFROM2SHORT(DOR_DROP,       /* Return okay to drop */
     2976                                fCopyDefault ? DO_COPY : DO_MOVE);
     2977          }
     2978          DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO */
     2979        }
     2980        return (MRFROM2SHORT(DOR_NEVERDROP, 0));        /* Drop not valid */
    29632981
    29642982      case CN_INITDRAG:
     
    30113029          DosBeep(50, 100);             // fixme to know why beep?
    30123030          if (li) {
    3013             li->type = (li->type == DO_MOVE) ? IDM_ARCHIVEM : IDM_ARCHIVE;
     3031            li->type = li->type == DO_MOVE ? IDM_ARCHIVEM : IDM_ARCHIVE;
    30143032            strcpy(li->targetpath, dcd->arcname);
    30153033            if (!li->list ||
     
    30653083          CHAR s[CCHMAXPATHCOMP + 91], tf[81], tb[81];
    30663084
    3067           pci = (PARCITEM) ((pre) ? pre->pRecord : NULL);
     3085          pci = (PARCITEM)(pre ? pre->pRecord : NULL);
    30683086          if (!pci) {
    30693087            if (!ParentIsDesktop(hwnd, dcd->hwndParent)) {
     
    31883206    break;
    31893207  }
    3190   return (dcd && dcd->oldproc) ? dcd->oldproc(hwnd, msg, mp1, mp2) :
    3191     PFNWPCnr(hwnd, msg, mp1, mp2);
     3208  return dcd && dcd->oldproc ? dcd->oldproc(hwnd, msg, mp1, mp2) :
     3209                               PFNWPCnr(hwnd, msg, mp1, mp2);
    31923210}
    31933211
     
    33053323              DRIVE_NOTWRITEABLE)))
    33063324          save_dir2(dcd->directory);
    3307         dcd->hwndParent = (hwndParent) ? hwndParent : HWND_DESKTOP;
     3325        dcd->hwndParent = hwndParent ? hwndParent : HWND_DESKTOP;
    33083326        dcd->hwndFrame = hwndFrame;
    33093327        dcd->hwndClient = hwndClient;
    3310         dcd->amextracted = ((flags & 1) != 0);
    3311         dcd->dontclose = ((flags & 4) != 0);
     3328        dcd->amextracted = (flags & 1) != 0;
     3329        dcd->dontclose = (flags & 4) != 0;
    33123330        dcd->info = info;
    33133331        dcd->sortFlags = DefArcSortFlags;
  • trunk/dll/systemf.c

    r552 r562  
    623623  STARTDATA sdata;
    624624  REQUESTDATA rq;
    625   ULONG ulSessID, apptype, ulLength, ctr;
     625  ULONG ulSessID;
     626  ULONG ulLength;
     627  UINT ctr;
     628  ULONG ulAppType;
    626629  PID sessPID;
    627630  BOOL wasquote;
     
    776779          switch_to(pszDirectory);
    777780        }
    778         rc = DosQAppType(pszPgm,&apptype);
     781        rc = DosQueryAppType(pszPgm,&ulAppType);
    779782        if (!strchr(pszPgm, '\\') &&
    780783            !strchr(pszPgm, ':') &&
     
    783786          switch_to(szSavedir);
    784787        if (rc) {
    785           Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,
    786                     GetPString(IDS_DOSQAPPTYPEFAILEDTEXT),
    787                     pszPgm);
     788          Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,
     789                    GetPString(IDS_DOSQAPPTYPEFAILEDTEXT),
     790                    pszPgm);
    788791          DosFreeMem(pszPgm);
    789792          if (pszArgs)
     
    791794          return -1;
    792795        }
    793         if (apptype) {
    794           if ((apptype & FAPPTYP_DLL) || (apptype & FAPPTYP_VIRTDRV) ||
    795               (apptype & FAPPTYP_PHYSDRV) || (apptype & FAPPTYP_PROTDLL))
     796        if (ulAppType) {
     797          if (ulAppType & FAPPTYP_DLL || ulAppType & FAPPTYP_VIRTDRV ||
     798              ulAppType & FAPPTYP_PHYSDRV || ulAppType & FAPPTYP_PROTDLL)
    796799          {
    797             Runtime_Error(pszSrcFile, __LINE__,
    798                           GetPString(IDS_APPTYPEUNEXPECTEDTEXT),
    799                           apptype, pszPgm);
     800            Runtime_Error(pszSrcFile, __LINE__,
     801                          GetPString(IDS_APPTYPEUNEXPECTEDTEXT),
     802                          ulAppType, pszPgm);
    800803            if (pszPgm)
    801804              DosFreeMem(pszPgm);
     
    804807            return -1;
    805808          }
    806           if ((apptype & FAPPTYP_DOS) || (apptype & FAPPTYP_WINDOWSREAL) ||
    807               (apptype & FAPPTYP_WINDOWSPROT) || (apptype & 0x1000))
     809          if (ulAppType & FAPPTYP_DOS || ulAppType & FAPPTYP_WINDOWSREAL ||
     810              ulAppType & FAPPTYP_WINDOWSPROT || ulAppType & FAPPTYP_WINDOWSPROT31)
    808811          {
    809             Runtime_Error(pszSrcFile, __LINE__,
    810                           GetPString(IDS_APPTYPEUNEXPECTEDTEXT),
    811                           apptype, pszPgm);
     812            Runtime_Error(pszSrcFile, __LINE__,
     813                          GetPString(IDS_APPTYPEUNEXPECTEDTEXT),
     814                          ulAppType, pszPgm);
    812815            if (pszPgm)
    813816              DosFreeMem(pszPgm);
     
    912915        switch_to(pszDirectory);
    913916      }
    914       rc = DosQAppType(pszPgm,&apptype);
     917      rc = DosQueryAppType(pszPgm,&ulAppType);
    915918      if (!strchr(pszPgm, '\\') &&
    916919          !strchr(pszPgm, ':') &&
     
    919922        switch_to(szSavedir);
    920923      if (rc) {
    921         Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,
    922                   GetPString(IDS_DOSQAPPTYPEFAILEDTEXT),
    923                   pszPgm);
     924        Dos_Error(MB_CANCEL,rc,hwnd,pszSrcFile,__LINE__,
     925                  GetPString(IDS_DOSQAPPTYPEFAILEDTEXT),
     926                  pszPgm);
    924927        DosFreeMem(pszPgm);
    925928        if (pszArgs)
     
    928931      }
    929932
    930       if (apptype) {
    931         if (apptype & (FAPPTYP_DLL | FAPPTYP_VIRTDRV | FAPPTYP_PHYSDRV | FAPPTYP_PROTDLL))
     933      if (ulAppType) {
     934        if (ulAppType & (FAPPTYP_DLL | FAPPTYP_VIRTDRV | FAPPTYP_PHYSDRV | FAPPTYP_PROTDLL))
    932935        {
    933           Runtime_Error(pszSrcFile, __LINE__,
    934                         GetPString(IDS_APPTYPEUNEXPECTEDTEXT),
    935                         pszPgm);
     936          Runtime_Error(pszSrcFile, __LINE__,
     937                        GetPString(IDS_APPTYPEUNEXPECTEDTEXT),
     938                        pszPgm);
    936939          DosFreeMem(pszPgm);
    937940          if (pszArgs)
     
    939942          return -1;
    940943        }
    941         apptype &= ~FAPPTYP_BOUND;
    942         if (apptype & (FAPPTYP_DOS | FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSPROT31))
     944        ulAppType &= ~FAPPTYP_BOUND;
     945        if (ulAppType & (FAPPTYP_DOS | FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSPROT31))
    943946        {
    944           if (apptype & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSPROT31))
     947          if (ulAppType & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSPROT31))
    945948          {
    946949            if (~type & FULLSCREEN &&
    947                 apptype & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSPROT31))
     950                ulAppType & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSPROT31))
    948951            {
    949952              ret = RunSeamless(pszPgm, pszArgs, hwnd);
     
    958961              strcat(pszPgm, pszArgs);
    959962              *pszArgs = 0;
    960               if (apptype & (FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT31))
     963              if (ulAppType & (FAPPTYP_WINDOWSPROT | FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT31))
    961964                strcat(pszArgs, "/3 ");
    962965              strcat(pszArgs, pszPgm);
     
    967970            if (~type & FULLSCREEN) {
    968971              type |= WINDOWED;
    969               apptype = SSF_TYPE_WINDOWEDVDM;
     972              ulAppType = SSF_TYPE_WINDOWEDVDM;
    970973            }
    971974            else {
    972975              type &= ~WINDOWED;
    973               apptype = SSF_TYPE_VDM;
    974             }
    975           }
    976         }
    977         else if (apptype & FAPPTYP_32BIT) {
    978           apptype &= ~FAPPTYP_32BIT;
    979           if (apptype == FAPPTYP_WINDOWAPI)
    980             apptype = SSF_TYPE_PM;
    981           else if (apptype == FAPPTYP_WINDOWCOMPAT)
    982             apptype = SSF_TYPE_WINDOWABLEVIO;
    983           else if (apptype == FAPPTYP_NOTWINDOWCOMPAT) {
    984             apptype = SSF_TYPE_FULLSCREEN;
     976              ulAppType = SSF_TYPE_VDM;
     977            }
     978          }
     979        }
     980        else if (ulAppType & FAPPTYP_32BIT) {
     981          ulAppType &= ~FAPPTYP_32BIT;
     982          if (ulAppType == FAPPTYP_WINDOWAPI)
     983            ulAppType = SSF_TYPE_PM;
     984          else if (ulAppType == FAPPTYP_WINDOWCOMPAT)
     985            ulAppType = SSF_TYPE_WINDOWABLEVIO;
     986          else if (ulAppType == FAPPTYP_NOTWINDOWCOMPAT) {
     987            ulAppType = SSF_TYPE_FULLSCREEN;
    985988            type &= ~WINDOWED;
    986989            type |= FULLSCREEN;
    987990          }
    988991          else                          /* ? */
    989             apptype = SSF_TYPE_WINDOWABLEVIO;
    990         }
    991         else if (apptype == FAPPTYP_WINDOWAPI)
    992           apptype = SSF_TYPE_PM;
    993         else if (apptype == FAPPTYP_WINDOWCOMPAT)
    994           apptype = SSF_TYPE_WINDOWABLEVIO;
    995         else if (apptype == FAPPTYP_NOTWINDOWCOMPAT) {
     992            ulAppType = SSF_TYPE_WINDOWABLEVIO;
     993        }
     994        else if (ulAppType == FAPPTYP_WINDOWAPI)
     995          ulAppType = SSF_TYPE_PM;
     996        else if (ulAppType == FAPPTYP_WINDOWCOMPAT)
     997          ulAppType = SSF_TYPE_WINDOWABLEVIO;
     998        else if (ulAppType == FAPPTYP_NOTWINDOWCOMPAT) {
    996999          type &= ~WINDOWED;
    997           apptype = SSF_TYPE_FULLSCREEN;
     1000          ulAppType = SSF_TYPE_FULLSCREEN;
    9981001        }
    9991002        else
    1000           apptype = SSF_TYPE_DEFAULT;
     1003          ulAppType = SSF_TYPE_DEFAULT;
    10011004        if ((type & FULLSCREEN || ~type & WINDOWED) &&
    1002             apptype == SSF_TYPE_WINDOWABLEVIO)
     1005            ulAppType == SSF_TYPE_WINDOWABLEVIO)
    10031006        {
    1004           apptype = SSF_TYPE_FULLSCREEN;
     1007          ulAppType = SSF_TYPE_FULLSCREEN;
    10051008        }
    10061009        // fixme parens?
    10071010        else if (type & FULLSCREEN ||
    1008                  (type & WINDOWED && apptype == SSF_TYPE_WINDOWEDVDM))
    1009           apptype = SSF_TYPE_VDM;
    1010       }
    1011       if (apptype == SSF_TYPE_WINDOWEDVDM && type & SEPARATEKEEP) {
     1011                 (type & WINDOWED && ulAppType == SSF_TYPE_WINDOWEDVDM))
     1012        {
     1013          ulAppType = SSF_TYPE_VDM;
     1014        }
     1015      }
     1016      if (ulAppType == SSF_TYPE_WINDOWEDVDM && type & SEPARATEKEEP) {
    10121017        type &= ~SEPARATEKEEP;
    10131018        type |= SEPARATE;
     
    10391044                Dos_Error(MB_ENTER,rc,HWND_DESKTOP,pszSrcFile,__LINE__,"DoCreateEventSem");
    10401045            }
    1041             // if (!rc)
    1042             //  fprintf(stderr,"runemf2 qcreated ptib %x hTermQ %x\n",ptib,hTermQ);
     1046            // if (!rc) fprintf(stderr,"%s %d qcreated ptib %x hTermQ %x\n",__FILE__, __LINE__,ptib,hTermQ);
    10431047          }
    10441048        } // if 1st time
     
    10471051          DosExitCritSec();
    10481052      } // if wait
     1053
     1054      memset(&sdata,0,sizeof(sdata));
    10491055      sdata.Length = sizeof(sdata);
    1050       sdata.Related = type & (WAIT | CHILD) ?
    1051                       SSF_RELATED_CHILD : SSF_RELATED_INDEPENDENT;
     1056      sdata.Related = type & (WAIT | CHILD) ? SSF_RELATED_CHILD :
     1057                                              SSF_RELATED_INDEPENDENT;
    10521058      sdata.FgBg = type & BACKGROUND ? SSF_FGBG_BACK : SSF_FGBG_FORE;
    10531059      sdata.TraceOpt = SSF_TRACEOPT_NONE;
    1054       sdata.PgmTitle = NULL;
    10551060      sdata.PgmName = pszPgm;
    1056       sdata.PgmInputs = *pszArgs ? pszArgs : NULL;
    1057       sdata.TermQ = useTermQ ? szTermQName : NULL;
     1061      if (*pszArgs)
     1062        sdata.PgmInputs = pszArgs;
     1063      if (useTermQ)
     1064        sdata.TermQ = szTermQName;
    10581065      sdata.Environment = pszEnvironment;
    10591066      sdata.InheritOpt = SSF_INHERTOPT_PARENT;
    1060       sdata.SessionType = (USHORT)apptype;
     1067      sdata.SessionType = ulAppType;
    10611068      sdata.ObjectBuffer = szObject;
    10621069      sdata.ObjectBuffLen = sizeof(szObject);
    1063       sdata.IconFile = NULL;
    1064       sdata.PgmHandle = 0L;
    1065       sdata.Reserved = 0;
    1066       sdata.PgmControl = (USHORT) ((SSF_CONTROL_NOAUTOCLOSE * ((type & 15) == SEPARATEKEEP)) |
    1067                         (SSF_CONTROL_MAXIMIZE * ((type & MAXIMIZED) != 0)) |
    1068                         (SSF_CONTROL_MINIMIZE * ((type & MINIMIZED) != 0)) |
    1069                        (SSF_CONTROL_INVISIBLE * ((type & INVISIBLE) != 0)));
     1070      if ((type & 15) == SEPARATEKEEP)
     1071        sdata.PgmControl |= SSF_CONTROL_NOAUTOCLOSE;
     1072      if (type & MAXIMIZED)
     1073        sdata.PgmControl |= SSF_CONTROL_MAXIMIZE;
     1074      if (type & MINIMIZED)
     1075        sdata.PgmControl |= SSF_CONTROL_MINIMIZE;
     1076      if (type & INVISIBLE)
     1077        sdata.PgmControl |= SSF_CONTROL_INVISIBLE;
     1078
    10701079      if (pszDirectory && *pszDirectory) {
    10711080        save_dir2(szSavedir);
    10721081        switch_to(pszDirectory);
    10731082      }
     1083
     1084     // printf("%s %d DosStartsession thread 0x%x data\n ",
     1085      //       __FILE__, __LINE__,ptib->tib_ordinal); fflush(stdout);   // 10 Mar 07 SHL hang
     1086     // printf(" %d %d %d %s %s %s %d %d\n %s %x %x\n",
     1087      //       sdata.Length , sdata.Related, sdata.FgBg, sdata.PgmName,
     1088        //     sdata.PgmInputs, sdata.TermQ, sdata.InheritOpt,
     1089          //   sdata.SessionType, szTermQName,
     1090       //   hTermQ, hTermQSem); fflush(stdout);
    10741091      ret = DosStartSession(&sdata, &ulSessID, &sessPID);
     1092      if (type & WAIT) {
     1093       // printf("%s %d DosStartession thread 0x%x rc = %d sess = %u pid = 0x%x\n",
     1094       //        __FILE__, __LINE__, ptib->tib_ordinal,ret, ulSessID, sessPID); fflush(stdout); // 10 Mar 07 SHL hang
     1095      }
     1096      else {
     1097       // printf("%s %d DosStartession thread 0x%x nowait rc = %d\n",
     1098         //      __FILE__, __LINE__, ptib->tib_ordinal,ret); fflush(stdout);    // 10 Mar 07 SHL hang
     1099      }
     1100
    10751101      if (pszDirectory && *pszDirectory)
    10761102        switch_to(szSavedir);
     1103
    10771104      if (ret && ret != ERROR_SMG_START_IN_BACKGROUND) {
    10781105        Dos_Error(MB_CANCEL,ret,hwnd,pszSrcFile,__LINE__,
     
    10841111
    10851112        if (!useTermQ) {
     1113          STATUSDATA sd;
    10861114          // Could not create queue - fallback - fixme to be gone?
    1087           STATUSDATA sd;
     1115         // printf("%s %d waiting wo/termq\n", __FILE__, __LINE__); fflush(stdout);     // 12 Mar 07 SHL hang
    10881116
    10891117          memset(&sd, 0, sizeof(sd));
     
    10971125              break;
    10981126            if (ctr > 10) {
     1127           //   printf("%s %d thread 0x%x showing slow sess %u pid 0x%x\n",
     1128             //        __FILE__, __LINE__,ptib->tib_ordinal,ulSessID,sessPID); fflush(stdout);  // 12 Mar 07 SHL
    10991129              ShowSession(hwnd, sessPID);       // Show every 2 seconds
    11001130              ctr = 0;
     
    11141144            }
    11151145            else {
    1116               // fixme to not do this?
    1117               if (ctr == 20)
     1146              if (ctr == 20) {
     1147               // printf("%s %d thread 0x%x showing slow sess %u pid 0x%x\n",
     1148                //       __FILE__, __LINE__,ptib->tib_ordinal,ulSessID,sessPID); fflush(stdout);
    11181149                ShowSession(hwnd, sessPID);             // Show long running session
     1150              }
     1151             // printf("%s %d thread 0x%x waiting for slow sess %u pid 0x%x\n",
     1152               //      __FILE__, __LINE__,ptib->tib_ordinal,ulSessID, sessPID); fflush(stdout);
    11191153              rc = DosReadQueue(hTermQ, &rq, &ulLength, (PPVOID)&pTermInfo, 0,
    11201154                                DCWW_WAIT, &bPriority, 0);
     
    11281162            }
    11291163
     1164          //  printf("%s %d DosReadQueue thread 0x%x sess %u sessRC %u rq.pid 0x%x rq.data 0x%x\n",
     1165            //       __FILE__, __LINE__,ptib->tib_ordinal,pTermInfo->usSessID,pTermInfo->usRC,rq.pid, rq.ulData); fflush(stdout);
     1166
     1167            // might be looping here if confused about session id - fixme to ensure not possible?
    11301168            if (pTermInfo->usSessID == ulSessID)
    11311169              break;                    // Our session is done
    11321170
    1133             // Requeue for other thread
     1171            // Requeue session for other thread
    11341172            {
    11351173              static ULONG ulLastSessID;
    1136               // fprintf(stderr,"runemf2 requeue other ptib %x sessId %x ti.sessId %x ti.rc %d\n",ptib,ulSessID,pTermInfo->usSessID,pTermInfo->usRC);
    1137               // fixme to be gone
     1174             // printf("%s %d requeue thread 0x%x our sess %u term sess %u term rc %u\n",
     1175              //       __FILE__, __LINE__,ptib->tib_ordinal,ulSessID,pTermInfo->usSessID,pTermInfo->usRC); fflush(stdout);
     1176              // fixme to be gone when no longer needed for debug?
    11381177              if (ulLastSessID) {
    11391178                DosSleep(500);
    11401179                ulLastSessID = pTermInfo->usSessID;
    11411180              }
    1142               // requeue and do not free yet
     1181              // requeue term report for other thread and do not free yet
    11431182              rc = DosWriteQueue(hTermQ, rq.ulData, ulLength,(PVOID)pTermInfo, bPriority);
    11441183              if (rc)
     
    11481187          } // for
    11491188
    1150           ret = !(!pTermInfo->usRC);            // Set TRUE if rc 0
    1151           // fprintf(stderr,"runemf2 term this ptib %x sessID %x rq.pid %x rq.data %x ti.rc %d\n",ptib,ulSessID,rq.pid,rq.ulData,pTermInfo->usRC);
    1152           // fflush(stderr);
     1189          ret = pTermInfo->usRC == 0;           // Set 1 if rc 0 else 0
     1190         // printf("%s %d thread 0x%x term for sess %u\n",
     1191           //      __FILE__, __LINE__,ptib->tib_ordinal,ulSessID);fflush(stdout);
    11531192          DosFreeMem(pTermInfo);
    11541193        }
     
    11651204  if (pszArgs)
    11661205    DosFreeMem(pszArgs);
     1206
    11671207  return ret;
    11681208}
     
    12531293        pgd.pszEnvironment = env;
    12541294        pgd.pszStartupDir = startdir;
    1255         pgd.pszParameters = (*parameters) ? parameters : NULL;
     1295        pgd.pszParameters = *parameters ? parameters : NULL;
    12561296        pgd.pszExecutable = executable;
    12571297        pgd.swpInitial.hwndInsertBehind = HWND_TOP;
Note: See TracChangeset for help on using the changeset viewer.