home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / NDK / NDK_3.5 / Examples / Locale / Languages / english.language.asm < prev    next >
Encoding:
Assembly Source File  |  1999-10-30  |  37.5 KB  |  1,742 lines

  1. *
  2. * COPYRIGHT:
  3. *
  4. *   Unless otherwise noted, all files are Copyright (c) 1999 Amiga, Inc.
  5. *   All rights reserved.
  6. *
  7. * DISCLAIMER:
  8. *
  9. *   This software is provided "as is". No representations or warranties
  10. *   are made with respect to the accuracy, reliability, performance,
  11. *   currentness, or operation of this software, and all use is at your
  12. *   own risk. Neither Amiga nor the authors assume any responsibility
  13. *   or liability whatsoever with respect to your use of this software.
  14. *
  15.  
  16.     SECTION    text,code
  17.  
  18. ;---------------------------------------------------------------------------
  19.  
  20.     NOLIST
  21.  
  22.     INCLUDE    "exec/types.i"
  23.     INCLUDE    "exec/libraries.i"
  24.     INCLUDE    "exec/lists.i"
  25.     INCLUDE    "exec/alerts.i"
  26.     INCLUDE    "exec/initializers.i"
  27.     INCLUDE    "exec/resident.i"
  28.     INCLUDE    "exec/macros.i"
  29.     INCLUDE    "libraries/dos.i"
  30.  
  31.     INCLUDE "locale/languagedrivers.i"
  32.  
  33.     INCLUDE    "english.language_rev.i"
  34.  
  35.     LIST
  36.  
  37. ;---------------------------------------------------------------------------
  38.  
  39.     XDEF    LibInit
  40.     XDEF    LibOpen
  41.     XDEF    LibClose
  42.     XDEF    LibExpunge
  43.     XDEF    LibReserved
  44.  
  45. ;---------------------------------------------------------------------------
  46.  
  47.    STRUCTURE DriverBase,LIB_SIZE
  48.     ULONG   db_SegList
  49.     ULONG   db_SysLib
  50.    LABEL DriverBase_SIZEOF
  51.  
  52. ;---------------------------------------------------------------------------
  53.  
  54. ; First executable location, must return an error to the caller
  55. Start:
  56.     moveq   #-1,d0
  57.     rts
  58.  
  59. ;-----------------------------------------------------------------------
  60.  
  61. ROMTAG:
  62.     DC.W    RTC_MATCHWORD        ; UWORD RT_MATCHWORD
  63.     DC.L    ROMTAG            ; APTR  RT_MATCHTAG
  64.     DC.L    ENDTAG            ; APTR  RT_ENDSKIP
  65.     DC.B    RTF_AUTOINIT        ; UBYTE RT_FLAGS
  66.     DC.B    VERSION            ; UBYTE RT_VERSION
  67.     DC.B    NT_LIBRARY        ; UBYTE RT_TYPE
  68.     DC.B    LibPriority        ; BYTE  RT_PRI
  69.     DC.L    LibName            ; APTR  RT_NAME
  70.     DC.L    LibId            ; APTR  RT_IDSTRING
  71.     DC.L    LibInitTable        ; APTR  RT_INIT
  72.  
  73. LibName     DC.B "english.language",0
  74. LibId       VSTRING
  75. LibPriority EQU -100
  76.  
  77.     CNOP    0,4
  78.  
  79. LibInitTable:
  80.     DC.L    DriverBase_SIZEOF ; size of library base data space
  81.     DC.L    LibFuncTable
  82.     DC.L    LibDataTable
  83.     DC.L    LibInit
  84.  
  85. LibFuncTable:
  86.     DC.W    -1
  87.     DC.W    LibOpen-LibFuncTable
  88.     DC.W    LibClose-LibFuncTable
  89.     DC.W    LibExpunge-LibFuncTable
  90.     DC.W    LibReserved-LibFuncTable
  91.  
  92.     DC.W    GetDriverInfo-LibFuncTable    ; GetDriverInfo()
  93.     DC.W    ConvToLower-LibFuncTable    ; ConvToLower()
  94.     DC.W    ConvToUpper-LibFuncTable    ; ConvToUpper()
  95.     DC.W    GetCodeSet-LibFuncTable        ; GetCodeSet()
  96.     DC.W    GetLocaleStr-LibFuncTable    ; GetLocaleStr()
  97.     DC.W    IsAlNum-LibFuncTable        ; IsAlNum()
  98.     DC.W    IsAlpha-LibFuncTable        ; IsAlpha()
  99.     DC.W    IsCntrl-LibFuncTable        ; IsCntrl()
  100.     DC.W    IsDigit-LibFuncTable        ; IsDigit()
  101.     DC.W    IsGraph-LibFuncTable        ; IsGraph()
  102.     DC.W    IsLower-LibFuncTable        ; IsLower()
  103.     DC.W    IsPrint-LibFuncTable        ; IsPrint()
  104.     DC.W    IsPunct-LibFuncTable        ; IsPunct()
  105.     DC.W    IsSpace-LibFuncTable        ; IsSpace()
  106.     DC.W    IsUpper-LibFuncTable        ; IsUpper()
  107.     DC.W    IsXDigit-LibFuncTable        ; IsXDigit()
  108.     DC.W    StrConvert-LibFuncTable        ; StrConvert()
  109.     DC.W    StrnCmp-LibFuncTable        ; StrnCmp()
  110.  
  111.     DC.W   -1
  112.  
  113. LibDataTable:
  114.     INITBYTE   LN_PRI,LibPriority
  115.     INITBYTE   LN_TYPE,NT_LIBRARY
  116.     INITLONG   LN_NAME,LibName
  117.     INITBYTE   LIB_FLAGS,(LIBF_SUMUSED!LIBF_CHANGED)
  118.     INITWORD   LIB_VERSION,VERSION
  119.     INITWORD   LIB_REVISION,REVISION
  120.     INITLONG   LIB_IDSTRING,LibId
  121.     DC.W       0
  122.  
  123.     CNOP    0,4
  124.  
  125. ;-----------------------------------------------------------------------
  126.  
  127. ; Library Init entry point called when library is first loaded in memory
  128. ; On entry, D0 points to library base, A0 has lib seglist, A6 has SysBase
  129. ; Returns 0 for failure or the library base for success.
  130. LibInit:
  131.     move.l    d0,a1
  132.         move.l    a0,db_SegList(a1)
  133.         move.l    a6,db_SysLib(a1)
  134.     rts
  135.  
  136. ;-----------------------------------------------------------------------
  137.  
  138. ; Library open entry point called every OpenLibrary()
  139. ; On entry, A6 has DriverBase, task switching is disabled
  140. ; Returns 0 for failure, or DriverBase for success.
  141. LibOpen:
  142.     addq.w    #1,LIB_OPENCNT(a6)
  143.     bclr    #LIBB_DELEXP,LIB_FLAGS(a6)
  144.     move.l    a6,d0
  145.     rts
  146.  
  147. ;-----------------------------------------------------------------------
  148.  
  149. ; Library close entry point called every CloseLibrary()
  150. ; On entry, A6 has DriverBase, task switching is disabled
  151. ; Returns 0 normally, or the library seglist when lib should be expunged
  152. ;   due to delayed expunge bit being set
  153. LibClose:
  154.     subq.w    #1,LIB_OPENCNT(a6)
  155.  
  156.     ; if delayed expunge bit set, then try to get rid of the library
  157.     btst    #LIBB_DELEXP,LIB_FLAGS(a6)
  158.     bne.s    CloseExpunge
  159.     moveq    #0,d0
  160.     rts
  161.  
  162. CloseExpunge:
  163.     ; if no library users, then just remove the library
  164.     tst.w    LIB_OPENCNT(a6)
  165.     beq.s    DoExpunge
  166.  
  167.     ; still some library users, so just return
  168.     moveq    #0,d0
  169.     rts
  170.  
  171. ;-----------------------------------------------------------------------
  172.  
  173. ; Library expunge entry point called whenever system memory is lacking
  174. ; On entry, A6 has LocaleBase, task switching is disabled
  175. ; Returns the library seglist if the library open count is 0, returns 0
  176. ; otherwise and sets the delayed expunge bit.
  177. LibExpunge:
  178.     tst.w    LIB_OPENCNT(a6)
  179.     beq.s    DoExpunge
  180.  
  181.     bset    #LIBB_DELEXP,LIB_FLAGS(a6)
  182.     moveq    #0,d0
  183.     rts
  184.  
  185. DoExpunge:
  186.     movem.l    d2/a5/a6,-(sp)
  187.     move.l    a6,a5
  188.     move.l    db_SysLib(a5),a6
  189.     move.l    db_SegList(a5),d2
  190.  
  191.     move.l  a5,a1
  192.     REMOVE
  193.  
  194.     move.l    a5,a1
  195.     moveq    #0,d0
  196.     move.w    LIB_NEGSIZE(a5),d0
  197.     sub.l    d0,a1
  198.     add.w    LIB_POSSIZE(a5),d0
  199.     JSRLIB    FreeMem
  200.  
  201.     move.l    d2,d0
  202.     movem.l    (sp)+,d2/a5/a6
  203.     rts
  204.  
  205. ;---------------------------------------------------------------------------
  206.  
  207. LibReserved:
  208.     moveq    #0,d0
  209.     rts
  210.  
  211. ;---------------------------------------------------------------------------
  212.  
  213. GetCodeSet:
  214.     moveq    #0,d0    ; that's what we need, codeset #0
  215.     rts
  216.  
  217. ;---------------------------------------------------------------------------
  218.  
  219. GetDriverInfo:
  220.     move.l    #ALL_FUNCS,d0
  221.     rts
  222.  
  223. ;---------------------------------------------------------------------------
  224.  
  225. *    result = StrnCmp(driver,string1,string2,length,type);
  226. *    D0               A0     A1      A2      D0     D1
  227. *
  228. *    LONG StrnCmp(struct DriverBase *,STRPTR,STRPTR,LONG,ULONG);
  229. *
  230.  
  231. StrnCmp:
  232.  
  233.     tst.l    d0            ; if length = 0, then exit
  234.     bne.s    Ascii
  235.     rts
  236.  
  237. Ascii:
  238.     tst.l    d1
  239.     bne.s    Collate1
  240.  
  241.     movem.l    a2/d2,-(sp)        ; save work registers
  242.     lea    LowerToUpper(pc),a0    ; conversion table address
  243.     moveq.l    #0,d2            ; clear all bits
  244. 1$:    move.b    (a1)+,d1        ; get next character from 1st string
  245.     move.b    (a2)+,d2        ; get next character from 2nd string
  246. 2$:    move.b    0(a0,d1.w),d1        ; get sort value
  247.     cmp.b    0(a0,d2.w),d1        ; compare chars
  248.     bne.s    4$            ; if they're not the same, exit loop
  249.     tst.b    d1            ; they're the same, now check if they are NULL
  250.     beq.s    3$            ; if they are NULL, then exit with a result of 0
  251.     subq.l    #1,d0            ; remove one from length
  252.     bne.s    1$            ; if length > 0
  253.     movem.l    (sp)+,a2/d2        ; restore saved registers
  254.     rts                ; bye
  255.  
  256. 3$:    moveq.l    #0,d0            ; strings are equal
  257.     movem.l    (sp)+,a2/d2        ; restore saved registers
  258.     rts                ; bye
  259.  
  260. 4$:    bhi.s    5$
  261.     moveq.l    #-1,d0
  262.     movem.l    (sp)+,a2/d2        ; restore saved registers
  263.     rts                ; bye
  264.  
  265. 5$:    moveq.l    #1,d0
  266.     movem.l    (sp)+,a2/d2        ; restore saved registers
  267.     rts                ; bye
  268.  
  269. Collate1:
  270.     subq.l    #1,d1
  271.     bne.s    Collate2
  272.  
  273.     movem.l    a2/d2,-(sp)        ; save work registers
  274.     lea    Collate1Table(pc),a0    ; conversion table address
  275.     moveq.l    #0,d2            ; clear all bits
  276. 1$:    move.b    (a1)+,d1        ; get next character from 1st string
  277.     move.b    (a2)+,d2        ; get next character from 2nd string
  278. 2$:    move.b    0(a0,d1.w),d1        ; get sort value
  279.     cmp.b    0(a0,d2.w),d1        ; compare chars
  280.     bne.s    4$            ; if they're not the same, exit loop
  281.     tst.b    d1            ; they're the same, now check if they are NULL
  282.     beq.s    3$            ; if they are NULL, then exit with a result of 0
  283.     subq.l    #1,d0            ; remove one from length
  284.     bne.s    1$            ; if length > 0
  285.     movem.l    (sp)+,a2/d2        ; restore saved registers
  286.     rts                ; bye
  287.  
  288. 3$:    moveq.l    #0,d0            ; strings are equal
  289.     movem.l    (sp)+,a2/d2        ; restore saved registers
  290.     rts                ; bye
  291.  
  292. 4$:    bhi.s    5$
  293.     moveq.l    #-1,d0
  294.     movem.l    (sp)+,a2/d2        ; restore saved registers
  295.     rts                ; bye
  296.  
  297. 5$:    moveq.l    #1,d0
  298.     movem.l    (sp)+,a2/d2        ; restore saved registers
  299.     rts                ; bye
  300.  
  301. Collate2:
  302.     subq.l    #1,d1
  303.     bne.s    Nothing
  304.  
  305.     movem.l    a2/d2/d3,-(sp)        ; save work registers
  306.     lea    Collate1Table(pc),a0    ; conversion table address
  307.     moveq.l    #0,d2            ; clear all bits
  308.     moveq.l    #0,d3
  309.  
  310. 1$:    move.b    (a1)+,d1        ; get next character from 1st string
  311.     beq.s    11$            ; if char is NULL, exit
  312.     move.b    (a2)+,d2        ; get next character from 2nd string
  313.     cmp.b    d2,d1            ; are the chars different
  314.     bne.s    10$            ; if so, then exit loop
  315.     subq.l    #1,d0            ; remove one from length
  316.     bne.s    1$            ; if length > 0
  317.     movem.l    (sp)+,a2/d2/d3        ; restore saved registers
  318.     rts                ; bye
  319.  
  320. 11$:    cmp.b    (a2)+,d1        ; are the chars different
  321.     bne.s    10$
  322.     movem.l    (sp)+,a2/d2/d3        ; restore saved registers
  323.     moveq.l    #0,d0
  324.     rts
  325.  
  326. 10$:    bhi.s    2$
  327.     moveq.l    #-1,d3
  328.     bra.s    4$
  329.  
  330. 2$:    moveq.l    #1,d3
  331.     bra.s    4$
  332.  
  333. 3$:     move.b    (a1)+,d1        ; get next character from 1st string
  334.     move.b    (a2)+,d2        ; get next character from 2nd string
  335. 4$:    move.b    0(a0,d1.w),d1        ; get sort value
  336.     cmp.b    0(a0,d2.w),d1        ; compare chars
  337.     bne.s    6$            ; if they're not the same, exit loop
  338.     tst.b    d1            ; they're the same, now check if they are NULL
  339.     beq.s    5$            ; if they are NULL, then exit with a result of 0
  340.     subq.l    #1,d0            ; remove one from length
  341.     bne.s    3$            ; if length > 0
  342.  
  343. 5$:    move.l    d3,d0            ; strings are equal
  344.     movem.l    (sp)+,a2/d2/d3        ; restore saved registers
  345.     rts                ; bye
  346.  
  347. 6$:    bhi.s    7$
  348.     moveq.l    #-1,d0
  349.     movem.l    (sp)+,a2/d2/d3        ; restore saved registers
  350.     rts                ; bye
  351.  
  352. 7$:    moveq.l    #1,d0
  353.     movem.l    (sp)+,a2/d2/d3        ; restore saved registers
  354.     rts                ; bye
  355.  
  356. Nothing:
  357.     moveq    #0,d0
  358.     rts
  359.  
  360.  
  361. ;---------------------------------------------------------------------------
  362.  
  363. *    length = StrConvert(driver,string,buffer,bufferSize,type);
  364. *    D0                  A0     A1     A2     D0         D1
  365. *
  366. *    ULONG StrConvert(struct DriverBase *,STRPTR,APTR,ULONG,ULONG);
  367. *
  368.  
  369. StrConvert:
  370.  
  371.     move.l    d0,-(sp)        ; save buffer size
  372.      bne.s    XAscii            ; if bufferSize > 0, keep going
  373.     addq.l    #4,sp            ; clear stack
  374.     rts
  375.  
  376. XAscii:
  377.     tst.l    d1            ; is d1 = 0?
  378.     bne.s    XCollate1        ; if not, then not SC_ASCII compare
  379.     move.l    a2,-(sp)        ; save a2 cause we need to use it
  380.     lea    LowerToUpper(pc),a0    ; conversion table
  381.     bra.s    XEndCollLoop        ; enter copy loop
  382.  
  383. XCollate1:
  384.     subq.l    #1,d1            ; remove 1 from compare type
  385.     bne.s    XCollate2        ; if d1 is not 0, then not SC_COLLATE1 compare
  386.     move.l    a2,-(sp)        ; save a2 cause we need to use it
  387.     lea    Collate1Table(pc),a0    ; conversion table
  388.     bra.s    XEndCollLoop        ; enter loop
  389.  
  390. XCollLoop:
  391.     move.b    (a1)+,d1        ; get next character
  392.     beq.s    XAfterCollLoop        ; if null, then exit
  393.     move.b    0(a0,d1.w),(a2)+    ; convert char to uppercase and put in dest array
  394. XEndCollLoop:
  395.     subq.l    #1,d0            ; remove one from bufferSize
  396.     bne.s    XCollLoop        ; if bufferSize > 0, keep looping
  397. XAfterCollLoop:
  398.     clr.b    (a2)            ; clear last byte
  399.     move.l    (sp)+,a2        ; restore original value
  400.     move.l    (sp)+,d1        ; obtain original bufferSize value
  401.     sub.l    d0,d1            ; subtract current bufferSize value
  402.     move.l    d1,d0            ; put result in d0
  403.     rts                ; bye
  404.  
  405. XCollate2:
  406.     subq.l    #1,d1
  407.     bne.s    XNothing
  408.     movem.l    a2/a3/d2,-(sp)        ; save these dudes for later
  409.  
  410.     ; get length of input string
  411.     move.l    a1,a0            ; address of string
  412. 0$:    tst.b    (a0)+
  413.     bne.s    0$
  414.     sub.l    a1,a0            ; length = adr of NUL - adr of start - 1
  415.     subq.l    #1,a0
  416.     move.l    a2,a3            ; a3 has dest buffer
  417.     add.l    a0,a3            ; a3 has dest buffer + length which is
  418.                     ; the second half of the buffer
  419.  
  420.     lea    Collate1Table(pc),a0    ; conversion table
  421.     bra.s    2$            ; enter loop
  422.  
  423. 1$:    move.b    (a1)+,d1        ; get next character
  424.     beq.s    3$            ; if null, then exit
  425.     move.b    0(a0,d1.w),d2         ; convert char to uppercase and put in d2
  426.     move.b  d2,(a2)+        ; move converted char to dest
  427.     cmp.b    d2,d1            ; does converted char match original?
  428.     beq.s    2$            ; if so, then forget it
  429.     move.b    d1,(a3)+        ; put original char in second half of buffer
  430.     subq.l    #1,d0            ; remove one from bufferSize
  431.     beq.s    3$
  432.  
  433. 2$:    subq.l    #1,d0            ; remove one from bufferSize
  434.     bne.s    1$            ; if bufferSize > 0, keep looping
  435.  
  436. 3$:    clr.b    (a3)            ; clear last byte
  437.     movem.l (sp)+,d2/a3/a2          ; restore original values
  438.     move.l    (sp)+,d1        ; obtain original bufferSize value
  439.     sub.l    d0,d1            ; subtract current bufferSize value
  440.     move.l    d1,d0            ; put result in d0
  441.     rts                ; bye
  442.  
  443. XNothing:
  444.     moveq    #0,d0
  445.     rts
  446.  
  447. Collate1Table:
  448. C000 DC.B   0
  449. C001 DC.B   1
  450. C002 DC.B   2
  451. C003 DC.B   3
  452. C004 DC.B   4
  453. C005 DC.B   5
  454. C006 DC.B   6
  455. C007 DC.B   7
  456. C008 DC.B   8
  457. C009 DC.B   9
  458. C010 DC.B   10
  459. C011 DC.B   11
  460. C012 DC.B   12
  461. C013 DC.B   13
  462. C014 DC.B   14
  463. C015 DC.B   15
  464. C016 DC.B   16
  465. C017 DC.B   17
  466. C018 DC.B   18
  467. C019 DC.B   19
  468. C020 DC.B   20
  469. C021 DC.B   21
  470. C022 DC.B   22
  471. C023 DC.B   23
  472. C024 DC.B   24
  473. C025 DC.B   25
  474. C026 DC.B   26
  475. C027 DC.B   27
  476. C028 DC.B   28
  477. C029 DC.B   29
  478. C030 DC.B   30
  479. C031 DC.B   31
  480. C032 DC.B   32  ; " "
  481. C033 DC.B   33  ; "!"
  482. C034 DC.B   34  ; '"'
  483. C035 DC.B   35  ; "#"
  484. C036 DC.B   36  ; "$"
  485. C037 DC.B   37  ; "%"
  486. C038 DC.B   38  ; "&"
  487. C039 DC.B   39  ; "'"
  488. C040 DC.B   40  ; "("
  489. C041 DC.B   41  ; ")"
  490. C042 DC.B   42  ; "*"
  491. C043 DC.B   43  ; "+"
  492. C044 DC.B   44  ; ","
  493. C045 DC.B   45  ; "-"
  494. C046 DC.B   46  ; "."
  495. C047 DC.B   47  ; "/"
  496. C048 DC.B   48  ; "0"
  497. C049 DC.B   49  ; "1"
  498. C050 DC.B   50  ; "2"
  499. C051 DC.B   51  ; "3"
  500. C052 DC.B   52  ; "4"
  501. C053 DC.B   53  ; "5"
  502. C054 DC.B   54  ; "6"
  503. C055 DC.B   55  ; "7"
  504. C056 DC.B   56  ; "8"
  505. C057 DC.B   57  ; "9"
  506. C058 DC.B   58  ; ":"
  507. C059 DC.B   59  ; ";"
  508. C060 DC.B   60  ; "<"
  509. C061 DC.B   61  ; "="
  510. C062 DC.B   62  ; ">"
  511. C063 DC.B   63  ; "?"
  512. C064 DC.B   64  ; "@"
  513. C065 DC.B   65  ; "A"
  514. C066 DC.B   66  ; "B"
  515. C067 DC.B   67  ; "C"
  516. C068 DC.B   68  ; "D"
  517. C069 DC.B   69  ; "E"
  518. C070 DC.B   70  ; "F"
  519. C071 DC.B   71  ; "G"
  520. C072 DC.B   72  ; "H"
  521. C073 DC.B   73  ; "I"
  522. C074 DC.B   74  ; "J"
  523. C075 DC.B   75  ; "K"
  524. C076 DC.B   76  ; "L"
  525. C077 DC.B   77  ; "M"
  526. C078 DC.B   78  ; "N"
  527. C079 DC.B   79  ; "O"
  528. C080 DC.B   80  ; "P"
  529. C081 DC.B   81  ; "Q"
  530. C082 DC.B   82  ; "R"
  531. C083 DC.B   83  ; "S"
  532. C084 DC.B   84  ; "T"
  533. C085 DC.B   85  ; "U"
  534. C086 DC.B   86  ; "V"
  535. C087 DC.B   87  ; "W"
  536. C088 DC.B   88  ; "X"
  537. C089 DC.B   89  ; "Y"
  538. C090 DC.B   90  ; "Z"
  539. C091 DC.B   91  ; "["
  540. C092 DC.B   92  ; "\"
  541. C093 DC.B   93  ; "]"
  542. C094 DC.B   94  ; "^"
  543. C095 DC.B   95  ; "_"
  544. C096 DC.B   96  ; "`"
  545. C097 DC.B   65  ; "a"
  546. C098 DC.B   66  ; "b"
  547. C099 DC.B   67  ; "c"
  548. C100 DC.B   68  ; "d"
  549. C101 DC.B   69  ; "e"
  550. C102 DC.B   70  ; "f"
  551. C103 DC.B   71  ; "g"
  552. C104 DC.B   72  ; "h"
  553. C105 DC.B   73  ; "i"
  554. C106 DC.B   74  ; "j"
  555. C107 DC.B   75  ; "k"
  556. C108 DC.B   76  ; "l"
  557. C109 DC.B   77  ; "m"
  558. C110 DC.B   78  ; "n"
  559. C111 DC.B   79  ; "o"
  560. C112 DC.B   80  ; "p"
  561. C113 DC.B   81  ; "q"
  562. C114 DC.B   82  ; "r"
  563. C115 DC.B   83  ; "s"
  564. C116 DC.B   84  ; "t"
  565. C117 DC.B   85  ; "u"
  566. C118 DC.B   86  ; "v"
  567. C119 DC.B   87  ; "w"
  568. C120 DC.B   88  ; "x"
  569. C121 DC.B   89  ; "y"
  570. C122 DC.B   90  ; "z"
  571. C123 DC.B   97  ; "{"
  572. C124 DC.B   98  ; "|"
  573. C125 DC.B   99  ; "}"
  574. C126 DC.B   100 ; "~"
  575. C127 DC.B   101 ; DEL
  576. C128 DC.B   224
  577. C129 DC.B   225
  578. C130 DC.B   226
  579. C131 DC.B   227
  580. C132 DC.B   228
  581. C133 DC.B   229
  582. C134 DC.B   230
  583. C135 DC.B   231
  584. C136 DC.B   232
  585. C137 DC.B   233
  586. C138 DC.B   234
  587. C139 DC.B   235
  588. C140 DC.B   236
  589. C141 DC.B   237
  590. C142 DC.B   238
  591. C143 DC.B   239
  592. C144 DC.B   240
  593. C145 DC.B   241
  594. C146 DC.B   242
  595. C147 DC.B   243
  596. C148 DC.B   244
  597. C149 DC.B   245
  598. C150 DC.B   246
  599. C151 DC.B   247
  600. C152 DC.B   248
  601. C153 DC.B   249
  602. C154 DC.B   250
  603. C155 DC.B   251
  604. C156 DC.B   252
  605. C157 DC.B   253
  606. C158 DC.B   254
  607. C159 DC.B   255
  608. C160 DC.B   32  ; " " (hard space)
  609. C161 DC.B   33  ; "¡"
  610. C162 DC.B   36  ; "¢"
  611. C163 DC.B   36  ; "£"
  612. C164 DC.B   103 ; "¤"
  613. C165 DC.B   104 ; "¥"
  614. C166 DC.B   105 ; "¦"
  615. C167 DC.B   83  ; "§"
  616. C168 DC.B   106 ; "¨"
  617. C169 DC.B   107 ; "©"
  618. C170 DC.B   108 ; "ª"
  619. C171 DC.B   34  ; "«"
  620. C172 DC.B   109 ; "¬"
  621. C173 DC.B   110 ; "­"
  622. C174 DC.B   111 ; "®"
  623. C175 DC.B   112 ; "¯"
  624. C176 DC.B   113 ; "°"
  625. C177 DC.B   114 ; "±"
  626. C178 DC.B   115 ; "²"
  627. C179 DC.B   116 ; "³"
  628. C180 DC.B   117 ; "´"
  629. C181 DC.B   118 ; "µ"
  630. C182 DC.B   119 ; "¶"
  631. C183 DC.B   120 ; "·"
  632. C184 DC.B   121 ; "¸"
  633. C185 DC.B   122 ; "¹"
  634. C186 DC.B   123 ; "º"
  635. C187 DC.B   34  ; "»"
  636. C188 DC.B   124 ; "¼"
  637. C189 DC.B   125 ; "½"
  638. C190 DC.B   126 ; "¾"
  639. C191 DC.B   63  ; "¿"
  640. C192 DC.B   65  ; "À"
  641. C193 DC.B   65  ; "Á"
  642. C194 DC.B   65  ; "Â"
  643. C195 DC.B   65  ; "Ã"
  644. C196 DC.B   65  ; "Ä"
  645. C197 DC.B   65  ; "Å"
  646. C198 DC.B   65  ; "Æ"
  647. C199 DC.B   67  ; "Ç"
  648. C200 DC.B   69  ; "È"
  649. C201 DC.B   69  ; "É"
  650. C202 DC.B   69  ; "Ê"
  651. C203 DC.B   69  ; "Ë"
  652. C204 DC.B   73  ; "Ì"
  653. C205 DC.B   73  ; "Í"
  654. C206 DC.B   73  ; "Î"
  655. C207 DC.B   73  ; "Ï"
  656. C208 DC.B   68  ; "Ð"
  657. C209 DC.B   78  ; "Ñ"
  658. C210 DC.B   79  ; "Ò"
  659. C211 DC.B   79  ; "Ó"
  660. C212 DC.B   79  ; "Ô"
  661. C213 DC.B   79  ; "Õ"
  662. C214 DC.B   79  ; "Ö"
  663. C215 DC.B   42  ; "×"
  664. C216 DC.B   79  ; "Ø"
  665. C217 DC.B   85  ; "Ù"
  666. C218 DC.B   85  ; "Ú"
  667. C219 DC.B   85  ; "Û"
  668. C220 DC.B   85  ; "Ü"
  669. C221 DC.B   89  ; "Ý"
  670. C222 DC.B   80  ; "Þ"
  671. C223 DC.B   89  ; "ß"
  672. C224 DC.B   65  ; "à"
  673. C225 DC.B   65  ; "á"
  674. C226 DC.B   65  ; "â"
  675. C227 DC.B   65  ; "ã"
  676. C228 DC.B   65  ; "ä"
  677. C229 DC.B   65  ; "å"
  678. C230 DC.B   65  ; "æ"
  679. C231 DC.B   67  ; "ç"
  680. C232 DC.B   69  ; "è"
  681. C233 DC.B   69  ; "é"
  682. C234 DC.B   69  ; "ê"
  683. C235 DC.B   69  ; "ë"
  684. C236 DC.B   73  ; "ì"
  685. C237 DC.B   73  ; "í"
  686. C238 DC.B   73  ; "î"
  687. C239 DC.B   73  ; "ï"
  688. C240 DC.B   68  ; "ð"
  689. C241 DC.B   78  ; "ñ"
  690. C242 DC.B   79  ; "ò"
  691. C243 DC.B   79  ; "ó"
  692. C244 DC.B   79  ; "ô"
  693. C245 DC.B   79  ; "õ"
  694. C246 DC.B   79  ; "ö"
  695. C247 DC.B   47  ; "÷"
  696. C248 DC.B   79  ; "ø"
  697. C249 DC.B   85  ; "ù"
  698. C250 DC.B   85  ; "ú"
  699. C251 DC.B   85  ; "û"
  700. C252 DC.B   85  ; "ü"
  701. C253 DC.B   89  ; "ý"
  702. C254 DC.B   80  ; "þ"
  703. C255 DC.B   89  ; "ÿ"
  704.  
  705. ;---------------------------------------------------------------------------
  706.  
  707. *    char = ConvToUpper(driver,character);
  708. *    D0               A0     D0
  709. *
  710. *    ULONG ConvToUpper(struct DriverBase *,ULONG);
  711. *
  712. *   NOTE
  713. *    This function requires a full 32-bit character be passed-in in order
  714. *    to support multi-byte character sets.
  715. *
  716.  
  717. ConvToUpper:
  718.     move.b    LowerToUpper(pc,d0.w),d0
  719.     rts
  720.  
  721. LowerToUpper:
  722. L000 DC.B    0
  723. L001 DC.B    1
  724. L002 DC.B    2
  725. L003 DC.B    3
  726. L004 DC.B    4
  727. L005 DC.B    5
  728. L006 DC.B    6
  729. L007 DC.B    7
  730. L008 DC.B    8
  731. L009 DC.B    9
  732. L010 DC.B    10
  733. L011 DC.B    11
  734. L012 DC.B    12
  735. L013 DC.B    13
  736. L014 DC.B    14
  737. L015 DC.B    15
  738. L016 DC.B    16
  739. L017 DC.B    17
  740. L018 DC.B    18
  741. L019 DC.B    19
  742. L020 DC.B    20
  743. L021 DC.B    21
  744. L022 DC.B    22
  745. L023 DC.B    23
  746. L024 DC.B    24
  747. L025 DC.B    25
  748. L026 DC.B    26
  749. L027 DC.B    27
  750. L028 DC.B    28
  751. L029 DC.B    29
  752. L030 DC.B    30
  753. L031 DC.B    31
  754. L032 DC.B    " "
  755. L033 DC.B    "!"
  756. L034 DC.B    '"'
  757. L035 DC.B    "#"
  758. L036 DC.B       "$"
  759. L037 DC.B       "%"
  760. L038 DC.B       "&"
  761. L039 DC.B       "'"
  762. L040 DC.B       "("
  763. L041 DC.B       ")"
  764. L042 DC.B       "*"
  765. L043 DC.B       "+"
  766. L044 DC.B       ","
  767. L045 DC.B       "-"
  768. L046 DC.B       "."
  769. L047 DC.B       "/"
  770. L048 DC.B       "0"
  771. L049 DC.B       "1"
  772. L050 DC.B       "2"
  773. L051 DC.B       "3"
  774. L052 DC.B       "4"
  775. L053 DC.B       "5"
  776. L054 DC.B       "6"
  777. L055 DC.B       "7"
  778. L056 DC.B       "8"
  779. L057 DC.B       "9"
  780. L058 DC.B       ":"
  781. L059 DC.B       ";"
  782. L060 DC.B       "<"
  783. L061 DC.B       "="
  784. L062 DC.B       ">"
  785. L063 DC.B       "?"
  786. L064 DC.B       "@"
  787. L065 DC.B       "A"
  788. L066 DC.B       "B"
  789. L067 DC.B       "C"
  790. L068 DC.B       "D"
  791. L069 DC.B       "E"
  792. L070 DC.B       "F"
  793. L071 DC.B       "G"
  794. L072 DC.B       "H"
  795. L073 DC.B       "I"
  796. L074 DC.B       "J"
  797. L075 DC.B       "K"
  798. L076 DC.B       "L"
  799. L077 DC.B       "M"
  800. L078 DC.B       "N"
  801. L079 DC.B       "O"
  802. L080 DC.B       "P"
  803. L081 DC.B       "Q"
  804. L082 DC.B       "R"
  805. L083 DC.B       "S"
  806. L084 DC.B       "T"
  807. L085 DC.B       "U"
  808. L086 DC.B       "V"
  809. L087 DC.B       "W"
  810. L088 DC.B       "X"
  811. L089 DC.B       "Y"
  812. L090 DC.B       "Z"
  813. L091 DC.B       "["
  814. L092 DC.B       "\"
  815. L093 DC.B       "]"
  816. L094 DC.B       "^"
  817. L095 DC.B       "_"
  818. L096 DC.B       "`"
  819. L097 DC.B       "A"
  820. L098 DC.B       "B"
  821. L099 DC.B       "C"
  822. L100 DC.B       "D"
  823. L101 DC.B       "E"
  824. L102 DC.B       "F"
  825. L103 DC.B       "G"
  826. L104 DC.B       "H"
  827. L105 DC.B       "I"
  828. L106 DC.B       "J"
  829. L107 DC.B       "K"
  830. L108 DC.B       "L"
  831. L109 DC.B       "M"
  832. L110 DC.B       "N"
  833. L111 DC.B       "O"
  834. L112 DC.B       "P"
  835. L113 DC.B       "Q"
  836. L114 DC.B       "R"
  837. L115 DC.B       "S"
  838. L116 DC.B       "T"
  839. L117 DC.B       "U"
  840. L118 DC.B       "V"
  841. L119 DC.B       "W"
  842. L120 DC.B       "X"
  843. L121 DC.B       "Y"
  844. L122 DC.B       "Z"
  845. L123 DC.B       "{"
  846. L124 DC.B       "|"
  847. L125 DC.B       "}"
  848. L126 DC.B       "~"
  849. L127 DC.B    127
  850. L128 DC.B    128
  851. L129 DC.B    129
  852. L130 DC.B    130
  853. L131 DC.B    131
  854. L132 DC.B    132
  855. L133 DC.B    133
  856. L134 DC.B    134
  857. L135 DC.B    135
  858. L136 DC.B    136
  859. L137 DC.B    137
  860. L138 DC.B    138
  861. L139 DC.B    139
  862. L140 DC.B    140
  863. L141 DC.B    141
  864. L142 DC.B    142
  865. L143 DC.B    143
  866. L144 DC.B    144
  867. L145 DC.B    145
  868. L146 DC.B    146
  869. L147 DC.B    147
  870. L148 DC.B    148
  871. L149 DC.B    149
  872. L150 DC.B    150
  873. L151 DC.B    151
  874. L152 DC.B    152
  875. L153 DC.B    153
  876. L154 DC.B    154
  877. L155 DC.B    155
  878. L156 DC.B    156
  879. L157 DC.B    157
  880. L158 DC.B    158
  881. L159 DC.B    159
  882. L160 DC.B       " "
  883. L161 DC.B       "¡"
  884. L162 DC.B       "¢"
  885. L163 DC.B       "£"
  886. L164 DC.B       "¤"
  887. L165 DC.B       "¥"
  888. L166 DC.B       "¦"
  889. L167 DC.B       "§"
  890. L168 DC.B       "¨"
  891. L169 DC.B       "©"
  892. L170 DC.B       "ª"
  893. L171 DC.B       "«"
  894. L172 DC.B       "¬"
  895. L173 DC.B       "­"
  896. L174 DC.B       "®"
  897. L175 DC.B       "¯"
  898. L176 DC.B       "°"
  899. L177 DC.B       "±"
  900. L178 DC.B       "²"
  901. L179 DC.B       "³"
  902. L180 DC.B       "´"
  903. L181 DC.B       "µ"
  904. L182 DC.B       "¶"
  905. L183 DC.B       "·"
  906. L184 DC.B       "¸"
  907. L185 DC.B       "¹"
  908. L186 DC.B       "º"
  909. L187 DC.B       "»"
  910. L188 DC.B       "¼"
  911. L189 DC.B       "½"
  912. L190 DC.B       "¾"
  913. L191 DC.B       "¿"
  914. L192 DC.B       "À"
  915. L193 DC.B       "Á"
  916. L194 DC.B       "Â"
  917. L195 DC.B       "Ã"
  918. L196 DC.B       "Ä"
  919. L197 DC.B       "Å"
  920. L198 DC.B       "Æ"
  921. L199 DC.B       "Ç"
  922. L200 DC.B       "È"
  923. L201 DC.B       "É"
  924. L202 DC.B       "Ê"
  925. L203 DC.B       "Ë"
  926. L204 DC.B       "Ì"
  927. L205 DC.B       "Í"
  928. L206 DC.B       "Î"
  929. L207 DC.B       "Ï"
  930. L208 DC.B       "Ð"
  931. L209 DC.B       "Ñ"
  932. L210 DC.B       "Ò"
  933. L211 DC.B       "Ó"
  934. L212 DC.B       "Ô"
  935. L213 DC.B       "Õ"
  936. L214 DC.B       "Ö"
  937. L215 DC.B       "×"
  938. L216 DC.B       "Ø"
  939. L217 DC.B       "Ù"
  940. L218 DC.B       "Ú"
  941. L219 DC.B       "Û"
  942. L220 DC.B       "Ü"
  943. L221 DC.B       "Ý"
  944. L222 DC.B       "Þ"
  945. L223 DC.B       "ß"
  946. L224 DC.B       "À"
  947. L225 DC.B       "Á"
  948. L226 DC.B       "Â"
  949. L227 DC.B       "Ã"
  950. L228 DC.B       "Ä"
  951. L229 DC.B       "Å"
  952. L230 DC.B       "Æ"
  953. L231 DC.B       "Ç"
  954. L232 DC.B       "È"
  955. L233 DC.B       "É"
  956. L234 DC.B       "Ê"
  957. L235 DC.B       "Ë"
  958. L236 DC.B       "Ì"
  959. L237 DC.B       "Í"
  960. L238 DC.B       "Î"
  961. L239 DC.B       "Ï"
  962. L240 DC.B       "Ð"
  963. L241 DC.B       "Ñ"
  964. L242 DC.B       "Ò"
  965. L243 DC.B       "Ó"
  966. L244 DC.B       "Ô"
  967. L245 DC.B       "Õ"
  968. L246 DC.B       "Ö"
  969. L247 DC.B       "×"
  970. L248 DC.B       "Ø"
  971. L249 DC.B       "Ù"
  972. L250 DC.B       "Ú"
  973. L251 DC.B       "Û"
  974. L252 DC.B       "Ü"
  975. L253 DC.B       "Ý"
  976. L254 DC.B       "Þ"
  977. L255 DC.B       "ÿ"
  978.  
  979. ;---------------------------------------------------------------------------
  980.  
  981. *    char = ConvToLower(driver,character);
  982. *    D0               A0     D0
  983. *
  984. *    ULONG ConvToLower(struct DriverBase *,ULONG);
  985. *
  986. *   NOTE
  987. *    This function requires a full 32-bit character be passed-in in order
  988. *    to support multi-byte character sets.
  989. *
  990.  
  991. ConvToLower:
  992.     move.b    UpperToLower(pc,d0.w),d0
  993.     rts
  994.  
  995. UpperToLower:
  996. U000 DC.B    0
  997. U001 DC.B    1
  998. U002 DC.B    2
  999. U003 DC.B    3
  1000. U004 DC.B    4
  1001. U005 DC.B    5
  1002. U006 DC.B    6
  1003. U007 DC.B    7
  1004. U008 DC.B    8
  1005. U009 DC.B    9
  1006. U010 DC.B    10
  1007. U011 DC.B    11
  1008. U012 DC.B    12
  1009. U013 DC.B    13
  1010. U014 DC.B    14
  1011. U015 DC.B    15
  1012. U016 DC.B    16
  1013. U017 DC.B    17
  1014. U018 DC.B    18
  1015. U019 DC.B    19
  1016. U020 DC.B    20
  1017. U021 DC.B    21
  1018. U022 DC.B    22
  1019. U023 DC.B    23
  1020. U024 DC.B    24
  1021. U025 DC.B    25
  1022. U026 DC.B    26
  1023. U027 DC.B    27
  1024. U028 DC.B    28
  1025. U029 DC.B    29
  1026. U030 DC.B    30
  1027. U031 DC.B    31
  1028. U032 DC.B    " "
  1029. U033 DC.B    "!"
  1030. U034 DC.B    '"'
  1031. U035 DC.B    "#"
  1032. U036 DC.B       "$"
  1033. U037 DC.B       "%"
  1034. U038 DC.B       "&"
  1035. U039 DC.B       "'"
  1036. U040 DC.B       "("
  1037. U041 DC.B       ")"
  1038. U042 DC.B       "*"
  1039. U043 DC.B       "+"
  1040. U044 DC.B       ","
  1041. U045 DC.B       "-"
  1042. U046 DC.B       "."
  1043. U047 DC.B       "/"
  1044. U048 DC.B       "0"
  1045. U049 DC.B       "1"
  1046. U050 DC.B       "2"
  1047. U051 DC.B       "3"
  1048. U052 DC.B       "4"
  1049. U053 DC.B       "5"
  1050. U054 DC.B       "6"
  1051. U055 DC.B       "7"
  1052. U056 DC.B       "8"
  1053. U057 DC.B       "9"
  1054. U058 DC.B       ":"
  1055. U059 DC.B       ";"
  1056. U060 DC.B       "<"
  1057. U061 DC.B       "="
  1058. U062 DC.B       ">"
  1059. U063 DC.B       "?"
  1060. U064 DC.B       "@"
  1061. U065 DC.B       "a"
  1062. U066 DC.B       "b"
  1063. U067 DC.B       "c"
  1064. U068 DC.B       "d"
  1065. U069 DC.B       "e"
  1066. U070 DC.B       "f"
  1067. U071 DC.B       "g"
  1068. U072 DC.B       "h"
  1069. U073 DC.B       "i"
  1070. U074 DC.B       "j"
  1071. U075 DC.B       "k"
  1072. U076 DC.B       "l"
  1073. U077 DC.B       "m"
  1074. U078 DC.B       "n"
  1075. U079 DC.B       "o"
  1076. U080 DC.B       "p"
  1077. U081 DC.B       "q"
  1078. U082 DC.B       "r"
  1079. U083 DC.B       "s"
  1080. U084 DC.B       "t"
  1081. U085 DC.B       "u"
  1082. U086 DC.B       "v"
  1083. U087 DC.B       "w"
  1084. U088 DC.B       "x"
  1085. U089 DC.B       "y"
  1086. U090 DC.B       "z"
  1087. U091 DC.B       "["
  1088. U092 DC.B       "\"
  1089. U093 DC.B       "]"
  1090. U094 DC.B       "^"
  1091. U095 DC.B       "_"
  1092. U096 DC.B       "`"
  1093. U097 DC.B       "a"
  1094. U098 DC.B       "b"
  1095. U099 DC.B       "c"
  1096. U100 DC.B       "d"
  1097. U101 DC.B       "e"
  1098. U102 DC.B       "f"
  1099. U103 DC.B       "g"
  1100. U104 DC.B       "h"
  1101. U105 DC.B       "i"
  1102. U106 DC.B       "j"
  1103. U107 DC.B       "k"
  1104. U108 DC.B       "l"
  1105. U109 DC.B       "m"
  1106. U110 DC.B       "n"
  1107. U111 DC.B       "o"
  1108. U112 DC.B       "p"
  1109. U113 DC.B       "q"
  1110. U114 DC.B       "r"
  1111. U115 DC.B       "s"
  1112. U116 DC.B       "t"
  1113. U117 DC.B       "u"
  1114. U118 DC.B       "v"
  1115. U119 DC.B       "w"
  1116. U120 DC.B       "x"
  1117. U121 DC.B       "y"
  1118. U122 DC.B       "z"
  1119. U123 DC.B       "{"
  1120. U124 DC.B       "|"
  1121. U125 DC.B       "}"
  1122. U126 DC.B       "~"
  1123. U127 DC.B    127
  1124. U128 DC.B    128
  1125. U129 DC.B    129
  1126. U130 DC.B    130
  1127. U131 DC.B    131
  1128. U132 DC.B    132
  1129. U133 DC.B    133
  1130. U134 DC.B    134
  1131. U135 DC.B    135
  1132. U136 DC.B    136
  1133. U137 DC.B    137
  1134. U138 DC.B    138
  1135. U139 DC.B    139
  1136. U140 DC.B    140
  1137. U141 DC.B    141
  1138. U142 DC.B    142
  1139. U143 DC.B    143
  1140. U144 DC.B    144
  1141. U145 DC.B    145
  1142. U146 DC.B    146
  1143. U147 DC.B    147
  1144. U148 DC.B    148
  1145. U149 DC.B    149
  1146. U150 DC.B    150
  1147. U151 DC.B    151
  1148. U152 DC.B    152
  1149. U153 DC.B    153
  1150. U154 DC.B    154
  1151. U155 DC.B    155
  1152. U156 DC.B    156
  1153. U157 DC.B    157
  1154. U158 DC.B    158
  1155. U159 DC.B    159
  1156. U160 DC.B       " "
  1157. U161 DC.B       "¡"
  1158. U162 DC.B       "¢"
  1159. U163 DC.B       "£"
  1160. U164 DC.B       "¤"
  1161. U165 DC.B       "¥"
  1162. U166 DC.B       "¦"
  1163. U167 DC.B       "§"
  1164. U168 DC.B       "¨"
  1165. U169 DC.B       "©"
  1166. U170 DC.B       "ª"
  1167. U171 DC.B       "«"
  1168. U172 DC.B       "¬"
  1169. U173 DC.B       "­"
  1170. U174 DC.B       "®"
  1171. U175 DC.B       "¯"
  1172. U176 DC.B       "°"
  1173. U177 DC.B       "±"
  1174. U178 DC.B       "²"
  1175. U179 DC.B       "³"
  1176. U180 DC.B       "´"
  1177. U181 DC.B       "µ"
  1178. U182 DC.B       "¶"
  1179. U183 DC.B       "·"
  1180. U184 DC.B       "¸"
  1181. U185 DC.B       "¹"
  1182. U186 DC.B       "º"
  1183. U187 DC.B       "»"
  1184. U188 DC.B       "¼"
  1185. U189 DC.B       "½"
  1186. U190 DC.B       "¾"
  1187. U191 DC.B       "¿"
  1188. U192 DC.B       "à"
  1189. U193 DC.B       "á"
  1190. U194 DC.B       "â"
  1191. U195 DC.B       "ã"
  1192. U196 DC.B       "ä"
  1193. U197 DC.B       "å"
  1194. U198 DC.B       "æ"
  1195. U199 DC.B       "ç"
  1196. U200 DC.B       "è"
  1197. U201 DC.B       "é"
  1198. U202 DC.B       "ê"
  1199. U203 DC.B       "ë"
  1200. U204 DC.B       "ì"
  1201. U205 DC.B       "í"
  1202. U206 DC.B       "î"
  1203. U207 DC.B       "ï"
  1204. U208 DC.B       "ð"
  1205. U209 DC.B       "ñ"
  1206. U210 DC.B       "ò"
  1207. U211 DC.B       "ó"
  1208. U212 DC.B       "ô"
  1209. U213 DC.B       "õ"
  1210. U214 DC.B       "ö"
  1211. U215 DC.B       "÷"
  1212. U216 DC.B       "ø"
  1213. U217 DC.B       "ù"
  1214. U218 DC.B       "ú"
  1215. U219 DC.B       "û"
  1216. U220 DC.B       "ü"
  1217. U221 DC.B       "ý"
  1218. U222 DC.B       "þ"
  1219. U223 DC.B       "ß"
  1220. U224 DC.B       "à"
  1221. U225 DC.B       "á"
  1222. U226 DC.B       "â"
  1223. U227 DC.B       "ã"
  1224. U228 DC.B       "ä"
  1225. U229 DC.B       "å"
  1226. U230 DC.B       "æ"
  1227. U231 DC.B       "ç"
  1228. U232 DC.B       "è"
  1229. U233 DC.B       "é"
  1230. U234 DC.B       "ê"
  1231. U235 DC.B       "ë"
  1232. U236 DC.B       "ì"
  1233. U237 DC.B       "í"
  1234. U238 DC.B       "î"
  1235. U239 DC.B       "ï"
  1236. U240 DC.B       "ð"
  1237. U241 DC.B       "ñ"
  1238. U242 DC.B       "ò"
  1239. U243 DC.B       "ó"
  1240. U244 DC.B       "ô"
  1241. U245 DC.B       "õ"
  1242. U246 DC.B       "ö"
  1243. U247 DC.B       "÷"
  1244. U248 DC.B       "ø"
  1245. U249 DC.B       "ù"
  1246. U250 DC.B       "ú"
  1247. U251 DC.B       "û"
  1248. U252 DC.B       "ü"
  1249. U253 DC.B       "ý"
  1250. U254 DC.B       "þ"
  1251. U255 DC.B       "ÿ"
  1252.  
  1253. ;---------------------------------------------------------------------------
  1254.  
  1255. *    state = IsXXXX(driver,character);
  1256. *    D0           A0     D0
  1257. *
  1258. *    BOOL IsXXXX(struct DriverBase *,ULONG);
  1259. *
  1260. *   NOTE
  1261. *    These functions require full 32-bit characters be passed-in in order
  1262. *    to support multi-byte character sets.
  1263. *
  1264.  
  1265. * Order of these flags are important!
  1266. CNTRL  EQU 0
  1267. XDIGIT EQU 1
  1268. SPACE  EQU 2
  1269. PUNCT  EQU 3
  1270. DIGIT  EQU 4
  1271. UPPER  EQU 5
  1272. LOWER  EQU 6
  1273.  
  1274. CNTRLF  EQU 1
  1275. XDIGITF EQU 2
  1276. SPACEF  EQU 4
  1277. PUNCTF  EQU 8
  1278. DIGITF  EQU 16
  1279. UPPERF  EQU 32
  1280. LOWERF  EQU 64
  1281.  
  1282. IsAlpha:
  1283.     moveq    #UPPERF,d1
  1284.     cmp.b    CharAttr(pc,d0.w),d1         ; >= UPPERF means either UPPER or LOWER
  1285.     sls    d0
  1286.     rts
  1287.  
  1288. IsAlNum:
  1289.     moveq    #DIGITF,d1
  1290.     cmp.b    CharAttr(pc,d0.w),d1
  1291.     sls    d0
  1292.     rts
  1293.  
  1294. IsGraph:
  1295.     moveq   #PUNCTF,d1
  1296.     cmp.b    CharAttr(pc,d0.w),d1
  1297.     sls    d0
  1298.     rts
  1299.  
  1300. IsPrint:
  1301.     moveq    #SPACEF,d1
  1302.     cmp.b    CharAttr(pc,d0.w),d1
  1303.     sls    d0
  1304.     rts
  1305.  
  1306. IsCntrl:
  1307.     btst    #CNTRL,CharAttr(pc,d0.w)
  1308.     sne    d0
  1309.     rts
  1310.  
  1311. IsDigit:
  1312.     btst    #DIGIT,CharAttr(pc,d0.w)
  1313.     sne    d0
  1314.     rts
  1315.  
  1316. IsLower:
  1317.     btst    #LOWER,CharAttr(pc,d0.w)
  1318.     sne    d0
  1319.     rts
  1320.  
  1321. IsPunct:
  1322.     btst    #PUNCT,CharAttr(pc,d0.w)
  1323.     sne    d0
  1324.     rts
  1325.  
  1326. IsSpace:
  1327.     btst    #SPACE,CharAttr(pc,d0.w)
  1328.     sne    d0
  1329.     rts
  1330.  
  1331. IsUpper:
  1332.     btst    #UPPER,CharAttr(pc,d0.w)
  1333.     sne    d0
  1334.     rts
  1335.  
  1336. IsXDigit:
  1337.     btst    #XDIGIT,CharAttr(pc,d0.w)
  1338.     sne    d0
  1339.     rts
  1340.  
  1341. ;---------------------------------------------------------------------------
  1342.  
  1343. CharAttr:
  1344. A000 DC.B    CNTRLF
  1345. A001 DC.B    CNTRLF
  1346. A002 DC.B    CNTRLF
  1347. A003 DC.B    CNTRLF
  1348. A004 DC.B    CNTRLF
  1349. A005 DC.B    CNTRLF
  1350. A006 DC.B    CNTRLF
  1351. A007 DC.B    CNTRLF
  1352. A008 DC.B    CNTRLF
  1353. A009 DC.B    CNTRLF!SPACEF
  1354. A010 DC.B    CNTRLF!SPACEF
  1355. A011 DC.B    CNTRLF!SPACEF
  1356. A012 DC.B    CNTRLF|SPACEF
  1357. A013 DC.B    CNTRLF!SPACEF
  1358. A014 DC.B    CNTRLF
  1359. A015 DC.B    CNTRLF
  1360. A016 DC.B    CNTRLF
  1361. A017 DC.B    CNTRLF
  1362. A018 DC.B    CNTRLF
  1363. A019 DC.B    CNTRLF
  1364. A020 DC.B    CNTRLF
  1365. A021 DC.B    CNTRLF
  1366. A022 DC.B    CNTRLF
  1367. A023 DC.B    CNTRLF
  1368. A024 DC.B    CNTRLF
  1369. A025 DC.B    CNTRLF
  1370. A026 DC.B    CNTRLF
  1371. A027 DC.B    CNTRLF
  1372. A028 DC.B    CNTRLF
  1373. A029 DC.B    CNTRLF
  1374. A030 DC.B    CNTRLF
  1375. A031 DC.B    CNTRLF
  1376. A032 DC.B    SPACEF        ; " "
  1377. A033 DC.B    PUNCTF        ; "!"
  1378. A034 DC.B    PUNCTF        ; '"'
  1379. A035 DC.B    PUNCTF        ; "#"
  1380. A036 DC.B       PUNCTF        ; "$"
  1381. A037 DC.B       PUNCTF        ; "%"
  1382. A038 DC.B       PUNCTF        ; "&"
  1383. A039 DC.B       PUNCTF        ; "'"
  1384. A040 DC.B       PUNCTF        ; "("
  1385. A041 DC.B       PUNCTF        ; ")"
  1386. A042 DC.B       PUNCTF        ; "*"
  1387. A043 DC.B       PUNCTF        ; "+"
  1388. A044 DC.B       PUNCTF        ; ","
  1389. A045 DC.B       PUNCTF        ; "-"
  1390. A046 DC.B       PUNCTF        ; "."
  1391. A047 DC.B       PUNCTF        ; "/"
  1392. A048 DC.B       DIGITF!XDIGITF  ; "0"
  1393. A049 DC.B       DIGITF!XDIGITF  ; "1"
  1394. A050 DC.B       DIGITF!XDIGITF  ; "2"
  1395. A051 DC.B       DIGITF!XDIGITF  ; "3"
  1396. A052 DC.B       DIGITF!XDIGITF  ; "4"
  1397. A053 DC.B       DIGITF!XDIGITF  ; "5"
  1398. A054 DC.B       DIGITF!XDIGITF  ; "6"
  1399. A055 DC.B       DIGITF!XDIGITF  ; "7"
  1400. A056 DC.B       DIGITF!XDIGITF  ; "8"
  1401. A057 DC.B       DIGITF!XDIGITF  ; "9"
  1402. A058 DC.B       PUNCTF        ; ":"
  1403. A059 DC.B       PUNCTF        ; ";"
  1404. A060 DC.B       PUNCTF        ; "<"
  1405. A061 DC.B       PUNCTF        ; "="
  1406. A062 DC.B       PUNCTF        ; ">"
  1407. A063 DC.B       PUNCTF        ; "?"
  1408. A064 DC.B       PUNCTF        ; "@"
  1409. A065 DC.B       UPPERF!XDIGITF  ; "A"
  1410. A066 DC.B       UPPERF!XDIGITF  ; "B"
  1411. A067 DC.B       UPPERF!XDIGITF  ; "C"
  1412. A068 DC.B       UPPERF!XDIGITF  ; "D"
  1413. A069 DC.B       UPPERF!XDIGITF  ; "E"
  1414. A070 DC.B       UPPERF!XDIGITF  ; "F"
  1415. A071 DC.B       UPPERF         ; "G"
  1416. A072 DC.B       UPPERF         ; "H"
  1417. A073 DC.B       UPPERF         ; "I"
  1418. A074 DC.B       UPPERF         ; "J"
  1419. A075 DC.B       UPPERF         ; "K"
  1420. A076 DC.B       UPPERF         ; "L"
  1421. A077 DC.B       UPPERF         ; "M"
  1422. A078 DC.B       UPPERF         ; "N"
  1423. A079 DC.B       UPPERF         ; "O"
  1424. A080 DC.B       UPPERF         ; "P"
  1425. A081 DC.B       UPPERF         ; "Q"
  1426. A082 DC.B       UPPERF         ; "R"
  1427. A083 DC.B       UPPERF         ; "S"
  1428. A084 DC.B       UPPERF         ; "T"
  1429. A085 DC.B       UPPERF         ; "U"
  1430. A086 DC.B       UPPERF         ; "V"
  1431. A087 DC.B       UPPERF         ; "W"
  1432. A088 DC.B       UPPERF         ; "X"
  1433. A089 DC.B       UPPERF         ; "Y"
  1434. A090 DC.B       UPPERF         ; "Z"
  1435. A091 DC.B       PUNCTF        ; "["
  1436. A092 DC.B       PUNCTF        ; "\"
  1437. A093 DC.B       PUNCTF        ; "]"
  1438. A094 DC.B       PUNCTF        ; "^"
  1439. A095 DC.B       PUNCTF        ; "_"
  1440. A096 DC.B       PUNCTF        ; "`"
  1441. A097 DC.B       LOWERF!XDIGITF  ; "a"
  1442. A098 DC.B       LOWERF!XDIGITF  ; "b"
  1443. A099 DC.B       LOWERF!XDIGITF  ; "c"
  1444. A100 DC.B       LOWERF!XDIGITF  ; "d"
  1445. A101 DC.B       LOWERF!XDIGITF  ; "e"
  1446. A102 DC.B       LOWERF!XDIGITF  ; "f"
  1447. A103 DC.B       LOWERF        ; "g"
  1448. A104 DC.B       LOWERF        ; "h"
  1449. A105 DC.B       LOWERF        ; "i"
  1450. A106 DC.B       LOWERF        ; "j"
  1451. A107 DC.B       LOWERF        ; "k"
  1452. A108 DC.B       LOWERF        ; "l"
  1453. A109 DC.B       LOWERF        ; "m"
  1454. A110 DC.B       LOWERF        ; "n"
  1455. A111 DC.B       LOWERF        ; "o"
  1456. A112 DC.B       LOWERF        ; "p"
  1457. A113 DC.B       LOWERF        ; "q"
  1458. A114 DC.B       LOWERF        ; "r"
  1459. A115 DC.B       LOWERF        ; "s"
  1460. A116 DC.B       LOWERF        ; "t"
  1461. A117 DC.B       LOWERF        ; "u"
  1462. A118 DC.B       LOWERF        ; "v"
  1463. A119 DC.B       LOWERF        ; "w"
  1464. A120 DC.B       LOWERF        ; "x"
  1465. A121 DC.B       LOWERF        ; "y"
  1466. A122 DC.B       LOWERF        ; "z"
  1467. A123 DC.B       PUNCTF        ; "{"
  1468. A124 DC.B       PUNCTF          ; "|"
  1469. A125 DC.B       PUNCTF        ; "}"
  1470. A126 DC.B       PUNCTF        ; "~"
  1471. A127 DC.B    CNTRLF
  1472. A128 DC.B    CNTRLF
  1473. A129 DC.B    CNTRLF
  1474. A130 DC.B    CNTRLF
  1475. A131 DC.B    CNTRLF
  1476. A132 DC.B    CNTRLF
  1477. A133 DC.B    CNTRLF
  1478. A134 DC.B    CNTRLF
  1479. A135 DC.B    CNTRLF
  1480. A136 DC.B    CNTRLF
  1481. A137 DC.B    CNTRLF
  1482. A138 DC.B    CNTRLF
  1483. A139 DC.B    CNTRLF
  1484. A140 DC.B    CNTRLF
  1485. A141 DC.B    CNTRLF
  1486. A142 DC.B    CNTRLF
  1487. A143 DC.B    CNTRLF
  1488. A144 DC.B    CNTRLF
  1489. A145 DC.B    CNTRLF
  1490. A146 DC.B    CNTRLF
  1491. A147 DC.B    CNTRLF
  1492. A148 DC.B    CNTRLF
  1493. A149 DC.B    CNTRLF
  1494. A150 DC.B    CNTRLF
  1495. A151 DC.B    CNTRLF
  1496. A152 DC.B    CNTRLF
  1497. A153 DC.B    CNTRLF
  1498. A154 DC.B    CNTRLF
  1499. A155 DC.B    CNTRLF
  1500. A156 DC.B    CNTRLF
  1501. A157 DC.B    CNTRLF
  1502. A158 DC.B    CNTRLF
  1503. A159 DC.B    CNTRLF
  1504. A160 DC.B       SPACEF     ; " "
  1505. A161 DC.B       PUNCTF     ; "¡"
  1506. A162 DC.B       PUNCTF     ; "¢"
  1507. A163 DC.B       PUNCTF     ; "£"
  1508. A164 DC.B       PUNCTF     ; "¤"
  1509. A165 DC.B       PUNCTF     ; "¥"
  1510. A166 DC.B       PUNCTF     ; "¦"
  1511. A167 DC.B       PUNCTF     ; "§"
  1512. A168 DC.B       PUNCTF     ; "¨"
  1513. A169 DC.B       PUNCTF     ; "©"
  1514. A170 DC.B       PUNCTF     ; "ª"
  1515. A171 DC.B       PUNCTF     ; "«"
  1516. A172 DC.B       PUNCTF     ; "¬"
  1517. A173 DC.B       PUNCTF     ; "­"
  1518. A174 DC.B       PUNCTF     ; "®"
  1519. A175 DC.B       PUNCTF     ; "¯"
  1520. A176 DC.B       PUNCTF     ; "°"
  1521. A177 DC.B       PUNCTF     ; "±"
  1522. A178 DC.B       PUNCTF     ; "²"
  1523. A179 DC.B       PUNCTF     ; "³"
  1524. A180 DC.B       PUNCTF     ; "´"
  1525. A181 DC.B       PUNCTF     ; "µ"
  1526. A182 DC.B       PUNCTF     ; "¶"
  1527. A183 DC.B       PUNCTF     ; "·"
  1528. A184 DC.B       PUNCTF     ; "¸"
  1529. A185 DC.B       PUNCTF     ; "¹"
  1530. A186 DC.B       PUNCTF     ; "º"
  1531. A187 DC.B       PUNCTF     ; "»"
  1532. A188 DC.B       PUNCTF     ; "¼"
  1533. A189 DC.B       PUNCTF     ; "½"
  1534. A190 DC.B       PUNCTF     ; "¾"
  1535. A191 DC.B       PUNCTF     ; "¿"
  1536. A192 DC.B       UPPERF     ; "À"
  1537. A193 DC.B       UPPERF     ; "Á"
  1538. A194 DC.B       UPPERF     ; "Â"
  1539. A195 DC.B       UPPERF     ; "Ã"
  1540. A196 DC.B       UPPERF     ; "Ä"
  1541. A197 DC.B       UPPERF     ; "Å"
  1542. A198 DC.B       UPPERF     ; "Æ"
  1543. A199 DC.B       UPPERF     ; "Ç"
  1544. A200 DC.B       UPPERF     ; "È"
  1545. A201 DC.B       UPPERF     ; "É"
  1546. A202 DC.B       UPPERF     ; "Ê"
  1547. A203 DC.B       UPPERF     ; "Ë"
  1548. A204 DC.B       UPPERF     ; "Ì"
  1549. A205 DC.B       UPPERF     ; "Í"
  1550. A206 DC.B       UPPERF     ; "Î"
  1551. A207 DC.B       UPPERF     ; "Ï"
  1552. A208 DC.B       UPPERF     ; "Ð"
  1553. A209 DC.B       UPPERF     ; "Ñ"
  1554. A210 DC.B       UPPERF     ; "Ò"
  1555. A211 DC.B       UPPERF     ; "Ó"
  1556. A212 DC.B       UPPERF     ; "Ô"
  1557. A213 DC.B       UPPERF     ; "Õ"
  1558. A214 DC.B       UPPERF     ; "Ö"
  1559. A215 DC.B       UPPERF     ; "×"
  1560. A216 DC.B       UPPERF     ; "Ø"
  1561. A217 DC.B       UPPERF     ; "Ù"
  1562. A218 DC.B       UPPERF     ; "Ú"
  1563. A219 DC.B       UPPERF     ; "Û"
  1564. A220 DC.B       UPPERF     ; "Ü"
  1565. A221 DC.B       UPPERF     ; "Ý"
  1566. A222 DC.B       UPPERF     ; "Þ"
  1567. A223 DC.B       UPPERF!LOWERF ; "ß"
  1568. A224 DC.B       LOWERF     ; "à"
  1569. A225 DC.B       LOWERF     ; "á"
  1570. A226 DC.B       LOWERF     ; "â"
  1571. A227 DC.B       LOWERF     ; "ã"
  1572. A228 DC.B       LOWERF     ; "ä"
  1573. A229 DC.B       LOWERF     ; "å"
  1574. A230 DC.B       LOWERF     ; "æ"
  1575. A231 DC.B       LOWERF     ; "ç"
  1576. A232 DC.B       LOWERF     ; "è"
  1577. A233 DC.B       LOWERF     ; "é"
  1578. A234 DC.B       LOWERF     ; "ê"
  1579. A235 DC.B       LOWERF     ; "ë"
  1580. A236 DC.B       LOWERF     ; "ì"
  1581. A237 DC.B       LOWERF     ; "í"
  1582. A238 DC.B       LOWERF     ; "î"
  1583. A239 DC.B       LOWERF     ; "ï"
  1584. A240 DC.B       LOWERF     ; "ð"
  1585. A241 DC.B       LOWERF     ; "ñ"
  1586. A242 DC.B       LOWERF     ; "ò"
  1587. A243 DC.B       LOWERF     ; "ó"
  1588. A244 DC.B       LOWERF     ; "ô"
  1589. A245 DC.B       LOWERF     ; "õ"
  1590. A246 DC.B       LOWERF     ; "ö"
  1591. A247 DC.B       PUNCTF     ; "÷"
  1592. A248 DC.B       LOWERF     ; "ø"
  1593. A249 DC.B       LOWERF     ; "ù"
  1594. A250 DC.B       LOWERF     ; "ú"
  1595. A251 DC.B       LOWERF     ; "û"
  1596. A252 DC.B       LOWERF     ; "ü"
  1597. A253 DC.B       LOWERF     ; "ý"
  1598. A254 DC.B       LOWERF     ; "þ"
  1599. A255 DC.B       LOWERF     ; "ÿ"
  1600.  
  1601. ;---------------------------------------------------------------------------
  1602.  
  1603. Strings:
  1604. S000 DC.B       "",0
  1605. S001 DC.B    "Sunday",0
  1606. S002 DC.B    "Monday",0
  1607. S003 DC.B    "Tuesday",0
  1608. S004 DC.B    "Wednesday",0
  1609. S005 DC.B    "Thursday",0
  1610. S006 DC.B    "Friday",0
  1611. S007 DC.B    "Saturday",0
  1612.  
  1613. S008 DC.B    "Sun",0
  1614. S009 DC.B    "Mon",0
  1615. S010 DC.B    "Tue",0
  1616. S011 DC.B    "Wed",0
  1617. S012 DC.B    "Thu",0
  1618. S013 DC.B    "Fri",0
  1619. S014 DC.B    "Sat",0
  1620.  
  1621. S015 DC.B    "January",0
  1622. S016 DC.B    "February",0
  1623. S017 DC.B    "March",0
  1624. S018 DC.B    "April",0
  1625. S019 DC.B    "May",0
  1626. S020 DC.B    "June",0
  1627. S021 DC.B    "July",0
  1628. S022 DC.B    "August",0
  1629. S023 DC.B    "September",0
  1630. S024 DC.B    "October",0
  1631. S025 DC.B    "November",0
  1632. S026 DC.B    "December",0
  1633.  
  1634. S027 DC.B    "Jan",0
  1635. S028 DC.B    "Feb",0
  1636. S029 DC.B    "Mar",0
  1637. S030 DC.B    "Apr",0
  1638. S031 DC.B    "May",0
  1639. S032 DC.B    "Jun",0
  1640. S033 DC.B    "Jul",0
  1641. S034 DC.B    "Aug",0
  1642. S035 DC.B    "Sep",0
  1643. S036 DC.B    "Oct",0
  1644. S037 DC.B    "Nov",0
  1645. S038 DC.B    "Dec",0
  1646.  
  1647. S039 DC.B    "Yes",0
  1648. S040 DC.B    "No",0
  1649.  
  1650. S041 DC.B    "AM",0
  1651. S042 DC.B    "PM",0
  1652.  
  1653. S043 DC.B    "-",0
  1654. S044 DC.B    "-",0
  1655.  
  1656. S045 DC.B    '"',0
  1657. S046 DC.B    '"',0
  1658.  
  1659. S047 DC.B    "Yesterday",0
  1660. S048 DC.B    "Today",0
  1661. S049 DC.B    "Tomorrow",0
  1662. S050 DC.B    "Future",0
  1663.  
  1664. ;---------------------------------------------------------------------------
  1665.  
  1666. *    string = GetLocaleStr(driver,stringNum);
  1667. *    D0                    A0     D0
  1668. *
  1669. *    STRPTR GetLocaleStr(struct DriverBase *,ULONG);
  1670. *
  1671.  
  1672. GetLocaleStr:
  1673.     cmp.l    #51,d0     ; 50 being the maximum # of strings
  1674.     bcc.s    1$
  1675.     asl.w    #2,d0
  1676.     move.l  StringTable(pc,d0.w),d0
  1677.     rts
  1678.  
  1679. 1$    moveq    #0,d0
  1680.     rts
  1681.  
  1682. StringTable:
  1683. P000 DC.L S000
  1684. P001 DC.L S001
  1685. P002 DC.L S002
  1686. P003 DC.L S003
  1687. P004 DC.L S004
  1688. P005 DC.L S005
  1689. P006 DC.L S006
  1690. P007 DC.L S007
  1691. P008 DC.L S008
  1692. P009 DC.L S009
  1693. P010 DC.L S010
  1694. P011 DC.L S011
  1695. P012 DC.L S012
  1696. P013 DC.L S013
  1697. P014 DC.L S014
  1698. P015 DC.L S015
  1699. P016 DC.L S016
  1700. P017 DC.L S017
  1701. P018 DC.L S018
  1702. P019 DC.L S019
  1703. P020 DC.L S020
  1704. P021 DC.L S021
  1705. P022 DC.L S022
  1706. P023 DC.L S023
  1707. P024 DC.L S024
  1708. P025 DC.L S025
  1709. P026 DC.L S026
  1710. P027 DC.L S027
  1711. P028 DC.L S028
  1712. P029 DC.L S029
  1713. P030 DC.L S030
  1714. P031 DC.L S031
  1715. P032 DC.L S032
  1716. P033 DC.L S033
  1717. P034 DC.L S034
  1718. P035 DC.L S035
  1719. P036 DC.L S036
  1720. P037 DC.L S037
  1721. P038 DC.L S038
  1722. P039 DC.L S039
  1723. P040 DC.L S040
  1724. P041 DC.L S041
  1725. P042 DC.L S042
  1726. P043 DC.L S043
  1727. P044 DC.L S044
  1728. P045 DC.L S045
  1729. P046 DC.L S046
  1730. P047 DC.L S047
  1731. P048 DC.L S048
  1732. P049 DC.L S049
  1733. P050 DC.L S050
  1734.  
  1735. ;---------------------------------------------------------------------------
  1736.  
  1737. ENDTAG:
  1738.  
  1739. ;---------------------------------------------------------------------------
  1740.  
  1741.     END
  1742.