.context sysp2
:l15
:n⥪ ⥬ ணࠬ
 \u\a<>\vsysp\v\p
 2. ⭮ ᯥ祭 IBM PC/XT/AT  \u\a<>\vsysp\v\p


\a\b ᨭ஭ \vsysp2aux\v\p
\a\b \vsysp2mouse\v\p
\a\b    ॠ쭮 ६\vsysp2timer\v\p
\a\b ७ \vsysp2xms\v\p
\a\b ⥫쭠 \vsysp2ems\v\p
.context sysp2aux
:l15
:nᠭ 㭪権
   ᨭ஭ . \u\a<  >\vsysp2\v \a<>\vsysp\v\p

樠 ᨭ஭                          \a aux_init\vaux_init\v   
 ᨬ  ᨭ஭                        \a aux_inp\vaux_inp\v   
뢮 ᨬ  ᨭ஭                          \a aux_outp\vaux_outp\v   
। ० ᨭ஭                     \a aux_stat\vaux_stat\v   


.context aux_init
:l15
:n㭪 aux_init
\u\a<  >\vsysp2aux\v \a<  >\vsysp\v \a< ਬ >\vaux_test.c\v\p


\b⨯ 㭪樨:\b
             int aux_init(AUX_MODE *mode, int port, int imask);

\bࠬ 㭪樨:\b
             AUX_MODE mode - , 뢠
             ⮪  ० ࠡ ;

             int port -  ᨭ஭ :
                0 - COM1, 1 - COM2

             int imask - 祭  ॣ ᪨
                         뢠

\bᠭ 㭪樨:\b
              㭪 樠 ᨭ஭
             ,  ⮪  묨
              ᪮  묨.

\b頥 祭:\b
             0 - 樠 믮 ᯥ譮;
             1 - 訡  ࠬ 樠樨.


 
.context aux_inp
:l15
:n㭪 aux_inp
\u\a<  >\vsysp2aux\v \a<  >\vsysp\v \a< ਬ >\vaux_test.c\v\p


\b⨯ 㭪樨:\b
             char aux_inp(int port);

\bࠬ 㭪樨:\b
             int port -  ᨭ஭ :
                0 - COM1, 1 - COM2

\bᠭ 㭪樨:\b
              㭪  ⮢
             ਥ   ᨬ  ᨭ஭
             .

\b頥 祭:\b
             ਭ ᨬ


 
.context aux_outp
:l15
:n㭪 aux_outp
\u\a<  >\vsysp2aux\v \a<  >\vsysp\v \a< ਬ >\vaux_test.c\v\p


\b⨯ 㭪樨:\b
             void aux_outp(char chr, int port);

\bࠬ 㭪樨:\b
             char chr - 뫠 ᨬ;

             int port -  ᨭ஭ :
                0 - COM1, 1 - COM2

\bᠭ 㭪樨:\b
              㭪  ⮢
             ।稪  뫠 ᨬ.

\b頥 祭:\b
             祣


 
.context aux_stat
:l15
:n㭪 aux_stat
\u\a<  >\vsysp2aux\v \a<  >\vsysp\v \a< ਬ >\vaux_test.c\v\p


\b⨯ 㭪樨:\b
             void aux_stat(AUX_MODE *mode, int port);

\bࠬ 㭪樨:\b
             AUX_MODE mode - , 뢠
             ⮪  ० ࠡ :

        typedef struct _AUX_MODE_ {

         union {
           struct {
              unsigned char len : 2, //  ᨬ
                   stop         : 1, // ᫮ ⮯-⮢
                   parity       : 2, // ஫ ⭮
                   stuck_parity : 1, // 䨪 ⭮
                   en_break_ctl : 1, // ⠭ 뢠
                   dlab         : 1; // 㧪 ॣ ⥫
           } ctl_word;
           char ctl;
         } ctl_aux;

         unsigned long baud;            // ᪮ । 

        } AUX_MODE;

             int port -  ᨭ஭ :
                0 - COM1, 1 - COM2

\bᠭ 㭪樨:\b
              㭪 뢠 ⥪騩 ०
             ᨭ஭   뢠 
                ⨯ AUX_MODE.

\b頥 祭:\b
             祣


 
.context aux_test.c
\u\a<  >\vsysp2aux\v \a<  >\vsysp\v\p

// ணࠬ ࠡ⠥  ᨭ஭ ஬ COM1.
//  ࠢ쭮 ࠡ 室 
//  ⠪ 2  3 ࠧꥬ COM1.

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main(void);
void main(void) {

   AUX_MODE amd;

   aux_stat(&amd, 0);
   printf("\\nﭨ  COM1:"
          "\\n  ᨬ:    %d"
          "\\n ᫠ ⮯-⮢: %d"
          "\\n஫ ⭮:    %d"
          "\\n ।:    %lu",
          amd.ctl_aux.ctl_word.len,
          amd.ctl_aux.ctl_word.stop,
          amd.ctl_aux.ctl_word.parity,
          (unsigned long)amd.baud);

   amd.baud = 115200;

   aux_init(&amd, 0, 0);

   aux_stat(&amd, 0);
   printf("\\nﭨ  COM1:"
          "\\n  ᨬ:    %d"
          "\\n ᫠ ⮯-⮢: %d"
          "\\n஫ ⭮:    %d"
          "\\n ।:    %lu",
          amd.ctl_aux.ctl_word.len,
          amd.ctl_aux.ctl_word.stop,
          amd.ctl_aux.ctl_word.parity,
          (unsigned long)amd.baud);

   printf("\\n\\n஢ ᨭ஭ ."
          "\\n !"
          "\\n 襭 ࠡ  CTRL-C"
          "\\n");

   for(;;) {

//  ᨬ    । 
//  ᨭ஭ 

      aux_outp(getch(), 0);

//  ᨬ  ᨭ஭  
// ⮡ࠦ   ࠭

      putchar(aux_inp(0));
   }
}


.context sysp2mouse
:l15
:nᠭ 㭪権
   . \u\a<  >\vsysp2\v \a<>\vsysp\v\p

    ᪮ ०                 \a ms_gform\vms_gform\v   
樠                                           \a ms_init\vms_init\v   
몫祭                                       \a ms_off\vms_off\v   
祭                                        \a ms_on\vms_on\v   
।  稪 ६饭                  \a ms_querm\vms_querm\v   
। ﭨ   ⨨             \a ms_querp\vms_querp\v   
। ﭨ   ᪠            \a ms_querr\vms_querr\v   
। ⥪ न                        \a ms_query\vms_query\v   
  ६饭   ਧ⠫        \a ms_rangx\vms_rangx\v   
  ६饭   ⨪          \a ms_rangy\vms_rangy\v   
⠭                              \a ms_setcr\vms_setcr\v   
⠭ ࠩ ᮡ⨩                                  \a ms_seth\vms_seth\v   
    ⥪⮢ ०                   \a ms_tform\vms_tform\v   


.context ms_gform
:l15
:n㭪 ms_gform
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp5.c\v\p


\b⨯ 㭪樨:\b
             void ms_gform(int xt, int yt, char _far *form)

