home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a120 / 1.ddi / API / CHKDRV.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-07-09  |  3.1 KB  |  129 lines

  1. /*------------------------------------------------------------------*/
  2. /* CHKDRV.C                                                         */
  3. /*------------------------------------------------------------------*/
  4. /* API ▒`  ªí : CHKDRV()                                            */
  5. /* API ¿τ╝╞└] : CHKDRV.PLB                                          */
  6. /* ╗y      ¬k : CHKDRV(<expC>)                                      */
  7. /*------------------------------------------------------------------*/
  8.  
  9. #include <dos.h>
  10. #include <fcntl.h>
  11. #include <string.h>
  12. #include <stdio.h>
  13. #include <io.h>
  14. #include <ctype.h>
  15. #include <errno.h>
  16. #include <pro_ext.h>
  17.  
  18. int   notReady;
  19. void (__interrupt __far *cur_int)();
  20.  
  21. void __interrupt __far ErrorHandler(union INTPACK r)
  22. {
  23.    if ( (r.w.di & 0x00FF) == 1  ||
  24.         (r.w.di & 0x00FF) == 2  ||
  25.         (r.w.di & 0x00FF) == 12 )
  26.    {
  27.       /* ┐∙╗~¬¼¬p╗í⌐· :                                */
  28.       /* 01H  │µñ╕(unit) ⌐|Ñ╝⌐w╕q                      */
  29.       /* 02H  ║╧║╨╛≈⌐|Ñ╝│B⌐≤╖╟│╞ªnñº¬¼║A  (ª╣Ñ]¼A      */
  30.       /*      ╖φñ@¡╙║⌠╕⌠║╧║╨╛≈«┌Ñ╗┤Nñúªsªb)            */
  31.       /* 0CH  ╡o▓{⌐|Ñ╝«µªíñ╞ñº║╧║╨¬║ñ@¡╙ñ@»δ⌐╩ñº┐∙     */
  32.       /*      ╗~╡oÑ═                                   */
  33.       /* Ñu¡n└xªs¿Σ╕Ω░T¿├...                           */
  34.  
  35.       notReady = TRUE;
  36.  
  37.       /* ... │q¬╛ DOS Ñh⌐┐▓ñª╣┐∙╗~                     */
  38.       r.h.al = (unsigned char) 0;
  39.    }
  40.    else
  41.    {
  42.       _chain_intr(cur_int);
  43.    }
  44.    return;
  45. }
  46.  
  47. void FAR ChkDrv(ParamBlk FAR *parm)
  48. {
  49.     WHANDLE wh;
  50.     Point pt;
  51.     char FAR *message;
  52.     int keystroke;
  53.     int  wasError = FALSE;
  54.     char buffer[4];
  55.     char FAR *ptr;
  56.     int     retCode;
  57.     message = "│Q╢╟╗╝╡╣ CHKDRV() ñº░╤╝╞Ñ▓╢╖¼Oñ@¡╙║╧║╨╛≈ªrÑ└ÑN╕╣╗Pñ@¡╙½_╕╣";
  58.  
  59.     if (parm->p[0].val.ev_length!=2)
  60.        wasError = TRUE;
  61.     else
  62.     {
  63.        ptr = _HandToPtr(parm->p[0].val.ev_handle);
  64.        _MemMove(buffer, ptr, 2);
  65.        if (!isalpha(buffer[0]) || buffer[1]!=':')
  66.           wasError = TRUE;
  67.     }
  68.  
  69.     if (wasError)
  70.     {
  71.        wh = _WOpen(12,4,15,75,
  72.                    SHADOW,
  73.                    ALERT_SCHEME,
  74.                    0,
  75.                    WO_SYSTEMBORDER);
  76.        if(wh != NULL) {
  77.           _WSetTitle( wh, "┐∙╗~░T«º" );
  78.           _WSetFooter( wh, "ALERT MESSAGE");
  79.           _WShow(wh);
  80.           pt.h =  1;
  81.           pt.v =  1;
  82.           _WPosCursor( wh, pt );
  83.           _WPutStr( wh , message);
  84.        }
  85.        _InKey(0,HIDECURSOR+MOUSEACTIVE);
  86.        _WClose( wh );
  87.        _RetLogical(FALSE);
  88.        return;
  89.     }
  90.  
  91.     buffer[2] = '\\';
  92.     buffer[3] = '\0';
  93.  
  94.     notReady = FALSE;
  95.  
  96.     cur_int = _dos_getvect(0x24);
  97.  
  98.     _disable();
  99.  
  100.     _dos_setvect(0x24, &ErrorHandler);
  101.  
  102.     _enable();
  103.  
  104.     retCode = access(buffer, F_OK);
  105.  
  106.     _disable();
  107.     _dos_setvect(0x24, cur_int);
  108.     _enable();
  109.     if (notReady)
  110.        retCode = TRUE;
  111.  
  112.     _RetLogical(!retCode);
  113.     return;
  114. }
  115.  
  116. FoxInfo myFoxInfo[] = {
  117.   { "CHKDRV",
  118.      ChkDrv,
  119.      1,
  120.      "C"}
  121. };
  122.  
  123. FoxTable _FoxTable = {
  124.     (FoxTable FAR *) 0,
  125.     sizeof( myFoxInfo) / sizeof( FoxInfo ),
  126.     myFoxInfo
  127. };
  128.  
  129.