home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / pcmag / vol7n14.arc / FIG11.TXT < prev    next >
Text File  |  1988-06-30  |  2KB  |  71 lines

  1. #include<dos.h>
  2.  
  3. VidGetCurPos(int *row, int *col)    /* INLINE version    */
  4. {
  5.     _AH = 3;
  6.     _BH = 0;
  7. asm int 10h;         /* call video interrupt */
  8.     *row = _DH;
  9.     *col = _DL;
  10. }
  11.     Note that the assembler produced from this is:
  12.  
  13. _VidGetCurPos    proc    near
  14.     push    bp
  15.     mov    bp,sp
  16.     mov    ah,3        ; _AH = 3
  17.     mov    bh,0        ; _BH = 0
  18.     int    10h        ; Int10h
  19.     mov    al,dh      
  20.     mov    ah,0
  21.     mov    bx,word ptr [bp+4]
  22.     mov    word ptr [bx],ax    ; row = _DH
  23.     mov    al,dl
  24.     mov    ah,0
  25.     mov    bx,word ptr [bp+6]
  26.     mov    word ptr [bx],ax    ; col = _DL
  27.     pop    bp
  28.     ret  
  29. _VidGetCurPos    endp
  30.  
  31.  
  32. VidGetCurPos(int *row, int *col)    /* Int86() version    */
  33. {
  34.     union REGS r;
  35.  
  36.     r.h.ah = 3;
  37.     r.h.bh = 0;
  38.     int86(0x10,&r,&r);
  39.     *row = r.h.dh;
  40.     *col = r.h.dl;
  41. }
  42.     However, the assembler produced from this function is much larger,
  43.     and slower:
  44.  
  45. _VidGetCurPos    proc    near
  46.     push    bp
  47.     mov    bp,sp
  48.     sub    sp,16            ; allocate the register structure
  49.     mov    byte ptr [bp-15],3    ; r.h.ah = 3
  50.     mov    byte ptr [bp-13],0    ; r.h.bh = 0
  51.     lea    ax,word ptr [bp-16]  
  52.     push    ax
  53.     lea    ax,word ptr [bp-16]
  54.     push    ax
  55.     mov    ax,16
  56.     push    ax
  57.     call    near ptr _int86        ; int86() - additional overhead
  58.     add    sp,6
  59.     mov    al,byte ptr [bp-9]  
  60.     mov    ah,0
  61.     mov    bx,word ptr [bp+4]
  62.     mov    word ptr [bx],ax    ; row = r.h.dh
  63.     mov    al,byte ptr [bp-10]  
  64.     mov    ah,0
  65.     mov    bx,word ptr [bp+6]  
  66.     mov    word ptr [bx],ax    ; col = r.h.dl
  67.     mov    sp,bp
  68.     pop    bp
  69.     ret  
  70. _VidGetCurPos    endp
  71.