\bࠬ 㭪樨:\b
             int xt -  窨 㪠⥫;
             int yt -  ப 窨-㪠⥫;
             char *form - 㪠⥫  ᨢ, 뢠騩 .

\bᠭ 㭪樨:\b
              㭪 ।    
             ᪮ ०. ⥫쭮  
              窨-㪠⥫,  ᮮ⢥
             न⠬ .

\b頥 祭:\b
             祣


 
.context ms_init
:l15
:n㭪 ms_init
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_sampl.c\v\p


\b⨯ 㭪樨:\b
             int ms_init(int *nbottoms)

\bࠬ 㭪樨:\b
             int   *nbottoms - 㪠⥫  ६ ⨯ int,
                                 㤥 ᠭ ⢮
                               ,   .

\bᠭ 㭪樨:\b
              㭪 믮   , ⠭ 
             砫 祭 ७ ६  ࠩ.
             ⥫쭮 । ⢮  .

\b頥 祭:\b
             0   -   ࠩ  ⠭;
             -1  -  ⠭, 樠 믮 ᯥ譮;

              ६ nbottoms 뢠 ⢮
              :

              2  -  ;
              0  -   , 祬 ;
              3  -  ⥬ Mouse Systems,  .


 
.context ms_off
:l15
:n㭪 ms_off
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_sampl.c\v\p


\b⨯ 㭪樨:\b
             void ms_off(void)

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 㬥蠥  1  ஢
              . ᫥ 맮 ⮩ 㭪樨 ,
             ᫨    ࠭, 祧.  饭
              ᫥⥫쭮 㬥   ⥬
             ॡ  맮 㭪樨 ms_on  
             祭.

\b頥 祭:\b
             祣


 
.context ms_on
:l15
:n㭪 ms_on
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_sampl.c\v\p


\b⨯ 㭪樨:\b
             void ms_on(void)

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 㢥稢  1  ஢
              . ᫨  ࠢ , 
               ࠭. 祭   ॢ蠥
                 맮 ⮩ 㭪樨.

\b頥 祭:\b
             祣


 
.context ms_querm
:l15
:n㭪 ms_querm
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp7.c\v\p


\b⨯ 㭪樨:\b
             MOUSE_STATE *ms_querm(MOUSE_STATE *mstate);

\bࠬ 㭪樨:\b
             MOUSE_STATE *mstate - 㪠⥫  ,
                                   뢠 ﭨ .

\bᠭ 㭪樨:\b
              㭪 । ⭮⥫쭮 ६饭
                ᫥ 맮 㭪樨.

             । ﭨ 뢠  
             MOUSE_STATE, ᠭ  䠩 sysp.h:

                typedef struct _MOUSE_STATE_ {
                      unsigned bottoms;
                      unsigned x;
                      unsigned y;
                } MOUSE_STATE;

               । 㭪樨  ⢥ ࠬ.

             ६饭 ।   - 1/200  .

\b頥 祭:\b
             㭪 頥 祭 ᢮ ࠬ.


 
.context ms_querp
:l15
:n㭪 ms_querp
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp3.c\v\p


\b⨯ 㭪樨:\b
             int ms_querp(MOUSE_STATE *mstate, int bottom);

\bࠬ 㭪樨:\b
             MOUSE_STATE *mstate - 㪠⥫  ,
                                   뢠 ﭨ .

             int bottom - ࠬ । ,  ⨨
                            室  ﭨ:
                            0 -  ,
                            1 - ࠢ ,
                            2 - । .

\bᠭ 㭪樨:\b
              㭪 । न  
              ﭨ      ࠭
              .
             । ﭨ 뢠  
             MOUSE_STATE, ᠭ  䠩 sysp.h:

                typedef struct _MOUSE_STATE_ {
                      unsigned bottoms;
                      unsigned x;
                      unsigned y;
                } MOUSE_STATE;

               । 㭪樨  ⢥ ࠬ.

\b頥 祭:\b
             㭪 頥 ⢮ ⨩  
                ᫥ 맮 ⮩ 㭪樨.


 
.context ms_querr
:l15
:n㭪 ms_querr
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp3.c\v\p


\b⨯ 㭪樨:\b
             int ms_querr(MOUSE_STATE *mstate, int bottom);

\bࠬ 㭪樨:\b
             MOUSE_STATE *mstate - 㪠⥫  ,
                                   뢠 ﭨ .

             int bottom - ࠬ । ,  ᪠
                          ன 室  ﭨ:
                            0 -  ,
                            1 - ࠢ ,
                            2 - । .

\bᠭ 㭪樨:\b
              㭪 । न  
              ﭨ    ᪠ ࠭
              .
             । ﭨ 뢠  
             MOUSE_STATE, ᠭ  䠩 sysp.h:

                typedef struct _MOUSE_STATE_ {
                      unsigned bottoms;
                      unsigned x;
                      unsigned y;
                } MOUSE_STATE;

               । 㭪樨  ⢥ ࠬ.

\b頥 祭:\b
             㭪 頥 ⢮ ᪠ 
                ᫥ 맮 ⮩ 㭪樨.


 
.context ms_query
:l15
:n㭪 ms_query
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp1.c\v\p


\b⨯ 㭪樨:\b
             MOUSE_STATE *ms_query(MOUSE_STATE *mstate);

\bࠬ 㭪樨:\b
             MOUSE_STATE *mstate - 㪠⥫  ,
                                   뢠 ﭨ .

\bᠭ 㭪樨:\b
              㭪 । ⥪騥 न  
              ﭨ    맮.
             । ﭨ 뢠  
             MOUSE_STATE, ᠭ  䠩 sysp.h:

                typedef struct _MOUSE_STATE_ {
                      unsigned bottoms;
                      unsigned x;
                      unsigned y;
                } MOUSE_STATE;

               । 㭪樨  ⢥ ࠬ.

\b頥 祭:\b
             㭪 頥 祭 ᢮ ࠬ.


 
.context ms_rangx
:l15
:n㭪 ms_rangx
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp4.c\v\p


\b⨯ 㭪樨:\b
             void ms_rangx(int xmin, int xmax)

\bࠬ 㭪樨:\b
             int xmin   - 쭠 न X ;
             int xmax   - ᨬ쭠 न X .

\bᠭ 㭪樨:\b
              㭪 ࠭稢  ६饭
               ਧ⠫  । [xmin, xmax].

\b頥 祭:\b
             祣


 
.context ms_rangy
:l15
:n㭪 ms_rangy
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp4.c\v\p


\b⨯ 㭪樨:\b
             void ms_rangy(int ymin, int ymax)

\bࠬ 㭪樨:\b
             int ymin   - 쭠 न Y ;
             int ymax   - ᨬ쭠 न Y .

\bᠭ 㭪樨:\b
              㭪 ࠭稢  ६饭
               ⨪  । [ymin, ymax].

\b頥 祭:\b
             祣


 
.context ms_setcr
:l15
:n㭪 ms_setcr
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp2.c\v\p


\b⨯ 㭪樨:\b
             void ms_setcr(int x, int y)

\bࠬ 㭪樨:\b
             int x   - ਧ⠫쭠 न ;
             int y   - ⨪쭠 न .

\bᠭ 㭪樨:\b
              㭪 믮 ⠭  
              ,  न⠬ X  Y.

