
   .    .   " OS/2 "                       12


     *ணࠬ, 騥 १묨  
     * 
     * ஢
     *ଠ樮  
     *  ࠭  ୮ ணࠬ
     * : Ctrl-c  㣨
     *ࠡ稪 ᨣ
     * :  ᨣ  ᠬ


         墠⠢    ⥬.  ,  -,   -
  ன,         墠   -
,  ।祭    㣨  ணࠬ.    -,    ᨣ,
     ⢨       ᯥ樠      ࠡ
譨  ᮡ⨩,     ਬ,     ⨥     짮⥫   
Ctrl-c.

         ⥬  "  ,       ⨨  ।
  ணࠬ,  ⮢      ࠡ⪥,  ⢫   -
  ⢨.   ,      ᨣ  ᨫ쭮  ⫨  
믮塞  砬      堭  ᢮  ࠡ,      '-
        '  ⥬,        - 襥
    ࠢ⥫쭮 ⪮ 㦤 ᨣ.


                           

            OS/2          ணࠬ   믮  
⢨,    ⢫﫨    MS-DOS        TSR-ண-
ࠬ  (  ணࠬ,   騥      ᫥  襭  ). -
    ᯮ    ⮬,      TSR-ணࠬ   
᫮    ᯮ짮.

     ,     

     TSR-ணࠬ      ப   ୮  ।   -
⥫  MS-DOS.     ணࠬ  ⠭    ,    
  ⨢      ,      ᮧ  ।-
  ᫮.      ᫮  ⨢樨   TSR-ணࠬ    ⠭-
  ⨥  -      樨  .    
,         ⠪  "稩  ",     ⠫ ண-
ࠬ   믮  ଠ쭮,     ᫨    TSR-ணࠬ   
  室      .  ᫥    ⨢饩  -
樨    TSR-ணࠬ  "",  頥    ࠭   -
,   ⥫䮭  ,     -       ண-
ࠬ.     짮⥫  蠥  ᥠ  ࠡ    ⮩  ᯮ-
⥫쭮  ணࠬ,      ⠭  ⨢     -
砫쭠   ணࠬ  頥     ᢮  室   ﭨ.
㣮  ⨯  TSR-ணࠬ    ६   ࠡ⠥      䮭   ०-
.ਬ஬       ணࠬ,    ८ࠧ   ।
ᨬ  ப - ப "⥫".

       TSR-ணࠬ    ।  MS-DOS  㤮      짮-
,  ᪮      ᯮ짮  ந室  ஥   ४-
祭      蠥      ,      ﭭ  -
  ਧ.       ⢥ত      ᮡ   ࠢ,
      ६  㦥       TSR-ணࠬ-
.     뢠  室  㦠  TSR-ணࠬ     ।-
  浪,     ⮣,  ⮡    ࠡ⠫  ࠢ쭮;  ஬
⮣,    TSR-ணࠬ  ᮢ⨬      㣮,    -
ᨬ    浪    ⠭.   뫨    ᮧ  ᯥ樠-
  ⨫   ⮫쪮      ⮣,   ⮡   ࣠뢠    ࠡ
TSR-ணࠬ    ࠧ  䫨    .        ᫮-
     ⮣,         MS-DOS      뫠    砫쭮
ᯮᮡ    ࠡ    TSR-ணࠬ.   ,        ⠪
  㭪樮,       ᪮॥    ᫥⢨   㮧
ࠡ ਪ ணࠬ⮢,  ࠧࠡ稪 MS-DOS.

     㣠  ஡  ⮨    ⮬,      㧪  TSR-ண-
ࠬ      ஬      ⥬   MS-DOS.
  ᫨  TSR-ணࠬ    ᮢ⨬      㣮,     
  ࠢ   墠 .

     ஬  ⮣,     ࠢ쭮  ࠡ騥  TSR-ணࠬ   
ࠪ⨪    ⠪-       .      墠   
뢠,  㪠뢠騩    ணࠬ  ࠡ⪨       -
,  ,  ஬  ⮣,    ।ਭ    㣨  , -
       ॡ          ⥬
ணࠬ  ᯥ祭.           몠    ணࠬ஢-
,  ਬ,   Turbo-C,     饥  ६  祭   -
⥫  ,   騥  ᭨   室   -
  ⤥  ⥩  TSR-ணࠬ    ᥬ.   ᬮ   
, ᮧ TSR-ணࠬ      .

      OS/2  TSR-

       OS/2  堭  墠  ࠢ    "祬    "
࣠    ⥫쭮          ⭥,   祬   ࠭    
MS-DOS.ணࠬ  ⥯  ᮢᥬ             
뢠    .   ᪨      뢠   
ਪ  ணࠬ  饭,   ⮬    ᮧ     堭
-   .   ,     ,     ७   ࠩ
ன⢠.       ।  ⥬  맮   짮-
⥫᪠   ணࠬ     ⠭    室   ன
    ࣠      ,   ᯥ稢  ᥡ,  ⠪ -
ࠧ,      ,  㯠騬      뫠   -
 ன⢮ १ ࠩ.

       OS/2    ਬ  ⮫쪮    㦨    ᨬ-
쭮-ਥ஢  ਩     ன;           
ᯮ짮      筮-ਥ஢묨    ன⢠,    ⠪,
  ᪨.    ।   ᨬ쭮-ਥ஢  ன   
    ।    ᯮ짮    ࠡ     ன,
ਭ஬    ஬   "".   ࠪ᪨     ணࠬ
㦤    ࠡ⪥  ,   㯠    ,   -
⮬   ஡ ⠭  ⮬   .

        

           ,       OS/2     ᮡ
堭    樨  맮  MS-DOS    ⠢  ணࠬ  
  ᫥    襭  (  饥  ன  ᫠  -
뢠  int  27  ).⮩    ணࠬ    DETACH   -
頥       䮭  ०,   䠪᪨  ਤ    ﭨ,
筮  TSR-ணࠬ,   ..     㦥     ,    
    짮⥫.     ࠧ,    ᫮   
TSR-ணࠬ  MS-DOS  祧,   ᪮    OS/2       
ᥡ ᠬ 樮 ⥬.

       ⮣,    OS/2  ணࠬ,  ᯮ  ,    -
    믮  ࠫ쭮    ᭮  祩,    ࠡ-
饩     ⨢  ०.     MS-DOS  TSR-ணࠬ   "६",
    "ࠧ㦥",    ਬ,   뢠     ࠡ稪
.

            ,          ன   室  ਡ
TSR-ணࠬ,  砥    祭  㯠    ⮪   -
樨     ,   ⮡   ,     ᫥   ⨢-
.   ࠧ   ࠡ   OS/2.

        

     筮  ⨥         ஦   ଠ
    ,   㤠    ।  ࠩ,    
    ணࠬ-।⥫,   ,    ᢮  ।,   -
।    ଠ  ⨢  (  ⨢  )  ணࠬ,  -
訢饩  .   ᫨  ⠭  ,         
ᯥࢠ      ,    ⥬  㦥    ணࠬ, ࠡ饩
  ⨢  ०.  ᫨  ⠭  ᪮쪮  ஢,   
ଠ  室,  ᢮  ।,   १      ,   
   .12.1

     ଠ,  易      ⨥       -
,  뢠  ⮬  .       ଠ,   
뫠    ࠡ⪥    ᥩ   楯窥   ।    .
        ᮤঠ     ᥡ  㤨⥫쭮  讥  -
⢮ ଠ樨,    ᬮਬ  ஡.

        

       ᮧ  ணࠬ,    ࠡ     ஬,    ᫥
        ᪮쪮  ࠧ  ⮭⥩.      
᭠砫    襬  ,   த㥬  ⮩  ਬ,   
⥬     ஡  ᬮਬ    蠣.     ᫥⢨  
 , 騥 訬 ﬨ.

     ணࠬ,  ࠡ     ஬,   ०  ᥣ   ⠭-
  ,    ⠪  㪠뢠    ।  ଠ樨.  -
⥬  ணࠬ,     ࠢ,  室    横  ⥭  ⮢ -
,       㯫      .   設⢮  ⮢
  ।⠢      襩  ணࠬ    ।   
  ᪮॥         楯窥   㣨   ணࠬ.    ,
⨢  稩  ,   ணࠬ  頥    ࠭,   ਬ,
.

       ࠧ,      ⭮襭    ⨣訬    ⠬  -
,  ணࠬ    믮  ࠧ  ⢨.      -
    饭  ணࠬ  (  ⠭    ᪫祭   쭥襩
ࠡ⪨  ),       ய饭    ,     ८-
ࠧ     㣮   ᨬ     㯯  ᨬ  ।  ࠢ
  .    ਬ,   ࠬ-⥫       
  ᯮ짮    襨   室       ८ࠧ
筮  ᨬ    ப  ᨬ,   ਬ,      -
⠥ ࠧ.

           :   ⠭      ⢫
  ᪮쪮  蠣.   砫             
㭪樨  API  DosNonOpen().     㭪  頥  㪠⥫   
ன⢮,    ஬   ⠭  .     㪠⥫
㭨      ன⢠  ;    㣮     ⮩
  ࠭  㯯        ᠬ  㪠⥫    ⪥
   ⮬  ன.

       ᫥     䨪  ࠭  㯯,    
ன  ந   ਭ  ᨬ.   ᪮   ணࠬ,
ࠡ騥    ஬,    ࠢ,  ࠡ    䮭  ०
    DETACH,     뢠    ⤥쭮  ࠭  -
