65 lines
1.1 KiB
JavaScript
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;
|