\b頥 祭:\b
             祣


 
.context ms_seth
:l15
:n㭪 ms_seth
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp8.c\v\p


\b⨯ 㭪樨:\b
             void ms_seth(int mask, void (far *hand)())

\bࠬ 㭪樨:\b
             int mask - ᪠ ᮡ⨩;
             void (far *hand)() -  ࠩ ᮡ⨩

\bᠭ 㭪樨:\b
              㭪 믮 ⠭ ࠩ ᮡ⨩.

\b頥 祭:\b
             祣


 
.context ms_tform
:l15
:n㭪 ms_tform
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v \a< ਬ >\vms_samp6.c\v\p


\b⨯ 㭪樨:\b
             void ms_tform(int type, int mask1, int mask2)

\bࠬ 㭪樨:\b
             int type - ⨯ :
                            0 - ணࠬ, 1 - ;
             int mask1 - AND-᪠ ࠭
                          ࢠ ப ⭮ 
             int mask2 - XOR-᪠ 
                          ᫥ ப ⭮ 

\bᠭ 㭪樨:\b
              㭪 ।    
             ⥪⮢ ०.

\b頥 祭:\b
             祣


 
.context ms_samp5.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"

union REGS reg;

char form[64] = {

// ᨢ ᪨  ""

   255,255, 255,255, 255,255, 255,255, 255,255, 255,255, 255,255, 255,255,
   255,255, 255,255, 255,255, 255,255, 255,255, 255,255, 255,255, 255,255,

// ᨢ ᪨  "᪫饥 "

   127,254, 127,254, 127,254, 127,254, 127,254, 127,254, 127,254, 0,0,
   0,0, 127,254, 127,254, 127,254, 127,254, 127,254, 127,254, 127,254,
   };


void main() {

   int botm, i;
   MOUSE_STATE state;
   unsigned old_videomode, new_videomode;
   char buf[20], *bufptr;


// ।塞 ⥪騩 ०

   reg.x.ax = 0x0f00;
   int86(0x10, &reg, &reg);
   old_videomode = reg.h.al;

// ⠭  ०:

// ⠭ ᨬ쭮 ⨬  ப

   buf[0] = 10;
   printf("\\n   ०: ");
   bufptr = cgets(buf);

// ८ࠧ㥬  ᫮  ଠ int

   new_videomode = atoi(bufptr);

   reg.h.ah = 0;
   reg.h.al = new_videomode;
   int86(0x10, &reg, &reg);

// 樠㥬 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

//      

   ms_gform(0,0, &form[0]);

// 砥 

   ms_on();

   getch();

   ms_off();

   reg.h.ah = 0;
   reg.h.al = old_videomode;
   int86(0x10, &reg, &reg);

}

.context ms_sampl.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main() {

   int botm;

// 樠㥬 , ।塞 ⢮ 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

   printf("\\n⠭ : ");
   switch (botm) {
     case 2:
         printf("媫譠"); break;
     case 3:
         printf("媫譠, ⥬ Mouse Systems"); break;
     case 0:
     default:
         printf("⭮ ⥬"); break;
   }

// 砥      

   printf("\\n\\n  祭,  몫祭   ");

   ms_on();

   getch();

// 몫砥 

   ms_off();
   printf("\\n 몫祭,  襭   ");

   getch();

}

.context ms_samp7.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"

union REGS reg;
void main() {

   int botm, i;
   MOUSE_STATE state;
   unsigned old_videomode, new_videomode;
   char buf[20], *bufptr;


// ।塞 ⥪騩 ०

   reg.x.ax = 0x0f00;
   int86(0x10, &reg, &reg);
   old_videomode = reg.h.al;

// ⠭  ०:

// ⠭ ᨬ쭮 ⨬  ப

   buf[0] = 10;
   printf("\\n   ०: ");
   bufptr = cgets(buf);

// ८ࠧ㥬  ᫮  ଠ int

   new_videomode = atoi(bufptr);

   reg.h.ah = 0;
   reg.h.al = new_videomode;
   int86(0x10, &reg, &reg);

// 樠㥬 , ।塞 ⢮ 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }
   printf("\\n\\nﭨ :\\n\\n");

// 砥 

   ms_on();

   while(!kbhit()) {
      ms_querm(&state);
      printf("x:%5d y:%5d",
         state.x,
         state.y);
      for(i=0;i<15;i++) printf("\\b");
   }
   getch();

   ms_off();

   reg.h.ah = 0;
   reg.h.al = old_videomode;
   int86(0x10, &reg, &reg);

}

.context ms_samp3.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"

union REGS reg;
void main() {

   int botm, i;
   MOUSE_STATE state;
   unsigned old_videomode, new_videomode;
   char buf[20], *bufptr;


// ।塞 ⥪騩 ०

   reg.x.ax = 0x0f00;
   int86(0x10, &reg, &reg);
   old_videomode = reg.h.al;

// ⠭  ०:

// ⠭ ᨬ쭮 ⨬  ப

   buf[0] = 10;
   printf("\\n   ०: ");
   bufptr = cgets(buf);

// ८ࠧ㥬  ᫮  ଠ int

   new_videomode = atoi(bufptr);

   reg.h.ah = 0;
   reg.h.al = new_videomode;
   int86(0x10, &reg, &reg);

// 樠㥬 , ।塞 ⢮ 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

   printf("\\n⠭ : ");
   switch (botm) {
     case 2:
         printf("媫譠"); break;
     case 3:
         printf("媫譠, ⥬ Mouse Systems"); break;
     case 0:
     default:
         printf("⭮ ⥬"); break;
   }
   printf("\\n\\nﭨ :\\n\\n");

// 砥 

   ms_on();

   while(!kbhit()) {

// ।塞 ﭨ   ⨨   

      i = ms_querp(&state, 0);

// ᫨ 뫨    , 뢮 ﭨ 

      if(i != 0) {

// । 뢮  ࠭ ⪫砥 , ⥬ 砥 
// ᭮.

         ms_off();
         printf("⨥:    %2d x:%5d y:%5d\\n",
            state.bottoms,
            state.x,
            state.y);
         ms_on();

      }

// 뢮 ﭨ  ᪠ 

      i = ms_querr(&state, 0);
      if(i != 0) {

         ms_off();
         printf("᪠: %2d x:%5d y:%5d\\n\\n",
            state.bottoms,
            state.x,
            state.y);
         ms_on();
      }
   }
   getch();

   ms_off();

   reg.h.ah = 0;
   reg.h.al = old_videomode;
   int86(0x10, &reg, &reg);

}

.context ms_samp1.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"