,    祭  ⥪饩  ࠭  㯯      .  -
,      㭪樨  DosGetInfoSeg(),        -
䨪 ࠭ 㯯   ०.

     䨪  ⮩   ࠭   㯯  ⨢  ०   
㪠⥫    ன⢮,   祭    DosMonOpen(),   ᯮ-
    㬥  㭪樨  DosMonReg().     㭪  API  -
    ,   ᯮ㥬    ।     ࠩ-
஬  ன⢠    ஬.           室  -
    ணࠬ,       ᫥  ண,   ᪮  
ᯮ  ⮫쪮 ⥬.

   Ŀ
                                                           
      1         2        3   
   Ŀ     Ŀ    Ŀ  
    Ŀ       Ŀ      Ŀ   
     CharBuff        CharBuff       CharBuff   
                    
   *      *    *  
    **               **                **            
                                                     
    DosMonRead        DosMonRead         DosMonRead     
                                                     
                                                     
                                                     
       DosMonWrite       DosMonWrite        DosMonWrite 
             **               **                **   
    *Ŀ   *Ŀ    *Ŀ
     Ŀ  Ŀ     Ŀ  Ŀ      Ŀ  Ŀ 
                                         
      1    2       1    2        1    2  
                       
    *   *    *ٳ
    ** 1       ** 2       ** 3  
                                                     
               **                **               ** 
    *** 
                                                         
         KEYSTROKE                 DISTRIBUTOR           
                                                         
    * 
                  **                                     
    Ŀ                        
                                *                       
               * Ŀ                  
                                *                      
                           
                                                         
    Ŀ                       
                                             **        
                               *         
                                           ।      
                   
                                                 
                                            ਫ     
   
   . 12-1. ⮪ ଠ樨  .


     ᫥  ᯥ譮     ⠭       뢠    室,
⮡ࠧ    ࠭   ६  ᯫ뢠饥  ଠ樮   ,
ᮮ  짮⥫     ⮬.     ணࠬ  믮   
䮭  ०      DETACH,   ᯫ뢠饥       
⢥  ᯮᮡ   ᮮ  짮⥫    ⮬,      ண-
ࠬ  ᯥ譮  ⠭    ⮢     ᫥    ଠ樨
 .

         

       ⮫쪮  ணࠬ  ⠭  ,  ,     -
,  室    横,     ,   ய᪠  設⢮  
,    믮  -  ⢨        . 㭪-
 API,    ᯮ㥬         ⥭     ,     뢠
DosMonRead().     㭪  頥  室       ᯥ樠-
     (   ⫨      ,   ॣ㥬    㭪樥
DosMonReg()    ᠭ    ),     ணࠬ    -
஢ .

         ,  ணࠬ  ᯮ "ᨢ
"  (  ..     ᯮ  宫  横    ),
    室    横  ⥭    .  ᫨ ,
    ,  ⥬    맮  DosMonRead(),    -
ࠢ  ।  樮  ⥬,       ,    
ਤ  ।    .    ⮬  ணࠬ   ࠧ-
뢠    ⨢  ⮫쪮  ⮣,       --
  .    ࠧ,  ⢮  設  横,   -
  ࣠樨 , 祭 .

     筠   DosMonRead()   㭪   DosMonWrite()    ᯮ-
    ⮣,  ⮡      (    㯯  ) -
⭮    楯  ஢.  .  12.2  뢠   㭪樮஢-
 ணࠬ  ଥ -奬.

      

       ᯮ짮       ᫥   ।ᬮ   ᮡ
  ,   㦠騩    㤠      楯窨    -
襭  믮  ணࠬ.    ⮣,    ࠢ,   ᯮ-
  稩    (  ⫨    祣  ,   ᯮ㥬
  ⨢樨  ணࠬ  ).  㭪  API,  㤠  ,  -
뢠  DosMonClose().     뢠          ஢
  㤠   楯窨 .

     ।  襭   ணࠬ    ⮡ࠧ       -
  ᯫ뢠饬    ଠ     ⮬,         ᯥ譮
㤠.

        

          ਢ   ⮩  ਬ  ணࠬ,    ᯮ饩
,  monf1.c.    ।祭  ⮨    ⮬,  ⮡  -
    ࠭  ᮮ饭  直  ࠧ,        F1.
    ⮫쪮  ᫮  ⢨,   ⮡       ᮢ
ᨫ  ணࠬ,         ਬ  -⠪   
᭮  ᯮ짮  ஢.           믮-
      ⢨,   ਬ,    ⮡ࠦ   ⠡-
 ASCII-,  㣮 ᮮ⭮襭.

      ਬ 믮  䮭 ०  

     C>detach monf1

                
     Ŀ
        -
      DosMonOpen()   
     
                
     Ŀ
       䨪
     ⨢ ࠭ 㯯
     
                
     Ŀ
       ⠭    
      ஬    
          DosMonReq()      
     
                
                <Ŀ
                                                          
     Ŀ                           
      ⥭                               
        DosMovRead()                                     
                                
                                                          
     Ŀ  1     Ŀ 
          Ĵ 믮 室>
              ⢨              
                 0                
                                                         
     Ŀ  0     Ŀ 
        室   Ĵ ⥭         
              DosMonWrite()        
                    1            
     Ŀ
         
        DosMonClose()          
     
                
     Ŀ
             室    
     
	       㭮 12-2


       ࢮ  ᪥  monf1.c  ⮡ࠦ    ࠭    ᯫ뢠-
饥  ,     ஬  ନ  짮⥫    ⮬,   ண-
ࠬ  ⠭.     ணࠬ  室    䮭   ०,
  室    横  ,  ᬠਢ       -
    ᢮  ࠭  㯯.   設⢮  ᨬ  室  
,     ᫨      F1,    ᯫ뢠饬  
  ᮮ饭    ⮬.     짮⥫     
Esc,  ணࠬ   㤠      蠥,   ᮮ騢   ᯥࢠ
 ⮬ 짮⥫  ६ .


/* monf1.c */
/*        , ॠ  ⨥  F1 */
/*         믮  "detach monf1"        */
#include "kbdmon.h"        /*    ।   */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#define NOPREF     0       /*   楯窥 ࠧ筮 */
#define VIOHANDLE  0       /* ⠭  VioPopUp() -  */
#define WAIT       0       /*              */
#define F1        59       /*        -  F1      */
#define ESC       27       /*     ASCII-  Esc       */
#define RELEASE 0x40       /*  ⦠  KbdDDflags  */
main()
{
unsigned short KbdHandle ;      /* handle   */
unsigned ID ;                   /* 䨪 . 㯯  */
struct _GINFOSEG far *globptr ; /* 㪠⥫  
                                  ଠ樮 ᥣ      */
struct KeyPacket CharBuff       /*              */
struct MonBuff InBuff ;         /*      ॣ樨  */
struct MonBuff OutBuff ;
unsigned short global_seg, local_seg ;   /*  ᥣ⮢  */
unsigned WaitFlag = 0x01 ;      /* VioPopUp  ࠭     */
unsigned ByteCnt ;              /*       DosMonRead()      */

                            /*        */
DosMonOpen( "KBD$", &KbdHandle ) ;
                            /*  ID ⥪饩 .㯯 */
DosGetInfoSeg( &global_seg, &local_seg ) ;
globptr = ( struct _GINFOSEG far * ) ( (long)global_seg <<
                                                          16 ) ;
ID = globptr->sgCurrent ;

                 /*   ஢   ࢮ ᫮ */
InBuff.length  = (unsigned)sizeof( struct MonBuff ) ;
OutBuff.length = (unsigned)sizeof( struct MonBuff ) ;

DosMonReg( KbdHandle,     /* ॣ஢   */
           (unsigned char *)&InBuff,
           (unsigned char *)&OutBuff,
           NOPREF, ID ) ;
                             /* 뤠 ᮮ饭  ⠭ */
VioPopUp( &WaitFlag, VIOHANDLE ) ;
printf( "ணࠬ MONF1 ⠭ !\n" ) ;
DosSleep( 1500L ) ;
VioEndPopUp( VIOHANDLE ) ;

while( TRUE )
  {
                              /*      */
  ByteCnt = sizeof( CharBuff ) ;
  DosMonRead( (unsigned char *)&InBuff,
              WAIT,
              (unsigned char *)&OutBuff,
              &ByteCnt ) ;
                        /* ஢,     F1 */
  if( CharBuff.CharRec.Ascii == 0  &&
      CharBuff.CharRec.Scan == F1  &&
      ! ( CharBuff.KbdDDflags & RELEASE ) )
    {
                         /*  ᮮ⢥饣 ᮮ饭 */
    VioPopUp( &WaitFlag, VIOHANDLE ) ;
    printf( "  F1\n" ) ;
    DosSleep( 1500L ) ;
    VioEndPopUp( VIOHANDLE ) ;
    }
  else if( CharBuff.CharRec.Ascii == ESC )  /* 室  <Esc>  */
    break ;                      /*  । ᨬ   */
                           /*  ⠫ ᨬ ய᪠ */
  else
    DosMonWrite( (unsigned char *)&OutBuff,
                 (unsigned char *)&CharBuff, ByteCnt ) ;
  }  /* end while */

DosMonClose( KbdHandle ) ;                    /*   */
                       /*  ᮮ饭  襭 ࠡ */
VioPopUp( &WaitFlag, VIOHANDLE ) ;
printf( "ணࠬ MONF1 蠥 ࠡ\n" ) ;
DosSleep( 1500L ) ;
VioEndPopUp( VIOHANDLE ) ;
exit( 0 ) ;
}

      ணࠬ 筠 ⮡ࠦ  -奬.

     - KBDMON.H

     ணࠬ  monf1.c   砥      ᥡ        ४⨢
