home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource4 / 256_01 / fun38h.a < prev    next >
Text File  |  1988-01-08  |  3KB  |  66 lines

  1. ;---------------------------------------------------------------------
  2. ;    ASM88 FILE:     FUN38H.A    Get Country Data
  3. ;    ----------
  4. ;    WRITTEN:        25/10/87
  5. ;    -------
  6. ;    PURPOSE:        This is one of a series of files which take
  7. ;    -------         advantage of INT 21H functions under MS-DOS.
  8. ;                    In each case the error situation is marked by
  9. ;                    the carry flag being set.   We use the De Smet
  10. ;                    external variable '_carryf' to see whether the
  11. ;                    carry is set on return from the function.
  12. ;                    If so, the error code can be used to obtain
  13. ;                    information about the specific error.
  14. ;
  15. ;    USAGE:          int FUN38H(country, buf, &_carryf)
  16. ;    -----           int country;
  17. ;                    char *buf, *_carryf;
  18. ;
  19. ;                    Where country = 0 means return information
  20. ;                    about current settings.   If country > 0ffh
  21. ;                    then this value must be placed in BX instead
  22. ;                    of AL and 0ffh must be placed in AL.   The
  23. ;                    country code is usually the International
  24. ;                    Telephone prefix code.   On success the 
  25. ;                    date/time data is returned in the 32-byte
  26. ;                    buffer.
  27. ;
  28. ;    DEPENDENCIES:           De Smet C V 2.44+
  29. ;    ------------
  30. ;    Copyright 1987 - Cogar Computer Services Pty. Ltd
  31. ;---------------------------------------------------------------------
  32.  
  33. CSEG
  34. PUBLIC FUN38H_
  35.  
  36. FUN38H_:
  37.     push    bp    ; normal De Smet C start
  38.     mov    bp,sp    ; point to the stack
  39.     mov    ax,ds    ; and make ES common with DS
  40.     mov    es,ax
  41. ;----------------------------------------------------------------------
  42. ;  The unique programme follows.
  43. ;----------------------------------------------------------------------
  44.     mov    bx,[bp+4]    ; get country code
  45.     mov    dx,[bp+6]    ; get address of buffer
  46.     mov    ah,38h    ; the function No.
  47.     mov    al,0ffh    ; ready for extended code
  48.     cmp    bx,0feh    ; see if we should use AL for code
  49.     ja    FUN38H_INT
  50.     mov    al,bl    ; must be small code No.
  51.     xor    bx,bx    ; zero out BX
  52. FUN38H_INT:
  53.     int    21h
  54.     jc    FUN38H_ERROR    ; do this if error
  55.     jmp    FUN38H_QUIT    ; else terminate normally
  56. FUN38H_ERROR:
  57.     mov    si,[bp+8]    ; get address of '_carryf' variable
  58.     mov    byte [si],1    ; return with _carryf = 1
  59. ;----------------------------------------------------------------------
  60. ;  Normal programme termination.
  61. ;----------------------------------------------------------------------
  62. FUN38H_QUIT:
  63.     pop    bp    ; restore starting conditions
  64.     ret
  65. ;----------------------------------------------------------------------
  66.