union REGS reg;
void main() {

   int botm, i;
   MOUSE_STATE state;
   unsigned old_videomode, new_videomode;
   char buf[20], *bufptr;


// ।塞 ⥪騩 ०

   reg.x.ax = 0x0f00;
   int86(0x10, &reg, &reg);
   old_videomode = reg.h.al;

// ⠭  ०:

// ⠭ ᨬ쭮 ⨬  ப

   buf[0] = 10;
   printf("\\n   ०: ");
   bufptr = cgets(buf);

// ८ࠧ㥬  ᫮  ଠ int

   new_videomode = atoi(bufptr);

   reg.h.ah = 0;
   reg.h.al = new_videomode;
   int86(0x10, &reg, &reg);

// 樠㥬 , ।塞 ⢮ 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

   printf("\\n⠭ : ");
   switch (botm) {
     case 2:
         printf("媫譠"); break;
     case 3:
         printf("媫譠, ⥬ Mouse Systems"); break;
     case 0:
     default:
         printf("⭮ ⥬"); break;
   }
   printf("\\n\\nﭨ :\\n\\n");

// 砥 

   ms_on();

   while(!kbhit()) {
      ms_query(&state);
      printf("%2d x:%5d y:%5d",
         state.bottoms,
         state.x,
         state.y);
      for(i=0;i<18;i++) printf("\\b");
   }
   getch();

   ms_off();

   reg.h.ah = 0;
   reg.h.al = old_videomode;
   int86(0x10, &reg, &reg);

}

.context ms_samp4.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main() {

   int botm;

// 樠㥬 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }


// 砥      

   printf("\\n\\n  祭,  몫祭   ");

   ms_on();

//  ࠭,    ६ 

   ms_rangx(20, 100);
   ms_rangy(50, 100);

   getch();

// 몫砥 

   ms_off();

}

.context ms_samp2.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main() {

   int botm;

// 樠㥬 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

// 砥      

   printf("\\n\\n  祭,  몫祭   ");

   ms_on();

// ⠭    孨 㣮 ࠭

   ms_setcr(0,0);

   getch();

// 몫砥 

   ms_off();

}

.context ms_samp8.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"

extern void far ms_handl(void);

//  ࠩ ᮡ⨩.  맮 ࠩ ᮡ⨩
//    ६ 祭 1.

   unsigned ms_flag;

//   ᮤন ॣ஢  室
//  ࠩ ᮡ⨩.

   unsigned ms_bx;
   unsigned ms_cx;
   unsigned ms_dx;
   unsigned ms_si;
   unsigned ms_di;
   unsigned ms_ds;

   int botm;

main () {

   ms_flag=0;
// 樠㥬 , ।塞 ⢮ 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

// 砥 ࠩ ᮡ⨩, ⠭  ⠪ ࠧ,
// ⮡ ࠩ 뢠  ⨨    ࠢ
//  .

   ms_seth(2 | 8, ms_handl);

// 砥 

   ms_on();

//  맮 ࠩ ᮡ⨩.

   for(;;) {
      if(ms_flag) {
         ms_off();

         printf("\\nﭨ ॣ஢  室 ࠩ:"
             "\\nms_bx: %0X"
             "\\nms_cx: %0X"
             "\\nms_dx: %0X"
             "\\nms_si: %0X"
             "\\nms_di: %0X"
             "\\nms_ds: %0X",
             ms_bx,
             ms_cx,
             ms_dx,
             ms_si,
             ms_di,
             ms_ds);

         printf("\\n  ...");
         getch();
         exit(0);
      }
   }
}


.context ms_samp6.c
\u\a<  >\vsysp2mouse\v \a<  >\vsysp\v\p

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"

union REGS reg;

void main() {

   int botm, i;
   MOUSE_STATE state;


// 樠㥬 

   if(!ms_init(&botm)) {
      printf("\\n  ⠭");
      exit(-1);
   }

//      

   ms_tform(0, 0, 0x1418);

// 砥 

   ms_on();

   getch();

   ms_off();
}

.context sysp2timer
:l15
:nᠭ 㭪権
      ॠ쭮 ६. \u\a<  >\vsysp2\v \a<>\vsysp\v\p

祭  ⠩ 砩 ᫠                       \a rnd_get\vrnd_get\v   
樠  砩 ᥫ                    \a rnd_set\vrnd_set\v   
  ᠬ ॠ쭮 ६                           \a timer\vtimer\v   
ନ஢ প  ⠩                            \a tm_delay\vtm_delay\v   
ନ஢ ⮭  ⥫쭮                     \a tm_sound\vtm_sound\v   


.context rnd_get
:l15
:n㭪 rnd_get
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v \a< ਬ >\vrandom.c\v\p


\b⨯ 㭪樨:\b
             int rnd_get(void)

\bࠬ 㭪樨:\b
             .

\bᠭ 㭪樨:\b
              㭪 砥 砩 ᫮ 
             ⠩,   ।⥫쭮
             ந樠஢ 㭪樥 rnd_set.

\b頥 祭:\b
             砩 ᫮    0, 
             㬥襭  1 祭,  
             ⢥ ࠬ 㭪樨 rnd_set().


 
.context rnd_set
:l15
:n㭪 rnd_set
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v \a< ਬ >\vrandom.c\v\p


\b⨯ 㭪樨:\b
             void rnd_set(int bound)

\bࠬ 㭪樨:\b
             int bound -  ࠭  㥬
                         砩 ᥫ.

\bᠭ 㭪樨:\b
              㭪 樠  2 ⠩
              ᯮ짮  ⢥ 
             砩 ᥫ.

\b頥 祭:\b
             祣


 
.context timer
:l15
:n㭪 timer
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v \a< ਬ >\vsetalarm.c\v\p


\b⨯ 㭪樨:\b
             int timer(char fn, SYSTIMER *tm)

\bࠬ 㭪樨:\b
             char     fn - 믮塞 㭪:

             RTC_GET_TIME      -   ᮢ;
             RTC_SET_TIME      - ⠭ ;
             RTC_GET_DATE      -  ;
             RTC_SET_DATE      - ⠭ ;
             RTC_SET_ALARM     - ⠭ 㤨쭨;
             RTC_CLEAR_ALARM   -  㤨쭨.

                  ⠭ ᠭ  䠩 sysp.h

             SYSTIMER tm - , ᮤঠ 
                            ⠭ ᮢ 
                            ᮢ:

             typedef struct _SYSTIMER_ {

                char hour;     // 
                char min;      // 
                char sec;      // ᥪ㭤
                unsigned year; // 
                char month;    // 
                char day;      // ᫮
                char daylight_savings; // 䫠 ࠧ襭
                                       //  ࠭
                                       // ( 祭 ०
                                       //   ࠢ 1)

             } SYSTIMER;

\bᠭ 㭪樨:\b
              㭪 ।祭  㦨
             ⥬ ᮢ ॠ쭮 ६ १
             뢠 INT 1Ah.

\b頥 祭:\b
             0   - ᯥ譮 믮 㭪樨;
             -1  -  ॠ쭮 ६ 
                    .


 
.context tm_delay
:l15
:n㭪 tm_delay
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v \a< ਬ >\vtm_samp1.c\v\p


\b⨯ 㭪樨:\b
             void tm_delay(int ticks)

\bࠬ 㭪樨:\b
             int ticks - 稭 প  ⨪
                         ⠩ (  ᥪ㭤 ⠩
                         ⨪ 18.2 ࠧ).

\bᠭ 㭪樨:\b
              㭪 ନ প, ᯮ
             ⥬ ⠩.

\b頥 祭:\b
             祣


 
.context tm_sound
:l15
:n㭪 tm_sound
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v \a< ਬ >\vplay.c\v\p


\b⨯ 㭪樨:\b
             void tm_sound(int freq, int time);

\bࠬ 㭪樨:\b
             int sound -   ;
             int time  - ⥫쭮  ⨪
                         ⠩ (  ᥪ㭤 ⠩
                         ⨪ 18.2 ࠧ).

\bᠭ 㭪樨:\b
              㭪 ।祭  樨
              ஬⥫ ⮭ 
             ⥫쭮  .

\b頥 祭:\b
             祣


 
.context random.c
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v\p

#include <stdio.h>
#include "sysp.h"


void main(void);
void main(void) {

   int i, j;

   printf("\\n 砩 ᫥."
          "\\n  ,"
          "\\n 襭 ࠡ  CTRL-C."
          "\\n");

   for(;;) {

// ⠭  樨 砩
// ᥫ  樠㥬 ⠩

      rnd_set(80);

//   .

      getch();

// ᫥    砥
// 砩 ᫮

      j = rnd_get();

// 뢮  ࠭ ப ᨬ "",
//  ன ࠢ 祭 砩
// .

      for(i=0; i < j; i++) putchar(219);

      printf("\\n");
   }

}

.context setalarm.c
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include "sysp.h"

// 몫砥 ஢ ⥪  㪠⥫

#pragma check_stack( off )
#pragma check_pointer( off )

//   뤠 㪮 ᨣ

#define BEEP() _asm { \\
   _asm mov bx,0 \\
   _asm mov ax, 0E07h \\
   _asm int 10h \\
}

void main(void);

// ᠭ ணࠬ-ࠡ稪 뢠
// 㤨쭨

void _interrupt _far alarm(void);

// ६  ࠭ ண
//  㤨쭨

void (_interrupt _far *old_4a)(void);


void main(void) {

char *month_to_text[] = {

   "ﭢ",
   "䥢ࠫ",
   "",
   "५",
   "",
   "",
   "",
   "",
   "ᥭ",
   "",
   "",
   ""

};

SYSTIMER tmr;

// ।塞 ⥪騥   ६

   timer(RTC_GET_DATE, &tmr);
   timer(RTC_GET_TIME, &tmr);

// 뢮   ६  ࠭

   printf("\\n %d , %s, %d ᫮."
          "\\n",
          bcd2bin(&(tmr.year)),
          month_to_text[bcd1bin(&(tmr.month)) - 1],
          bcd1bin(&(tmr.day)));

   printf("\\n६ - %02.2d:%02.2d:%02.2d"
          "\\n",
          bcd1bin(&(tmr.hour)),
          bcd1bin(&(tmr.min)),
          bcd1bin(&(tmr.sec)));

//  ⠭ 㤨쭨 㢥稢
// 稪   .  饭
// ணࠬ   ஢塞 稪 
// ९, ⮬ ᫨ ⥪饥
// 祭 稪  ࠢ 59,
// 㤨쭨  ࠡ⠥.   ᠬ
//  ᮢ襭⢮ ணࠬ 
// ஢ન ९.

   bin1bcd(bcd1bin(&(tmr.min)) + 1,
                   &(tmr.min));

// 뢮  ࠭ ६,  ࠡ⠥
// 㤨쭨.

   printf("\\n६ ࠡ뢠 㤨쭨"
               "- %02.2d:%02.2d:%02.2d"
          "\\n",
          bcd1bin(&(tmr.hour)),
          bcd1bin(&(tmr.min)),
          bcd1bin(&(tmr.sec)));

// 砥 ᢮ ࠡ稪 뢠
// 㤨쭨, ஥ 祭 
// 0x4a ࠭塞

   old_4a = _dos_getvect(0x4a);

   _dos_setvect(0x4a, alarm);

// ⠭ 㤨쭨

   timer(RTC_SET_ALARM, &tmr);

   printf("\\n㤨쭨 ⠭.  ⬥ "
             " 襭 ணࠬ "
          "\\n ...");

   getch();

// 뢠 㤨쭨  ⠭
//  뢠 㤨쭨

   timer(RTC_CLEAR_ALARM, &tmr);

   _dos_setvect(0x4a, old_4a);

   exit(0);
}

// ----------------------------------
// ८ࠧ ⮢
// ᫠  ଠ BCD  
// ଠ.
// ----------------------------------

int bcd1bin(char *bcd) {

   return( ((*bcd) & 0x0f) +
           10 * (((*bcd) & 0xf0) >> 4) );

}

// ----------------------------------
// ८ࠧ 塠⮢
// ᫠  ଠ BCD  
// ଠ.
// ----------------------------------

int bcd2bin(char *bcd) {

   return( bcd1bin(bcd) + 100 * bcd1bin(bcd + 1) );

}

// ----------------------------------
// ८ࠧ ⮢
// ᫠  筮 ଠ
// ଠ BCD.
// ----------------------------------

int bin1bcd(int bin, char *bcd) {

   int i;

   i = bin / 10;

   *bcd = (i << 4) + (bin - (i * 10));

}

// ----------------------------------
// ணࠬ 砥 ࠢ
//  ࠡ뢠 㤨쭨.
//  祭 - 뤠 㪮 ᨣ.
// ----------------------------------

void _interrupt _far alarm(void) {

   BEEP();
   BEEP();
   BEEP();
   BEEP();
   BEEP();
   BEEP();
   BEEP();

}

.context tm_samp1.c
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v\p

#include <stdio.h>
#include "sysp.h"


main() {

   printf("\\n 믮 ணࠬ প ਬ୮"
          "\\n 10 ᥪ㭤   .");
   getch();

   printf("\\n\\n६ 諮...");

   tm_delay(18 * 10);

   printf("\\n⮢!");

   exit(0);
}

.context play.c
\u\a<  >\vsysp2timer\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main(void);

// ᨢ   

int mary[] = {
   330, 294, 262, 294, 330, 330, 330,
   294, 294, 294, 330, 392, 392,
   330, 294, 262, 294, 330, 330, 330, 330,
   294, 294, 330, 294, 262, 0
};

// ᨢ ⥫쭮⥩

int del[] = {
   5,   5,   5,   5,   5,   5,   10,
   5,   5,   10,  5,   5,   10,
   5,   5,   5,   5,   5,   5,   5,   5,
   5,   5,   5,   5,   20
};


void main(void) {

  int i;

  for(i=0 ;mary[i] != 0 ;i++)
      tm_sound(mary[i], del[i]);

}


.context sysp2ems
:l15
:nᠭ 㭪権
   ⥫쭠 . \u\a<  >\vsysp2\v \a<>\vsysp\v\p

⨥  㫠 ࠭ EMS                   \a ems_clos\vems_clos\v   
। ᥣ  㯠                   \a ems_fram\vems_fram\v   
㭪 ஢ ⠭ ࠩ EMS            \a ems_init\vems_init\v   
⮡ࠧ  EMS                               \a ems_map\vems_map\v   
⨥  㫠 ࠭ EMS                   \a ems_open\vems_open\v   
। ⢠ ࠭ EMS                  \a ems_page\vems_page\v   
। ﭨ ࠩ EMS                  \a ems_stat\vems_stat\v   
। ᨨ ࠩ EMS                     \a ems_ver\vems_ver\v   


.context ems_clos
:l15
:n㭪 ems_clos
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_clos(int *handle);

\bࠬ 㭪樨:\b
             int *handle - 㪠⥫  ᫮,  ஥
                㤥 ᠭ  祭 㫠.

\bᠭ 㭪樨:\b
              㭪 뢠  㫠 ࠭,
             祭 㭪樥 ems_open().

\b頥 祭:\b
              ﭨ ࠩ EMS


 
.context ems_fram
:l15
:n㭪 ems_fram
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_fram(unsigned *frame);

\bࠬ 㭪樨:\b
             unsigned *frame - ⥫  ६,
                  㤥 ᠭ ᥣ
                  㯠.

\bᠭ 㭪樨:\b
              㭪 頥 ᥣ 
             , ஥ ᯮ  㯠 
             ⥫쭮 .

\b頥 祭:\b
             ﭨ EMM.


 
.context ems_init
:l15
:n㭪 ems_init
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_init(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ஢ 稥 ࠩ EMS

\b頥 祭:\b
             0 - ࠩ EMS ⠭;
             1 - ࠩ EMS  ⠭.


 
.context ems_map
:l15
:n㭪 ems_map
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_map(int phys_page, int log_page,
                         int handle);

\bࠬ 㭪樨:\b
             int phys_pages -  䨧᪮ ࠭
                 㯠 ( 0  3),   室
                ⮡ࠧ  ࠭ 㫠;

             int_log_page -  ᪮ ࠭ 㫠;

             int *handle -  祭 㫠;

\bᠭ 㭪樨:\b
              㭪 ⮡ࠦ ᪨ ࠭
             㫠 ⥫쭮   䨧᪨.

\b頥 祭:\b
              ﭨ ࠩ EMS


 
.context ems_open
:l15
:n㭪 ems_open
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_open(int n_pages, int *handle);

\bࠬ 㭪樨:\b
             int n_pages - ⢮ ॡ㥬 ᪨
                ࠭;
             int *handle - 㪠⥫  ᫮,  ஥
                㤥 ᠭ  祭 㫠.

\bᠭ 㭪樨:\b
              㭪 뢠  㫠 ࠭
             EMS,  㯭묨 ᪨ ࠭
             ⥫쭮 .

\b頥 祭:\b
              ﭨ ࠩ EMS


 
.context ems_page
:l15
:n㭪 ems_page
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_page(unsigned *total, unsigned *free);

\bࠬ 㭪樨:\b
             unsigned *total - 㪠⥫  ६,
                  㤥 ᠭ 饥 ⢮
                ࠭  EMS;
             unsigned *free - 㪠⥫  ६,
                  㤥 ᠭ ⢮
                㯭 ࠭  EMS;

\bᠭ 㭪樨:\b
              㭪 ।祭  ।
             饣 ⢠ ࠭ EMS  ⢠
             ࠭, 㯭  饥 ६.

\b頥 祭:\b
             ﭨ EMM.


 
.context ems_stat
:l15
:n㭪 ems_stat
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_stat(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 頥  ﭨ
             ࠩ EMS

\b頥 祭:\b
              ﭨ ࠩ EMS


 
.context ems_ver
:l15
:n㭪 ems_ver
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v \a< ਬ >\vems_test.c\v\p


\b⨯ 㭪樨:\b
             int ems_ver(char *ver);

\bࠬ 㭪樨:\b
             char *ver - 㪠⥫  ,  
                㤥 ᠭ  ᨨ.

\bᠭ 㭪樨:\b
              㭪 頥  ᨨ
             ࠩ EMS  筮-筮 ଠ.

\b頥 祭:\b
              ᨨ ࠩ EMS  ଠ BCD


 
.context ems_test.c
\u\a<  >\vsysp2ems\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main(void);
void main(void) {

   unsigned frame, err;
   unsigned total, free;
   unsigned handle;
   char ver;

//  ᮮ饭 㤥 ९ᠭ ᭠砫 
//  ⠭⭮    ⥫쭮,
// ⥬ ⭮   ᭮.

   static char test_msg[] = "⮢ ᮮ饭  "
                  "   EMS.";

   char buf[80];
   char _far *ptr;
   int i;

// ஢塞, ⠭  ࠩ EMS.

   if(ems_init() != 0) {
      printf("\\nࠩ EMS  ⠭.");
      exit(-1);
   }

// ᫨ ࠩ ⠭, ।塞  ﭨ.

   printf("\\nࠩ EMS ⠭, ﭨ: %02.2X.",
      ems_stat());

// 뢮  ᨨ ࠩ

   if((err = ems_ver(&ver)) != 0) {
      printf("\\n訡: %02.2X", err);
      exit(-1);
   }
   printf("\\n EMM: %02.2X", ver);

// ।塞 ᥣ  㯠

   if((err = ems_fram(&frame)) != 0) {
      printf("\\n訡: %02.2X", err);
      exit(-1);
   }

   printf("\\n  㯠: %04.4X",
      frame);

// ।塞 饥 ⢮ ࠭ 
// ⢮ 㯭 ࠭.

   if((err = ems_page(&total, &free)) != 0) {
      printf("\\n訡: %02.2X", err);
      exit(-1);
   }

   printf("\\n饥 ⢮ ࠭ EMS: %d"
          "\\n⢮ 㯭 ࠭: %d",
          total, free);

// 뢠   ⥫쭮 .

   if((err = ems_open(free, &handle)) != 0) {
      printf("\\n訡: %02.2X", err);
      exit(-1);
   }

// ⮡ࠦ 㫥 䨧 ࠭
//  㫥  ࠭ 㫠.

   if((err = ems_map(0, 0, handle)) != 0) {
      printf("\\n訡: %02.2X", err);
      exit(-1);
   }

// 㥬 㪠⥫  䨧 ࠭.

   ptr = FP_MAKE(frame,0);

// 㥬 ⮢ ᮮ饭 
// ⥫ .

   printf("\\n㥬  EMS: %s",test_msg);

   for(i=0; test_msg[i] != 0; i++)
      ptr[i] = test_msg[i];

//  㥬  ᮮ饭 ⭮
//  ⠭ .

   for(i=0; ptr[i] != 0; i++)
      buf[i] = ptr[i];
   buf[i] = 0;

// 뢮 ᮮ饭  ࠭ 
// ஢ન.

   printf("\\n஢  EMS: %s",buf);

// 뢠 .

   if((err = ems_clos(&handle)) != 0) {
      printf("\\n訡: %02.2X", err);
      exit(-1);
   }

   exit(0);
}


.context sysp2xms
:l15
:nᠭ 㭪権
   ७ . \u\a<  >\vsysp2\v \a<>\vsysp\v\p

  ७                    \a XMM_AllocateExtended\vXMM_AllocateExtended\v   
쭮 饭  A20                      \a XMM_DisableA20\vXMM_DisableA20\v   
쭮 ࠧ襭  A20                      \a XMM_EnableA20\vXMM_EnableA20\v   
᢮  ७                   \a XMM_FreeExtended\vXMM_FreeExtended\v   
   ७              \a XMM_GetHandleLength\vXMM_GetHandleLength\v   
 ଠ   ७       \a XMM_GetHandleInfo\vXMM_GetHandleInfo\v   
쭮 饭  A20                     \a XMM_GlobalDisableA20\vXMM_GlobalDisableA20\v   
쭮 ࠧ襭  A20                     \a XMM_GlobalEnableA20\vXMM_GlobalEnableA20\v   
祭  ࠢ饩 㭪樨                \a XMM_Installed\vXMM_Installed\v   
஢  ७                \a XMM_LockExtended\vXMM_LockExtended\v   
஢  ७                   \a XMM_MoveExtended\vXMM_MoveExtended\v   
஢ ﭨ  A20                       \a XMM_QueryA20\vXMM_QueryA20\v   
। ᨬ ࠧ                 \a XMM_QueryLargestFree\vXMM_QueryLargestFree\v   
। ࠧ ७                 \a XMM_QueryTotalFree\vXMM_QueryTotalFree\v   
 ࠧ  ७             \a XMM_ReallocateExtended\vXMM_ReallocateExtended\v   
᢮  HMA                              \a XMM_ReleaseHMA\vXMM_ReleaseHMA\v   
᢮  UMB                              \a XMM_ReleaseUMB\vXMM_ReleaseUMB\v   
  HMA                               \a XMM_RequestHMA\vXMM_RequestHMA\v   
  UMB                               \a XMM_RequestUMB\vXMM_RequestUMB\v   
஢  ७               \a XMM_UnLockExtended\vXMM_UnLockExtended\v   
। ᨨ ࠩ HIMEM.SYS               \a XMM_Version\vXMM_Version\v   


.context XMM_AllocateExtended
:l15
:n㭪 XMM_AllocateExtended
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_AllocateExtended(unsigned space);

\bࠬ 㭪樨:\b
             space - ࠧ ॡ㥬  
                      ;

\bᠭ 㭪樨:\b
              㭪 뤥 ணࠬ 
             ७ ,  砥 ᯥ
             頥  祭 .

\b頥 祭:\b
             < 0 -   ।,
                    訡 室  襬 .
             > 0L  - 訩  ᮤন 
                     祭  .


 
.context XMM_DisableA20
:l15
:n㭪 XMM_DisableA20
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_DisableA20(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 頥 ணࠬ ࠢ
              ७ .

\b頥 祭:\b
             < 0 -  A20  몫祭,
                    訡 室  襬 .
             0L  -  A20 몫祭.


 
.context XMM_EnableA20
:l15
:n㭪 XMM_EnableA20
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_EnableA20(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ࠧ蠥 ணࠬ ࠢ
              ७ .

\b頥 祭:\b
             < 0 -  A20  祭,
                    訡 室  襬 .
             0L  -  A20 祭.


 
.context XMM_FreeExtended
:l15
:n㭪 XMM_FreeExtended
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_FreeExtended(unsigned handle);

\bࠬ 㭪樨:\b
             handle -  ᢮  ;

\bᠭ 㭪樨:\b
              㭪 ᢮ 
             ७ , 祭 㭪樥
             XMM_AllocateExtended().

\b頥 祭:\b
             < 0 -   ।,
                    訡 室  襬 .
             0L  -  ᢮.


 
.context XMM_GetHandleLength
:l15
:n㭪 XMM_GetHandleLength
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_GetHandleLength(unsigned handle);

\bࠬ 㭪樨:\b
             handle -   ;

\bᠭ 㭪樨:\b
              㭪 頥  
             ७    .

\b頥 祭:\b
             < 0 - ந諠 訡,
                    訡 室  襬 .
             > 0L  -    .


 
.context XMM_GetHandleInfo
:l15
:n㭪 XMM_GetHandleInfo
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_GetHandleInfo(unsigned handle);

\bࠬ 㭪樨:\b
             handle -   ;

\bᠭ 㭪樨:\b
              㭪 頥 饥
             ⢮ ᮢ  ⥬ 
             ᮤন 稪 ஢ 
              .

\b頥 祭:\b
             < 0 - ந諠 訡,
                    訡 室  襬 .
             > 0L  - 訩  - 饥 ⢮
                     ᮢ  ⥬;
                     訩  - 稪 ஢.


 
.context XMM_GlobalDisableA20
:l15
:n㭪 XMM_GlobalDisableA20
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_GlobalDisableA20(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 頥 ணࠬ, 稢襩
                HMA ᯮ짮  A20

\b頥 祭:\b
             < 0 -  A20  몫祭,
                    訡 室  襬 .
             0L  -  A20 몫祭.


 
.context XMM_GlobalEnableA20
:l15
:n㭪 XMM_GlobalEnableA20
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_GlobalEnableA20(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ࠧ蠥 ணࠬ, 稢襩
                HMA ᯮ짮  A20

\b頥 祭:\b
             < 0 -  A20  祭,
                    訡 室  襬 .
             0L  -  A20 祭.


 
.context XMM_Installed
:l15
:n㭪 XMM_Installed
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             unsigned XMM_Installed(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ஢ 稥 ࠩ
             HIMEM.SYS   砥  ⢨
               ࠢ饩 㭪樨.

\b頥 祭:\b
             0 - ࠩ HIMEM.SYS  ⠭;
             1 - ࠩ HIMEM.SYS ⠭.


 
.context XMM_LockExtended
:l15
:n㭪 XMM_LockExtended
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_LockExtended(unsigned handle);

\bࠬ 㭪樨:\b
             handle -  㥬  ;

\bᠭ 㭪樨:\b
              㭪   ७
               頥 31 ࠧ 
             䨧᪮ .

\b頥 祭:\b
             < 0 -   ஢,
                    訡 室  襬 .
             > 0L  -  ஢, 㭪
                     頥 䨧᪨  
                     .


 
.context XMM_MoveExtended
:l15
:n㭪 XMM_MoveExtended
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_MoveExtended(struct
                      XMM_Move *move_descr);

\bࠬ 㭪樨:\b
             struct XMM_Move *move_descr -
                㪠⥫  , 뢠
                , 㤠  㤠  ஢.

\bᠭ 㭪樨:\b
              㭪  
             ७ , ᯮ 
             struct XMM_Move:

                struct   XMM_Move {
                   unsigned long  Length;
                   unsigned short SourceHandle;
                   unsigned long  SourceOffset;
                   unsigned short DestHandle;
                   unsigned long  DestOffset;
                };

\b頥 祭:\b
             < 0 - 訡  ஢,
                    訡 室  襬 .
             0L  -  ᪮஢ ᯥ譮.


 
.context XMM_QueryA20
:l15
:n㭪 XMM_QueryA20
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_QueryA20(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ஢ 㯭
              A20

\b頥 祭:\b
             < 0 - 訡,
                    訡 室  襬 .
             0L  -  A20 몫祭,
             1L  -  A20 祭.


 
.context XMM_QueryLargestFree
:l15
:n㭪 XMM_QueryLargestFree
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_QueryLargestFree(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 頥 ࠧ ᨬ쭮
             뢭  ७ ,
              㯥 ணࠬ.

\b頥 祭:\b
             < 0 - 訡,
                    訡 室  襬 .
             >= 0 - ࠧ .


 
.context XMM_QueryTotalFree
:l15
:n㭪 XMM_QueryTotalFree
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_QueryTotalFree(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 頥 ࠧ
             ᥩ 饩 ७ .

\b頥 祭:\b
             < 0 - 訡,
                    訡 室  襬 .
             >= 0 - ࠧ ७ .


 
.context XMM_ReallocateExtended
:l15
:n㭪 XMM_ReallocateExtended
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_ReallocateExtended(unsigned handle,
                unsigned new_size);

\bࠬ 㭪樨:\b
             handle -   ;
             new_size -  ࠧ  
                      ;

\bᠭ 㭪樨:\b
              㭪  ࠧ 뤥
              ७ .

\b頥 祭:\b
             < 0 -   ।,
                    訡 室  襬 .
             > 0L  - 訩  ᮤন 
                     祭  .


 
.context XMM_ReleaseHMA
:l15
:n㭪 XMM_ReleaseHMA
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_ReleaseHMA(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ⠥ ᢮
              HMA

\b頥 祭:\b
             < 0 -  HMA  ᢮,
                    訡 室  襬 .
             0L -  HMA ᢮.


 
.context XMM_ReleaseUMB
:l15
:n㭪 XMM_ReleaseUMB
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_ReleaseUMB(unsigned segment);

\bࠬ 㭪樨:\b
             segment - ᥣ ᢮  UMB*

\bᠭ 㭪樨:\b
              㭪 ⠥ ᢮
              UMB

\b頥 祭:\b
             < 0 -  UMB  ᢮,
                    訡 室  襬 .
             0L -  UMB ᢮.


 
.context XMM_RequestHMA
:l15
:n㭪 XMM_RequestHMA
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_RequestHMA(unsigned space);

\bࠬ 㭪樨:\b
             space - ࠧ ॡ㥬  
                     TSR-ணࠬ  ࠩ,
                     0xffff  ਪ ணࠬ;

\bᠭ 㭪樨:\b
              㭪 ⠥ १ࢨ஢ 
             ணࠬ  HMA

\b頥 祭:\b
             < 0 -  HMA  祭 ணࠬ,
                    訡 室  襬 .
             0L  -  HMA 祭 ணࠬ.


 
.context XMM_RequestUMB
:l15
:n㭪 XMM_RequestUMB
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_RequestUMB(unsigned space);

\bࠬ 㭪樨:\b
             space - ࠧ ॡ㥬 
                      ࠣ;

\bᠭ 㭪樨:\b
              㭪 ⠥ १ࢨ஢ 
             ணࠬ  UMB

\b頥 祭:\b
             < 0 -  UMB  祭 ணࠬ,
                    訡 室  襬 ;
                   ᨬ ࠧ 㯭 
                    襬 ᫮ (16 ࠧ冷);
             > 0L  -  UMB 祭 ணࠬ,
                   襥 ᫮ ᮤন ᥣ 
                   UMB, 訩 - ࠧ 뤥
                    UMB.


 
.context XMM_UnLockExtended
:l15
:n㭪 XMM_UnLockExtended
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long XMM_UnLockExtended(unsigned handle);

\bࠬ 㭪樨:\b
             handle -   ;

\bᠭ 㭪樨:\b
              㭪 ࠧ  ७
             .

\b頥 祭:\b
             < 0 -   ࠧ஢,
                    訡 室  襬 .
             0L  -  ࠧ஢.


 
.context XMM_Version
:l15
:n㭪 XMM_Version
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v \a< ਬ >\vxms_test.c\v\p


\b⨯ 㭪樨:\b
             long  XMM_Version(void);

\bࠬ 㭪樨:\b
              ᯮ

\bᠭ 㭪樨:\b
              㭪 ।  ࠩ
             HIMEM.SYS

\b頥 祭:\b
              ᨨ   16 ,
               -   16 
             頥 祭


 
.context xms_test.c
\u\a<  >\vsysp2xms\v \a<  >\vsysp\v\p

#include <stdio.h>
#include <conio.h>
#include "sysp.h"

void main(void);
void main(void) {

   long ver, rc, handle;
   static char testmsg[] = "⮢ ᮮ饭";
   char buf[80];
   char far *ptr;
   int i;
   struct XMM_Move move_d;

// ஢塞, ⠭  ࠩ HIMEM.SYS,
// ᫨ ⠭, 뢮  .

   if (XMM_Installed()) {
      printf("\\nࠩ HIMEM.SYS ⠭.");
      ver = XMM_Version();
      printf("\\n XMM: %4X, : %4x",
         (short)ver, (short)(ver >> 16));
   }

   else {
      printf("\\nࠩ HIMEM.SYS  ⠭.");
      exit(-1);
   }

// 訢 ࠢ  HMA.

   rc = XMM_RequestHMA(0xffff);
   if(rc) error("訡    HMA",rc);

   else {

// 뢠  A20.

      rc = XMM_GlobalEnableA20();
      if(rc) error("訡  ࠧ襭  A20",rc);

// 㥬 ⮢ ᮮ饭 ᭠砫 
// ⠭⭮    HMA,
// ⥬ ⭮  ⠭ .

      ptr = FP_MAKE(0xffff,0x0010);

      for(i=0; testmsg[i] != 0; i++)
         ptr[i] = testmsg[i];

      for(i=0; ptr[i] != 0; i++)
         buf[i] = ptr[i];
      buf[i] = 0;

// 뢮 ᮮ饭  ஢ન.

      printf("\\n%s",buf);

// 뢠  A20  ⤠ ⥬  HMA.

      rc = XMM_GlobalDisableA20();
      if(rc) error("訡  饭  A20",rc);

      rc = XMM_ReleaseHMA();
      if(rc) error("訡  ᢮  HMA",rc);
   }

// 砥  EMB ࠧ஬  1 .

   handle = XMM_AllocateExtended(1);
   if(handle < 0) error("訡   XMB",handle);

// 㥬 ⮢ ᮮ饭 ᭠砫 
// ⠭⭮    EMB,
// ⥬ ⭮  ⠭ .

   move_d.Length = strlen(testmsg) + 1;
   move_d.SourceHandle = 0;
   (char far*)move_d.SourceOffset = (char far*)testmsg;
   move_d.DestHandle = handle;
   move_d.DestOffset = 0L;

   rc = XMM_MoveExtended(&move_d);
   if(rc < 0) error("訡  ஢  EMB",rc);

   move_d.Length = strlen(testmsg) + 1;
   move_d.DestHandle = 0;
   (char far*)move_d.DestOffset = (char far*)buf;
   move_d.SourceHandle = handle;
   move_d.SourceOffset = 0L;

   rc = XMM_MoveExtended(&move_d);
   if(rc < 0) error("訡  ஢  EMB",rc);

// 뢮 ᮮ饭  ஢ન.

   printf("\\n%s",buf);

// ᢮  EMB.

   rc = XMM_FreeExtended(handle);
   if(rc) error("訡  ᢮ XMB",rc);

   exit(0);
}

// 㭪  뢮 ᮮ饭  訡
//   訡.

int error(char *msg, long rc) {

   rc = (unsigned char)(rc >> 24) ;
   printf("\\n%s,  訡: %02.2X\\n",
      msg, (unsigned char)rc);

}

