scroll/src/deno/ffi.ts

65 lines
1.1 KiB
JavaScript

// Deno-specific ffi code
// Determine library extension based on
// your OS.
let libSuffix = '';
switch (Deno.build.os) {
case 'windows':
libSuffix = 'dll';
break;
case 'darwin':
libSuffix = 'dylib';
break;
default:
libSuffix = 'so';
break;
}
const cSharedLib = `./libc.${libSuffix}`;
const cStdLib = Deno.dlopen(
cSharedLib,
{
termios: {
type: {
struct: [
// c_iflag
'u32',
// c_oflag
'u32',
// c_cflag
'u32',
// c_lflag
'u32',
// c_cc[20]
'u8', 'u8', 'u8', 'u8', 'u8',
'u8', 'u8', 'u8', 'u8', 'u8',
'u8', 'u8', 'u8', 'u8', 'u8',
'u8', 'u8', 'u8', 'u8', 'u8',
// __ispeed
'i32',
// __ospeed
'i32',
]
}
},
tcgetattr: {
parameters: ['i32', 'pointer'],
result: 'i32',
},
tcsetattr: {
parameters: ['i32', 'i32', 'pointer'],
result: 'i32',
},
cfmakeraw: {
parameters: ['pointer'],
result: 'void',
},
} as const,
);
export default cStdLib.symbols;
export const termios = cStdLib.symbols.termios;
export const tcgetattr = cStdLib.symbols.tcgetattr;
export const tcsetattr = cStdLib.symbols.tcsetattr;
export const cfmakeraw = cStdLib.symbols.cfmakeraw;