#include  䠩-  kbdmon.h.     䠩  ᮤন       ᥡ
।  ࠧ     ,       ᯮ짮-
    ⥪  ணࠬ.        ਢ   ᮤঠ   ⮣
䠩-.


/* , ।塞  ஢    */

struct CharRecord    /*    ᨬ */
  {
  unsigned char Ascii ;        /* ASCII- ᨬ  */
  unsigned char Scan ;         /* -  ᨬ  */
  unsigned char DBCstatus ;    /* 몮 প */
  unsigned char DBCshift ;
  unsigned int ShiftState ;    /* ﭨ Shift    */
  unsigned long Time ;         /* ६   */
  } ;

struct KeyPacket
  {            /*     */
  unsigned char MonFlags ;  /* 䫠         */
  unsigned char Orig_scan_code ; /* ࢮ砫
                                    -         */
  struct CharRecord CharRec ;
  unsigned KbdDDflags ; /* 䫠 ࠩ  */
  } ;

struct MomBuff  /*  ஢ /뢮    */
  {
  unsigned length ;       /*   MonBuff */
  unsigned char buffer[128] ; /* ᯮ  !   */
  } ;


     ।     MonBuff  ᯮ       ।-
    InBuff    OutBuff,   㤠  ।⥫   ଠ樨
    頥    뢠    ,    㯠騥
  .            ஢   ⮨    
⥩  -  ࢮ  ᫮,     ஥  ணࠬ      
  ࠧ  ,     ᠬ    ᫮,      
.            ࠩ     20  -
,  祬  ७    ࠩ  ன⢠.      㬥樨
  ⨢稢  ᢥ     ⮩  稭;   ४-
    64    128  .   宦,      ᯮ짮 
