Advertisement
Guest User

ucode / fii / qsort()

a guest
Apr 19th, 2024
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env -S ucode -L.
  2.  
  3. import * as ffi from 'cparse';
  4.  
  5. const narr = ffi.ctype('int[5]', 56, 4, 12, 1, 5);
  6. const sarr = ffi.ctype('const char *[?]', 3, 'foo', 'bar', 'qrx');
  7. const qsort = ffi.C.wrap('void qsort(void *, size_t, size_t, int (*)(const void *, const void *))');
  8. const strcmp = ffi.C.wrap('int strcmp(const char *, const char *)');
  9.  
  10. if (0) {
  11. print(`BEFORE: ${narr.get()}\n`);
  12.  
  13. qsort(narr.ptr(), ffi.sizeof(narr) / ffi.sizeof('int'), ffi.sizeof('int'),
  14.       (a, b) => a.deref('int') - b.deref('int'));
  15.  
  16. print(`AFTER:  ${narr.get()}\n`);
  17. }
  18.  
  19. if (1) {
  20.     print(`BEFORE: ${sarr.get()}\n`);
  21.  
  22.     if (0) qsort(sarr.ptr(), ffi.sizeof(sarr) / ffi.sizeof('char *'), ffi.sizeof('char *'),
  23.           (a, b) => {
  24.             const x = a.deref('const char *').get();
  25.             const y = b.deref('const char *').get();
  26.  
  27.             warn([x, y], "\n");
  28.  
  29.             return x < y ? -1 : x > y ? 1 : 0;
  30.           });
  31.  
  32.     qsort(sarr.ptr(), sarr.length(), sarr.itemsize(),
  33.           (a, b) => strcmp(a.deref('const char *'), b.deref('const char *')));
  34.  
  35.     print(`AFTER:  ${sarr.get()} ${sarr.get(0)}\n`);
  36. }
  37.  
  38. ffi.cdef('extern char **environ');
  39. warn('ENV: ');
  40. x = ffi.C.dlsym('environ').get(1);
  41. warn(x, 'ENVEND\n');
  42.  
  43.  
  44. printf('%.J\n', [
  45.     ffi.C.wrap('char *getenv(char *)')("DBUS_SESSION_BUS_ADDRESS").get(),
  46.     ffi.ctype('const char *', 'FOO').get(),
  47.     ffi.ctype('const char *[?]', 3, 'foo', 'bar', 'qrx').get(2),
  48.     ffi.ctype('struct { const char *x; const char *y; }', { x: "abc", y: "def" }).get("y"),
  49.     ffi.cast('const char *', ffi.ctype('const void *', "abc")).get(),
  50.     ffi.cast('const char **',
  51.         ffi.ctype('struct { const char *x; const char *y; }', { x: "abc", y: "def" })).get(1)
  52. ]);
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement