fork(1) download
  1. #!/usr/bin/ruby
  2. require 'stringio'
  3.  
  4. template={
  5. C:<<-EOM,
  6. typedef _T_ (*T_FUNC_)(_SIG_);
  7. T_FUNC_ P_FUNC_;
  8. P_FUNC_=(T_FUNC_)GetProcAddress(H,"_FUNC_");
  9. EOM
  10.  
  11. CS:<<-EOM,
  12. [DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern _T_ _FUNC_(_SIG_);
  13. EOM
  14.  
  15. Nemerle:<<-EOM,
  16. [DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern _FUNC_(_SIG_):_T_;
  17. EOM
  18.  
  19. VB:<<-EOM,
  20. <DllImport(library,CallingConvention:=CallingConvention.Cdecl)>shared function _FUNC_(_SIG_) as _T_
  21. end function
  22. EOM
  23.  
  24. FS:<<-EOM,
  25. [<DllImport(library,CallingConvention=CallingConvention.Cdecl)>]extern _T_ _FUNC_(_SIG_)
  26. EOM
  27. }
  28.  
  29. type={
  30. C:->(k){k},
  31. CS:->(k){
  32. k=='char*'?'string':['void*','FILE*','mpz_t','mpf_t'].include?(k)?'IntPtr':k.end_with?('*')?'ref '+k[0..-2]:k
  33. },
  34. Nemerle:->(k){
  35. k=='char*'?'string':['void*','FILE*','mpz_t','mpf_t'].include?(k)?'IntPtr':k.end_with?('*')?'ref '+k[0..-2]:k
  36. },
  37. VB:->(k){
  38. k[0,3]='integer' if k.start_with?('int')
  39. k=='char*'?'string':['void*','FILE*','mpz_t','mpf_t'].include?(k)?'IntPtr':k.end_with?('*')?'ref '+k[0..-2]:k
  40. },
  41. FS:->(k){
  42. k=='char*'?'string':['void*','FILE*','mpz_t','mpf_t'].include?(k)?'IntPtr':k.end_with?('*')?'ref '+k[0..-2]:k
  43. },
  44. }
  45.  
  46. signature={
  47. C:->(a){a*','},
  48. CS:->(a){a.map.with_index{|e,i|'%s %s'%[type[:CS].(e),(i+97).chr]}*','},
  49. Nemerle:->(a){a.map.with_index{|e,i|'%s:%s'%[(i+97).chr,type[:Nemerle].(e)]}*','},
  50. VB:->(a){a.map.with_index{|e,i|'%s as %s'%[(i+97).chr,type[:VB].(e)]}*','},
  51. FS:->(a){a.map.with_index{|e,i|'%s %s'%[type[:FS].(e),(i+97).chr]}*','},
  52. }
  53.  
  54. lang=:CS
  55.  
  56. s=StringIO.new
  57. DATA.each{|e|
  58. next if e.chomp.empty?
  59. t,f,*a=e.chomp.split
  60. s.puts template[lang].gsub('_FUNC_',f).gsub('_T_',t).gsub('_SIG_',signature[lang].(a))
  61. }
  62. if lang==:C
  63. puts s.string.lines.each_slice(3).map(&:to_a).transpose
  64. else
  65. puts s.string
  66. end
  67.  
  68. __END__
  69. void __gmpz_init mpz_t
  70. void __gmpz_clear mpz_t
  71. void __gmpz_out_str FILE* int mpz_t
  72. void __gmpz_set mpz_t mpz_t
  73. void __gmpz_set_str mpz_t char* int
  74. void __gmpz_set_si mpz_t long
  75. int __gmpz_cmp_si mpz_t long
  76. long __gmpz_get_si mpz_t
  77.  
  78. void __gmpz_abs mpz_t mpz_t
  79. void __gmpz_add mpz_t mpz_t mpz_t
  80. void __gmpz_add_ui mpz_t mpz_t long
  81. void __gmpz_mul mpz_t mpz_t mpz_t
  82. void __gmpz_mul_si mpz_t mpz_t long
  83. void __gmpz_mul_ui mpz_t mpz_t long
  84. void __gmpz_sub mpz_t mpz_t mpz_t
  85. void __gmpz_sub_ui mpz_t mpz_t long
  86. void __gmpz_ui_sub mpz_t long mpz_t
  87. void __gmpz_tdiv_q mpz_t mpz_t mpz_t
  88. void __gmpz_tdiv_r mpz_t mpz_t mpz_t
  89. void __gmpz_tdiv_q_ui mpz_t mpz_t long
  90. void __gmpz_tdiv_r_ui mpz_t mpz_t long
  91.  
Success #stdin #stdout 0.05s 9792KB
stdin
Standard input is empty
stdout
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_init(IntPtr a);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_clear(IntPtr a);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_out_str(IntPtr a,int b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_set(IntPtr a,IntPtr b);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_set_str(IntPtr a,string b,int c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_set_si(IntPtr a,long b);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern int __gmpz_cmp_si(IntPtr a,long b);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern long __gmpz_get_si(IntPtr a);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_abs(IntPtr a,IntPtr b);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_add(IntPtr a,IntPtr b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_add_ui(IntPtr a,IntPtr b,long c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_mul(IntPtr a,IntPtr b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_mul_si(IntPtr a,IntPtr b,long c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_mul_ui(IntPtr a,IntPtr b,long c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_sub(IntPtr a,IntPtr b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_sub_ui(IntPtr a,IntPtr b,long c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_ui_sub(IntPtr a,long b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_tdiv_q(IntPtr a,IntPtr b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_tdiv_r(IntPtr a,IntPtr b,IntPtr c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_tdiv_q_ui(IntPtr a,IntPtr b,long c);
[DllImport(library,CallingConvention=CallingConvention.Cdecl)]static extern void __gmpz_tdiv_r_ui(IntPtr a,IntPtr b,long c);