libzvt.pp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. {
  2. libzvt - Zed's Virtual Terminal
  3. Copyright (C) 1998 Michael Zucchi
  4. This library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public
  6. License as published by the Free Software Foundation; either
  7. version 2 of the License, or (at your option) any later version.
  8. This library is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. Library General Public License for more details.
  12. You should have received a copy of the GNU Library General Public
  13. License along with this library; if not, write to the
  14. Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  15. Boston, MA 02111-1301, USA.
  16. **********************************************************************}
  17. unit libzvt;
  18. {$PACKRECORDS C}
  19. {$Mode ObjFPC}
  20. interface
  21. {$linklib util}
  22. Uses glib, gdk, gtk, gdk_imlib;
  23. const
  24. libzvtdll='zvt';
  25. Type
  26. PLongint = ^Longint;
  27. PSmallInt = ^SmallInt;
  28. PByte = ^Byte;
  29. PWord = ^Word;
  30. PDWord = ^DWord;
  31. PDouble = ^Double;
  32. Ppid_t = ^pid_t;
  33. pid_t = longint;
  34. {$define read_interface}
  35. {$undef read_implementation}
  36. {$Include lists.inc}
  37. {$Include vt.inc}
  38. {$Include vtx.inc}
  39. const
  40. ZVT_TERM_PIXMAP_SUPPORT = $01;
  41. ZVT_TERM_EMBOLDEN_SUPPORT = $02;
  42. ZVT_TERM_TRANSPARENCY_SUPPORT = $04;
  43. ZVT_TERM_PIXMAPSCROLL_SUPPORT = $08;
  44. ZVT_TERM_MATCH_SUPPORT = $10;
  45. type
  46. PZvtTerm = ^TZvtTerm;
  47. TZvtTerm = record
  48. widget : TGtkWidget;
  49. adjustment : PGtkAdjustment;
  50. shadow_type : TGtkShadowType;
  51. term_window : PGdkWindow;
  52. vx : Pvtx;
  53. charwidth : longint;
  54. charheight : longint;
  55. input_id : gint;
  56. msg_id : gint;
  57. timeout_id : gint;
  58. set_grid_size_pending : gboolean;
  59. grid_width : guint;
  60. grid_height : guint;
  61. cursor_bar : PGdkCursor;
  62. cursor_dot : PGdkCursor;
  63. cursor_current : PGdkCursor;
  64. font : PGdkFont;
  65. font_bold : PGdkFont;
  66. scroll_gc : PGdkGC;
  67. fore_gc : PGdkGC;
  68. back_gc : PGdkGC;
  69. fore_last : longint;
  70. back_last : longint;
  71. color_ctx : PGdkColorContext;
  72. colors : array[0..17] of gulong;
  73. ic : PGdkIC;
  74. pixmap_filename : Pchar;
  75. background : record
  76. pix : PGdkPixmap;
  77. x : longint;
  78. y : longint;
  79. w : longint;
  80. h : longint;
  81. end;
  82. flag0 : word;
  83. end;
  84. ZVT_TERM = PzvtTerm;
  85. const
  86. bm_TZvtTerm_cursor_on = $1;
  87. bp_TZvtTerm_cursor_on = 0;
  88. bm_TZvtTerm_cursor_filled = $2;
  89. bp_TZvtTerm_cursor_filled = 1;
  90. bm_TZvtTerm_cursor_blink_state = $4;
  91. bp_TZvtTerm_cursor_blink_state = 2;
  92. bm_TZvtTerm_blink_enabled = $8;
  93. bp_TZvtTerm_blink_enabled = 3;
  94. bm_TZvtTerm_in_expose = $10;
  95. bp_TZvtTerm_in_expose = 4;
  96. bm_TZvtTerm_scroll_on_keystroke = $20;
  97. bp_TZvtTerm_scroll_on_keystroke = 5;
  98. bm_TZvtTerm_scroll_on_output = $40;
  99. bp_TZvtTerm_scroll_on_output = 6;
  100. bm_TZvtTerm_transparent = $80;
  101. bp_TZvtTerm_transparent = 7;
  102. bm_TZvtTerm_shaded = $100;
  103. bp_TZvtTerm_shaded = 8;
  104. bm_TZvtTerm_swap_del_key = $200;
  105. bp_TZvtTerm_swap_del_key = 9;
  106. bm_TZvtTerm_del_is_del = $400;
  107. bp_TZvtTerm_del_is_del = 10;
  108. function cursor_on(var a : TZvtTerm) : dword;
  109. procedure set_cursor_on(var a : TZvtTerm; __cursor_on : dword);
  110. function cursor_filled(var a : TZvtTerm) : dword;
  111. procedure set_cursor_filled(var a : TZvtTerm; __cursor_filled : dword);
  112. function cursor_blink_state(var a : TZvtTerm) : dword;
  113. procedure set_cursor_blink_state(var a : TZvtTerm; __cursor_blink_state : dword);
  114. function blink_enabled(var a : TZvtTerm) : dword;
  115. procedure set_blink_enabled(var a : TZvtTerm; __blink_enabled : dword);
  116. function in_expose(var a : TZvtTerm) : dword;
  117. procedure set_in_expose(var a : TZvtTerm; __in_expose : dword);
  118. function scroll_on_keystroke(var a : TZvtTerm) : dword;
  119. procedure set_scroll_on_keystroke(var a : TZvtTerm; __scroll_on_keystroke : dword);
  120. function scroll_on_output(var a : TZvtTerm) : dword;
  121. procedure set_scroll_on_output(var a : TZvtTerm; __scroll_on_output : dword);
  122. function transparent(var a : TZvtTerm) : dword;
  123. procedure set_transparent(var a : TZvtTerm; __transparent : dword);
  124. function shaded(var a : TZvtTerm) : dword;
  125. procedure set_shaded(var a : TZvtTerm; __shaded : dword);
  126. function swap_del_key(var a : TZvtTerm) : dword;
  127. procedure set_swap_del_key(var a : TZvtTerm; __swap_del_key : dword);
  128. function del_is_del(var a : TZvtTerm) : dword;
  129. procedure set_del_is_del(var a : TZvtTerm; __del_is_del : dword);
  130. type
  131. PZvtTermClass = ^TZvtTermClass;
  132. TZvtTermClass = record
  133. parent_class : TGtkWidgetClass;
  134. child_died : procedure (term:PZvtTerm);cdecl;
  135. title_changed : procedure (term:PZvtTerm; thetype:TVTTITLE_TYPE; newtitle:Pchar);
  136. match_clicked : procedure (term:PZvtTerm; event:PGdkEventButton; match:Pchar; data:pointer);
  137. end;
  138. ZVT_TERM_CLASS = PZvtTermClass;
  139. Pzvtfont_t = ^Tzvtfont_t;
  140. Tzvtfont_t = (ZVT_FONT_1BYTE := 0,ZVT_FONT_2BYTE,ZVT_FONT_FONTSET);
  141. const
  142. ZVT_TERM_DO_UTMP_LOG = 1;
  143. ZVT_TERM_DO_WTMP_LOG = 2;
  144. ZVT_TERM_DO_LASTLOG = 4;
  145. ZVT_BACKGROUND_SHADED = $01;
  146. ZVT_BACKGROUND_SCROLL = $02;
  147. function ZVT_TYPE_TERM : TGTKType;
  148. function ZVT_IS_TERM(obj : Pointer) : Boolean;
  149. function ZVT_IS_TERM_CLASS(klass : Pointer) : Boolean;
  150. function ZVT_GTK_TOPWGT(t : PGTKWidget) : PGTKWidget;
  151. function ZVT_GTK_WINDOW(t : PGTKWidget) : PGTKWindow;
  152. function ZVT_GDK_WINDOW(t : PGTKWidget) : PGDKWindow;
  153. function ZVT_GDK_TOPWIN(t : PGTKWidget) : PGDKWindow;
  154. function zvt_term_new:PGtkWidget;cdecl;external libzvtdll name 'zvt_term_new';
  155. function zvt_term_new_with_size(cols:longint; rows:longint):PGtkWidget;cdecl;external libzvtdll name 'zvt_term_new_with_size';
  156. procedure zvt_term_reset(term:PZvtTerm; hard:longint);cdecl;external libzvtdll name 'zvt_term_reset';
  157. procedure zvt_term_feed(term:PZvtTerm; thetext:Pchar; len:longint);cdecl;external libzvtdll name 'zvt_term_feed';
  158. function zvt_term_writechild(term:PZvtTerm; data:Pchar; len:longint):longint;cdecl;external libzvtdll name 'zvt_term_writechild';
  159. function zvt_term_forkpty(term:PZvtTerm; do_uwtmp_log:longint):longint;cdecl;external libzvtdll name 'zvt_term_forkpty';
  160. function zvt_term_closepty(term:PZvtTerm):longint;cdecl;external libzvtdll name 'zvt_term_closepty';
  161. function zvt_term_killchild(term:PZvtTerm; signal:longint):longint;cdecl;external libzvtdll name 'zvt_term_killchild';
  162. procedure zvt_term_bell(zvt_term:pointer);cdecl;external libzvtdll name 'zvt_term_bell';
  163. function zvt_term_get_type:guint;cdecl;external libzvtdll name 'zvt_term_get_type';
  164. procedure zvt_term_set_scrollback(term:PZvtTerm; lines:longint);cdecl;external libzvtdll name 'zvt_term_set_scrollback';
  165. function zvt_term_get_buffer(term:PZvtTerm; len:Plongint; thetype:longint; sx:longint; sy:longint;
  166. ex:longint; ey:longint):Pchar;cdecl;external libzvtdll name 'zvt_term_get_buffer';
  167. procedure zvt_term_set_font_name(term:PZvtTerm; thename:Pchar);cdecl;external libzvtdll name 'zvt_term_set_font_name';
  168. procedure zvt_term_set_fonts(term:PZvtTerm; font:PGdkFont; font_bold:PGdkFont);cdecl;external libzvtdll name 'zvt_term_set_fonts';
  169. procedure zvt_term_hide_pointer(term:PZvtTerm);cdecl;external libzvtdll name 'zvt_term_hide_pointer';
  170. procedure zvt_term_show_pointer(term:PZvtTerm);cdecl;external libzvtdll name 'zvt_term_show_pointer';
  171. procedure zvt_term_set_bell(term:PZvtTerm; state:gboolean);cdecl;external libzvtdll name 'zvt_term_set_bell';
  172. function zvt_term_get_bell(term:PZvtTerm):gboolean;cdecl;external libzvtdll name 'zvt_term_get_bell';
  173. procedure zvt_term_set_blink(term:PZvtTerm; state:gboolean);cdecl;external libzvtdll name 'zvt_term_set_blink';
  174. procedure zvt_term_set_scroll_on_keystroke(term:PZvtTerm; state:gboolean);cdecl;external libzvtdll name 'zvt_term_set_scroll_on_keystroke';
  175. procedure zvt_term_set_scroll_on_output(term:PZvtTerm; state:gboolean);cdecl;external libzvtdll name 'zvt_term_set_scroll_on_output';
  176. procedure zvt_term_set_color_scheme(term:PZvtTerm; red:Pgushort; grn:Pgushort; blu:Pgushort);cdecl;external libzvtdll name 'zvt_term_set_color_scheme';
  177. procedure zvt_term_set_default_color_scheme(term:PZvtTerm);cdecl;external libzvtdll name 'zvt_term_set_default_color_scheme';
  178. procedure zvt_term_set_del_key_swap(term:PZvtTerm; state:longint);cdecl;external libzvtdll name 'zvt_term_set_del_key_swap';
  179. procedure zvt_term_set_del_is_del(term:PZvtTerm; state:longint);cdecl;external libzvtdll name 'zvt_term_set_del_is_del';
  180. procedure zvt_term_set_wordclass(term:PZvtTerm; klass:Pbyte);cdecl;external libzvtdll name 'zvt_term_set_wordclass';
  181. function zvt_term_match_add(term:PZvtTerm; regex:Pchar; highlight_mask:uint32; data:pointer):longint;cdecl;external libzvtdll name 'zvt_term_match_add';
  182. procedure zvt_term_match_clear(term:PZvtTerm; regex:Pchar);cdecl;external libzvtdll name 'zvt_term_match_clear';
  183. function zvt_term_match_check(term:PZvtTerm; x:longint; y:longint; user_data_ptr:Ppointer):Pchar;cdecl;external libzvtdll name 'zvt_term_match_check';
  184. procedure zvt_term_set_background(terminal:PZvtTerm; pixmap_file:Pchar; transparent:gboolean; flags:longint);cdecl;external libzvtdll name 'zvt_term_set_background';
  185. procedure zvt_term_set_shadow_type(term:PZvtTerm; thetype:TGtkShadowType);cdecl;external libzvtdll name 'zvt_term_set_shadow_type';
  186. procedure zvt_term_set_size(term:PZvtTerm; width:guint; height:guint);cdecl;external libzvtdll name 'zvt_term_set_size';
  187. procedure zvt_term_set_open_im(term:PZvtTerm; state:gboolean);cdecl;external libzvtdll name 'zvt_term_set_open_im';
  188. function zvt_term_get_capabilities(term:PZvtTerm):guint32;cdecl;external libzvtdll name 'zvt_term_get_capabilities';
  189. implementation
  190. {$define read_implementation}
  191. {$undef read_interface}
  192. {$Include lists.inc}
  193. {$Include vt.inc}
  194. {$Include vtx.inc}
  195. function ZVT_TYPE_TERM : TGTKType;
  196. begin
  197. ZVT_TYPE_TERM:=zvt_term_get_type;
  198. end;
  199. function ZVT_IS_TERM(obj : Pointer) : Boolean;
  200. begin
  201. ZVT_IS_TERM:=(obj<>nil) and ZVT_IS_TERM_CLASS(PGtkTypeObject(obj)^.klass);
  202. end;
  203. function ZVT_IS_TERM_CLASS(klass : Pointer) : Boolean;
  204. begin
  205. ZVT_IS_TERM_CLASS:=(klass<>nil) and (PGtkTypeClass(klass)^.thetype=ZVT_TYPE_TERM);
  206. end;
  207. function ZVT_GTK_TOPWGT(t : PGTKWidget) : PGTKWidget;
  208. begin
  209. ZVT_GTK_TOPWGT := gtk_widget_get_toplevel(t);
  210. end;
  211. function ZVT_GTK_WINDOW(t : PGTKWidget) : PGTKWindow;
  212. begin
  213. ZVT_GTK_WINDOW := GTK_WINDOW(ZVT_GTK_TOPWGT(t));
  214. end;
  215. function ZVT_GDK_WINDOW(t : PGTKWidget) : PGDKWindow;
  216. begin
  217. ZVT_GDK_WINDOW := t^.window;
  218. end;
  219. function ZVT_GDK_TOPWIN(t : PGTKWidget) : PGDKWindow;
  220. begin
  221. ZVT_GDK_TOPWIN := ZVT_GTK_TOPWGT(t)^.window;
  222. end;
  223. function cursor_on(var a : TZvtTerm) : dword;
  224. begin
  225. cursor_on:=(a.flag0 and bm_TZvtTerm_cursor_on) shr bp_TZvtTerm_cursor_on;
  226. end;
  227. procedure set_cursor_on(var a : TZvtTerm; __cursor_on : dword);
  228. begin
  229. a.flag0:=a.flag0 or ((__cursor_on shl bp_TZvtTerm_cursor_on) and bm_TZvtTerm_cursor_on);
  230. end;
  231. function cursor_filled(var a : TZvtTerm) : dword;
  232. begin
  233. cursor_filled:=(a.flag0 and bm_TZvtTerm_cursor_filled) shr bp_TZvtTerm_cursor_filled;
  234. end;
  235. procedure set_cursor_filled(var a : TZvtTerm; __cursor_filled : dword);
  236. begin
  237. a.flag0:=a.flag0 or ((__cursor_filled shl bp_TZvtTerm_cursor_filled) and bm_TZvtTerm_cursor_filled);
  238. end;
  239. function cursor_blink_state(var a : TZvtTerm) : dword;
  240. begin
  241. cursor_blink_state:=(a.flag0 and bm_TZvtTerm_cursor_blink_state) shr bp_TZvtTerm_cursor_blink_state;
  242. end;
  243. procedure set_cursor_blink_state(var a : TZvtTerm; __cursor_blink_state : dword);
  244. begin
  245. a.flag0:=a.flag0 or ((__cursor_blink_state shl bp_TZvtTerm_cursor_blink_state) and bm_TZvtTerm_cursor_blink_state);
  246. end;
  247. function blink_enabled(var a : TZvtTerm) : dword;
  248. begin
  249. blink_enabled:=(a.flag0 and bm_TZvtTerm_blink_enabled) shr bp_TZvtTerm_blink_enabled;
  250. end;
  251. procedure set_blink_enabled(var a : TZvtTerm; __blink_enabled : dword);
  252. begin
  253. a.flag0:=a.flag0 or ((__blink_enabled shl bp_TZvtTerm_blink_enabled) and bm_TZvtTerm_blink_enabled);
  254. end;
  255. function in_expose(var a : TZvtTerm) : dword;
  256. begin
  257. in_expose:=(a.flag0 and bm_TZvtTerm_in_expose) shr bp_TZvtTerm_in_expose;
  258. end;
  259. procedure set_in_expose(var a : TZvtTerm; __in_expose : dword);
  260. begin
  261. a.flag0:=a.flag0 or ((__in_expose shl bp_TZvtTerm_in_expose) and bm_TZvtTerm_in_expose);
  262. end;
  263. function scroll_on_keystroke(var a : TZvtTerm) : dword;
  264. begin
  265. scroll_on_keystroke:=(a.flag0 and bm_TZvtTerm_scroll_on_keystroke) shr bp_TZvtTerm_scroll_on_keystroke;
  266. end;
  267. procedure set_scroll_on_keystroke(var a : TZvtTerm; __scroll_on_keystroke : dword);
  268. begin
  269. a.flag0:=a.flag0 or ((__scroll_on_keystroke shl bp_TZvtTerm_scroll_on_keystroke) and bm_TZvtTerm_scroll_on_keystroke);
  270. end;
  271. function scroll_on_output(var a : TZvtTerm) : dword;
  272. begin
  273. scroll_on_output:=(a.flag0 and bm_TZvtTerm_scroll_on_output) shr bp_TZvtTerm_scroll_on_output;
  274. end;
  275. procedure set_scroll_on_output(var a : TZvtTerm; __scroll_on_output : dword);
  276. begin
  277. a.flag0:=a.flag0 or ((__scroll_on_output shl bp_TZvtTerm_scroll_on_output) and bm_TZvtTerm_scroll_on_output);
  278. end;
  279. function transparent(var a : TZvtTerm) : dword;
  280. begin
  281. transparent:=(a.flag0 and bm_TZvtTerm_transparent) shr bp_TZvtTerm_transparent;
  282. end;
  283. procedure set_transparent(var a : TZvtTerm; __transparent : dword);
  284. begin
  285. a.flag0:=a.flag0 or ((__transparent shl bp_TZvtTerm_transparent) and bm_TZvtTerm_transparent);
  286. end;
  287. function shaded(var a : TZvtTerm) : dword;
  288. begin
  289. shaded:=(a.flag0 and bm_TZvtTerm_shaded) shr bp_TZvtTerm_shaded;
  290. end;
  291. procedure set_shaded(var a : TZvtTerm; __shaded : dword);
  292. begin
  293. a.flag0:=a.flag0 or ((__shaded shl bp_TZvtTerm_shaded) and bm_TZvtTerm_shaded);
  294. end;
  295. function swap_del_key(var a : TZvtTerm) : dword;
  296. begin
  297. swap_del_key:=(a.flag0 and bm_TZvtTerm_swap_del_key) shr bp_TZvtTerm_swap_del_key;
  298. end;
  299. procedure set_swap_del_key(var a : TZvtTerm; __swap_del_key : dword);
  300. begin
  301. a.flag0:=a.flag0 or ((__swap_del_key shl bp_TZvtTerm_swap_del_key) and bm_TZvtTerm_swap_del_key);
  302. end;
  303. function del_is_del(var a : TZvtTerm) : dword;
  304. begin
  305. del_is_del:=(a.flag0 and bm_TZvtTerm_del_is_del) shr bp_TZvtTerm_del_is_del;
  306. end;
  307. procedure set_del_is_del(var a : TZvtTerm; __del_is_del : dword);
  308. begin
  309. a.flag0:=a.flag0 or ((__del_is_del shl bp_TZvtTerm_del_is_del) and bm_TZvtTerm_del_is_del);
  310. end;
  311. end.