Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     Copyright 2016 Anton Krotov
  3.  
  4.     This file is part of Compiler.
  5.  
  6.     Compiler is free software: you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation, either version 3 of the License, or
  9.     (at your option) any later version.
  10.  
  11.     Compiler is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.     GNU General Public License for more details.
  15.  
  16.     You should have received a copy of the GNU General Public License
  17.     along with Compiler. If not, see <http://www.gnu.org/licenses/>.
  18. *)
  19.  
  20. MODULE ERRORS;
  21.  
  22. IMPORT H := HOST;
  23.  
  24. TYPE
  25.  
  26.   STRING = ARRAY 1024 OF CHAR;
  27.  
  28.   CP = ARRAY 256 OF INTEGER;
  29.  
  30. VAR
  31.  
  32.   cp: CP;
  33.  
  34.  
  35. PROCEDURE utf8(code: INTEGER; VAR uchar: STRING);
  36. BEGIN
  37.   uchar[0] := 0X;
  38.   IF code < 80H THEN
  39.     uchar[0] := CHR(code);
  40.     uchar[1] := 0X
  41.   ELSIF code < 800H THEN
  42.     uchar[1] := CHR(ROR(LSL(code, 26), 26) + 80H);
  43.     uchar[0] := CHR(ASR(code, 6) + 0C0H);
  44.     uchar[2] := 0X
  45.   ELSIF code < 10000H THEN
  46.     uchar[2] := CHR(ROR(LSL(code, 26), 26) + 80H);
  47.     code := ASR(code, 6);
  48.     uchar[1] := CHR(ROR(LSL(code, 26), 26) + 80H);
  49.     uchar[0] := CHR(ASR(code, 6) + 0E0H);
  50.     uchar[3] := 0X
  51. (*
  52.   ELSIF code < 200000H THEN
  53.   ELSIF code < 4000000H THEN
  54.   ELSE  *)
  55.   END
  56. END utf8;
  57.  
  58. PROCEDURE InitCP(VAR cp: CP);
  59. VAR i: INTEGER;
  60. BEGIN
  61.    FOR i := 0H TO 7FH DO
  62.      cp[i] := i
  63.    END
  64. END InitCP;
  65.  
  66. PROCEDURE Init8(VAR cp: CP; VAR n: INTEGER; a, b, c, d, e, f, g, h: INTEGER);
  67. BEGIN
  68.   cp[n] := a; INC(n);
  69.   cp[n] := b; INC(n);
  70.   cp[n] := c; INC(n);
  71.   cp[n] := d; INC(n);
  72.   cp[n] := e; INC(n);
  73.   cp[n] := f; INC(n);
  74.   cp[n] := g; INC(n);
  75.   cp[n] := h; INC(n);
  76. END Init8;
  77.  
  78. PROCEDURE InitCP866(VAR cp: CP);
  79. VAR n, i: INTEGER;
  80. BEGIN
  81.    FOR i := 0410H TO 043FH DO
  82.      cp[i - 0410H + 80H] := i
  83.    END;
  84.    FOR i := 0440H TO 044FH DO
  85.      cp[i - 0440H + 0E0H] := i
  86.    END;
  87.  
  88.    n := 0B0H;
  89.    Init8(cp, n, 2591H, 2592H, 2593H, 2502H, 2524H, 2561H, 2562H, 2556H);
  90.    Init8(cp, n, 2555H, 2563H, 2551H, 2557H, 255DH, 255CH, 255BH, 2510H);
  91.    Init8(cp, n, 2514H, 2534H, 252CH, 251CH, 2500H, 253CH, 255EH, 255FH);
  92.    Init8(cp, n, 255AH, 2554H, 2569H, 2566H, 2560H, 2550H, 256CH, 2567H);
  93.    Init8(cp, n, 2568H, 2564H, 2565H, 2559H, 2558H, 2552H, 2553H, 256BH);
  94.    Init8(cp, n, 256AH, 2518H, 250CH, 2588H, 2584H, 258CH, 2590H, 2580H);
  95.  
  96.    n := 0F0H;
  97.    Init8(cp, n, 0401H, 0451H, 0404H, 0454H, 0407H, 0457H, 040EH, 045EH);
  98.    Init8(cp, n, 00B0H, 2219H, 00B7H, 221AH, 2116H, 00A4H, 25A0H, 00A0H);
  99.  
  100.    InitCP(cp)
  101. END InitCP866;
  102.  
  103. PROCEDURE concat(VAR L: STRING; R: STRING);
  104. VAR i, n, pos: INTEGER;
  105. BEGIN
  106.   n := LENGTH(R);
  107.   i := 0;
  108.   pos := LENGTH(L);
  109.   WHILE (i <= n) & (pos < LEN(L)) DO
  110.     L[pos] := R[i];
  111.     INC(pos);
  112.     INC(i)
  113.   END
  114. END concat;
  115.  
  116. PROCEDURE Utf8(VAR str: STRING);
  117. VAR i: INTEGER; in, out, u: STRING;
  118. BEGIN
  119.   in := str;
  120.   out := "";
  121.   FOR i := 0 TO LENGTH(in) - 1 DO
  122.     utf8(cp[ORD(in[i])], u);
  123.     concat(out, u)
  124.   END;
  125.   str := out
  126. END Utf8;
  127.  
  128. PROCEDURE ErrorMsg*(code: INTEGER; VAR msg: ARRAY OF CHAR);
  129. VAR str: STRING;
  130. BEGIN
  131.   CASE code OF
  132.   |  1: str := "®¦¨¤ « áì 'H' ¨«¨ 'X'"
  133.   |  2: str := "®¦¨¤ « áì æ¨äà "
  134.   |  3: str := "áâப  ­¥ ᮤ¥à¦¨â § ªà뢠î饩 ª ¢ë窨"
  135.   |  4: str := "­¥¤®¯ãáâ¨¬ë© á¨¬¢®«"
  136.   |  5: str := "楫®ç¨á«¥­­®¥ ¯¥à¥¯®«­¥­¨¥"
  137.   |  6: str := "᫨誮¬ ¡®«ì讥 §­ ç¥­¨¥ ᨬ¢®«ì­®© ª®­áâ ­âë"
  138.   |  7: str := "¢¥é¥á⢥­­®¥ ¯¥à¥¯®«­¥­¨¥"
  139.   |  8: str := "¯¥à¥¯®«­¥­¨¥ ¯®à浪  ¢¥é¥á⢥­­®£® ç¨á« "
  140.   |  9: str := "¢¥é¥á⢥­­®¥  ­â¨¯¥à¥¯®«­¥­¨¥"
  141.   | 10: str := "᫨誮¬ ¤«¨­­ë© ¨¤¥­â¨ä¨ª â®à"
  142.   | 11: str := "᫨誮¬ ¤«¨­­ ï áâப®¢ ï ª®­áâ ­â "
  143.  
  144.   | 21: str := "®¦¨¤ «®áì 'MODULE'"
  145.   | 22: str := "®¦¨¤ «áï ¨¤¥­â¨ä¨ª â®à"
  146.   | 23: str := "®¦¨¤ « áì ';'"
  147.   | 24: str := "®¦¨¤ «®áì 'END'"
  148.   | 25: str := "®¦¨¤ « áì '.'"
  149.   | 26: str := "¨¤¥­â¨ä¨ª â®à ­¥ ᮢ¯ ¤ ¥â á ¨¬¥­¥¬ ¬®¤ã«ï"
  150.   | 27: str := "­¥®¦¨¤ ­­ë© ª®­¥æ ä ©« "
  151.   | 28: str := "®¦¨¤ « áì ',', ';' ¨«¨ ':='"
  152.   | 29: str := "®¦¨¤ « áì ',' ¨«¨ ';'"
  153.   | 30: str := "¨¤¥­â¨ä¨ª â®à ¯¥à¥®¯à¥¤¥«¥­"
  154.   | 31: str := "横«¨ç¥áª¨© ¨¬¯®àâ"
  155.   | 32: str := "¬®¤ã«ì ­¥ ­ ©¤¥­ ¨«¨ ®è¨¡ª  ¤®áâ㯠"
  156.   | 33: str := "¨¬ï ¬®¤ã«ï ­¥ ᮢ¯ ¤ ¥â á ¨¬¥­¥¬ ä ©«  ¬®¤ã«ï"
  157.   | 34: str := "­¥¯à ¢¨«ì­ë© ä®à¬ â áâப¨ ¬ è¨­­ëå ª®¤®¢"
  158.   | 35: str := "®¦¨¤ «®áì '='"
  159.   | 36: str := "ᨭ⠪á¨ç¥áª ï ®è¨¡ª  ¢ ¢ëà ¦¥­¨¨"
  160.   | 37: str := "®¯¥à æ¨ï ­¥ ¯à¨¬¥­¨¬ "
  161.   | 38: str := "®¦¨¤ « áì ')'"
  162.   | 39: str := "®¦¨¤ «oáì 'ARRAY', 'RECORD', 'POINTER' ¨«¨ 'PROCEDURE'"
  163.   | 40: str := "®¦¨¤ «oáì 'TO'"
  164.   | 41: str := "®¦¨¤ «oáì 'OF'"
  165.   | 42: str := "­¥®¯à¥¤¥«¥­­ë© ¨¤¥­â¨ä¨ª â®à"
  166.   | 43: str := "âॡã¥âáï ¯¥à¥¬¥­­ ï, ¯à®æ¥¤ãà  ¨«¨ áâப®¢ ï ª®­áâ ­â "
  167.   | 44: str := "®¦¨¤ «oáì 'cdecl', 'stdcall' ¨«¨ 'winapi'"
  168.   | 45: str := "ä« £ ¢ë§®¢  ­¥¤®¯ã᪠¥âáï ¤«ï «®ª «ì­ëå ¯à®æ¥¤ãà"
  169.   | 46: str := "¤¥«¥­¨¥ ­  ­ã«ì"
  170.   | 47: str := "âॡã¥âáï ¨¤¥­â¨ä¨ª â®à ⨯ -§ ¯¨á¨ ¨«¨ ⨯ -㪠§ â¥«ï"
  171.   | 48: str := "楫®ç¨á«¥­­®¥ ¤¥«¥­¨¥ ­  ­ã«ì"
  172.   | 49: str := "§­ ç¥­¨¥ «¥¢®£® ®¯¥à ­¤  ¢­¥ ¤¨ ¯ §®­  0..31"
  173.   | 50: str := "ä« £ [winapi] ¤®áâ㯥­ ⮫쪮 ¤«ï ¯« âä®à¬ë Windows"
  174.   | 51: str := "®¦¨¤ « áì '}'"
  175.   | 52: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  INTEGER"
  176.   | 53: str := "§­ ç¥­¨¥ ¢ëà ¦¥­¨ï ¢­¥ ¤¨ ¯ §®­  0..31"
  177.   | 54: str := "«¥¢ ï £à ­¨æ  ¤¨ ¯ §®­  ¡®«ìè¥ ¯à ¢®©"
  178.   | 55: str := "âॡã¥âáï ª®­áâ ­â  â¨¯  CHAR"
  179.   | 56: str := "®¦¨¤ « áì '('"
  180.   | 57: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ç¨á«®¢®£® ⨯ "
  181.  
  182.   | 59: str := "­¥¤®áâ â®ç­® ¯ à ¬¥â஢"
  183.   | 60: str := "­¥¤®¯ãáâ¨¬ë© ¯ à ¬¥âà"
  184.   | 61: str := "®¦¨¤ « áì ','"
  185.   | 62: str := "âॡã¥âáï ª®­áâ ­â­®¥ ¢ëà ¦¥­¨¥"
  186.   | 63: str := "âॡã¥âáï ¯¥à¥¬¥­­ ï"
  187.   | 64: str := "ä ©« ­¥ ­ ©¤¥­ ¨«¨ ®è¨¡ª  ¤®áâ㯠"
  188.   | 65: str := "¬®¤ã«ì RTL ­¥ ­ ©¤¥­"
  189.   | 66: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  REAL ¨«¨ LONGREAL"
  190.   | 67: str := "­¥¢®§¬®¦­® ᮧ¤ âì ä ©«, ¢®§¬®¦­® ä ©« ®âªàëâ ¨«¨ ¤¨áª § é¨é¥­ ®â § ¯¨á¨"
  191.   | 68: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  CHAR, SET ¨«¨ BOOLEAN"
  192.   | 69: str := "­¥¢®§¬®¦­® § ¯¨á âì ä ©«"
  193.   | 70: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  LONGREAL"
  194.   | 71: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  REAL"
  195.   | 72: str := "­¥¤®áâ â®ç­® ¯ ¬ï⨠¤«ï § ¢¥à襭¨ï ª®¬¯¨«ï樨"
  196.   | 73: str := "¯à®æ¥¤ãà  ­¥ ¢®§¢à é îé ï १ã«ìâ â ­¥¤®¯ãá⨬  ¢ ¢ëà ¦¥­¨ïå"
  197.   | 74: str := "§­ ç¥­¨¥ ¢ëà ¦¥­¨ï ¢­¥ 楫®ç¨á«¥­­®£® ¤¨ ¯ §®­ "
  198.   | 75: str := "४ãàᨢ­®¥ ®¯à¥¤¥«¥­¨¥ ª®­áâ ­âë"
  199.   | 76: str := "§­ ç¥­¨¥ ¢ëà ¦¥­¨ï ¢­¥ ¤¨ ¯ §®­  0..255"
  200.   | 77: str := "®¦¨¤ «áï ¨¤¥­â¨ä¨ª â®à ⨯ "
  201.   | 78: str := "¤«¨­  ⨯ -¬ áᨢ  ¤®«¦­  ¡ëâì ¡®«ìè¥ ­ã«ï"
  202.   | 79: str := "®¦¨¤ «®áì 'OF' ¨«¨ ','"
  203.   | 80: str := "®¦¨¤ «áï ¨¤¥­â¨ä¨ª â®à ⨯ -§ ¯¨á¨"
  204.   | 81: str := "¡ §®¢ë© ⨯ ⨯ -㪠§ â¥«ï ¤®«¦¥­ ¡ëâì § ¯¨áìî"
  205.   | 82: str := "⨯ १ã«ìâ â  ¯à®æ¥¤ãàë ­¥ ¬®¦¥â ¡ëâì § ¯¨áìî ¨«¨ ¬ áᨢ®¬"
  206.   | 83: str := "à §¬¥à ⨯  ᫨誮¬ ¢¥«¨ª"
  207.   | 84: str := "®¦¨¤ «áï ¨¤¥­â¨ä¨ª â®à ¨«¨ 'VAR'"
  208.   | 85: str := "®¦¨¤ « áì ',' ¨«¨ ':'"
  209.   | 86: str := "®¦¨¤ «®áì 'END' ¨«¨ ';'"
  210.   | 87: str := "¨¤¥­â¨ä¨ª â®à ­¥ ᮢ¯ ¤ ¥â á ¨¬¥­¥¬ ¯à®æ¥¤ãàë"
  211.  
  212.   | 89: str := "íªá¯®àâ «®ª «ì­®£® ¨¤¥­â¨ä¨ª â®à  ­¥¤®¯ãá⨬"
  213.   | 90: str := "⨯ ARRAY ¨«¨ RECORD ­¥¤®¯ãá⨬"
  214.   | 91: str := "âॡã¥âáï ¨¤¥­â¨ä¨ª â®à ¢¥é¥á⢥­­®£® ⨯ "
  215.  
  216.   | 93: str := "à §¬¥à ¤ ­­ëå ᫨誮¬ ¢¥«¨ª"
  217.   | 94: str := "áâப  ¤«¨­ë, ®â«¨ç­®© ®â 1 ­¥¤®¯ãá⨬ "
  218.   | 95: str := "§­ ç¥­¨¥ ¢ëà ¦¥­¨ï ¤®«¦­® ¡ëâì ¢ ¤¨ ¯ §®­¥ 0..127"
  219.   | 96: str := "­¥¤®¯ãá⨬®¥ ४ãàᨢ­®¥ ®¯à¥¤¥«¥­¨¥ ⨯ "
  220.   | 97: str := "­¥¤®áâ â®ç­® ¢¥é¥á⢥­­ëå ॣ¨áâ஢, ã¯à®áâ¨â¥ ¢ëà ¦¥­¨¥"
  221.   | 98: str := "®¦¨¤ «®áì 'THEN'"
  222.   | 99: str := "¯®«¥ § ¯¨á¨ ­¥ ­ ©¤¥­®"
  223.   |100: str := "¬¥âª  ¤ã¡«¨à®¢ ­ "
  224.   |101: str := "¨¤¥­â¨ä¨ª â®à ⨯  ­¥¤®¯ãá⨬ ¢ ¢ëà ¦¥­¨ïå"
  225.   |102: str := "âॡã¥âáï ¬ áᨢ"
  226.   |103: str := "®¦¨¤ «oáì 'union' ¨«¨ 'noalign'"
  227.   |104: str := "âॡã¥âáï 㪠§ â¥«ì"
  228.   |105: str := "âॡã¥âáï § ¯¨áì"
  229.   |106: str := "âॡã¥âáï ¨¤¥­â¨ä¨ª â®à ⨯ -§ ¯¨á¨"
  230.   |107: str := "âॡã¥âáï ¨¤¥­â¨ä¨ª â®à ⨯ -㪠§ â¥«ï"
  231.   |108: str := "­¥¤®¯ãá⨬ ï ®åà ­  ⨯ "
  232.   |109: str := "®¦¨¤ « áì ']'"
  233.   |110: str := "à §¬¥à­®áâì ®âªàë⮣® ¬ áᨢ  ᫨誮¬ ¢¥«¨ª "
  234.   |111: str := "á¨á⥬­ë¥ ä« £¨ âॡãîâ ¨¬¯®àâ  ¬®¤ã«ï SYSTEM"
  235.   |112: str := "à áè¨à¥­¨¥ § ¯¨á¨ ­¥ ¬®¦¥â ¡ëâì [noalign] ¨«¨ [union]"
  236.   |113: str := "¡ §®¢ë© ⨯ § ¯¨á¨ ­¥ ¬®¦¥â ¡ëâì [noalign] ¨«¨ [union]"
  237.   |114: str := "­¥á®¢¬¥áâ¨¬ë© ¯ à ¬¥âà"
  238.   |115: str := "¯¥à¥¬¥­­ ï ¤®áâ㯭  ⮫쪮 ¤«ï ç⥭¨ï"
  239.   |116: str := "­¥«ì§ï ¨á¯®«ì§®¢ âì «®ª «ì­ãî ¯à®æ¥¤ãàã"
  240.   |117: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  BOOLEAN"
  241.   |118: str := "®¦¨¤ «®áì 'DO'"
  242.   |119: str := "®¦¨¤ «®áì 'UNTIL'"
  243.   |120: str := "®¦¨¤ «®áì ':='"
  244.   |121: str := "à áè¨à¥­¨¥ ¨¬¥­¨ ä ©«  £« ¢­®£® ¬®¤ã«ï ¤®«¦­® ¡ëâì 'ob07'"
  245.   |122: str := "§­ ç¥­¨¥ ¢ëà ¦¥­¨ï ­¥ ¬®¦¥â ¡ëâì à ¢­ë¬ ­ã«î"
  246.   |123: str := "'RETURN' ­¥¤®¯ãá⨬ ¢ ¯à®æ¥¤ãà¥, ­¥ ¢®§¢à é î饩 १ã«ìâ â"
  247.   |124: str := "®¦¨¤ «®áì 'RETURN'"
  248.   |125: str := "⨯ ¢ëà ¦¥­¨ï ­¥ ᮮ⢥âáâ¢ã¥â ⨯ã १ã«ìâ â  ¯à®æ¥¤ãàë"
  249.   |126: str := "âॡã¥âáï ¨¤¥­â¨ä¨ª â®à ¯¥à¥¬¥­­®©"
  250.   |127: str := "áç¥â稪 横«  FOR ­¥ ¤®«¦¥­ ¡ëâì ¯ à ¬¥â஬"
  251.   |128: str := "⨯ ¯¥à¥¬¥­­®© ¤®«¦¥­ ¡ëâì INTEGER"
  252.   |129: str := "¯¥à¥¬¥­­ ï ¤®«¦­  ¡ëâì «®ª «ì­®©"
  253.   |130: str := "­¥«ì§ï ¨á¯®«ì§®¢ âì ª®­áâ ­âã"
  254.   |131: str := "­¥á®¢¬¥á⨬®áâì ¯® ¯à¨á¢ ¨¢ ­¨î"
  255.   |132: str := "¢ë§®¢ ¯à®æ¥¤ãàë-ä㭪樨 ¤®¯ã᪠¥âáï ⮫쪮 ¢ á®áâ ¢¥ ¢ëà ¦¥­¨ï"
  256.   |133: str := "¨¤¥­â¨ä¨ª â®àë 'lib_init' ¨ 'version' § à¥§¥à¢¨à®¢ ­ë"
  257.  
  258.   |138: str := "⨯ ¯¥à¥¬¥­­®© ¤®«¦¥­ ¡ëâì SET"
  259.  
  260.   |141: str := "âॡã¥âáï áâப  ¨«¨ ᨬ¢®«ì­ë© ¬ áᨢ"
  261.  
  262.   |143: str := "âॡã¥âáï ᨬ¢®«ì­ë© ¬ áᨢ"
  263.  
  264.   |145: str := "⨯ ¯¥à¥¬¥­­®© ¤®«¦¥­ ¡ëâì POINTER"
  265.  
  266.   |149: str := "⨯ ¯¥à¥¬¥­­®© ¤®«¦¥­ ¡ëâì REAL ¨«¨ LONGREAL"
  267.   |150: str := "âॡã¥âáï áâப®¢ ï ª®­áâ ­â "
  268.  
  269.   |155: str := "®¦¨¤ « áì '(' ¨«¨ ':='"
  270.   |156: str := "âॡã¥âáï ¢ëà ¦¥­¨¥ ⨯  INTEGER ¨«¨ CHAR"
  271.   |157: str := "®¦¨¤ « áì ':'"
  272.   |158: str := "­¥ ­ ©¤¥­  ¯à®æ¥¤ãà  ¢ ¬®¤ã«¥ RTL"
  273.   |159: str := "­ àã襭¨¥ £à ­¨æ ¬ áᨢ "
  274.   |160: str := "®¦¨¤ «áï ¨¤¥­â¨ä¨ª â®à ª®­áâ ­âë"
  275.   |161: str := "âॡã¥âáï ª®­áâ ­â  â¨¯  INTEGER"
  276.   END;
  277.   IF H.OS = "LNX" THEN
  278.     Utf8(str)
  279.   END;
  280.   COPY(str, msg)
  281. END ErrorMsg;
  282.  
  283. BEGIN
  284.   InitCP866(cp)
  285. END ERRORS.