home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / E / GENCEV21.LHA / GenCodeE / sources / GenCodeE_v16 / AuxProcs.e < prev    next >
Encoding:
Text File  |  1994-11-15  |  4.4 KB  |  201 lines

  1. OPT MODULE
  2. OPT EXPORT
  3. OPT LARGE
  4.  
  5.  
  6. /*******************************
  7. ** Display an error requester **
  8. *******************************/
  9. PROC error_request( text_body : PTR TO CHAR ) RETURN EasyRequestArgs(    NIL ,
  10.                                                                         [ 20 , 0 , 'GenCodeE error' , text_body , 'OK' ] ,
  11.                                                                         NIL , NIL )
  12.  
  13.  
  14. /**********************************************
  15. ** Idents a definition in the generated file **
  16. **********************************************/
  17. PROC indent_defs( file , ident : PTR TO CHAR , ident_length_max )
  18.  
  19.     DEF i
  20.  
  21.     FOR i := 0 TO ( ident_length_max - EstrLen( ident ) ) DO FputC( file , " " )
  22.  
  23. ENDPROC
  24.  
  25.  
  26. /**********************************************
  27. ** Idents a definition in the generated file **
  28. **********************************************/
  29. PROC indent_code( file , indent_level , return )
  30.  
  31.     DEF i
  32.  
  33.     IF return THEN FOR i := 1 TO indent_level DO FputC( file , "\t" )
  34.  
  35. ENDPROC
  36.  
  37.  
  38. /********************************************************************
  39. ** Convert a C string with format codes to the equivalent E string **
  40. ********************************************************************/
  41. PROC string_convert ( raw_string : PTR TO CHAR )
  42.  
  43.     DEF converted_string1 : PTR TO CHAR
  44.     DEF converted_string2 : PTR TO CHAR
  45.     DEF aux_string : PTR TO CHAR
  46.     DEF v2_vs_v1 = FALSE , char , char_value
  47.     DEF str_pos = 0 , offset = 0
  48.  
  49.     converted_string1 := String( ( StrLen( raw_string ) * 2 ) + 2 )
  50.     StringF( converted_string1 , '\a\s\a' , raw_string )
  51.  
  52.     IF ( InStr( raw_string , '\\' , 0 ) <> -1 ) OR ( InStr( raw_string , '\a' , 0 ) <> -1 )
  53.  
  54.         aux_string := String( StrLen( raw_string ) + 2 )
  55.         converted_string2 := String ( StrLen( raw_string ) * 4 + 8 )
  56.         StrAdd( converted_string2 , '[' , 1 )
  57.  
  58.         WHILE ( char := raw_string[ str_pos++ ] )
  59.  
  60.             IF char = "\\"
  61.  
  62.                 char := raw_string[ str_pos++ ]
  63.  
  64.                 SELECT char
  65.  
  66.                     CASE "r"
  67.  
  68.                         StrAdd( converted_string2 , '13,' , ALL )
  69.                         converted_string1[ str_pos + offset ] := "b"
  70.  
  71.                     CASE "n"
  72.  
  73.                         StrAdd( converted_string2 , '10,' , ALL )
  74.  
  75.                     CASE "t"
  76.  
  77.                         StrAdd( converted_string2 , '9,' , ALL )
  78.  
  79.                     CASE "e"
  80.  
  81.                         StrAdd( converted_string2 , '27,' , ALL )
  82.  
  83.                     CASE "0"
  84.  
  85.                         IF raw_string[ str_pos ]
  86.  
  87.                             char_value := raw_string[ str_pos++ ] - "0"
  88.  
  89.                             IF raw_string[ str_pos ]
  90.  
  91.                                 char_value := char_value * 8 + ( raw_string[ str_pos++ ] - "0" )
  92.                                 StringF( converted_string2 , '\s\d,' , converted_string2 , char_value )
  93.  
  94.                                 IF char_value = 27
  95.  
  96.                                     MidStr( aux_string , raw_string , str_pos , ALL )
  97.                                     SetStr( converted_string1 , str_pos + offset - 3 )
  98.                                     StringF( converted_string1 , '\s\\e\s\a' , converted_string1 , aux_string )
  99.                                     offset := offset - 2
  100.  
  101.                                 ELSE
  102.  
  103.                                     v2_vs_v1 := TRUE
  104.  
  105.                                 ENDIF
  106.  
  107.                             ENDIF
  108.  
  109.                         ENDIF
  110.  
  111.                     CASE "x"
  112.  
  113.                         IF raw_string[ str_pos ]
  114.  
  115.                             char := raw_string[ str_pos++ ]
  116.  
  117.                             IF char >= "a"
  118.  
  119.                                 char_value := char - "a" + 10
  120.  
  121.                             ELSEIF char >= "A"
  122.  
  123.                                 char_value := char - "A" + 10
  124.  
  125.                             ELSE
  126.  
  127.                                 char_value := char - "0"
  128.  
  129.                             ENDIF
  130.  
  131.                             IF raw_string[ str_pos ]
  132.  
  133.                                 char := raw_string[ str_pos++ ]
  134.  
  135.                                 IF char>="a"
  136.  
  137.                                     char_value := char_value * 16 + ( char - "a" + 10 )
  138.  
  139.                                 ELSEIF char>="A"
  140.  
  141.                                     char_value := char_value * 16 + ( char - "A" + 10 )
  142.  
  143.                                 ELSE
  144.  
  145.                                     char_value := char_value * 16 + ( char - "0" )
  146.  
  147.                                 ENDIF
  148.  
  149.                                 StringF( converted_string2 , '\s\d,' , converted_string2 , char_value )
  150.  
  151.                                 IF char_value=27
  152.  
  153.                                     MidStr( aux_string , raw_string , str_pos , ALL )
  154.                                     SetStr( converted_string1 , str_pos + offset - 3 )
  155.                                     StringF( converted_string1 , '\s\\e\s\a' , converted_string1 , aux_string )
  156.                                     offset := offset - 2
  157.  
  158.                                 ELSE
  159.  
  160.                                     v2_vs_v1 := TRUE
  161.  
  162.                                 ENDIF
  163.  
  164.                             ENDIF
  165.  
  166.                         ENDIF
  167.  
  168.                     CASE 0
  169.  
  170.                         StrAdd( converted_string2 , '"\\",' , ALL )
  171.                         DEC str_pos
  172.  
  173.                     DEFAULT
  174.  
  175.                         StringF( converted_string2 , '\s"\c",' , converted_string2 , char )
  176.  
  177.                 ENDSELECT
  178.  
  179.             ELSEIF char="'"
  180.  
  181.                 StrAdd( converted_string2 , '"\a",', ALL )
  182.  
  183.                 MidStr( aux_string , raw_string , str_pos , ALL )
  184.                 SetStr( converted_string1 , str_pos + offset )
  185.                 StringF( converted_string1 , '\s\a\a\s\a' , converted_string1 , aux_string )
  186.                 INC offset
  187.  
  188.             ELSE
  189.  
  190.                 StringF( converted_string2 , '\s"\c",' , converted_string2 , char )
  191.  
  192.             ENDIF
  193.  
  194.         ENDWHILE
  195.  
  196.         StrAdd( converted_string2 , '0]:CHAR' , ALL )
  197.  
  198.     ENDIF
  199.  
  200. ENDPROC IF v2_vs_v1 THEN converted_string2 ELSE converted_string1
  201.