home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource4 / 214_01 / charfunr.csm < prev    next >
Text File  |  1979-12-31  |  4KB  |  187 lines

  1. ;/* CHARFUNR.CSM    VERS:- 01.00  DATE:- 09/26/86  TIME:- 09:36:13 PM */
  2. ;
  3. ; Description:
  4. ;
  5. ; Library of assembly code functions to handle character operations.
  6. ;
  7. ; isalpha()  isupper()  islower()  isdigit()  isspace()  toupper()  tolower()
  8. ;
  9. ; Converted cug routines by M.J. Maney from asm to csm format.
  10. ;
  11. ;By J.A. Rupley, Tucson, Arizona
  12. ;Coded for BDS C compiler, version 1.50a
  13. ;*************************************************************************
  14. ;                charfun.asm
  15. ;
  16. ;    Copyright (C) 1980, M J Maney
  17. ;
  18. ;    First created 8/16/80
  19. ;    Last revised 8/28/80 14:45
  20. ;
  21. ;    Tested and installed 8/28/80 14:55
  22. ;
  23. ;    This file contains the definitions for some character
  24. ;    functions, written in assembler for compacteness and performance.
  25. ;    The macros from the "crl.lib" file are used to create these
  26. ;    functions in the BDS "crl" format with minimum pain.
  27. ;
  28. ;    maclib    crl
  29.     INCLUDE "BDS.LIB"
  30. ;
  31. ;
  32. BLANK    equ    20H
  33. TAB    equ    09H
  34. NEWLINE    equ    0AH
  35. ;
  36. ;
  37. ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  38. ;
  39. ;        functions that operate on a byte and return
  40. ;            a small integer or a character
  41. ;
  42. ;    isalpha        isupper        islower        isdigit
  43. ;    isspace        toupper        tolower
  44. ;
  45. ;        functions that operate on a pair of bytes and
  46. ;            return an integer
  47. ;
  48. ;    atob
  49. ;
  50. ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  51. ;
  52. ;
  53.     FUNCTION    ISALPHA
  54.     call    arghak
  55.     lda    ARG1
  56.     lxi    h,0
  57.     cpi    'A'
  58.     rc            ;less than 'A'
  59.     cpi    'z'+1
  60.     rnc            ;greater than 'z'
  61.     inx    h
  62.     cpi    'a'
  63.     rnc            ;lower-case alpha, return TRUE
  64.     cpi    'Z'+1
  65.     rc            ;upper-case alpha, return TRUE
  66.     dcx    h
  67.     ret            ;else return FALSE
  68.     ENDFUNC    ISALPHA
  69. ;
  70. ;
  71.     FUNCTION    ISUPPER
  72.     call    arghak 
  73.     lda    ARG1
  74.     lxi    h,0
  75.     cpi    'A'
  76.     rc            ;less than 'A'
  77.     cpi    'Z'+1
  78.     rnc            ;greater than 'Z'
  79.     inx    h
  80.     ret            ;else is upper-case
  81.     ENDFUNC    ISUPPER
  82. ;
  83. ;
  84.     FUNCTION    ISLOWER
  85.     call    arghak 
  86.     lda    ARG1
  87.     lxi    h,0
  88.     cpi    'a'
  89.     rc            ;less than 'a'
  90.     cpi    'z'+1
  91.     rnc            ;greater than 'z'
  92.     inx    h
  93.     ret            ;else is lower case
  94.     ENDFUNC    ISLOWER
  95. ;
  96. ;
  97.     FUNCTION    ISDIGIT
  98.     call    arghak 
  99.     lda    ARG1
  100.     lxi    h,0
  101.     cpi    '0'
  102.     rc            ;less than '0'
  103.     cpi    '9'+1
  104.     rnc            ;greater than '9'
  105.     inx    h
  106.     ret            ;else is decimal digit
  107.     ENDFUNC    ISDIGIT
  108. ;
  109. ;
  110.     FUNCTION    ISSPACE
  111.     call    arghak 
  112.     lda    ARG1
  113.     lxi    h,1
  114.     cpi    BLANK
  115.     rz            ;equals ' '
  116.     cpi    TAB
  117.     rz            ;equals tab
  118.     cpi    NEWLINE
  119.     rz            ;equals newline
  120.     dcx    h
  121.     ret            ;else is non-space
  122.     ENDFUNC    ISSPACE
  123. ;
  124. ;
  125.     FUNCTION    TOUPPER
  126.     call    arghak 
  127.     lda    ARG1
  128.     mov    l,a
  129.     mvi    h,0        ;setup to return character unchanged
  130.     cpi    'a'
  131.     rc            ;less than 'a'
  132.     cpi    'z'+1
  133.     rnc            ;greater than 'z'
  134.     adi    'A'-'a'        ;else is lower-case, convert it
  135.     mov    l,a
  136.     ret
  137.     ENDFUNC    TOUPPER
  138. ;
  139. ;
  140.     FUNCTION    TOLOWER
  141.     call    arghak 
  142.     lda    ARG1
  143.     mov    l,a
  144.     mvi    h,0        ;setup to return character unchanged
  145.     cpi    'A'
  146.     rc            ;less than 'A'
  147.     cpi    'Z'+1
  148.     rnc            ;greater than 'Z'
  149.     adi    'a'-'A'        ;else is upper-case, convert it
  150.     mov    l,a
  151.     ret
  152.     ENDFUNC    TOLOWER
  153. ;
  154. ;
  155.     FUNCTION    ATOB
  156.     call    arghak 
  157.     lda    ARG1
  158.     sbi    '0'
  159.     JC    nogood        ;illegal char below '0'
  160.     cpi    10
  161.     JC    gotit        ;character between '0' and '9'
  162.     sbi    'A' - '0'
  163.     JC    nogood        ;illegal char between '9' and 'A'
  164.     cpi    26
  165.     JC    gotalph        ;character between 'A' and 'Z'
  166.     sbi    'a' - 'A'
  167.     JC    nogood        ;illegal char between 'Z' and 'a'
  168.     cpi    26
  169.     JNC    nogood        ;illegal char above 'z'
  170. gotalph:;have valid alpha, must be offset by 10
  171.     adi    10
  172. gotit:    ;have valid alpha-numeric char, converted value in A
  173.     lxi    h,ARG2
  174.     cmp    m
  175.     JNC    nogood        ;illegal char for specified base
  176.     mov    l,a
  177.     mvi    h,0
  178.     ret
  179. ;
  180. nogood:    ;illegal character or out of range for specified base
  181.     lxi    h,-1
  182.     ret
  183.     ENDFUNC    ATOB
  184. ;
  185. ;
  186.     end
  187.