home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / epmmac.zip / EPMDBCS.E < prev    next >
Text File  |  1993-04-07  |  3KB  |  95 lines

  1. definit
  2.    universal country
  3.    universal countryinfo
  4.    universal codepage
  5.    universal dbcsvec
  6.    universal ondbcs
  7.  
  8. compile if EPM32
  9.    inp=copies(\0, 8)
  10.    countryinfo=copies(\0, 44)
  11.    ret=\0\0\0\0
  12.    call dynalink32('NLS', '#5',        -- DOS32QueryCountryInfo
  13.                    atol(length(countryinfo))  ||
  14.                    address(inp)       ||
  15.                    address(countryinfo)       ||
  16.                    address(ret),
  17.                    2)
  18.    country=ltoa(leftstr(countryinfo,4),10)
  19.  
  20.    codepage = '????'; datalen = '????'
  21.    call dynalink32('DOSCALLS',            -- dynamic link library name
  22.                    '#291',                -- ordinal value for DOS32QueryCP
  23.                    atol(4)            ||  -- length of code page list
  24.                    address(codepage)  ||
  25.                    address(datalen),2)
  26.    codepage = ltoa(codepage,10)
  27.  
  28.    inp=copies(\0,8)
  29.    dbcsvec=copies(\0, 12)
  30.    call dynalink32('NLS', '#6',
  31.                    atol(length(dbcsvec)) ||
  32.                    address(inp)          ||
  33.                    address(dbcsvec),
  34.                    2)
  35.    ondbcs = leftstr(dbcsvec, 2) <> atoi(0)
  36. compile else
  37.    inp=atol(0)
  38.    countryinfo=copies(\0, 38)
  39.    ret=\0\0
  40.    call dynalink('NLS', 'DOSGETCTRYINFO',
  41.                  atoi(length(countryinfo)) ||
  42.                  address(inp)      ||
  43.                  address(countryinfo)      ||
  44.                  address(ret),
  45.                  1)
  46.    country=itoa(substr(countryinfo,1,2),10)
  47.    codepage=itoa(substr(countryinfo,3,2),10)
  48.  
  49.    inp=atol(0)
  50.    dbcsvec=copies(\0, 10)
  51.    call dynalink('NLS', 'DOSGETDBCSEV',
  52.                  atoi(length(dbcsvec)) ||
  53.                  address(inp)          ||
  54.                  address(dbcsvec),
  55.                  1)
  56.    ondbcs = leftstr(dbcsvec, 2) <> atoi(0)
  57. compile endif  -- EPM32
  58.  
  59. defproc isdbcs(c)
  60.    universal dbcsvec, ondbcs
  61.    if not ondbcs then
  62.       return 0
  63.    endif
  64.    c=leftstr(c,1)
  65.    for i = 1 to length(dbcsvec) by 2
  66.       if substr(dbcsvec,i,2)=atoi(0) then
  67.          leave
  68.       endif
  69.       if substr(dbcsvec, i, 1) <= c and c <= substr(dbcsvec, i + 1, 1) then
  70.          return 1
  71.       endif
  72.    endfor
  73.    return 0
  74.  
  75. defproc whatisit(s, p)
  76.    l = length(s)
  77.    i = 1
  78.    while i <= l do
  79.       if i > p then
  80.          leave
  81.       endif
  82.       if isdbcs(substr(s, i, 1)) then
  83.          if i = p then
  84.             return 1 -- DBCS 1st
  85.          elseif i + 1 = p then
  86.             return 2 -- DBCS 2nd
  87.          else
  88.             i = i + 2
  89.          endif
  90.       else
  91.          i = i + 1
  92.       endif
  93.    endwhile
  94.    return 0 -- SBCS
  95.