home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR2 / DCOPYPM5.ZIP / SUPPDEL.C < prev    next >
Text File  |  1993-11-30  |  5KB  |  153 lines

  1. #define INCL_DOS
  2. #define INCL_WIN
  3. #define INCL_WINDIALOGS
  4. #define INCL_DOSPROCESS
  5. #define INCL_DOSSESMGR          /* Session Manager values */
  6.  
  7. #define LEN_BUFFER 512
  8.  
  9.  
  10. #include <os2.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include "suppdel.h"
  14.  
  15.  
  16. static char error[LEN_BUFFER]="";
  17.  
  18. APIRET undelete(HWND hwndDlg,char *pgm,char *para)
  19. {
  20.  
  21. STARTDATA   StartData;
  22. STATUSDATA  StatusData;
  23. ULONG       SessID,AppType;
  24. RESULTCODES ReturnCodes;
  25. PID         RetProcessID,PID;
  26. UCHAR       PgmTitle[LEN_BUFFER];
  27. UCHAR       ObjBuf[100];
  28. APIRET      rc;         
  29. CHAR        *ret,count;
  30.  
  31.     // OS2-Sessions starten
  32.     StartData.PgmName       = pgm;
  33.     StartData.SessionType   = SSF_TYPE_DEFAULT;
  34.     StartData.PgmInputs     = para;
  35.  
  36.     StartData.Length        = sizeof(STARTDATA);
  37.     StartData.Related       = SSF_RELATED_CHILD;
  38.     StartData.FgBg          = SSF_FGBG_FORE;
  39.     StartData.TraceOpt      = SSF_TRACEOPT_NONE;
  40.     StartData.PgmTitle      = 0;
  41.     StartData.TermQ         = 0;
  42.     StartData.Environment   = 0;
  43.     StartData.InheritOpt    = SSF_INHERTOPT_PARENT;
  44.     StartData.IconFile      = 0;
  45.     StartData.PgmHandle     = 0;
  46.     StartData.PgmControl    = SSF_CONTROL_INVISIBLE;
  47.     StartData.InitXPos      = 0;
  48.     StartData.InitYPos      = 0;
  49.     StartData.InitXSize     = 0;
  50.     StartData.InitYSize     = 0;
  51.     StartData.Reserved      = 0;
  52.     StartData.ObjectBuffer  = ObjBuf;
  53.     StartData.ObjectBuffLen = 100;
  54.  
  55.     rc = DosStartSession(&StartData, &SessID, &PID);
  56.  
  57.     DosSleep(500);
  58.     StatusData.Length=sizeof(STATUSDATA);
  59.     StatusData.SelectInd=SET_SESSION_UNCHANGED;
  60.     StatusData.BondInd=SET_SESSION_UNCHANGED;
  61.  
  62.     while(!DosSetSession(SessID,&StatusData))DosSleep(500);
  63.  
  64.     return(0);
  65. }
  66.  
  67.  
  68. MRESULT EXPENTRY MyDlgProc( HWND hwndDlg, USHORT msg, MPARAM mp1, MPARAM mp2 )
  69. {
  70. char   buffer[LEN_BUFFER],list[LEN_BUFFER],*token;
  71. FILE   *del_file;
  72. APIRET rc;
  73. SHORT  tst,count=0,num;
  74.  
  75.    switch ( msg )
  76.    {
  77.      case WM_INITDLG:
  78.           WinSendMsg(hwndDlg,WM_SETICON,(MPARAM)WinLoadPointer(HWND_DESKTOP, 0, IDR_MAIN),0);
  79.           undelete(hwndDlg,"CMD.EXE","/c UNDELETE.COM /l /s \\* >C:\\DCOPY.!!!");
  80.           del_file=fopen("C:\\DCOPY.!!!","r");
  81.           while(fgets(buffer,LEN_BUFFER,del_file))
  82.           {
  83.              if(++count <= 2)
  84.              {
  85.                 if(*buffer!='\n' && count==2)
  86.                 {
  87.                    strcpy(error,strtok(buffer,"\n"));
  88.  
  89.                    while(fgets(buffer,LEN_BUFFER,del_file))
  90.                    {
  91.                       strcat(error," ");
  92.                       token=strtok(buffer,"\n");
  93.                       strcat(error,(token)?token:"");
  94.                    }
  95.                    WinDismissDlg(hwndDlg,FALSE);
  96.                    break;
  97.                 }
  98.                 else continue;
  99.              }
  100.              if(token=strtok(buffer,"\n"))
  101.                 if((tst=SHORT1FROMMP(WinSendDlgItemMsg(hwndDlg, LIST_UNDELETE, LM_SEARCHSTRING, MPFROM2SHORT(0, -1), MPFROMP(token))))==LIT_NONE)
  102.                     WinSendDlgItemMsg(hwndDlg, LIST_UNDELETE, LM_INSERTITEM, MPFROM2SHORT(LIT_SORTASCENDING, 0),MPFROMP(token));
  103.           }
  104.           fclose(del_file);
  105.           DosDelete("C:\\DCOPY.!!!");
  106.           break;
  107.      case WM_COMMAND:                       /* Posted by pushbutton or key  */
  108.           switch( SHORT1FROMMP( mp1 ) )     /* Extract the command value    */
  109.           {
  110.              case BUT_UNDELETE:
  111.                   if((num=SHORT1FROMMP(WinSendDlgItemMsg(hwndDlg, LIST_UNDELETE, LM_QUERYSELECTION, MPFROM2SHORT(-1, 0), 0)))!=LIT_NONE)
  112.                   do
  113.                   {
  114.                       WinSendDlgItemMsg(hwndDlg, LIST_UNDELETE, LM_QUERYITEMTEXT, MPFROM2SHORT(num, LEN_BUFFER), MPFROMP(buffer));
  115.                       // existiert File schon ?
  116.                       if(del_file=fopen(buffer,"r")){ fclose(del_file); continue; }
  117.                       strcpy(list, "/c DETACH UNDELETE.COM ");
  118.                       strcat(list,buffer);
  119.                       strcat(list," /A");
  120.                       if(undelete(hwndDlg,"CMD.EXE",list))
  121.                          WinMessageBox(hwndDlg,0,buffer,"Error while undeleting:",1, MB_OK|MB_ICONEXCLAMATION|MB_SYSTEMMODAL);
  122.  
  123.                   }while((num=SHORT1FROMMP(WinSendDlgItemMsg(hwndDlg, LIST_UNDELETE, LM_QUERYSELECTION, MPFROM2SHORT(num, 0), 0)))!=LIT_NONE);
  124.  
  125.                   WinDismissDlg(hwndDlg,TRUE);
  126.                   break;
  127.              case BUT_CANCEL:
  128.                   WinDismissDlg(hwndDlg,TRUE);
  129.                   break;
  130.              case BUT_HELP:
  131.                   undelete(hwndDlg,"CMD.EXE","/c help undelete");
  132.                   break;
  133.           }
  134.           break;
  135.      default:
  136.           return WinDefDlgProc( hwndDlg, msg, mp1, mp2 );
  137.   }
  138.   return (MRESULT) FALSE;
  139. }
  140.  
  141. APIRET Supp_Undel(HMODULE hmodule,HWND hwndDlg, char *para, void *fkt[])
  142. {
  143. APIRET rc;
  144. HMODULE  ModuleHandle;
  145. ULONG    Ordinal;       /* Ordinal number of procedure */
  146. PFN      ProcAddress;   /* Procedure address (returned) */
  147.  
  148.    if(!(rc=WinDlgBox( hwndDlg,hwndDlg,(PFNWP)MyDlgProc,hmodule,UNDEL_DLG,NULL)))
  149.       WinMessageBox(hwndDlg,0,error,NULL,1, MB_OK|MB_ICONEXCLAMATION|MB_SYSTEMMODAL);
  150.  
  151.    return(0);
  152. }
  153.