祭    ⮣  ;     kbdmon.h   ᯮ짮    
 128 .

       ,   KeyPaket    CharRecord  (     
KeyPaket  ),  ।    ,    ଠ   -
  .      ஡  ᬮਬ      (
   ᠭ            "_OS/2   Device   Drivers
_Guide." ).

                  

       KeyPaket   ⮨      ⥩.   ࢠ   
 -     MonFlags.   ࠢ       ,   0      1,  
ᯮ  ஬             ᬠਢ.     2,
᫨    ⠭,   㪠뢠    ,        ।-
祭    ᪢  宦  १  楯  ஢.    ᫨
ਪ  ணࠬ,   ᯮ   ,        
⨬  ⠭  ⮬,       ᫥      ७-
      ᫠    ,       . ணࠬ-
,  ,     ࠢ,  ய᪠    ,    ᪫-
,    ,   ,    ᫥      ⠪ -
⠬.        3    7      MonFlags  ᯮ ண-
ࠬ  ,   筮,      ।    .  ,
᫨  ணࠬ          ⮪  ,    
᫥ ⠭  0.

     ன       KeyPaket      Orig_scan_code.
    ।⠢   ᮡ  ࢮ砫  -,    ⠭-
      ,   ।  ⥬,          
ࠩ஬   (   -   -    㭨       
  樮-ᨬ    ).      筮   ᫥
।     ,     (    5  訬  ⠬ 
MonFlags  ),     ᫥  ⠭    0,  ᫨  ணࠬ -
           ⮪   .       MonFlags
  Orig_scan_code    ﬨ  ᫮  Monitor  Flags   (   ᫮
ﭨ  ),     . 12.3.

     쥩           KeyPaket       
CharRecord.      ୥        ᬮਬ     -
஡.  ⢥⮩          ᫥         KeyPaket  
KbdDDflags  (  䫠  ࠩ    ).    ᫮  ⮨ 
ࠧ ,     . 12.4.

          0      5   ᫮  KbdDDflags  ᯮ   ⮣,
⮡  㪠    ,    ࠩ  ன⢠    ।ਭ
  ᮡ  ⢨.  ᫨  ⠪  ⢨    ᫥  ।-
ਭ,      ⠭    0.    ⠪  ᫥ -
    0    ,   ᮧ  ᠬ  ணࠬ.  ਬ-
ࠬ  ,   뢠  ᮡ  ⢨,      㦨    
05h,  㪠뢠騩           ⨥     ᫥⥫쭮    
Ctrl-Alt-Del,  뢠饩  ""   १㧪;   09h  -   -
    Ctrl-s,  뢠  ਮ⠭  ஫     -
࠭;  0Ah  -  뫠  襩    ᨣ,     ᫥
㧠,     12h,      㪠뢠           Ctrl-c,
ᯮ㥬    襭  ணࠬ.        ᯮ㥬    
⮢    ਬ.

       6  KbdDDflags  ⠭    1,   ᫨    ⦠-
.    㥬  ⨬  ⮬,  ⮡  ।,    -
  ⨥       㭪樮쭮    (    -
ࠢ  ஬    㭪樮    ).     7  㪠뢠
  ,     -  ,  ।⢮襣  ⥪饬,   -
    䨪ᮬ  ;     8  㪠뢠    ,  
  ᨬ       ந  ⮩   -
,      9  㪠뢠    ,     ।騩 ᨬ  -
.   㥬 ⠬ 7,8  9.

   Ŀ
                                                    
               室 scan               
            Ŀ               
    Ĵ                              
    Ĵ               
    7654321076543210               
    Ĵ               
    *ٳ*Ĵ                              
        **     ***               
                             **                 
                 ᯮ                  
                                       
                                       
                                                 
              .                                   
              .                                   
            ।                         
                                     
            頥  -                     
            ७                          
                           
                                                   
     ⮢, 室 १   - 
                  
                                                    
     ⮢ 塞 ஬        
      ⠭   0.                   
                                                    
   
    .12-3.   䫠 .

         10    13      ।  ணࠬ  -
.  ᫨  ணࠬ  ᮧ    ,         ᫥
⠭    0.    14    15  㯭  ணࠬ, ࠡ騬 
ࠬ,    ⢨      㣮       ᯮ짮
ந쭮  ᮣ襭     .  樮  ⥬   -
    .

       MONF1.C

     ,        -        ,
ᯮ㥬    ।  ଠ樨    ,     
஡ ᬮਬ ணࠬ monf1.c.

      㭪  DosMonOpen().:   ணࠬ   ०   ᥣ    砥
㪠⥫             ன⢠,             㭪樨
DosMonOpen().
Ŀ
    DosMonOpen -   ன⢠                   
                                                              
    DosMonOpen( DevName, AHandle ) ;                          
    char far *DevName ;           /* ASCIIZ  ன⢠ */ 
    unsigned short far *AHandle ; /* , 㤠     
                                   㪠⥫  ன⢮ */ 



   Ŀ
    Ŀ               
    1514131211109876543210               
    Ĵ               
         ٳ                  
                   ࠢ ࠩࠬ      
                         ᯥ樠 ன      
                                                    
                        ᢮          
                                                     
                       ᪠- ।騩 
                                                      
                                                      
                      .                                
                                                       
                     .                                  
                                                        
                                                        
               .                                         
               .                                         
               .                                         
               .                                         
                                                         
                                                         
                                                         
       .                                                  
       .                                                  
                                                          
                                                          
   
    . 12-4.

       㭪  訢    ன⢠,     ஬   -
  ,   ਬ,   "KBD",   "MOU"    "LPT1",    
頥  㪠⥫  .   筮  ⮫쪮     맮
DosMonOpen()        㪠    ன.     -
  ணࠬ     ॣ஢      ⮬    ᠬ
ன, ᯮ   ᠬ 㪠⥫.

      䨪 ࠭  㯯 ⨢  ०:   ᫥
㭪,   DosMonReg(),   ॡ   䨪   ࠭    㯯
⨢  ०.      ଠ       ,
뢠     ଠ樮  ᥣ⮬.       
ࠡ뢠  樮  ⥬    㯭 ᠬ.  㣨
     ᮤঠ  ଠ   ᮡ⢥     
.         뢠     ଠ樮
ᥣ⮬    㯭  ⮫쪮    ⥪饣  .   
।  䠩-  bsedos.h.     뢠,   
룫 :

struct _GINFOSEG
/*  ଠ樮 ᥣ */
  {
  unsigned long time ;
  unsigned long msecs ;
  unsigned char hour ;
  unsigned char minutes ;
  unsigned char seconds ;
  unsigned char hundredts ;
  unsigned int timezone ;
  unsigned int cusecTimeInterval ;
  unsigned char day ;
  unsigned char month ;
  unsigned int year ;
  unsigned char weekday ;
  unsigned char uchMajorVersion ;
  unsigned char uchMinorVersion ;
  unsigned char chRevisionLetter ;
  unsigned char sgCurrent ;
  unsigned char sgMax ;
  unsigned char cHugeShift ;
  unsigned char fProtectModeOnly ;
  unsigned int pidForeground ;
  unsigned char fDynamicSched ;
  unsigned char csecMaxwait ;
  unsigned int cmsecMinSlice ;
  unsigned int cmsecMaxSlice ;
  unsigned int bootdrive ;
  unsigned char amecRAS[32] ;
  } ;

struct _LINFOSEG
/*  ଠ樮 ᥣ */
  {
  unsigned int pidCurrent ;
  unsigned int pidParent ;
  unsigned int prtyCurrent ;
  unsigned int tidCurrent ;
  unsigned int sgCurrent ;
  unsigned int sgSub ;
  unsigned int fForground ;
  } ;

     㭪  API   DosGetInfoSeg()        ᥣ
  .
Ŀ
    DosGetInfoSeg  -   ᥫ ଠ樮 ᥣ⮢ 
                                                                  
    DosGetInfoSeg( AGloSegSel, ALocSegSel ) ;                     
    unsigned short far *AGloSegSel ;  /* ᥣ          
                      쭮 ଠ樮 ᥣ */     
    unsigned short far *ALocSegSel ;  /* ᥣ          
                       쭮 ଠ樮 ᥣ */     

     ᫥  祭  ᥣ⭮   ,     ᫥   ८-
   쭨 㪠⥫ ᤢ   16 .

         ᮤঠ  㩬  ଠ樨,    ᥩ    -
  䨪  ࠭   㯯  ⨢  ०,    
 ᮤন ६ sgCurrent  _GINFOSEG.

     , ᯮ㥬       㭪ﬨ        DosMonRead()        
DosMonWrite()        ᢮   ࢮ   ᫮   ᮤঠ    ᢮
ᮡ⢥      .  ᫥  祭  䨪   -
࠭  㯯   ⨢   ०  ணࠬ  頥   祭
   .

      㭪  DosMonReg().:     ⮣,   ⮡  ᮮ   ⥬,
  室  ,       ⮣,  ⮡  맢  ⠭ -
, ணࠬ  맢 㭪 DosMonReg().
Ŀ
    DosMonReg - ॣ   ன⢠       
                                                              
    DosMonReg( Handle, InBuff, OutBuff, PosFlag, Index ) ;    
    unsigned short Handle ;     /* 㪠⥫  ன⢮ */ 
    unsigned char far *InBuff ; /*     ஢    */ 
    unsigned char far *OutBuff; /*         뢮    */ 
    unsigned PosFlag ;          /* 0-ࠧ.,1-.,2-.*/ 
    unsigned Index ;            /* ID ࠭ 㯯      */ 

     㬥  Handle   -       祭,   頥   㭪樥
DosMonOpen()  InBuff    OutBuff  -    ᮡ    , -
  ணࠬ   ।⠢   .   ணࠬ     ᫥
ࠡ    ⨬  ࠬ.   㬥  PosFlag      
ணࠬ            楯窥.  祭  0
।  ࠧ筮   .    祭  1   ᮮ⢥
砫  楯窨  ;   묨  ᫮,    㤥    墠-
뢠  ᨬ.  稭  2  ᮮ⢥    楯窨  ;  -
  㤥  墠뢠    ᫥.       -
 ६  ࠧ   楯.

     ᫨  -  㣠   ணࠬ,  ࠡ     ஬,
㦥  ࠫ   ।   ,   ᫥  ணࠬ,    ⤠
।⥭  ।  樨,     ஥       楯窥,
  -    ,     ...   筮,    ணࠬ,
ࠢ  楯, ⠭ ன  ,  ⠪ .

     㬥  Index    ஢    -     䨪-
  ࠭  㯯.  ,    ࠢ,  ⥪  ࠭  㯯
⨢  ०  (       ࠭   㯯   ணࠬ,   -
᪠,      ࠢ,      䮭  ०    DETACH  
ᯥ樠쭮 ࠭ 㯯  䮭 ० ).

         ᥪ樨   ⠭  ணࠬ  ⮡ࠦ   ᯫ뢠饥
 c ᮮ饭  ᯥ譮 ⠭ .

      㭪  DosMonRead().:      䮭   ०  ணࠬ  -
    横,                      㭪樨
DosMonRead().

     DosMonRead  -           ⮪    -

Ŀ
    DosMonRead( InBuff, WaitFlag, CharBuff, AByteCnt ) ;       
    unsigned char far *InBuff ;   /*       */  
    unsigned WaitFlag ;           /* 0-, 1-  */  
    unsigned char far *CharBuff ; /*         */  
    unsigned far *AByteCnt ;      /* 稪  */  

       㭪樨  DosMonRead()  㬥  InBuff  -       
,  㯭  ⮫쪮   ⥬.  WaitFlag  筮   ⠭-
    0,   ⮡  㪠    ,     ᫥  室
।  .         㬥  ⠭     1,
㭪    㤥    ᫥饣  ,   ᫨     -
.  㬥  CharBuff  -    ,  㤠    ࠧ -
  .     ⮬    ணࠬ    ஢  -
       楫   ।,            ।⠢.
AByteCnt  ᫥  ⠭   ࠢ             
CharBuff.  DosMonRead         祭,        ࠢ
  ,   ⠭    ᠬ  ,   ⮬  ᫥  -
⠭  稭 ।  맮 DosMonRead().

        ⮢  .:  ᫥  ஢  ⮫쪮  
    .     砥    ASCII-ᨬ   ᫥
஢  ⮫쪮    CharBuff.CharRec.Ascii  ;    ᫨    -
      ७  ,    ७   
(  塠           ⮬,   ࠢ    - ⠪ 
    ࠢ  ஬    㭪樮      ),
⮣  ᫥  ஢  ⠪    㣨  .    ASCII
⠪  ,    ࠢ,  0,    -  㤥   㭨-
  祭      .  ,  ⮡    
ॠ樨    ⨥    ⦠⨥      ⮩   ,  ஢-
塞  RELEASE  ᫮ KbdDDflags.

      㭪  DosMonWrite().:         ⭮  
⮪     㭪樨 DosMonWrite().

     DosMonWrite  -          ⮪    -


     DosMonWrite( OutBuff, CharBuff, AByteCnt ) ;
     unsigned char far *OutBuff ;  /*   뢮   */
     unsigned char far *CharBuff ; /*         */
     unsigned far *AByteCnt ;      /* 稪  */

     㬥  OutBuff  㭪樨  DosMonWrite()  -    ,   -
  㤥  ᯮ짮   ⮫쪮  ⥬.  CharBuff   
ணࠬ  室묨   ᨬ.  AByteCnt   ᮤন   稭,
祭  DosMonRead().

     設⢮  ⮢          ⭮      ⮪
      .    ⮬,  DosMonRead()   ।
      InBuff      ணࠬ  CharBuff,   ணࠬ-
         ࠧ      ,   ०   祬     
DosMonWrite()     ९      CharBuff    OutBuff.   ,
      ⠪    ᠬ  祣  .   ਢ -
    F1    ।    ;    ⠢ ணࠬ-
    ᢮  ᮮ饭    ࠭.     Esc   ⠪  
।    ;  ணࠬ  蠥,  㦨  .   
饭      ᥣ        믮   맮
DosMonWrite().

         -  ᫨    Esc  ᯮ    -
襭  ணࠬ,   ணࠬ   㤥              ⨨
Ctrl-Esc     ४祭         ࠭  㯯  ;   
⢨⥫쭮  ⥫쭮   ᢮⢮  ॠ쭮   ୮   ண-
ࠬ.

       ணࠬ  蠥,      㤠     ⮪
   㭪樨 DosMonClose().

     DosMonClose - 㤠 

     DosMonClose( Handle ) ;
     unsigned short Handle ;     /* 㪠⥫  ன⢮ */

     ⢥  㬥⮬  㭪樨     㪠⥫   Handle,
砥  DosMonOpen().

      ᭮    ࠧࠡ⪥.:    ⥫    ᮧ
  ணࠬ.  ᫨     砩  ⠢   㭪樮饩
  䮭  ०  ।     ணࠬ,       
ᬮ  ᮧ  .exe-䠩.       ।  ᫥  ᮧ  
  ୮  ணࠬ,    㤠       ⥬
  蠥   ணࠬ.   ᫨   ணࠬ  믮     䮭
०            ᯮ   稩         -
  ᢮   ࠡ,    ,   ,   ਤ   १㧨,
⮡ ᢮  .

         : MONTIME.C

       ᬮ५,            ।  
    饭  ணࠬ.      ᮧ     -
  ?

     騩    ਬ  ⠥    ࠭  ⥪饥  ६  
⨨  祣   .       ᯮ짮  ,    ᫨,
ਬ,          ⥪⮢  ।,        
  ⥪饥  ६          .    -
,  ⮡  ᬮ          ६,    㤥 
 Alt-t. ( 筮    . )

     ணࠬ  믮   楫    䮭  ०  (    -
祭  ᮮ饭    ⠭      㤠  ).   짮-
⥫    Alt-t,   ணࠬ  뢠  ଠ     ⥪-
饬  ६    ,   㦥  祭         㭪樨
DosGetInfoSeg().    ⠢  ப    稭  ᮢ,   
  ᥪ㭤,    ⥬  뫠  ⤥  ᨬ  ⮩  ப 
  楯   ஢         㭪樨   DosMonWrite()    ଥ
12:27:24.



/* montime.c */
/*  , ⠥  ६  ⨨ Alt-t     */
/*         믮  "detach montime"      */
#include "kbdmon.h"        /*    ।   */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#include <string.h>        /*   㭪樨 strcat(), strcpy()    */
#include <stdlib.h>        /*   㭪 itoa()                */
#define NOPREF     0       /*   楯窥 ࠧ筮 */
#define VIOHANDLE  0       /* ⠭  VioPopUp() -  */
#define WAIT       0       /*              */
#define ALT_T     20       /*        -  Alt-t    */
#define F10       68       /*     -  F10        */
#define RELEASE 0x40       /*  ⦠  KbdDDflags  */
main()
{
char Temp[10] ;                 /* ப  㭪樨 itoa()  */
char Mtime[30] ;           /*   ப  ࠭ ६ */
unsigned short KbdHandle ;      /* handle   */
unsigned ID ;                   /* 䨪 . 㯯  */
struct _GINFOSEG far *globptr ; /* 㪠⥫  
                                  ଠ樮 ᥣ      */
struct KeyPacket CharBuff       /*              */
struct MonBuff InBuff ;         /*      ॣ樨  */
struct MonBuff OutBuff ;
unsigned short global_seg, local_seg ;   /*  ᥣ⮢  */
unsigned WaitFlag = 0x01 ;      /* VioPopUp  ࠭     */
unsigned ByteCnt ;              /*       DosMonRead()      */
int j ;                    /*     ࠡ  ᨬ */

                            /*        */
DosMonOpen( "KBD$", &KbdHandle ) ;
                            /*  ID ⥪饩 .㯯 */
DosGetInfoSeg( &global_seg, &local_seg ) ;
globptr = ( struct _GINFOSEG far * ) ( (long)global_seg <<
                                                          16 ) ;
ID = globptr->sgCurrent ;

                 /*   ஢   ࢮ ᫮ */
InBuff.length  = (unsigned)sizeof( struct MonBuff ) ;
OutBuff.length = (unsigned)sizeof( struct MonBuff ) ;

DosMonReg( KbdHandle,     /* ॣ஢   */
           (unsigned char *)&InBuff,
           (unsigned char *)&OutBuff,
           NOPREF, ID ) ;
                             /* 뤠 ᮮ饭  ⠭ */
VioPopUp( &WaitFlag, VIOHANDLE ) ;
printf( "ணࠬ MONTIME ⠭ !\n" ) ;
DosSleep( 1500L ) ;
VioEndPopUp( VIOHANDLE ) ;

while( TRUE )
  {
                              /*      */
  ByteCnt = sizeof( CharBuff ) ;
  DosMonRead( (unsigned char *)&InBuff,
              WAIT,
              (unsigned char *)&OutBuff,
              &ByteCnt ) ;
                     /* ஢,     Alt-t */
  if( CharBuff.CharRec.Ascii == 0  &&
      CharBuff.CharRec.Scan == ALT_T  &&
      ! ( CharBuff.KbdDDflags & RELEASE ) )
    {
                         /*      ⥪饥 ६         */
    itoa( (int)globptr->hour, Temp, 10 ) ;
    strcpy( Mtime, Temp ) ;
    strcat( Mtime, ":" ) ;
    itoa( (int)globptr->minutes, Temp, 10 ) ;
    strcat( Mtime, Temp ) ;
    strcat( Mtime, ":" ) ;
    itoa( (int)globptr->seconds, Temp, 10 ) ;
    strcat( Mtime, Temp ) ;
                          /*    ६                */
    CharBuff.MonFlags = 0 ;
    CharBuff.Orig_scan_code = 0 ;
    CharBuff.CharRec.Scan = 0 ;
    CharBuff.KbdDDflags = 0 ;
    for( j = 0 ; j < strlen( Mtime ) ; j ++ )
      {
      CharBuff.CharRec.Ascii = Mtime[j] ;
      DosMonWrite( (unsigned char *)&OutBuff,
                   (unsigned char *)&CharBuff, ByteCnt ) ;
       } /* end for */
     } /* end if */

  else if( CharBuff.CharRec.Ascii == 0 &&  /* 室  <F10>   */
           CharBuff.CharRec.Scan == F10 &&
           ! ( CharBuff.KbdDDflags & RELEASE )  )
    break ;                      /*  । ᨬ   */
                           /*  ⠫ ᨬ ய᪠ */
  else
    DosMonWrite( (unsigned char *)&OutBuff,
                 (unsigned char *)&CharBuff, ByteCnt ) ;
  }  /* end while */

DosMonClose( KbdHandle ) ;                    /*   */
                       /*  ᮮ饭  襭 ࠡ */
VioPopUp( &WaitFlag, VIOHANDLE ) ;
printf( "ணࠬ MONTIME 蠥 ࠡ\n" ) ;
DosSleep( 1500L ) ;
VioEndPopUp( VIOHANDLE ) ;
exit( 0 ) ;
}

            ᮧ      ᮮ⢥
⥩    CharBuff.     ⠭     0    MonFlags,
Orig_scan_code,    Scan    CharRec,    ⠪  ᫮  KbdDDflags.
⢥  ,㦤         뫪    
ᨬ,       Ascii    CharRec.       ࠧ
ᨬ    ப,   ᮤঠ饩  ६,    ⥬,    横 뢠-
  DosMonWrite(),      ⮣,   ⮡    ।  ࠢ  
.

          

          ணࠬ,   ᯮ   ,    뢠-
  室        ࠭,     ⠪    .
ਬ,      ணࠬ-४    ࠢᠭ    ⨢-
    祬  ,         ।,   
  ᫮  㪠뢠  ,  ⮡  ஢  ࠢ쭮   
ᠭ.  ணࠬ    ⥪⭮-ᨬ   ᪠     -
 ⠪  ࠧ.

           ୠ  ணࠬ    ஢  ࠭  ? 
䮭  ०  ࠭      㯥  ᮢᥬ,  ᪮   ᮧ-
  筮  ᯫ뢠饣     ࢮ砫쭮  ᮤন   -
࠭    ᮤন  .    ,  㭪   VioPopUp()
।⠢    ࠢ      ⮩   ஡.    ᫨
⠭    1  㬥  OptionFlags  㭪樨  VioPopUp(),    
    믮    ந  ⪠  ࠭      -
     ०    (    ⮣  ࠭   室
 ⥪⮢ ० 8025 ).

         ਢ  ணࠬ,     ᯮ  ᫮,   
஥  㪠뢠  ,    ⨨    F1.    
ணࠬ    砥    ᥡ  ᫮    30.000  ᫮  ஢-
  ࠢ쭮  ᠭ.    ⮣      㣮  ᯫ뢠-
饬   㪠뢠,    ᫮,  ଥ :

      㪠뢠  ᫮ : aardvark

     ணࠬ  monword.c  ⠭  ⠪  ,        ।-
騥    ணࠬ.    ⨨    F1    ᮧ
ࠧ饥  ᯫ뢠饥   ,              
    ࠭        ᮤন.     -
     㭪樨 VioGetCurPos().


/* monword.c */
/*  , ⠥ ᫮  ࠭                 */
/*         믮  "detach monword"      */
#include "kbdmon.h"        /*    ।   */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#include <string.h>        /*   㭪樨 strcat(), strcpy()    */
#include <stdlib.h>        /*   㭪 itoa()                */
#define NOPREF     0       /*   楯窥 ࠧ筮 */
#define VIOHANDLE  0       /* ⠭  VioPopUp() -  */
#define WAIT       0       /*              */
#define F1        59       /*        -  F1      */
#define F10       68       /*     -  F10        */
#define ESC       27       /* ASCII-  ESC           */
#define RELEASE 0x40       /*  ⦠  KbdDDflags  */
main()
{
unsigned short KbdHandle ;      /* handle   */
unsigned ID ;                   /* 䨪 . 㯯  */
struct _GINFOSEG far *globptr ; /* 㪠⥫  
                                  ଠ樮 ᥣ      */
struct KeyPacket CharBuff       /*              */
struct MonBuff InBuff ;         /*      ॣ樨  */
struct MonBuff OutBuff ;
unsigned short global_seg, local_seg ;   /*  ᥣ⮢  */
unsigned WaitFlag = 0x01 ;      /* VioPopUp  ࠭     */
unsigned ByteCnt ;              /*       DosMonRead()      */

unsigned NoClear = 0x03 ;  /* VioPopUp() ,   
                                                        ࠭ */
char buff[80] ;        /*   ᫮, ⠥  ࠭ */
unsigned len, row, col ;   /*  ᮤন  
                       न    ࠭ */
int j ;                    /*     ࠡ  ᨬ */

                            /*        */
DosMonOpen( "KBD$", &KbdHandle ) ;
                            /*  ID ⥪饩 .㯯 */
DosGetInfoSeg( &global_seg, &local_seg ) ;
globptr = ( struct _GINFOSEG far * ) ( (long)global_seg <<
                                                          16 ) ;
ID = globptr->sgCurrent ;

                 /*   ஢   ࢮ ᫮ */
InBuff.length  = (unsigned)sizeof( struct MonBuff ) ;
OutBuff.length = (unsigned)sizeof( struct MonBuff ) ;

DosMonReg( KbdHandle,     /* ॣ஢   */
           (unsigned char *)&InBuff,
           (unsigned char *)&OutBuff,
           NOPREF, ID ) ;
                             /* 뤠 ᮮ饭  ⠭ */
VioPopUp( &WaitFlag, VIOHANDLE ) ;
printf( "ணࠬ MONTIME ⠭ !\n" ) ;
DosSleep( 1500L ) ;
VioEndPopUp( VIOHANDLE ) ;

while( TRUE )
  {
                              /*      */
  ByteCnt = sizeof( CharBuff ) ;
  DosMonRead( (unsigned char *)&InBuff,
              WAIT,
              (unsigned char *)&OutBuff,
              &ByteCnt ) ;
                     /* ஢,     F1 */
  if( CharBuff.CharRec.Ascii == 0  &&
      CharBuff.CharRec.Scan == F1  &&
      ! ( CharBuff.KbdDDflags & RELEASE ) )
    {
                   /* ᯫ뢠饥   ⪨ ࠭  */
    VioPopUp( &NoClear, VIOHANDLE ) ;
           /*  ⥪饥    ࠭ */
    VioGetCurPos( &row, &col, VIOHANDLE ) ;
              /*  ࠢ,  㦥 ஡  */
    for( j = 0 ; ; j++, col++ )
      {
      len = 1 ;
      VioReadCharStr( buff+j, &len, row, col, VIOHANDLE ) ;
      if( *(buff+j) == ' ' )
        break ;
      } /* end for */
    VioEndPopUp( VIOHANDLE ) ;
                 /* ⮡ࠧ ᫮  ᯫ뢠饬    */
    VioPopUp( &WaitFlag, VIOHANDLE ) ;
    VioWrtTTy( " 㪠  ᫮ ", 26, VIOHANDLE ) ;
    VioWrtTTy( buff, j, VIOHANDLE ) ;
    } /* end if */

  else if( CharBuff.CharRec.Ascii == 0 &&  /* 室  <F10>   */
           CharBuff.CharRec.Scan == F10 &&
           ! ( CharBuff.KbdDDflags & RELEASE )  )
    break ;                      /*  । ᨬ   */
                           /*  ⠫ ᨬ ய᪠ */
  else
    DosMonWrite( (unsigned char *)&OutBuff,
                 (unsigned char *)&CharBuff, ByteCnt ) ;
  }  /* end while */

DosMonClose( KbdHandle ) ;                    /*   */
                       /*  ᮮ饭  襭 ࠡ */
VioPopUp( &WaitFlag, VIOHANDLE ) ;
printf( "ணࠬ MONWORD 蠥 ࠡ\n" ) ;
DosSleep( 1500L ) ;
VioEndPopUp( VIOHANDLE ) ;
exit( 0 ) ;
}

     ணࠬ  ⠥,       㪠뢠        㪢
஢塞  ᫮,  ⮬      ࠢ,  ஢   -
      㭪樨  VioReadCharStr().      ࠭    
ᨬ      buff,      ஡.  ⨢  ஡,  -
⠥,    諠     ᫮.      ᮢ襭   ணࠬ   
  ,       㪠뢠    砫  ᫮,   ⠪
  ४⭮  ࠡ뢠  ᫮      ப,  祣   -
   ணࠬ.

     ணࠬ  ᯮ   筮  ࠭饥   ࠭   ᯫ뢠-
饥      ⮡ࠦ      ᫮,      ⥬   ᭮
頥    䮭  ०.     ⨨    F10  
㤠  ணࠬ 蠥.

       

       ᨫ쭮        OS/2,          ⠪
  ᢮   ஡.    ୠ  ணࠬ  䠪᪨   ⠭-
    ࠩ  ன⢠,  ஬  ண     -
.  ⮬   訡    ணࠬ஢       -
  ஡  -    ,  ⠪    쥧  -  ࠩ -
ன.     ਬ,    ࠢ쭠  ।  ஬   ᨬ,
砥 ,  맢 ᠭ ᥩ ⥬.

     ⮡    ᨫ쭮      ॠ樨   ⥬    
⨥  ,         뫠       
  ॥.   ᫨   㤥  ६  ⠭    ᪮쪮
஢,           㤥  ᭨    ன ⥯
த⢨  ,   ⮬          
   䥪⨢.

       ணࠬ,           ன     ந室    ࠡ⪠
DosMonRead()    DosMonWrite(),          뢠    
뢠,  ਬ,     ᥬ       ᪮
ᥪ樥.       ᥣ  뢠  ᯮ짮    ⤥
ᥪ  ᪫⥫쭮      ⥭          .
㣠  ᥪ      ⢥      ⮢   
믮      ⢨.   樨    ⥭/    ᫥
ਤ  訩    ணࠬ  ਮ,   ⮡     㢥७
  ஬ 믮.



             


       ந室     믮饩  ணࠬ,      짮-
⥫    Ctrl-c  ?  筮,    蠥    ࢤ-
  ।  樮  ⥬.         -  ᫨
    設⢠  -  ணࠬ  ⠪  ॠ樨   筮.-
  ணࠬ  ᯮ  Ctrl-c    ᢮  ᮡ⢥  㦤  -
  ࠢ  ஬  (      WorldStar  )     ४-
祭       ०    ணࠬ    㣮  ( ਬ,  
室        ).    ணࠬ    
Ctrl-c,     ।   襭      室  ।ਭ   
⢨,  ਬ,  襭   ᪮  権,  ⨥   -
  䠩,    ।ਭ⨥    蠣     뢠
⥫㭨樮 裡.

      

         楫   ணࠬ    㦥   ᯮᮡ    墠뢠
権     ⨯    Ctrl-c.   堭,   ।ᬮ७   
OS/2    ⮩  楫,   뢠  ᨣ.    OS/2  ।ᬮ७
6 ᨣ,  ᮮ⢥⢨  ⠡楩 :


               祭   ⢨  㬮砭

   Ctrl-c        SIG_CTRLC        1        
襭 㡪  SIG_BROKENPIPE   2       
  襭     SIG_KILLPROCESS  3        
  Ctrl-Break     SIG_CTRLBREAK    4        
     A       SIG_PFLG_A       5       
     B       SIG_PFLG_B       6       
     C       SIG_PFLG_C       7       


       SIG_CTRLC      SIG_CTRLBREAK       -
.    SIG_KILLPROCESS   ,           
㤠  㣮         㭪樨  DosKillProcess().      
ᨣ  뢠  襭  ,  ᫨       墠祭.
  SIG_BROKENPIPE   ,           -
  ⢨  १   㡪,      ,   騩    
㡪,  蠥  ࠭,   祬    騩    㡪,  -
  .      ᨣ-䫠    饭   ਭ樯
ᨣ,          ।०  㣮   
  ᪮  ᮡ   ;           
ᮣ襭  祭  䫠-ᨣ.

      

       ࠢ,   ᨣ  뢠  ⢨    㬮砭  -  -
襭          ⢨,  ᫨    䫠-ᨣ-
.  ⮡       ⢨    㬮砭,     
ᯮ짮  ᮡ⢥   楤,   뢠       ࠡ稪
ᨣ,  ।祭     믮       ᨣ-
.  ணࠬ   ॣ  楤-ࠡ稪   ᨣ,   -
।   ⥬   㭪樨 DosSetSigHandler().

       ।⠢,       믮  ணࠬ   -
  ᨣ.   ணࠬ    뢠,      ࠢ    ।
楤  ࠡ⪨  ᨣ.   ࠡ稪  ᨣ  ।ਬ   -
室  蠣      ⥬      ࠢ   ࢠ-
  ணࠬ,         ,         
.12.5.  ᫥  祭  ᨣ  ⥬    ᯮ   ᨣ-
  ⠪     ⨯      ,       㤥 襭.  
।࠭  楤-ࠡ稪   ᨣ     ୮    宦-
      ०,   祬      ࠡ.    
  襭   ணࠬ-ࠡ稪 ᨣ.

  Ŀ
                                    ணࠬ          
                   Ŀ       ࢠ         
                            窥      
      ଠ쭮              Ŀ               
      믮   Ŀ    Ŀ        
      ணࠬ         Ŀ         
       Ŀ                        ࠢ- 
                 Ŀ     Ŀ  騩 
                        ᨣ 
                          Ŀ         
                      Ŀ            
                 Ŀ     Ŀ         
      *   *                    
       *   *       Ŀ     Ŀ         
        * *                      
         *                               
                   Ŀ    Ŀ     
                      signal handlerĿ  
                                쳂室  
                   Ŀ      
                               
                               ᠬ  ࢠ  
                               ணࠬ               
                                                       
  
   . 12-5. Handler ᨣ.

         

     ⥩訩  ࠡ稪  ᨣ  -    ⠪  ணࠬ,    -
  ᫥   祭    ᨣ   ᭠砫  믮   -
᢮  ⢨,     ⥬      .    ⠪ த
⮩ ਬ :

/* signal.c */
/* ஢ ࠡ 堭 ᨣ  ਬ Ctrl-c */
#define INCL_DOS
#include <os2.h>
#define TO_HANDLER 2  /* ⢨ - ⠭  ࠡ稪 */
#define SIGNUM     1  /* ࠡ뢠 ᨣ Ctrl-c             */

main()
{
void pascal far handler()        /*      ࠡ稪 ᨣ     */
void (pascal far * OldAddr) ()   /*  ண ࠡ稪   */
unsined OldAction ;              /* ।饥 ⢨         */
unsigned rc ;                    /*                  */

                        /* ⠭ ࠡ稪 ᨣ Ctrl-c */
if( rc = DosSetSigHandler( handler, &OldAddr,
                           &OldAction, TO_HANDLER, SIGNUM ) )
  {
  printf( "DosSetSigHandler error = %u\n", rc ) ;
  exit( 1 ) ;
  }

while( TRUE )    /*  ᮮ饭   ᨣ */
  {
  printf( "Main running..." ) ;
  DosSleep( 4000L ) ;
  }
}

/* ࠡ稪 ᨣ */
/* 믮  ⨨ Ctrl-c */
void pascal handler()
{
printf( "\n\nࠡ뢠 ᨣ CTRL-C\n" ) ;
DosSleep( 4000L ) ; /* 䠪᪨  ࠡ⪨  ந室 */
printf( "ணࠬ 蠥 ࠡ\n" ) ;
exit( 0 ) ;
}

         ணࠬ   ०  ᥣ  ⠭    
ࠡ稪  ᨣ      ।      (  㬥  Handler )
⥬      㭪樨  DosSetSigHandler(),      ᫥    ⮣
室    横,    ⪮  ᮮ饭.  ᫥  ⮣  짮-
⥫    ࢠ  ,        Ctrl-c.      ⮫쪮
ணࠬ     ᨣ  Ctrl-c,   ࠢ  ࠧ     ।-
  楤-ࠡ稪  ᨣ.     ࠧ  ⮣,     -
⠥  ࠭  ணࠬ :



   Main running...Main running...Main running...Main running...
   Main running...Main running...Main running...Main running...
   Main running...Main running...Main running...Main running...
   Main running...Main running...

   ࠡ뢠 ᨣ CTRL-C
   ணࠬ 蠥 ࠡ


            ,   ணࠬ-ࠡ稪  ᨣ   
믮      ⢨.      ⠥   ᮮ-
饭  ,     ᪮쪮  ᥪ㭤,   蠥      .
  ࠡ稪  ᨣ   믮,   祢,     -
  ⢨  ।   襭  ,   ਬ,   ஥
䠩  ᪥.

      DosSetSigHandler()

     㭪  DosSetSigHandler()            ᯮ짮    
ࠧ  楫,    ᨬ    祭  ।    -
㬥⮢.

     DosSetSigHandler - ⠭ ࠡ稪 ᨣ

     DosSetSigHandler( Handler, PrevHand, PrevAct, Action,
                                                      Signum )
     void ( pascal far Handler ) () ;    /*   ࠡ稪
                                                    ᨣ */
     void ( pascal far *PrevHand ) () ;  /*   
                                         ࠡ稪 ᨣ */
     unsigned far *PrevAct ;    /* ।. ⢨ ( 0 - 3 ) */
     unsigned Action ;          /* ⢨  믮  */
     unsigned Signum ;          /*        ᨣ      */

       㬥⮬     ᮡ⢥      楤--
ࠡ稪  ᨣ.          (  far  ) 㭪 -
  pascal.   騥    㬥  -    .     
  ⥬      ।饣  ࠡ稪  ᨣ,    
  ன  -  ⢨,   ஥    ।ਭ.   ᫨  ࠭ 
  ⠭   ࠡ稪   ᨣ,         稭    
  㫥.

     㬥  Action   ।    ,         ।ਭ
㭪 DosSetSigHandler().  5 ਠ⮢ :

  稭          ⢨  祭 ᨣ
  ------------------------------------------------
     0              ⠭ ⥬ 㬮砭
     1              ஢ ᨣ
     2              । ࠢ 㪠 楤
     3              ஢ 訡  祭
                                                  䫠-ᨣ
     4               ᨣ

       襬  ਬ    ᯮ㥬  ⢨  2,  ஥  뢠-
  ।  ࠢ      㪠          祭
ᮮ⢥饣  ᨣ.           㣨   -
,     쭥襬.

     㬥  Signum  ।,      ᨣ  ᫥   -
  㪠   ⢨.        㦥  㪠  7  
ਠ⮢  (  ⠪,     SIG_CTRLC  )    ᮮ⢥騥   -
.

                                    

       ਬ  signal.c    ⠫,     Ctrl-c    맢
襭  ணࠬ  ;    ࠡ稪  ᨣ       ⮫쪮
  ⮣,   ⮡    믮   -  ⥫   ⢨
।  襭  ணࠬ.   ,    ࠪ⨪     뢠
⠪,    ࠡ稪  ᨣ      ࠢ   뢠-
饩  ணࠬ      ⮢    ୮   ࠡ⪥   ⮣  
ᨣ.    㦭,  ਬ,    砥,    Ctrl-c  -
  ᨬ  ᮡ 祭   ணࠬ.

       ⮬  砥  ࠡ稪  ᨣ       
  ࠢ        ᠬ      ணࠬ,  -
室  믮  ᭮  ,          ᨣ.
⮣           몥   C      ⮣ 
return      ࠡ稪  ᨣ.    맮  믮  -
設     IRET   (   "      뢠"  ),    ⠪
⠭  ॣ஢     ﭨ,   ।饥   祭
ᨣ.

          ਢ   ਬ,      ஬  짮⥫   
୮ 뢠 ணࠬ,  Ctrl-c.

/* retsig.c */
/*     ࠡ稪 ᨣ  */
#define INCL_DOS
#include <os2.h>
#define SYS_DEFAULT 0  /* ⢨ - ⥬ 㬮砭       */
#define IGNORE      1  /* ⢨ - ஢ ᨣ       */
#define TO_HANDLER  2  /* ⢨ - ⠭  ࠡ稪 */
#define RESET       4  /* ⢨ -  ᨣ             */
#define SIGNUM      1  /* ࠡ뢠 ᨣ Ctrl-c           */
#define MAX        50  /* 믮 50 ࠧ                     */

main()
{
void pascal far handler()        /*      ࠡ稪 ᨣ     */
void (pascal far * OldAddr) ()   /*  ண ࠡ稪   */
unsined OldAction ;              /* ।饥 ⢨         */
int j ;                          /*  横                */
unsigned rc ;                    /*                  */

            /*  Ctrl-c  맮 । ࠢ ࠡ稪 */
if( rc = DosSetSigHandler( handler, &OldAddr,
                           &OldAction, TO_HANDLER, SIGNUM ) )
  {
  printf( "DosSetSigHandler error = %u\n", rc ) ;
  exit( 1 ) ;
  }

for( j = 0 ; j < MAX ; j ++ )            /*  ᮮ饭  */
  {
  printf( "%d Main running...\n", j ) ;
  DosSleep( 200L ) ;
  }
}

/* ࠡ稪 ᨣ */
/* 믮  ⨨ Ctrl-c */
void far pascal handler( arg, signum )
unsigned arg, signum ;               /* ࠬ   ! */
{
void (pascal far * OldAddr) ()   /*  ண ࠡ稪   */
unsined OldAction ;              /* ।饥 ⢨         */
unsigned rc ;                    /*                  */

printf( "\n\n⠥ ࠡ稪 ᨣ\n" ) ;
DosSleep( 3000L ) ;
                             /*    ᠬ ᨣ     */
if( rc = DosSetSigHandler( (void (pascal far *) () )0L,
                             &OldAddr, &OldAction, RESET, SIGNUM ) )
  {
  printf( "DosSetSigHandler error = %u\n", rc ) ;
  exit( 1 ) ;
  }

printf( "ࠡ稪 ᨣ 蠥 ࠡ\n" ) ;
return ;
}

       ணࠬ  筠  ।饩,    -      
᫮.  ࢮ  ⫨稥  ⮨    ⮬,      㭪-ࠡ-
稪  ᨣ      ࠬ,  砥    ⥬.  
    ᯮ  ⮫쪮  ⮣,    ।   䫠-ᨣ-
  (   ਬ  ࠡ    䫠-ᨣ    ਢ   ).ன
ࠬ  -      ᨣ,     맢  饭   -
  ࠡ稪.      ⮬  ਬ      ᯮ㥬    
  ࠬ஢,         易⥫쭮      १ࢨ-
஢  ,      ࠡ稪  ᨣ    ᬮ    -
ࠢ  ᭮  ணࠬ,     ࠧ訢   ⥪         맢
⥬ 訡.

     㣨              ᯮ짮      㭪樨
DosSetSigHandler()    㬥⮬  Action,  ࠢ  4.     뢠
  祭  ᨣ  (    襬  砥  -  Ctrl-c ),  -
室  ᯮ ᫥ ᨣ.

       ᫥  -  ᪮   Ctrl-c   ᥣ   ,    
     饭      ࠡ稪   ᨣ         
ᯮ짮    襭  ணࠬ,             -
-  ᯮᮡ    ࠢ  樮  ⥬.     -
襬  ਬ,   ⠪      ᡮ  ⨣  ⥬,   ᮮ-
饭 ⠥ ⮫쪮 50 ࠧ,  ⥬ ணࠬ 蠥.

         ਢ  ਬ  ᯥ⪨,  祭     ࠡ
ணࠬ retsig.c :

     0 Main running...
     1 Main running...
     2 Main running...
     3 Main running...
     ⠥ ࠡ稪 ᨣ
     ࠡ稪 ᨣ 蠥 ࠡ
     4 Main running...
     5 Main running...
     6 Main running...
     7 Main running...
     ⠥ ࠡ稪 ᨣ
     ࠡ稪 ᨣ 蠥 ࠡ
     8 Main running...
     9 Main running...

     - - - - - - - - -

     47 Main running...
     48 Main running...
     49 Main running...


     ࠡ稪  ᨣ  ⨢     ࠧ      ⨨
Ctrl-c   ,   㤥 ⠭ 50- ᮮ饭.

      

     ࠡ稪  ᨣ,  ᫥    맮,        -
  ⥬    ᠬ  ᨣ      ,       .
,  ⥬    뢠  ⥫   ᨣ,    訥
  ६  ࠡ  ࠡ稪  ᨣ,    ।  ,   ⮫-
  㤥  襭  ࢮ砫  ᨣ.   ⮬,     ⨥
Ctrl-c    ⨢  ࠡ稪  ᨣ       맮   -
  ॠ樨,   ,    맮  ୮  饭    -
ࠡ稪  ᨣ,     ⮫쪮      ࠡ   ।-
饣 ᨣ.

     ⮣     ,    ᫨   ⠪  ॠ   ⥫쭠,
᭠  㭪  DosSetSigHandler()     砫  ࠡ⪨   ᨣ-
  ࠬ஬  Action    祭  1.    १   㯠-
騥  ᨣ  ⮣    ⨯    ந஢,  ..  .
᫥⢨,     ࠡ稪    ᨣ   蠥   ࠡ    
뢠  ᨣ  (  ⠭  Action  ࠢ  4  ),    
ᨣ    ⠭,   ⮬      㤥    
ࠡ稪 ᨣ.

      -

       SIG_CTRLC,   SIG_KILLPROCESS     SIG_CTRLBREAK   ஦-
  ᯥ᪨  ᮡﬨ,    ,    ࠢ,   ਢ-
    襭  ணࠬ.    SIG_BROKENPIPE  ⠪   ࠪ-
७    ᮡ  ᮡ.    ⠫  ᨣ  -  䫠-ᨣ-
 -           ᠬ                  㭪樨
DosFlagProcess().     ᨣ       ᯮ짮     
࣠樨  ⢨     ᠬ.   ᪮   -
  ᨣ   뢠  뢠  㣮       -
  ॠ    ᨣ,       ᯮ짮    ⮬  -
砥,          ᮢ        㣮  ⮬,
  ਩ .

         ਬ      ஦  㣮,    2
ᥪ㭤,     ⥬  뫠    䫠-ᨣ  SIG_PFLG_A.    ஦-
    ॠ    ᨣ     ᫥   ⮣   뢠
,  ⮡      ⮢  ॠ஢      ᭮.    ⮬
ਬ,  䠪᪨,   -த⥫   த    2   -
㭤  뫠  ᨣ  SIG_PFLG_A,    ஦     
ࠧ ॠ  .

/* psig.c */
/* ஦   뫠  䫠-ᨣ */
#define INCL_DOS
#include <os2.h>
#define LENGTH  40      /*    "          */
#define FLAGS    1      /*   ᨭ஭,  ᫥          */
#define COMS    0L      /*  㬥⮢  ப     */
#define ENVS    0L      /*  譨 ६ 㦥    */
#define ACTION   0      /* ᯥ஢  ॢ       */
#define FLAGNUM  0      /*  A */
#define FLAGARG 99      /* ।  㬥      */
main()
{
char fbuf[LENGTH] ;              /*   䠩-"     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned rc ;                    /*                  */

                                   /* த ୨  */
if( rc = DosExecPgm( fbuf, LENGTH, FLAGS, COMS, ENVS,
                                         &childID, "chsig.exe" ) )
  {
  printf( "DosExecPgm error = %u\n", rc ) ;
  exit( 1 ) ;
  }

while( TRUE )
                   /* ᫠ 䫠-ᨣ ஦  */
  {
  DosSleep( 2000L ) ;
  printf( "\n-த⥫ ᨣ ஦ 䫠 A\n" ) ;
if( rc = DosFlagProcess( childID.codeTerminate, ACTION,
                                             FLAGNUM, FLAGARG ) )
   {
    printf( "DosFlagProcess error = %u\n", rc ) ;
    exit( 1 ) ;
    }
  }
}
/* chsig.c */
/* 砥 䫠 A  ஦饣  psig.c */
#define INCL_DOS
#include <os2.h>
#define TO_HANDLER  2  /* ⢨ - ⠭  ࠡ稪 */
#define RESET       4  /* ⢨ -  ᨣ             */
#define FLAGA       5  /* ᫥  ᨣ " "           */

main()
{
void pascal far handler()        /*      ࠡ稪 ᨣ     */
void (pascal far * OldAddr) ()   /*  ண ࠡ稪   */
unsined OldAction ;              /* ।饥 ⢨         */
unsigned rc ;                    /*                  */

      /* ᨣ " " 㤥 뢠 饭  ࠡ稪 */
if( rc = DosSetSigHandler( handler, &OldAddr,
                                 &OldAction, TO_HANDLER, FLAGA ) )
  {
  printf( "DosSetSigHandler error = %u\n", rc ) ;
  exit( 1 ) ;
  }

while( TRUE )
                /*  ᮮ饭   ᨣ */
  {
  printf( "Child running..." ) ;
  DosSleep( 200L ) ;
  }
}

/* ࠡ稪 ᨣ */
/* 믮  祭 䫠-ᨣ  */
void far pascal handler( arg, signum )
unsigned arg, signum ;
{
void (pascal far * OldAddr) ()   /*  ண ࠡ稪   */
unsined OldAction ;              /* ।饥 ⢨         */
unsigned rc ;                    /*                  */

printf( "\n஦  稫 䫠 " ) ;
printf( "arg = %u, signum = %u\n", arg, signum ) ;
                                /*  騩 ᨣ      */
if( rc = DosSetSigHandler( (void (pascal far *) () )0L,
                             &OldAddr, &OldAction, RESET, SIGNUM ) )
  {
  printf( "DosSetSigHandler error = %u\n", rc ) ;
  exit( 1 ) ;
  }
return ;
}

     -த⥫  ⠪    ।   㬥       ஦
  㬥  १  ࠡ稪  ᨣ.    㬥   -
  ᫥  ࠬ஬   㭪樨  DosFlagProcess()      ஦-
饬  ,      ।      ࠬ  arg   ࠡ稪
ᨣ  ஦  .       砥     㬥
ᥣ  ࠢ  99.       ਢ  ࠧ  뢮   ࠭ 
 ᮢ :

 Child running...Child running...Child running...Child running...
 Child running...Child running...Child running...Child running...
 Child running...Child running...
 -த⥫ ᨣ ஦ 䫠 
 ஦  稫 䫠  arg = 99, signum = 5
 Child running...Child running...Child running...Child running...
 Child running...Child running...Child running...Child running...
 Child running...Child running...
 -த⥫ ᨣ ஦ 䫠 
 ஦  稫 䫠  arg = 99, signum = 5
 Child running...Child running...Child running...Child running...

     ᪮       㭪樨    DosSetSigHandler()       
⠭    ࠡ稪   ᨣ  SIG_CTRLC,  ணࠬ   
  ᯮᮡ,  Ctrl-c.

      DosFlagProcess()

     㭪  DosFlagProcess()     ⢥      ⮣,
⮡ 뫠 䫠-ᨣ 㣨 ᠬ.

     DosFlagProcess - ᫠ 䫠-ᨣ 㣮 

     DosFlagProcess( ProcessID, Action, FlagNum, Argument )
     unsigned ProcessID ;   /* 䨪 ,
                          ஬  ᫠ 䫠-ᨣ */
     unsigned Action ;      /* 0- ॢ, 1-   */
     unsigned FlagNum ;     /* 0-䫠 , 1-䫠 , 2-䫠  */
     unsigned Argument ;    /*  ।  ᠬ    */

       㬥⮬   㭪樨  DosFlagProcess()      -
䨪  ,  ஬   ᫥  ᫠  䫠-ᨣ.   -
ன  㬥  ।,    祬  ⭮    䨪  -
⮫쪮       㪠          ᥬ ॢ
஦    ᮢ.  ⨩  ࠬ  㪠뢠    ,  -
        䫠-ᨣ   (  ,      ) ᫥ ᫠,  
᫥  ࠬ     ᯮ짮    ࣠樨    -
⢨       ᮬ-ࠢ⥫      ᮬ-⥫
ᨣ.      ᫮,   祭   ண   ।    
ᮣ襭  ᠬ.

      DosHoldSignal()

     ᫨        騥    ६    -
  ᪨  ⪨,    ,    室   
㢥७    ⮬,    ᨣ    ࢥ  ࠡ  ᪮
ᥪ樨.      ᯮᮡ  ᤥ         ᯮ짮
㭪樨  DosHoldSignal().     㭪  ᯮ     ࠧ-
   ࠡ⪨ ᨣ.

     DosHoldSignal - /ࠧ ࠡ ᨣ

     DosHoldSignal( Action ) ;
     unsigned Action ;      /* 0 - ࠧ, 1 -  */

       㭪    ⮫쪮    ࠬ,   ᫮,   㪠뢠-
饥    ,  ᫥    ࠧ      ࠡ ᨣ-
.  ,   訩       ६,     ࠡ⪠  ᨣ
饭,  㤥  ᯮ    ࠡ⠭    ࠧ    ࠧ,
 ⮫쪮 ࠡ⪠ ᨣ 㤥 ᭮ ࠧ襭.

               

       ࢮ            ᪠    ⮬,   
  ஢    ਤ   ணࠬ      OS/2    ᢮⢠
TSR-ணࠬ   MS-DOS.      㢨,       㪠⥫   
ன⢮      DosMonOpen()           DosMonReg()
ॣ஢  ᯥ樠   ⥬     /뢮   
.  ᫥  ⮣,     ந  ⠪  ⠭,    -
ୠ  ணࠬ  室    横,          -
 DosMonRead()  뢠    DosMonWrite().

       ࠧࠫ    ⮢         㢨-
,    ணࠬ    ।      ,   -
              뫠    楯窥.
  ⠪  ᬮ५,     ணࠬ    ஢    -
⢮    ᮤন  ࠭  ,   室饣     -
⨢ ०.

       ன        ⠢  ᨣ.   
  ⨥    Ctrl-c      ஦   -
ᮬ,     ।⢮  ।  筮  ଠ樨  㣮   -
.    㢨,          㭪樨    DosSetSigHandler()
  ⠭      ࠡ稪  ᨣ,         
⮩    㭪樨  믮  㣨  ⢨,   ਬ,    -
  ᨣ     뢠  ஢  .       㭪樨
DosFlagProcess()      ஢    䫠-ᨣ,    뫠
  ᮬ    㣮.   㭪    DosHoldSignal()    
    ࠡ  ᨣ      ᪨    ᥪ
ணࠬ,  ⠪ ୮ ࠧ .