Чегой-то repl.it глючит (наверно на плюсах писан)
В общем вот:
local s = [[
typedef int (*cdCallback)(cdCanvas* canvas, ...);
int cdContextRegisterCallback (cdContext *context, int cb, cdCallback func);
unsigned long cdContextCaps (cdContext *context);
int cdContextIsPlus (cdContext *context);
int cdContextType (cdContext *context);
int cdCanvasClip (cdCanvas* canvas, int mode);
void cdCanvasClipArea (cdCanvas* canvas, int xmin, int xmax, int ymin, int ymax);
int cdCanvasGetClipArea (cdCanvas* canvas, int *xmin, int *xmax, int *ymin, int *ymax);
void cdfCanvasClipArea (cdCanvas* canvas, double xmin, double xmax, double ymin, double ymax);
int cdfCanvasGetClipArea (cdCanvas* canvas, double *xmin, double *xmax, double *ymin, double *ymax);
]]
print '------------------------------------------------------------------------'
types = {
int = 'INTEGER',
['unsigned long'] = 'INTEGER',
double = 'LONGREAL',
void = ''
}
local function getpars(par)
t = {}
for p in par:gmatch '(%a+[%s%*]+%s-%a-)%s-[,%s)]' do
local typ, nam = p:match '([%a%s]-)[%s%*]+(%a+)$'
t[#t+1] = nam..': '..(types[typ] or typ)
end
return (table.concat(t, '; '))
end
for line in s:gmatch '[^\r\n]+' do
t = {line:match '(%a+%s-%a-)%s+(%a+)%s+%(([^%(^%)]+%))%s-;'}
local par, nam, typ = t[#t], t[#t-1], t[#t-2]
if par then
-- print(typ, '|', nam, '|', par)
local def = 'PROCEDURE '..nam..' ('..getpars(par)..'): '..(types[typ] or typ)..';'
print(def)
getpars(par)
end
end
результат:
PROCEDURE cdContextRegisterCallback (context: cdContext; cb: INTEGER; func: cdCallback): INTEGER;
PROCEDURE cdContextCaps (context: cdContext): INTEGER;
PROCEDURE cdContextIsPlus (context: cdContext): INTEGER;
PROCEDURE cdContextType (context: cdContext): INTEGER;
PROCEDURE cdCanvasClip (canvas: cdCanvas; mode: INTEGER): INTEGER;
PROCEDURE cdCanvasClipArea (canvas: cdCanvas; xmin: INTEGER; xmax: INTEGER; ymin: INTEGER; ymax: INTEGER): ;
PROCEDURE cdCanvasGetClipArea (canvas: cdCanvas; xmin: INTEGER; xmax: INTEGER; ymin: INTEGER; ymax: INTEGER): INTEGER;
PROCEDURE cdfCanvasClipArea (canvas: cdCanvas; xmin: LONGREAL; xmax: LONGREAL; ymin: LONGREAL; ymax: LONGREAL): ;
PROCEDURE cdfCanvasGetClipArea (canvas: cdCanvas; xmin: LONGREAL; xmax: LONGREAL; ymin: LONGREAL; ymax: LONGREAL): INTEGER;