(*------------------------------------------------------------------------------
     :Program.    chr.mod
     :Contents.   a little utility for character modification and comparison
     :Author.     Sebastian Florian Mix
     :Address.    Eichhornstraße 5-6 apt. 222, D-1000 Berlin 30
     :Phone.      030/2621811
     :Copyright.  PD
     :Language.   Modula-2
     :Translator. M2Amiga 3.3d
     :Imports.    Illegal.def  (* for M2o's sake *)
     :History.    V1.0,24.Oct.1990
------------------------------------------------------------------------------*)

IMPLEMENTATION MODULE chr;


FROM SYSTEM  IMPORT ADR, INLINE;

FROM Illegal IMPORT Il, legal, illegalLen1;  (* for M2o's sake *)


VAR
  CapDatPtr, LowDatPtr, CmpDatPtr : POINTER TO ARRAY CHAR OF CHAR;


(*$E-$F-*)
PROCEDURE CapDat;
BEGIN
  INLINE(Il,legal,256);  (* for M2o's sake *)
  INLINE(00001H,00203H,00405H,00607H,00809H,00A0BH,00C0DH,00E0FH,
         01011H,01213H,01415H,01617H,01819H,01A1BH,01C1DH,01E1FH,
         02021H,02223H,02425H,02627H,02829H,02A2BH,02C2DH,02E2FH,
         03031H,03233H,03435H,03637H,03839H,03A3BH,03C3DH,03E3FH,
         04041H,04243H,04445H,04647H,04849H,04A4BH,04C4DH,04E4FH,
         05051H,05253H,05455H,05657H,05859H,05A5BH,05C5DH,05E5FH,
         06041H,04243H,04445H,04647H,04849H,04A4BH,04C4DH,04E4FH,
         05051H,05253H,05455H,05657H,05859H,05A7BH,07C7DH,07E7FH,
         08081H,08283H,08485H,08687H,08889H,08A8BH,08C8DH,08E8FH,
         09091H,09293H,09495H,09697H,09899H,09A9BH,09C9DH,09E9FH,
         0A0A1H,0A2A3H,0A4A5H,0A6A7H,0A8A9H,0AAABH,0ACADH,0AEAFH,
         0B0B1H,0B2B3H,0B4B5H,0B6B7H,0B8B9H,0BABBH,0BCBDH,0BEBFH,
         0C0C1H,0C2C3H,0C4C5H,0C6C7H,0C8C9H,0CACBH,0CCCDH,0CECFH,
         0D0D1H,0D2D3H,0D4D5H,0D6D7H,0D8D9H,0DADBH,0DCDDH,0DEDFH,
         0C0C1H,0C2C3H,0C4C5H,0C6C7H,0C8C9H,0CACBH,0CCCDH,0CECFH,
         0D0D1H,0D2D3H,0D4D5H,0D6F7H,0D8D9H,0DADBH,0DCDDH,0DEFFH)
END CapDat;
(*$F=*)


(*$E-$F-*)
PROCEDURE LowDat;
BEGIN
  INLINE(Il,legal,256);  (* for M2o's sake *)
  INLINE(00001H,00203H,00405H,00607H,00809H,00A0BH,00C0DH,00E0FH,
         01011H,01213H,01415H,01617H,01819H,01A1BH,01C1DH,01E1FH,
         02021H,02223H,02425H,02627H,02829H,02A2BH,02C2DH,02E2FH,
         03031H,03233H,03435H,03637H,03839H,03A3BH,03C3DH,03E3FH,
         04061H,06263H,06465H,06667H,06869H,06A6BH,06C6DH,06E6FH,
         07071H,07273H,07475H,07677H,07879H,07A5BH,05C5DH,05E5FH,
         06061H,06263H,06465H,06667H,06869H,06A6BH,06C6DH,06E6FH,
         07071H,07273H,07475H,07677H,07879H,07A7BH,07C7DH,07E7FH,
         08081H,08283H,08485H,08687H,08889H,08A8BH,08C8DH,08E8FH,
         09091H,09293H,09495H,09697H,09899H,09A9BH,09C9DH,09E9FH,
         0A0A1H,0A2A3H,0A4A5H,0A6A7H,0A8A9H,0AAABH,0ACADH,0AEAFH,
         0B0B1H,0B2B3H,0B4B5H,0B6B7H,0B8B9H,0BABBH,0BCBDH,0BEBFH,
         0E0E1H,0E2E3H,0E4E5H,0E6E7H,0E8E9H,0EAEBH,0ECEDH,0EEEFH,
         0F0F1H,0F2F3H,0F4F5H,0F6D7H,0F8F9H,0FAFBH,0FCFDH,0FEDFH,
         0E0E1H,0E2E3H,0E4E5H,0E6E7H,0E8E9H,0EAEBH,0ECEDH,0EEEFH,
         0F0F1H,0F2F3H,0F4F5H,0F6F7H,0F8F9H,0FAFBH,0FCFDH,0FEFFH)
END LowDat;
(*$F=*)


(*$E-$F-*)
PROCEDURE CmpDat;
BEGIN
  INLINE(Il,legal,256);  (* for M2o's sake *)
  INLINE(00001H,00203H,00405H,00607H,00809H,00A0BH,00C0DH,00E0FH,
         01011H,01213H,01415H,01617H,01819H,01A1BH,01C1DH,01E1FH,
         02021H,02223H,02425H,02627H,02829H,02A2BH,02C2DH,02E2FH,
         03031H,03233H,03435H,03637H,03839H,03A3BH,03C3DH,03E3FH,
         04041H,0494BH,04D4FH,05455H,05657H,05C5DH,05E5FH,06062H,
         0696AH,06B6CH,06D6EH,07374H,07576H,0797AH,07B7CH,07D7EH,
         07F80H,0888AH,08D8FH,09495H,09697H,09C9DH,09E9FH,0A0A2H,
         0A9AAH,0ABACH,0AEAFH,0B5B6H,0B7B8H,0BBBCH,0BDBEH,0BFC0H,
         0C1C2H,0C3C4H,0C5C6H,0C7C8H,0C9CAH,0CBCCH,0CDCEH,0CFD0H,
         0D1D2H,0D3D4H,0D5D6H,0D7D8H,0D9DAH,0DBDCH,0DDDEH,0DFE0H,
         0E1E2H,08CE3H,0E477H,0E5E6H,0E7E8H,0E9EAH,0EBECH,0EDEEH,
         0EFF0H,0F2F3H,0F4B4H,0F5F6H,0F7F1H,0F8F9H,0FAFBH,0FCFDH,
         04243H,04445H,04647H,0484CH,05051H,05253H,05859H,05A5BH,
         04E61H,06364H,06566H,067FEH,0686FH,07071H,07278H,04AADH,
         08182H,08384H,08586H,0878BH,09091H,09293H,09899H,09A9BH,
         08EA1H,0A3A4H,0A5A6H,0A7FFH,0A8B0H,0B1B2H,0B3B9H,089BAH)
END CmpDat;
(*$F=*)


(*$S-$F-$V-$R-*)
PROCEDURE Cap(c : CHAR) : CHAR;
BEGIN
  RETURN CapDatPtr^[c]
END Cap;


PROCEDURE Low(c : CHAR) : CHAR;
BEGIN
  RETURN LowDatPtr^[c]
END Low;


PROCEDURE Lower(c1, c2 : CHAR) : BOOLEAN;
BEGIN
  RETURN CmpDatPtr^[c1]<CmpDatPtr^[c2]
END Lower;


PROCEDURE LowerEq(c1, c2 : CHAR) : BOOLEAN;
BEGIN
  RETURN CmpDatPtr^[c1]<=CmpDatPtr^[c2]
END LowerEq;
(*$S=$F=$V=$R=*)


BEGIN  (* chr *)
  CapDatPtr:=ADR(CapDat);
  INC(CapDatPtr,illegalLen1);
  LowDatPtr:=ADR(LowDat);
  INC(LowDatPtr,illegalLen1);
  CmpDatPtr:=ADR(CmpDat);
  INC(CmpDatPtr,illegalLen1)
END chr.
