home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume21 / xmcd / part07 < prev    next >
Encoding:
Text File  |  1993-12-19  |  62.9 KB  |  2,382 lines

  1. Newsgroups: comp.sources.x
  2. From: ti@bazooka.amb.org (Ti Kan)
  3. Subject: v21i069:  xmcd - X11/Motif CD audio player, Part07/13
  4. Message-ID: <1993Dec19.193933.24365@sparky.sterling.com>
  5. X-Md4-Signature: 6d3557461018beb21f8016564c0253a1
  6. Sender: chris@sparky.sterling.com (Chris Olson)
  7. Organization: Sterling Software
  8. Date: Sun, 19 Dec 1993 19:39:33 GMT
  9. Approved: chris@sterling.com
  10.  
  11. Submitted-by: ti@bazooka.amb.org (Ti Kan)
  12. Posting-number: Volume 21, Issue 69
  13. Archive-name: xmcd/part07
  14. Environment: X11, OSF/Motif
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of archive 7 (of 13)."
  23. # Contents:  geometry.c help.c hotkey.c
  24. # Wrapped by ti@bazooka on Mon Nov  8 10:35:20 1993
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f 'geometry.c' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'geometry.c'\"
  28. else
  29. echo shar: Extracting \"'geometry.c'\" \(36037 characters\)
  30. sed "s/^X//" >'geometry.c' <<'END_OF_FILE'
  31. X/*
  32. X *   xmcd - Motif(tm) CD Audio Player
  33. X *
  34. X *   Copyright (C) 1993  Ti Kan
  35. X *   E-mail: ti@amb.org
  36. X *
  37. X *   This program is free software; you can redistribute it and/or modify
  38. X *   it under the terms of the GNU General Public License as published by
  39. X *   the Free Software Foundation; either version 2 of the License, or
  40. X *   (at your option) any later version.
  41. X *
  42. X *   This program is distributed in the hope that it will be useful,
  43. X *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  44. X *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  45. X *   GNU General Public License for more details.
  46. X *
  47. X *   You should have received a copy of the GNU General Public License
  48. X *   along with this program; if not, write to the Free Software
  49. X *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  50. X *
  51. X */
  52. X#ifndef LINT
  53. Xstatic char *_geometry_c_ident_ = "@(#)geometry.c    1.45 93/09/28";
  54. X#endif
  55. X
  56. X#include <Xm/Xm.h>
  57. X#include <Xm/MessageB.h>
  58. X#include "xmcd.h"
  59. X#include "widget.h"
  60. X#include "geometry.h"
  61. X
  62. X
  63. Xextern AppData    app_data;
  64. X
  65. X
  66. X/*
  67. X * force_main_geometry
  68. X *    Set the geometry of the widgets in the main window.
  69. X *
  70. X * Args:
  71. X *    m - Pointer to the main widgets structure.
  72. X *
  73. X * Return:
  74. X *    Nothing.
  75. X */
  76. XSTATIC void
  77. Xforce_main_geometry(widgets_t *m)
  78. X{
  79. X    XmString    dash = XmStringCreateSimple("-");
  80. X
  81. X
  82. X    /* Main window widgets */
  83. X
  84. X    XtVaSetValues(m->main.chkbox_frm,
  85. X        XmNleftAttachment, XmATTACH_POSITION,
  86. X        XmNrightAttachment, XmATTACH_POSITION,
  87. X        XmNtopAttachment, XmATTACH_POSITION,
  88. X        XmNbottomAttachment, XmATTACH_POSITION,
  89. X        XmNleftPosition, LEFT_CHECKBOX,
  90. X        XmNrightPosition, RIGHT_CHECKBOX,
  91. X        XmNtopPosition, TOP_CHECKBOX,
  92. X        XmNbottomPosition, BOTTOM_CHECKBOX,
  93. X        XmNshadowType, XmSHADOW_OUT,
  94. X        NULL
  95. X    );
  96. X    XtVaSetValues(m->main.btnlbl_btn,
  97. X        XmNheight, 16,
  98. X        XmNrecomputeSize, False,
  99. X        NULL
  100. X    );
  101. X    if (!app_data.main_showfocus) {
  102. X        XtVaSetValues(m->main.btnlbl_btn,
  103. X            XmNhighlightThickness, 0,
  104. X            NULL
  105. X        );
  106. X    }
  107. X    XtVaSetValues(m->main.lock_btn,
  108. X        XmNheight, 16,
  109. X        XmNrecomputeSize, False,
  110. X        NULL
  111. X    );
  112. X    if (!app_data.main_showfocus) {
  113. X        XtVaSetValues(m->main.lock_btn,
  114. X            XmNhighlightThickness, 0,
  115. X            NULL
  116. X        );
  117. X    }
  118. X    XtVaSetValues(m->main.repeat_btn,
  119. X        XmNheight, 16,
  120. X        XmNrecomputeSize, False,
  121. X        NULL
  122. X    );
  123. X    if (!app_data.main_showfocus) {
  124. X        XtVaSetValues(m->main.repeat_btn,
  125. X            XmNhighlightThickness, 0,
  126. X            NULL
  127. X        );
  128. X    }
  129. X    XtVaSetValues(m->main.shuffle_btn,
  130. X        XmNheight, 16,
  131. X        XmNrecomputeSize, False,
  132. X        NULL
  133. X    );
  134. X    if (!app_data.main_showfocus) {
  135. X        XtVaSetValues(m->main.shuffle_btn,
  136. X            XmNhighlightThickness, 0,
  137. X            NULL
  138. X        );
  139. X    }
  140. X    XtVaSetValues(m->main.eject_btn,
  141. X        XmNleftAttachment, XmATTACH_POSITION,
  142. X        XmNrightAttachment, XmATTACH_POSITION,
  143. X        XmNtopAttachment, XmATTACH_POSITION,
  144. X        XmNbottomAttachment, XmATTACH_POSITION,
  145. X        XmNleftPosition, LEFT_EJECT,
  146. X        XmNrightPosition, RIGHT_EJECT,
  147. X        XmNtopPosition, TOP_EJECT,
  148. X        XmNbottomPosition, BOTTOM_EJECT,
  149. X        NULL
  150. X    );
  151. X    XtVaSetValues(m->main.poweroff_btn,
  152. X        XmNleftAttachment, XmATTACH_POSITION,
  153. X        XmNrightAttachment, XmATTACH_POSITION,
  154. X        XmNtopAttachment, XmATTACH_POSITION,
  155. X        XmNbottomAttachment, XmATTACH_POSITION,
  156. X        XmNleftPosition, LEFT_POWEROFF,
  157. X        XmNrightPosition, RIGHT_POWEROFF,
  158. X        XmNtopPosition, TOP_POWEROFF,
  159. X        XmNbottomPosition, BOTTOM_POWEROFF,
  160. X        NULL
  161. X    );
  162. X    XtVaSetValues(m->main.track_ind,
  163. X        XmNleftAttachment, XmATTACH_POSITION,
  164. X        XmNrightAttachment, XmATTACH_POSITION,
  165. X        XmNtopAttachment, XmATTACH_POSITION,
  166. X        XmNbottomAttachment, XmATTACH_POSITION,
  167. X        XmNleftPosition, LEFT_TRACKIND,
  168. X        XmNrightPosition, RIGHT_TRACKIND,
  169. X        XmNtopPosition, TOP_TRACKIND,
  170. X        XmNbottomPosition, BOTTOM_TRACKIND,
  171. X        XmNlabelString, dash,
  172. X        NULL
  173. X    );
  174. X    XtVaSetValues(m->main.index_ind,
  175. X        XmNleftAttachment, XmATTACH_POSITION,
  176. X        XmNrightAttachment, XmATTACH_POSITION,
  177. X        XmNtopAttachment, XmATTACH_POSITION,
  178. X        XmNbottomAttachment, XmATTACH_POSITION,
  179. X        XmNleftPosition, LEFT_INDEXIND,
  180. X        XmNrightPosition, RIGHT_INDEXIND,
  181. X        XmNtopPosition, TOP_INDEXIND,
  182. X        XmNbottomPosition, BOTTOM_INDEXIND,
  183. X        XmNlabelString, dash,
  184. X        NULL
  185. X    );
  186. X    XtVaSetValues(m->main.time_ind,
  187. X        XmNleftAttachment, XmATTACH_POSITION,
  188. X        XmNrightAttachment, XmATTACH_POSITION,
  189. X        XmNtopAttachment, XmATTACH_POSITION,
  190. X        XmNbottomAttachment, XmATTACH_POSITION,
  191. X        XmNleftPosition, LEFT_TIMEIND,
  192. X        XmNrightPosition, RIGHT_TIMEIND,
  193. X        XmNtopPosition, TOP_TIMEIND,
  194. X        XmNbottomPosition, BOTTOM_TIMEIND,
  195. X        XmNlabelString, dash,
  196. X        NULL
  197. X    );
  198. X    XtVaSetValues(m->main.dbmode_ind,
  199. X        XmNleftAttachment, XmATTACH_POSITION,
  200. X        XmNrightAttachment, XmATTACH_POSITION,
  201. X        XmNtopAttachment, XmATTACH_POSITION,
  202. X        XmNbottomAttachment, XmATTACH_POSITION,
  203. X        XmNleftPosition, LEFT_DBMODEIND,
  204. X        XmNrightPosition, RIGHT_DBMODEIND,
  205. X        XmNtopPosition, TOP_DBMODEIND,
  206. X        XmNbottomPosition, BOTTOM_DBMODEIND,
  207. X        XmNlabelString, dash,
  208. X        NULL
  209. X    );
  210. X    XtVaSetValues(m->main.progmode_ind,
  211. X        XmNleftAttachment, XmATTACH_POSITION,
  212. X        XmNrightAttachment, XmATTACH_POSITION,
  213. X        XmNtopAttachment, XmATTACH_POSITION,
  214. X        XmNbottomAttachment, XmATTACH_POSITION,
  215. X        XmNleftPosition, LEFT_PROGMODEIND,
  216. X        XmNrightPosition, RIGHT_PROGMODEIND,
  217. X        XmNtopPosition, TOP_PROGMODEIND,
  218. X        XmNbottomPosition, BOTTOM_PROGMODEIND,
  219. X        XmNlabelString, dash,
  220. X        NULL
  221. X    );
  222. X    XtVaSetValues(m->main.timemode_ind,
  223. X        XmNleftAttachment, XmATTACH_POSITION,
  224. X        XmNrightAttachment, XmATTACH_POSITION,
  225. X        XmNtopAttachment, XmATTACH_POSITION,
  226. X        XmNbottomAttachment, XmATTACH_POSITION,
  227. X        XmNleftPosition, LEFT_TIMEMODEIND,
  228. X        XmNrightPosition, RIGHT_TIMEMODEIND,
  229. X        XmNtopPosition, TOP_TIMEMODEIND,
  230. X        XmNbottomPosition, BOTTOM_TIMEMODEIND,
  231. X        XmNlabelString, dash,
  232. X        NULL
  233. X    );
  234. X    XtVaSetValues(m->main.playmode_ind,
  235. X        XmNleftAttachment, XmATTACH_POSITION,
  236. X        XmNrightAttachment, XmATTACH_POSITION,
  237. X        XmNtopAttachment, XmATTACH_POSITION,
  238. X        XmNbottomAttachment, XmATTACH_POSITION,
  239. X        XmNleftPosition, LEFT_PLAYMODEIND,
  240. X        XmNrightPosition, RIGHT_PLAYMODEIND,
  241. X        XmNtopPosition, TOP_PLAYMODEIND,
  242. X        XmNbottomPosition, BOTTOM_PLAYMODEIND,
  243. X        XmNlabelString, dash,
  244. X        NULL
  245. X    );
  246. X    XtVaSetValues(m->main.dbprog_btn,
  247. X        XmNleftAttachment, XmATTACH_POSITION,
  248. X        XmNrightAttachment, XmATTACH_POSITION,
  249. X        XmNtopAttachment, XmATTACH_POSITION,
  250. X        XmNbottomAttachment, XmATTACH_POSITION,
  251. X        XmNleftPosition, LEFT_DBPROG,
  252. X        XmNrightPosition, RIGHT_DBPROG,
  253. X        XmNtopPosition, TOP_DBPROG,
  254. X        XmNbottomPosition, BOTTOM_DBPROG,
  255. X        NULL
  256. X    );
  257. X    XtVaSetValues(m->main.time_btn,
  258. X        XmNleftAttachment, XmATTACH_POSITION,
  259. X        XmNrightAttachment, XmATTACH_POSITION,
  260. X        XmNtopAttachment, XmATTACH_POSITION,
  261. X        XmNbottomAttachment, XmATTACH_POSITION,
  262. X        XmNleftPosition, LEFT_TIME,
  263. X        XmNrightPosition, RIGHT_TIME,
  264. X        XmNtopPosition, TOP_TIME,
  265. X        XmNbottomPosition, BOTTOM_TIME,
  266. X        NULL
  267. X    );
  268. X    XtVaSetValues(m->main.ab_btn,
  269. X        XmNleftAttachment, XmATTACH_POSITION,
  270. X        XmNrightAttachment, XmATTACH_POSITION,
  271. X        XmNtopAttachment, XmATTACH_POSITION,
  272. X        XmNbottomAttachment, XmATTACH_POSITION,
  273. X        XmNleftPosition, LEFT_AB,
  274. X        XmNrightPosition, RIGHT_AB,
  275. X        XmNtopPosition, TOP_AB,
  276. X        XmNbottomPosition, BOTTOM_AB,
  277. X        NULL
  278. X    );
  279. X    XtVaSetValues(m->main.sample_btn,
  280. X        XmNleftAttachment, XmATTACH_POSITION,
  281. X        XmNrightAttachment, XmATTACH_POSITION,
  282. X        XmNtopAttachment, XmATTACH_POSITION,
  283. X        XmNbottomAttachment, XmATTACH_POSITION,
  284. X        XmNleftPosition, LEFT_SAMPLE,
  285. X        XmNrightPosition, RIGHT_SAMPLE,
  286. X        XmNtopPosition, TOP_SAMPLE,
  287. X        XmNbottomPosition, BOTTOM_SAMPLE,
  288. X        NULL
  289. X    );
  290. X    XtVaSetValues(m->main.keypad_btn,
  291. X        XmNleftAttachment, XmATTACH_POSITION,
  292. X        XmNrightAttachment, XmATTACH_POSITION,
  293. X        XmNtopAttachment, XmATTACH_POSITION,
  294. X        XmNbottomAttachment, XmATTACH_POSITION,
  295. X        XmNleftPosition, LEFT_KEYPAD,
  296. X        XmNrightPosition, RIGHT_KEYPAD,
  297. X        XmNtopPosition, TOP_KEYPAD,
  298. X        XmNbottomPosition, BOTTOM_KEYPAD,
  299. X        NULL
  300. X    );
  301. X    XtVaSetValues(m->main.help_btn,
  302. X        XmNleftAttachment, XmATTACH_POSITION,
  303. X        XmNrightAttachment, XmATTACH_POSITION,
  304. X        XmNtopAttachment, XmATTACH_POSITION,
  305. X        XmNbottomAttachment, XmATTACH_POSITION,
  306. X        XmNleftPosition, LEFT_HELP,
  307. X        XmNrightPosition, RIGHT_HELP,
  308. X        XmNtopPosition, TOP_HELP,
  309. X        XmNbottomPosition, BOTTOM_HELP,
  310. X        NULL
  311. X    );
  312. X    XtVaSetValues(m->main.level_scale,
  313. X        XmNleftAttachment, XmATTACH_POSITION,
  314. X        XmNrightAttachment, XmATTACH_POSITION,
  315. X        XmNtopAttachment, XmATTACH_POSITION,
  316. X        XmNbottomAttachment, XmATTACH_POSITION,
  317. X        XmNleftPosition, LEFT_LEVEL,
  318. X        XmNrightPosition, RIGHT_LEVEL,
  319. X        XmNtopPosition, TOP_LEVEL,
  320. X        XmNbottomPosition, BOTTOM_LEVEL,
  321. X        XmNshowValue, True,
  322. X        XmNorientation, XmHORIZONTAL,
  323. X        XmNprocessingDirection, XmMAX_ON_RIGHT,
  324. X        NULL
  325. X    );
  326. X    XtVaSetValues(m->main.playpause_btn,
  327. X        XmNleftAttachment, XmATTACH_POSITION,
  328. X        XmNrightAttachment, XmATTACH_POSITION,
  329. X        XmNtopAttachment, XmATTACH_POSITION,
  330. X        XmNbottomAttachment, XmATTACH_POSITION,
  331. X        XmNleftPosition, LEFT_PLAYPAUSE,
  332. X        XmNrightPosition, RIGHT_PLAYPAUSE,
  333. X        XmNtopPosition, TOP_PLAYPAUSE,
  334. X        XmNbottomPosition, BOTTOM_PLAYPAUSE,
  335. X        NULL
  336. X    );
  337. X    XtVaSetValues(m->main.stop_btn,
  338. X        XmNleftAttachment, XmATTACH_POSITION,
  339. X        XmNrightAttachment, XmATTACH_POSITION,
  340. X        XmNtopAttachment, XmATTACH_POSITION,
  341. X        XmNbottomAttachment, XmATTACH_POSITION,
  342. X        XmNleftPosition, LEFT_STOP,
  343. X        XmNrightPosition, RIGHT_STOP,
  344. X        XmNtopPosition, TOP_STOP,
  345. X        XmNbottomPosition, BOTTOM_STOP,
  346. X        NULL
  347. X    );
  348. X    XtVaSetValues(m->main.prevtrk_btn,
  349. X        XmNleftAttachment, XmATTACH_POSITION,
  350. X        XmNrightAttachment, XmATTACH_POSITION,
  351. X        XmNtopAttachment, XmATTACH_POSITION,
  352. X        XmNbottomAttachment, XmATTACH_POSITION,
  353. X        XmNleftPosition, LEFT_PREVTRK,
  354. X        XmNrightPosition, RIGHT_PREVTRK,
  355. X        XmNtopPosition, TOP_PREVTRK,
  356. X        XmNbottomPosition, BOTTOM_PREVTRK,
  357. X        NULL
  358. X    );
  359. X    XtVaSetValues(m->main.nexttrk_btn,
  360. X        XmNleftAttachment, XmATTACH_POSITION,
  361. X        XmNrightAttachment, XmATTACH_POSITION,
  362. X        XmNtopAttachment, XmATTACH_POSITION,
  363. X        XmNbottomAttachment, XmATTACH_POSITION,
  364. X        XmNleftPosition, LEFT_NEXTTRK,
  365. X        XmNrightPosition, RIGHT_NEXTTRK,
  366. X        XmNtopPosition, TOP_NEXTTRK,
  367. X        XmNbottomPosition, BOTTOM_NEXTTRK,
  368. X        NULL
  369. X    );
  370. X    XtVaSetValues(m->main.previdx_btn,
  371. X        XmNleftAttachment, XmATTACH_POSITION,
  372. X        XmNrightAttachment, XmATTACH_POSITION,
  373. X        XmNtopAttachment, XmATTACH_POSITION,
  374. X        XmNbottomAttachment, XmATTACH_POSITION,
  375. X        XmNleftPosition, LEFT_PREVIDX,
  376. X        XmNrightPosition, RIGHT_PREVIDX,
  377. X        XmNtopPosition, TOP_PREVIDX,
  378. X        XmNbottomPosition, BOTTOM_PREVIDX,
  379. X        NULL
  380. X    );
  381. X    XtVaSetValues(m->main.nextidx_btn,
  382. X        XmNleftAttachment, XmATTACH_POSITION,
  383. X        XmNrightAttachment, XmATTACH_POSITION,
  384. X        XmNtopAttachment, XmATTACH_POSITION,
  385. X        XmNbottomAttachment, XmATTACH_POSITION,
  386. X        XmNleftPosition, LEFT_NEXTIDX,
  387. X        XmNrightPosition, RIGHT_NEXTIDX,
  388. X        XmNtopPosition, TOP_NEXTIDX,
  389. X        XmNbottomPosition, BOTTOM_NEXTIDX,
  390. X        NULL
  391. X    );
  392. X    XtVaSetValues(m->main.rew_btn,
  393. X        XmNleftAttachment, XmATTACH_POSITION,
  394. X        XmNrightAttachment, XmATTACH_POSITION,
  395. X        XmNtopAttachment, XmATTACH_POSITION,
  396. X        XmNbottomAttachment, XmATTACH_POSITION,
  397. X        XmNleftPosition, LEFT_REW,
  398. X        XmNrightPosition, RIGHT_REW,
  399. X        XmNtopPosition, TOP_REW,
  400. X        XmNbottomPosition, BOTTOM_REW,
  401. X        NULL
  402. X    );
  403. X    XtVaSetValues(m->main.ff_btn,
  404. X        XmNleftAttachment, XmATTACH_POSITION,
  405. X        XmNrightAttachment, XmATTACH_POSITION,
  406. X        XmNtopAttachment, XmATTACH_POSITION,
  407. X        XmNbottomAttachment, XmATTACH_POSITION,
  408. X        XmNleftPosition, LEFT_FF,
  409. X        XmNrightPosition, RIGHT_FF,
  410. X        XmNtopPosition, TOP_FF,
  411. X        XmNbottomPosition, BOTTOM_FF,
  412. X        NULL
  413. X    );
  414. X
  415. X    XmStringFree(dash);
  416. X}
  417. X
  418. X
  419. X/*
  420. X * force_keypad_geometry
  421. X *    Set the geometry of the widgets in the keypad window.
  422. X *
  423. X * Args:
  424. X *    m - Pointer to the main widgets structure.
  425. X *
  426. X * Return:
  427. X *    Nothing.
  428. X */
  429. XSTATIC void
  430. Xforce_keypad_geometry(widgets_t *m)
  431. X{
  432. X    /* Keypad popup window widgets */
  433. X
  434. X    XtVaSetValues(m->keypad.keypad_lbl,
  435. X        XmNleftAttachment, XmATTACH_POSITION,
  436. X        XmNrightAttachment, XmATTACH_POSITION,
  437. X        XmNtopAttachment, XmATTACH_POSITION,
  438. X        XmNbottomAttachment, XmATTACH_POSITION,
  439. X        XmNleftPosition, LEFT_KEYPADLBL,
  440. X        XmNrightPosition, RIGHT_KEYPADLBL,
  441. X        XmNtopPosition, TOP_KEYPADLBL,
  442. X        XmNbottomPosition, BOTTOM_KEYPADLBL,
  443. X        NULL
  444. X    );
  445. X
  446. X    XtVaSetValues(m->keypad.keypad_ind,
  447. X        XmNleftAttachment, XmATTACH_POSITION,
  448. X        XmNrightAttachment, XmATTACH_POSITION,
  449. X        XmNtopAttachment, XmATTACH_POSITION,
  450. X        XmNbottomAttachment, XmATTACH_POSITION,
  451. X        XmNleftPosition, LEFT_KEYPADIND,
  452. X        XmNrightPosition, RIGHT_KEYPADIND,
  453. X        XmNtopPosition, TOP_KEYPADIND,
  454. X        XmNbottomPosition, BOTTOM_KEYPADIND,
  455. X        NULL
  456. X    );
  457. X
  458. X    XtVaSetValues(m->keypad.num_btn[0],
  459. X        XmNleftAttachment, XmATTACH_POSITION,
  460. X        XmNrightAttachment, XmATTACH_POSITION,
  461. X        XmNtopAttachment, XmATTACH_POSITION,
  462. X        XmNbottomAttachment, XmATTACH_POSITION,
  463. X        XmNleftPosition, LEFT_KEY0,
  464. X        XmNrightPosition, RIGHT_KEY0,
  465. X        XmNtopPosition, TOP_KEY0,
  466. X        XmNbottomPosition, BOTTOM_KEY0,
  467. X        NULL
  468. X    );
  469. X
  470. X    XtVaSetValues(m->keypad.num_btn[1],
  471. X        XmNleftAttachment, XmATTACH_POSITION,
  472. X        XmNrightAttachment, XmATTACH_POSITION,
  473. X        XmNtopAttachment, XmATTACH_POSITION,
  474. X        XmNbottomAttachment, XmATTACH_POSITION,
  475. X        XmNleftPosition, LEFT_KEY1,
  476. X        XmNrightPosition, RIGHT_KEY1,
  477. X        XmNtopPosition, TOP_KEY1,
  478. X        XmNbottomPosition, BOTTOM_KEY1,
  479. X        NULL
  480. X    );
  481. X
  482. X    XtVaSetValues(m->keypad.num_btn[2],
  483. X        XmNleftAttachment, XmATTACH_POSITION,
  484. X        XmNrightAttachment, XmATTACH_POSITION,
  485. X        XmNtopAttachment, XmATTACH_POSITION,
  486. X        XmNbottomAttachment, XmATTACH_POSITION,
  487. X        XmNleftPosition, LEFT_KEY2,
  488. X        XmNrightPosition, RIGHT_KEY2,
  489. X        XmNtopPosition, TOP_KEY2,
  490. X        XmNbottomPosition, BOTTOM_KEY2,
  491. X        NULL
  492. X    );
  493. X
  494. X    XtVaSetValues(m->keypad.num_btn[3],
  495. X        XmNleftAttachment, XmATTACH_POSITION,
  496. X        XmNrightAttachment, XmATTACH_POSITION,
  497. X        XmNtopAttachment, XmATTACH_POSITION,
  498. X        XmNbottomAttachment, XmATTACH_POSITION,
  499. X        XmNleftPosition, LEFT_KEY3,
  500. X        XmNrightPosition, RIGHT_KEY3,
  501. X        XmNtopPosition, TOP_KEY3,
  502. X        XmNbottomPosition, BOTTOM_KEY3,
  503. X        NULL
  504. X    );
  505. X
  506. X    XtVaSetValues(m->keypad.num_btn[4],
  507. X        XmNleftAttachment, XmATTACH_POSITION,
  508. X        XmNrightAttachment, XmATTACH_POSITION,
  509. X        XmNtopAttachment, XmATTACH_POSITION,
  510. X        XmNbottomAttachment, XmATTACH_POSITION,
  511. X        XmNleftPosition, LEFT_KEY4,
  512. X        XmNrightPosition, RIGHT_KEY4,
  513. X        XmNtopPosition, TOP_KEY4,
  514. X        XmNbottomPosition, BOTTOM_KEY4,
  515. X        NULL
  516. X    );
  517. X
  518. X    XtVaSetValues(m->keypad.num_btn[5],
  519. X        XmNleftAttachment, XmATTACH_POSITION,
  520. X        XmNrightAttachment, XmATTACH_POSITION,
  521. X        XmNtopAttachment, XmATTACH_POSITION,
  522. X        XmNbottomAttachment, XmATTACH_POSITION,
  523. X        XmNleftPosition, LEFT_KEY5,
  524. X        XmNrightPosition, RIGHT_KEY5,
  525. X        XmNtopPosition, TOP_KEY5,
  526. X        XmNbottomPosition, BOTTOM_KEY5,
  527. X        NULL
  528. X    );
  529. X
  530. X    XtVaSetValues(m->keypad.num_btn[6],
  531. X        XmNleftAttachment, XmATTACH_POSITION,
  532. X        XmNrightAttachment, XmATTACH_POSITION,
  533. X        XmNtopAttachment, XmATTACH_POSITION,
  534. X        XmNbottomAttachment, XmATTACH_POSITION,
  535. X        XmNleftPosition, LEFT_KEY6,
  536. X        XmNrightPosition, RIGHT_KEY6,
  537. X        XmNtopPosition, TOP_KEY6,
  538. X        XmNbottomPosition, BOTTOM_KEY6,
  539. X        NULL
  540. X    );
  541. X
  542. X    XtVaSetValues(m->keypad.num_btn[7],
  543. X        XmNleftAttachment, XmATTACH_POSITION,
  544. X        XmNrightAttachment, XmATTACH_POSITION,
  545. X        XmNtopAttachment, XmATTACH_POSITION,
  546. X        XmNbottomAttachment, XmATTACH_POSITION,
  547. X        XmNleftPosition, LEFT_KEY7,
  548. X        XmNrightPosition, RIGHT_KEY7,
  549. X        XmNtopPosition, TOP_KEY7,
  550. X        XmNbottomPosition, BOTTOM_KEY7,
  551. X        NULL
  552. X    );
  553. X
  554. X    XtVaSetValues(m->keypad.num_btn[8],
  555. X        XmNleftAttachment, XmATTACH_POSITION,
  556. X        XmNrightAttachment, XmATTACH_POSITION,
  557. X        XmNtopAttachment, XmATTACH_POSITION,
  558. X        XmNbottomAttachment, XmATTACH_POSITION,
  559. X        XmNleftPosition, LEFT_KEY8,
  560. X        XmNrightPosition, RIGHT_KEY8,
  561. X        XmNtopPosition, TOP_KEY8,
  562. X        XmNbottomPosition, BOTTOM_KEY8,
  563. X        NULL
  564. X    );
  565. X
  566. X    XtVaSetValues(m->keypad.num_btn[9],
  567. X        XmNleftAttachment, XmATTACH_POSITION,
  568. X        XmNrightAttachment, XmATTACH_POSITION,
  569. X        XmNtopAttachment, XmATTACH_POSITION,
  570. X        XmNbottomAttachment, XmATTACH_POSITION,
  571. X        XmNleftPosition, LEFT_KEY9,
  572. X        XmNrightPosition, RIGHT_KEY9,
  573. X        XmNtopPosition, TOP_KEY9,
  574. X        XmNbottomPosition, BOTTOM_KEY9,
  575. X        NULL
  576. X    );
  577. X
  578. X    XtVaSetValues(m->keypad.enter_btn,
  579. X        XmNleftAttachment, XmATTACH_POSITION,
  580. X        XmNrightAttachment, XmATTACH_POSITION,
  581. X        XmNtopAttachment, XmATTACH_POSITION,
  582. X        XmNbottomAttachment, XmATTACH_POSITION,
  583. X        XmNleftPosition, LEFT_ENTER,
  584. X        XmNrightPosition, RIGHT_ENTER,
  585. X        XmNtopPosition, TOP_ENTER,
  586. X        XmNbottomPosition, BOTTOM_ENTER,
  587. X        NULL
  588. X    );
  589. X
  590. X    XtVaSetValues(m->keypad.keypad_sep,
  591. X        XmNleftAttachment, XmATTACH_POSITION,
  592. X        XmNrightAttachment, XmATTACH_POSITION,
  593. X        XmNtopAttachment, XmATTACH_POSITION,
  594. X        XmNbottomAttachment, XmATTACH_NONE,
  595. X        XmNleftPosition, LEFT_KEYPADSEP,
  596. X        XmNrightPosition, RIGHT_KEYPADSEP,
  597. X        XmNtopPosition, TOP_KEYPADSEP,
  598. X        NULL
  599. X    );
  600. X
  601. X    XtVaSetValues(m->keypad.cancel_btn,
  602. X        XmNleftAttachment, XmATTACH_POSITION,
  603. X        XmNrightAttachment, XmATTACH_POSITION,
  604. X        XmNtopAttachment, XmATTACH_POSITION,
  605. X        XmNbottomAttachment, XmATTACH_NONE,
  606. X        XmNleftPosition, LEFT_KPCANCEL,
  607. X        XmNrightPosition, RIGHT_KPCANCEL,
  608. X        XmNtopPosition, TOP_KPCANCEL,
  609. X        NULL
  610. X    );
  611. X
  612. X    XtVaSetValues(m->keypad.clear_btn,
  613. X        XmNleftAttachment, XmATTACH_POSITION,
  614. X        XmNrightAttachment, XmATTACH_POSITION,
  615. X        XmNtopAttachment, XmATTACH_POSITION,
  616. X        XmNbottomAttachment, XmATTACH_NONE,
  617. X        XmNleftPosition, LEFT_KPCLEAR,
  618. X        XmNrightPosition, RIGHT_KPCLEAR,
  619. X        XmNtopPosition, TOP_KPCLEAR,
  620. X        NULL
  621. X    );
  622. X}
  623. X
  624. X
  625. X/*
  626. X * force_dbprog_geometry
  627. X *    Set the geometry of the widgets in the database/program window.
  628. X *
  629. X * Args:
  630. X *    m - Pointer to the main widgets structure.
  631. X *
  632. X * Return:
  633. X *    Nothing.
  634. X */
  635. XSTATIC void
  636. Xforce_dbprog_geometry(widgets_t *m)
  637. X{
  638. X    /* CD program/database popup window widgets */
  639. X
  640. X    XtVaSetValues(m->dbprog.logo_lbl,
  641. X        XmNleftAttachment, XmATTACH_POSITION,
  642. X        XmNrightAttachment, XmATTACH_POSITION,
  643. X        XmNtopAttachment, XmATTACH_POSITION,
  644. X        XmNbottomAttachment, XmATTACH_POSITION,
  645. X        XmNleftPosition, LEFT_LOGO,
  646. X        XmNrightPosition, RIGHT_LOGO,
  647. X        XmNtopPosition, TOP_LOGO,
  648. X        XmNbottomPosition, BOTTOM_LOGO,
  649. X        NULL
  650. X    );
  651. X
  652. X    XtVaSetValues(m->dbprog.about_btn,
  653. X        XmNleftAttachment, XmATTACH_POSITION,
  654. X        XmNrightAttachment, XmATTACH_POSITION,
  655. X        XmNtopAttachment, XmATTACH_POSITION,
  656. X        XmNbottomAttachment, XmATTACH_POSITION,
  657. X        XmNleftPosition, LEFT_ABOUT,
  658. X        XmNrightPosition, RIGHT_ABOUT,
  659. X        XmNtopPosition, TOP_ABOUT,
  660. X        XmNbottomPosition, BOTTOM_ABOUT,
  661. X        NULL
  662. X    );
  663. X
  664. X    XtVaSetValues(m->dbprog.dtitle_lbl,
  665. X        XmNleftAttachment, XmATTACH_POSITION,
  666. X        XmNrightAttachment, XmATTACH_POSITION,
  667. X        XmNtopAttachment, XmATTACH_POSITION,
  668. X        XmNbottomAttachment, XmATTACH_POSITION,
  669. X        XmNleftPosition, LEFT_DTITLELBL,
  670. X        XmNrightPosition, RIGHT_DTITLELBL,
  671. X        XmNtopPosition, TOP_DTITLELBL,
  672. X        XmNbottomPosition, BOTTOM_DTITLELBL,
  673. X        NULL
  674. X    );
  675. X
  676. X    XtVaSetValues(m->dbprog.extd_lbl,
  677. X        XmNleftAttachment, XmATTACH_POSITION,
  678. X        XmNrightAttachment, XmATTACH_POSITION,
  679. X        XmNtopAttachment, XmATTACH_POSITION,
  680. X        XmNbottomAttachment, XmATTACH_POSITION,
  681. X        XmNleftPosition, LEFT_EXTDLBL,
  682. X        XmNrightPosition, RIGHT_EXTDLBL,
  683. X        XmNtopPosition, TOP_EXTDLBL,
  684. X        XmNbottomPosition, BOTTOM_EXTDLBL,
  685. X        NULL
  686. X    );
  687. X
  688. X    XtVaSetValues(m->dbprog.dtitle_txt,
  689. X        XmNleftAttachment, XmATTACH_POSITION,
  690. X        XmNrightAttachment, XmATTACH_POSITION,
  691. X        XmNtopAttachment, XmATTACH_POSITION,
  692. X        XmNbottomAttachment, XmATTACH_POSITION,
  693. X        XmNleftPosition, LEFT_DTITLE,
  694. X        XmNrightPosition, RIGHT_DTITLE,
  695. X        XmNtopPosition, TOP_DTITLE,
  696. X        XmNbottomPosition, BOTTOM_DTITLE,
  697. X        NULL
  698. X    );
  699. X
  700. X    XtVaSetValues(m->dbprog.extd_btn,
  701. X        XmNleftAttachment, XmATTACH_POSITION,
  702. X        XmNrightAttachment, XmATTACH_POSITION,
  703. X        XmNtopAttachment, XmATTACH_POSITION,
  704. X        XmNbottomAttachment, XmATTACH_POSITION,
  705. X        XmNleftPosition, LEFT_EXTD,
  706. X        XmNrightPosition, RIGHT_EXTD,
  707. X        XmNtopPosition, TOP_EXTD,
  708. X        XmNbottomPosition, BOTTOM_EXTD,
  709. X        NULL
  710. X    );
  711. X
  712. X    XtVaSetValues(m->dbprog.dbprog_sep1,
  713. X        XmNleftAttachment, XmATTACH_POSITION,
  714. X        XmNrightAttachment, XmATTACH_POSITION,
  715. X        XmNtopAttachment, XmATTACH_POSITION,
  716. X        XmNbottomAttachment, XmATTACH_NONE,
  717. X        XmNleftPosition, LEFT_DBPROGSEP1,
  718. X        XmNrightPosition, RIGHT_DBPROGSEP1,
  719. X        XmNtopPosition, TOP_DBPROGSEP1,
  720. X        NULL
  721. X    );
  722. X
  723. X    XtVaSetValues(m->dbprog.trklist_lbl,
  724. X        XmNleftAttachment, XmATTACH_POSITION,
  725. X        XmNrightAttachment, XmATTACH_POSITION,
  726. X        XmNtopAttachment, XmATTACH_POSITION,
  727. X        XmNbottomAttachment, XmATTACH_POSITION,
  728. X        XmNleftPosition, LEFT_TRKLISTLBL,
  729. X        XmNrightPosition, RIGHT_TRKLISTLBL,
  730. X        XmNtopPosition, TOP_TRKLISTLBL,
  731. X        XmNbottomPosition, BOTTOM_TRKLISTLBL,
  732. X        NULL
  733. X    );
  734. X
  735. X    XtVaSetValues(XtParent(m->dbprog.trk_list),
  736. X        XmNleftAttachment, XmATTACH_POSITION,
  737. X        XmNrightAttachment, XmATTACH_POSITION,
  738. X        XmNtopAttachment, XmATTACH_POSITION,
  739. X        XmNbottomAttachment, XmATTACH_POSITION,
  740. X        XmNleftPosition, LEFT_TRKLIST,
  741. X        XmNrightPosition, RIGHT_TRKLIST,
  742. X        XmNtopPosition, TOP_TRKLIST,
  743. X        XmNbottomPosition, BOTTOM_TRKLIST,
  744. X        NULL
  745. X    );
  746. X
  747. X    XtVaSetValues(m->dbprog.radio_lbl,
  748. X        XmNleftAttachment, XmATTACH_POSITION,
  749. X        XmNrightAttachment, XmATTACH_POSITION,
  750. X        XmNtopAttachment, XmATTACH_POSITION,
  751. X        XmNbottomAttachment, XmATTACH_POSITION,
  752. X        XmNleftPosition, LEFT_RADIOLBL,
  753. X        XmNrightPosition, RIGHT_RADIOLBL,
  754. X        XmNtopPosition, TOP_RADIOLBL,
  755. X        XmNbottomPosition, BOTTOM_RADIOLBL,
  756. X        NULL
  757. X    );
  758. X
  759. X    XtVaSetValues(m->dbprog.radio_frm,
  760. X        XmNleftAttachment, XmATTACH_POSITION,
  761. X        XmNrightAttachment, XmATTACH_POSITION,
  762. X        XmNtopAttachment, XmATTACH_POSITION,
  763. X        XmNbottomAttachment, XmATTACH_POSITION,
  764. X        XmNleftPosition, LEFT_RADIOBOX,
  765. X        XmNrightPosition, RIGHT_RADIOBOX,
  766. X        XmNtopPosition, TOP_RADIOBOX,
  767. X        XmNbottomPosition, BOTTOM_RADIOBOX,
  768. X        XmNshadowType, XmSHADOW_IN,
  769. X        NULL
  770. X    );
  771. X
  772. X    XtVaSetValues(m->dbprog.tottime_btn,
  773. X        XmNheight, 16,
  774. X        XmNrecomputeSize, False,
  775. X        NULL
  776. X    );
  777. X    XtVaSetValues(m->dbprog.trktime_btn,
  778. X        XmNheight, 16,
  779. X        XmNrecomputeSize, False,
  780. X        NULL
  781. X    );
  782. X
  783. X    XtVaSetValues(m->dbprog.ttitle_lbl,
  784. X        XmNleftAttachment, XmATTACH_POSITION,
  785. X        XmNrightAttachment, XmATTACH_POSITION,
  786. X        XmNtopAttachment, XmATTACH_POSITION,
  787. X        XmNbottomAttachment, XmATTACH_POSITION,
  788. X        XmNleftPosition, LEFT_TTITLELBL,
  789. X        XmNrightPosition, RIGHT_TTITLELBL,
  790. X        XmNtopPosition, TOP_TTITLELBL,
  791. X        XmNbottomPosition, BOTTOM_TTITLELBL,
  792. X        NULL
  793. X    );
  794. X
  795. X    XtVaSetValues(m->dbprog.extt_lbl,
  796. X        XmNleftAttachment, XmATTACH_POSITION,
  797. X        XmNrightAttachment, XmATTACH_POSITION,
  798. X        XmNtopAttachment, XmATTACH_POSITION,
  799. X        XmNbottomAttachment, XmATTACH_POSITION,
  800. X        XmNleftPosition, LEFT_EXTTLBL,
  801. X        XmNrightPosition, RIGHT_EXTTLBL,
  802. X        XmNtopPosition, TOP_EXTTLBL,
  803. X        XmNbottomPosition, BOTTOM_EXTTLBL,
  804. X        NULL
  805. X    );
  806. X
  807. X    XtVaSetValues(m->dbprog.ttitle_txt,
  808. X        XmNleftAttachment, XmATTACH_POSITION,
  809. X        XmNrightAttachment, XmATTACH_POSITION,
  810. X        XmNtopAttachment, XmATTACH_POSITION,
  811. X        XmNbottomAttachment, XmATTACH_POSITION,
  812. X        XmNleftPosition, LEFT_TTITLE,
  813. X        XmNrightPosition, RIGHT_TTITLE,
  814. X        XmNtopPosition, TOP_TTITLE,
  815. X        XmNbottomPosition, BOTTOM_TTITLE,
  816. X        NULL
  817. X    );
  818. X
  819. X    XtVaSetValues(m->dbprog.extt_btn,
  820. X        XmNleftAttachment, XmATTACH_POSITION,
  821. X        XmNrightAttachment, XmATTACH_POSITION,
  822. X        XmNtopAttachment, XmATTACH_POSITION,
  823. X        XmNbottomAttachment, XmATTACH_POSITION,
  824. X        XmNleftPosition, LEFT_EXTT,
  825. X        XmNrightPosition, RIGHT_EXTT,
  826. X        XmNtopPosition, TOP_EXTT,
  827. X        XmNbottomPosition, BOTTOM_EXTT,
  828. X        NULL
  829. X    );
  830. X
  831. X    XtVaSetValues(m->dbprog.pgm_lbl,
  832. X        XmNleftAttachment, XmATTACH_POSITION,
  833. X        XmNrightAttachment, XmATTACH_POSITION,
  834. X        XmNtopAttachment, XmATTACH_POSITION,
  835. X        XmNbottomAttachment, XmATTACH_POSITION,
  836. X        XmNleftPosition, LEFT_PGMLBL,
  837. X        XmNrightPosition, RIGHT_PGMLBL,
  838. X        XmNtopPosition, TOP_PGMLBL,
  839. X        XmNbottomPosition, BOTTOM_PGMLBL,
  840. X        NULL
  841. X    );
  842. X
  843. X    XtVaSetValues(m->dbprog.addpgm_btn,
  844. X        XmNleftAttachment, XmATTACH_POSITION,
  845. X        XmNrightAttachment, XmATTACH_POSITION,
  846. X        XmNtopAttachment, XmATTACH_POSITION,
  847. X        XmNbottomAttachment, XmATTACH_POSITION,
  848. X        XmNleftPosition, LEFT_ADDPGM,
  849. X        XmNrightPosition, RIGHT_ADDPGM,
  850. X        XmNtopPosition, TOP_ADDPGM,
  851. X        XmNbottomPosition, BOTTOM_ADDPGM,
  852. X        NULL
  853. X    );
  854. X
  855. X    XtVaSetValues(m->dbprog.clrpgm_btn,
  856. X        XmNleftAttachment, XmATTACH_POSITION,
  857. X        XmNrightAttachment, XmATTACH_POSITION,
  858. X        XmNtopAttachment, XmATTACH_POSITION,
  859. X        XmNbottomAttachment, XmATTACH_POSITION,
  860. X        XmNleftPosition, LEFT_CLRPGM,
  861. X        XmNrightPosition, RIGHT_CLRPGM,
  862. X        XmNtopPosition, TOP_CLRPGM,
  863. X        XmNbottomPosition, BOTTOM_CLRPGM,
  864. X        NULL
  865. X    );
  866. X
  867. X    XtVaSetValues(m->dbprog.playpgm_btn,
  868. X        XmNleftAttachment, XmATTACH_POSITION,
  869. X        XmNrightAttachment, XmATTACH_POSITION,
  870. X        XmNtopAttachment, XmATTACH_POSITION,
  871. X        XmNbottomAttachment, XmATTACH_POSITION,
  872. X        XmNleftPosition, LEFT_PLAYPGM,
  873. X        XmNrightPosition, RIGHT_PLAYPGM,
  874. X        XmNtopPosition, TOP_PLAYPGM,
  875. X        XmNbottomPosition, BOTTOM_PLAYPGM,
  876. X        NULL
  877. X    );
  878. X
  879. X    XtVaSetValues(m->dbprog.pgmseq_lbl,
  880. X        XmNleftAttachment, XmATTACH_POSITION,
  881. X        XmNrightAttachment, XmATTACH_POSITION,
  882. X        XmNtopAttachment, XmATTACH_POSITION,
  883. X        XmNbottomAttachment, XmATTACH_POSITION,
  884. X        XmNleftPosition, LEFT_PGMSEQLBL,
  885. X        XmNrightPosition, RIGHT_PGMSEQLBL,
  886. X        XmNtopPosition, TOP_PGMSEQLBL,
  887. X        XmNbottomPosition, BOTTOM_PGMSEQLBL,
  888. X        NULL
  889. X    );
  890. X
  891. X    XtVaSetValues(m->dbprog.pgmseq_txt,
  892. X        XmNleftAttachment, XmATTACH_POSITION,
  893. X        XmNrightAttachment, XmATTACH_POSITION,
  894. X        XmNtopAttachment, XmATTACH_POSITION,
  895. X        XmNbottomAttachment, XmATTACH_POSITION,
  896. X        XmNleftPosition, LEFT_PGMSEQ,
  897. X        XmNrightPosition, RIGHT_PGMSEQ,
  898. X        XmNtopPosition, TOP_PGMSEQ,
  899. X        XmNbottomPosition, BOTTOM_PGMSEQ,
  900. X        NULL
  901. X    );
  902. X
  903. X    XtVaSetValues(m->dbprog.dbprog_sep2,
  904. X        XmNleftAttachment, XmATTACH_POSITION,
  905. X        XmNrightAttachment, XmATTACH_POSITION,
  906. X        XmNtopAttachment, XmATTACH_POSITION,
  907. X        XmNbottomAttachment, XmATTACH_NONE,
  908. X        XmNleftPosition, LEFT_DBPROGSEP2,
  909. X        XmNrightPosition, RIGHT_DBPROGSEP2,
  910. X        XmNtopPosition, TOP_DBPROGSEP2,
  911. X        NULL
  912. X    );
  913. X
  914. X    XtVaSetValues(m->dbprog.savedb_btn,
  915. X        XmNleftAttachment, XmATTACH_POSITION,
  916. X        XmNrightAttachment, XmATTACH_POSITION,
  917. X        XmNtopAttachment, XmATTACH_POSITION,
  918. X        XmNbottomAttachment, XmATTACH_NONE,
  919. X        XmNleftPosition, LEFT_SAVEDB,
  920. X        XmNrightPosition, RIGHT_SAVEDB,
  921. X        XmNtopPosition, TOP_SAVEDB,
  922. X        NULL
  923. X    );
  924. X
  925. X    XtVaSetValues(m->dbprog.loaddb_btn,
  926. X        XmNleftAttachment, XmATTACH_POSITION,
  927. X        XmNrightAttachment, XmATTACH_POSITION,
  928. X        XmNtopAttachment, XmATTACH_POSITION,
  929. X        XmNbottomAttachment, XmATTACH_NONE,
  930. X        XmNleftPosition, LEFT_LOADDB,
  931. X        XmNrightPosition, RIGHT_LOADDB,
  932. X        XmNtopPosition, TOP_LOADDB,
  933. X        NULL
  934. X    );
  935. X
  936. X    XtVaSetValues(m->dbprog.linkdb_btn,
  937. X        XmNleftAttachment, XmATTACH_POSITION,
  938. X        XmNrightAttachment, XmATTACH_POSITION,
  939. X        XmNtopAttachment, XmATTACH_POSITION,
  940. X        XmNbottomAttachment, XmATTACH_NONE,
  941. X        XmNleftPosition, LEFT_LINK,
  942. X        XmNrightPosition, RIGHT_LINK,
  943. X        XmNtopPosition, TOP_LINK,
  944. X        NULL
  945. X    );
  946. X
  947. X    XtVaSetValues(m->dbprog.cancel_btn,
  948. X        XmNleftAttachment, XmATTACH_POSITION,
  949. X        XmNrightAttachment, XmATTACH_POSITION,
  950. X        XmNtopAttachment, XmATTACH_POSITION,
  951. X        XmNbottomAttachment, XmATTACH_NONE,
  952. X        XmNleftPosition, LEFT_DPCANCEL,
  953. X        XmNrightPosition, RIGHT_DPCANCEL,
  954. X        XmNtopPosition, TOP_DPCANCEL,
  955. X        NULL
  956. X    );
  957. X}
  958. X
  959. X
  960. X/*
  961. X * force_extd_geometry
  962. X *    Set the geometry of the widgets in the extended disc info
  963. X *    window.
  964. X *
  965. X * Args:
  966. X *    m - Pointer to the main widgets structure.
  967. X *
  968. X * Return:
  969. X *    Nothing.
  970. X */
  971. XSTATIC void
  972. Xforce_extd_geometry(widgets_t *m)
  973. X{
  974. X    /* Extended Disc Info popup window widgets */
  975. X
  976. X    XtVaSetValues(m->dbextd.disc_lbl,
  977. X        XmNleftAttachment, XmATTACH_POSITION,
  978. X        XmNrightAttachment, XmATTACH_POSITION,
  979. X        XmNtopAttachment, XmATTACH_POSITION,
  980. X        XmNbottomAttachment, XmATTACH_POSITION,
  981. X        XmNleftPosition, LEFT_DISCLBL,
  982. X        XmNrightPosition, RIGHT_DISCLBL,
  983. X        XmNtopPosition, TOP_DISCLBL,
  984. X        XmNbottomPosition, BOTTOM_DISCLBL,
  985. X        NULL
  986. X    );
  987. X    
  988. X    XtVaSetValues(XtParent(m->dbextd.disc_txt),
  989. X        XmNleftAttachment, XmATTACH_POSITION,
  990. X        XmNrightAttachment, XmATTACH_POSITION,
  991. X        XmNtopAttachment, XmATTACH_POSITION,
  992. X        XmNbottomAttachment, XmATTACH_POSITION,
  993. X        XmNleftPosition, LEFT_EXTDTXT,
  994. X        XmNrightPosition, RIGHT_EXTDTXT,
  995. X        XmNtopPosition, TOP_EXTDTXT,
  996. X        XmNbottomPosition, BOTTOM_EXTDTXT,
  997. X        NULL
  998. X    );
  999. X    
  1000. X    XtVaSetValues(m->dbextd.dbextd_sep,
  1001. X        XmNleftAttachment, XmATTACH_POSITION,
  1002. X        XmNrightAttachment, XmATTACH_POSITION,
  1003. X        XmNtopAttachment, XmATTACH_POSITION,
  1004. X        XmNbottomAttachment, XmATTACH_NONE,
  1005. X        XmNleftPosition, LEFT_DBEXTDSEP,
  1006. X        XmNrightPosition, RIGHT_DBEXTDSEP,
  1007. X        XmNtopPosition, TOP_DBEXTDSEP,
  1008. X        NULL
  1009. X    );
  1010. X    
  1011. X    XtVaSetValues(m->dbextd.ok_btn,
  1012. X        XmNleftAttachment, XmATTACH_POSITION,
  1013. X        XmNrightAttachment, XmATTACH_POSITION,
  1014. X        XmNtopAttachment, XmATTACH_POSITION,
  1015. X        XmNbottomAttachment, XmATTACH_NONE,
  1016. X        XmNleftPosition, LEFT_DDOK,
  1017. X        XmNrightPosition, RIGHT_DDOK,
  1018. X        XmNtopPosition, TOP_DDOK,
  1019. X        NULL
  1020. X    );
  1021. X    
  1022. X    XtVaSetValues(m->dbextd.clear_btn,
  1023. X        XmNleftAttachment, XmATTACH_POSITION,
  1024. X        XmNrightAttachment, XmATTACH_POSITION,
  1025. X        XmNtopAttachment, XmATTACH_POSITION,
  1026. X        XmNbottomAttachment, XmATTACH_NONE,
  1027. X        XmNleftPosition, LEFT_DDCLEAR,
  1028. X        XmNrightPosition, RIGHT_DDCLEAR,
  1029. X        XmNtopPosition, TOP_DDCLEAR,
  1030. X        NULL
  1031. X    );
  1032. X
  1033. X    XtVaSetValues(m->dbextd.cancel_btn,
  1034. X        XmNleftAttachment, XmATTACH_POSITION,
  1035. X        XmNrightAttachment, XmATTACH_POSITION,
  1036. X        XmNtopAttachment, XmATTACH_POSITION,
  1037. X        XmNbottomAttachment, XmATTACH_NONE,
  1038. X        XmNleftPosition, LEFT_DDCANCEL,
  1039. X        XmNrightPosition, RIGHT_DDCANCEL,
  1040. X        XmNtopPosition, TOP_DDCANCEL,
  1041. X        NULL
  1042. X    );
  1043. X}
  1044. X
  1045. X
  1046. X/*
  1047. X * force_extt_geometry
  1048. X *    Set the geometry of the widgets in the extended track info
  1049. X *    window.
  1050. X *
  1051. X * Args:
  1052. X *    m - Pointer to the main widgets structure.
  1053. X *
  1054. X * Return:
  1055. X *    Nothing.
  1056. X */
  1057. XSTATIC void
  1058. Xforce_extt_geometry(widgets_t *m)
  1059. X{
  1060. X    /* Extended Track Info popup window widgets */
  1061. X
  1062. X    XtVaSetValues(m->dbextt.trk_lbl,
  1063. X        XmNleftAttachment, XmATTACH_POSITION,
  1064. X        XmNrightAttachment, XmATTACH_POSITION,
  1065. X        XmNtopAttachment, XmATTACH_POSITION,
  1066. X        XmNbottomAttachment, XmATTACH_POSITION,
  1067. X        XmNleftPosition, LEFT_TRKLBL,
  1068. X        XmNrightPosition, RIGHT_TRKLBL,
  1069. X        XmNtopPosition, TOP_TRKLBL,
  1070. X        XmNbottomPosition, BOTTOM_TRKLBL,
  1071. X        NULL
  1072. X    );
  1073. X    
  1074. X    XtVaSetValues(XtParent(m->dbextt.trk_txt),
  1075. X        XmNleftAttachment, XmATTACH_POSITION,
  1076. X        XmNrightAttachment, XmATTACH_POSITION,
  1077. X        XmNtopAttachment, XmATTACH_POSITION,
  1078. X        XmNbottomAttachment, XmATTACH_POSITION,
  1079. X        XmNleftPosition, LEFT_EXTTTXT,
  1080. X        XmNrightPosition, RIGHT_EXTTTXT,
  1081. X        XmNtopPosition, TOP_EXTTTXT,
  1082. X        XmNbottomPosition, BOTTOM_EXTTTXT,
  1083. X        NULL
  1084. X    );
  1085. X    
  1086. X    XtVaSetValues(m->dbextt.dbextt_sep,
  1087. X        XmNleftAttachment, XmATTACH_POSITION,
  1088. X        XmNrightAttachment, XmATTACH_POSITION,
  1089. X        XmNtopAttachment, XmATTACH_POSITION,
  1090. X        XmNbottomAttachment, XmATTACH_NONE,
  1091. X        XmNleftPosition, LEFT_DBEXTTSEP,
  1092. X        XmNrightPosition, RIGHT_DBEXTTSEP,
  1093. X        XmNtopPosition, TOP_DBEXTTSEP,
  1094. X        NULL
  1095. X    );
  1096. X    
  1097. X    XtVaSetValues(m->dbextt.ok_btn,
  1098. X        XmNleftAttachment, XmATTACH_POSITION,
  1099. X        XmNrightAttachment, XmATTACH_POSITION,
  1100. X        XmNtopAttachment, XmATTACH_POSITION,
  1101. X        XmNbottomAttachment, XmATTACH_NONE,
  1102. X        XmNleftPosition, LEFT_DTOK,
  1103. X        XmNrightPosition, RIGHT_DTOK,
  1104. X        XmNtopPosition, TOP_DTOK,
  1105. X        NULL
  1106. X    );
  1107. X    
  1108. X    XtVaSetValues(m->dbextt.clear_btn,
  1109. X        XmNleftAttachment, XmATTACH_POSITION,
  1110. X        XmNrightAttachment, XmATTACH_POSITION,
  1111. X        XmNtopAttachment, XmATTACH_POSITION,
  1112. X        XmNbottomAttachment, XmATTACH_NONE,
  1113. X        XmNleftPosition, LEFT_DTCLEAR,
  1114. X        XmNrightPosition, RIGHT_DTCLEAR,
  1115. X        XmNtopPosition, TOP_DTCLEAR,
  1116. X        NULL
  1117. X    );
  1118. X
  1119. X    XtVaSetValues(m->dbextt.cancel_btn,
  1120. X        XmNleftAttachment, XmATTACH_POSITION,
  1121. X        XmNrightAttachment, XmATTACH_POSITION,
  1122. X        XmNtopAttachment, XmATTACH_POSITION,
  1123. X        XmNbottomAttachment, XmATTACH_NONE,
  1124. X        XmNleftPosition, LEFT_DTCANCEL,
  1125. X        XmNrightPosition, RIGHT_DTCANCEL,
  1126. X        XmNtopPosition, TOP_DTCANCEL,
  1127. X        NULL
  1128. X    );
  1129. X}
  1130. X
  1131. X
  1132. X/*
  1133. X * force_help_geometry
  1134. X *    Set the geometry of the widgets in the help display window.
  1135. X *
  1136. X * Args:
  1137. X *    m - Pointer to the main widgets structure.
  1138. X *
  1139. X * Return:
  1140. X *    Nothing.
  1141. X */
  1142. XSTATIC void
  1143. Xforce_help_geometry(widgets_t *m)
  1144. X{
  1145. X    XtVaSetValues(XtParent(m->help.help_txt),
  1146. X        XmNleftAttachment, XmATTACH_POSITION,
  1147. X        XmNrightAttachment, XmATTACH_POSITION,
  1148. X        XmNtopAttachment, XmATTACH_POSITION,
  1149. X        XmNbottomAttachment, XmATTACH_POSITION,
  1150. X        XmNleftPosition, LEFT_HELPTXT,
  1151. X        XmNrightPosition, RIGHT_HELPTXT,
  1152. X        XmNtopPosition, TOP_HELPTXT,
  1153. X        XmNbottomPosition, BOTTOM_HELPTXT,
  1154. X        NULL
  1155. X    );
  1156. X    
  1157. X    XtVaSetValues(m->help.help_sep,
  1158. X        XmNleftAttachment, XmATTACH_POSITION,
  1159. X        XmNrightAttachment, XmATTACH_POSITION,
  1160. X        XmNtopAttachment, XmATTACH_POSITION,
  1161. X        XmNbottomAttachment, XmATTACH_NONE,
  1162. X        XmNleftPosition, LEFT_HELPSEP,
  1163. X        XmNrightPosition, RIGHT_HELPSEP,
  1164. X        XmNtopPosition, TOP_HELPSEP,
  1165. X        NULL
  1166. X    );
  1167. X    
  1168. X    XtVaSetValues(m->help.ok_btn,
  1169. X        XmNleftAttachment, XmATTACH_POSITION,
  1170. X        XmNrightAttachment, XmATTACH_POSITION,
  1171. X        XmNtopAttachment, XmATTACH_POSITION,
  1172. X        XmNbottomAttachment, XmATTACH_NONE,
  1173. X        XmNleftPosition, LEFT_HELPOK,
  1174. X        XmNrightPosition, RIGHT_HELPOK,
  1175. X        XmNtopPosition, TOP_HELPOK,
  1176. X        NULL
  1177. X    );
  1178. X}
  1179. X
  1180. X
  1181. X/*
  1182. X * force_dirsel_geometry
  1183. X *    Set the geometry of the widgets in the CD database directory
  1184. X *    selector window.
  1185. X *
  1186. X * Args:
  1187. X *    m - Pointer to the main widgets structure.
  1188. X *
  1189. X * Return:
  1190. X *    Nothing.
  1191. X */
  1192. XSTATIC void
  1193. Xforce_dirsel_geometry(widgets_t *m)
  1194. X{
  1195. X    /* Directory selector popup widgets */
  1196. X
  1197. X    XtVaSetValues(m->dirsel.dir_lbl,
  1198. X        XmNleftAttachment, XmATTACH_POSITION,
  1199. X        XmNrightAttachment, XmATTACH_POSITION,
  1200. X        XmNtopAttachment, XmATTACH_POSITION,
  1201. X        XmNbottomAttachment, XmATTACH_POSITION,
  1202. X        XmNleftPosition, LEFT_DIRLBL,
  1203. X        XmNrightPosition, RIGHT_DIRLBL,
  1204. X        XmNtopPosition, TOP_DIRLBL,
  1205. X        XmNbottomPosition, BOTTOM_DIRLBL,
  1206. X        NULL
  1207. X    );
  1208. X    
  1209. X    XtVaSetValues(XtParent(m->dirsel.dir_list),
  1210. X        XmNleftAttachment, XmATTACH_POSITION,
  1211. X        XmNrightAttachment, XmATTACH_POSITION,
  1212. X        XmNtopAttachment, XmATTACH_POSITION,
  1213. X        XmNbottomAttachment, XmATTACH_POSITION,
  1214. X        XmNleftPosition, LEFT_DIRLIST,
  1215. X        XmNrightPosition, RIGHT_DIRLIST,
  1216. X        XmNtopPosition, TOP_DIRLIST,
  1217. X        XmNbottomPosition, BOTTOM_DIRLIST,
  1218. X        NULL
  1219. X    );
  1220. X    
  1221. X    XtVaSetValues(m->dirsel.dirsel_sep,
  1222. X        XmNleftAttachment, XmATTACH_POSITION,
  1223. X        XmNrightAttachment, XmATTACH_POSITION,
  1224. X        XmNtopAttachment, XmATTACH_POSITION,
  1225. X        XmNbottomAttachment, XmATTACH_NONE,
  1226. X        XmNleftPosition, LEFT_DIRSELSEP,
  1227. X        XmNrightPosition, RIGHT_DIRSELSEP,
  1228. X        XmNtopPosition, TOP_DIRSELSEP,
  1229. X        NULL
  1230. X    );
  1231. X    
  1232. X    XtVaSetValues(m->dirsel.ok_btn,
  1233. X        XmNleftAttachment, XmATTACH_POSITION,
  1234. X        XmNrightAttachment, XmATTACH_POSITION,
  1235. X        XmNtopAttachment, XmATTACH_POSITION,
  1236. X        XmNbottomAttachment, XmATTACH_NONE,
  1237. X        XmNleftPosition, LEFT_DSOK,
  1238. X        XmNrightPosition, RIGHT_DSOK,
  1239. X        XmNtopPosition, TOP_DSOK,
  1240. X        NULL
  1241. X    );
  1242. X    
  1243. X    XtVaSetValues(m->dirsel.cancel_btn,
  1244. X        XmNleftAttachment, XmATTACH_POSITION,
  1245. X        XmNrightAttachment, XmATTACH_POSITION,
  1246. X        XmNtopAttachment, XmATTACH_POSITION,
  1247. X        XmNbottomAttachment, XmATTACH_NONE,
  1248. X        XmNleftPosition, LEFT_DSCANCEL,
  1249. X        XmNrightPosition, RIGHT_DSCANCEL,
  1250. X        XmNtopPosition, TOP_DSCANCEL,
  1251. X        NULL
  1252. X    );
  1253. X}
  1254. X
  1255. X
  1256. X/*
  1257. X * force_linksel_geometry
  1258. X *    Set the geometry of the widgets in the search-link selector
  1259. X *    list window.
  1260. X *
  1261. X * Args:
  1262. X *    m - Pointer to the main widgets structure.
  1263. X *
  1264. X * Return:
  1265. X *    Nothing.
  1266. X */
  1267. XSTATIC void
  1268. Xforce_linksel_geometry(widgets_t *m)
  1269. X{
  1270. X    /* Link selector popup widgets */
  1271. X
  1272. X    XtVaSetValues(m->linksel.link_lbl,
  1273. X        XmNleftAttachment, XmATTACH_POSITION,
  1274. X        XmNrightAttachment, XmATTACH_POSITION,
  1275. X        XmNtopAttachment, XmATTACH_POSITION,
  1276. X        XmNbottomAttachment, XmATTACH_POSITION,
  1277. X        XmNleftPosition, LEFT_LINKLBL,
  1278. X        XmNrightPosition, RIGHT_LINKLBL,
  1279. X        XmNtopPosition, TOP_LINKLBL,
  1280. X        XmNbottomPosition, BOTTOM_LINKLBL,
  1281. X        NULL
  1282. X    );
  1283. X    
  1284. X    XtVaSetValues(XtParent(m->linksel.link_list),
  1285. X        XmNleftAttachment, XmATTACH_POSITION,
  1286. X        XmNrightAttachment, XmATTACH_POSITION,
  1287. X        XmNtopAttachment, XmATTACH_POSITION,
  1288. X        XmNbottomAttachment, XmATTACH_POSITION,
  1289. X        XmNleftPosition, LEFT_LINKLIST,
  1290. X        XmNrightPosition, RIGHT_LINKLIST,
  1291. X        XmNtopPosition, TOP_LINKLIST,
  1292. X        XmNbottomPosition, BOTTOM_LINKLIST,
  1293. X        NULL
  1294. X    );
  1295. X    
  1296. X    XtVaSetValues(m->linksel.linksel_sep,
  1297. X        XmNleftAttachment, XmATTACH_POSITION,
  1298. X        XmNrightAttachment, XmATTACH_POSITION,
  1299. X        XmNtopAttachment, XmATTACH_POSITION,
  1300. X        XmNbottomAttachment, XmATTACH_NONE,
  1301. X        XmNleftPosition, LEFT_LINKSELSEP,
  1302. X        XmNrightPosition, RIGHT_LINKSELSEP,
  1303. X        XmNtopPosition, TOP_LINKSELSEP,
  1304. X        NULL
  1305. X    );
  1306. X    
  1307. X    XtVaSetValues(m->linksel.ok_btn,
  1308. X        XmNleftAttachment, XmATTACH_POSITION,
  1309. X        XmNrightAttachment, XmATTACH_POSITION,
  1310. X        XmNtopAttachment, XmATTACH_POSITION,
  1311. X        XmNbottomAttachment, XmATTACH_NONE,
  1312. X        XmNleftPosition, LEFT_LSOK,
  1313. X        XmNrightPosition, RIGHT_LSOK,
  1314. X        XmNtopPosition, TOP_LSOK,
  1315. X        NULL
  1316. X    );
  1317. X    
  1318. X    XtVaSetValues(m->linksel.cancel_btn,
  1319. X        XmNleftAttachment, XmATTACH_POSITION,
  1320. X        XmNrightAttachment, XmATTACH_POSITION,
  1321. X        XmNtopAttachment, XmATTACH_POSITION,
  1322. X        XmNbottomAttachment, XmATTACH_NONE,
  1323. X        XmNleftPosition, LEFT_LSCANCEL,
  1324. X        XmNrightPosition, RIGHT_LSCANCEL,
  1325. X        XmNtopPosition, TOP_LSCANCEL,
  1326. X        NULL
  1327. X    );
  1328. X}
  1329. X
  1330. X
  1331. X/*
  1332. X * force_dialog_geometry
  1333. X *    Set the geometry of the widgets in the dialog box windows.
  1334. X *
  1335. X * Args:
  1336. X *    m - Pointer to the main widgets structure.
  1337. X *
  1338. X * Return:
  1339. X *    Nothing.
  1340. X */
  1341. X/*ARGSUSED*/
  1342. XSTATIC void
  1343. Xforce_dialog_geometry(widgets_t *m)
  1344. X{
  1345. X    /* For future expansion */
  1346. X}
  1347. X
  1348. X
  1349. X/*
  1350. X * force_geometry
  1351. X *    Top level function to set the geometry of the widgets in each
  1352. X *    main and sub-window.
  1353. X *
  1354. X * Args:
  1355. X *    m - Pointer to the main widgets structure.
  1356. X *
  1357. X * Return:
  1358. X *    Nothing.
  1359. X */
  1360. Xvoid
  1361. Xforce_geometry(widgets_t *m)
  1362. X{
  1363. X    force_main_geometry(m);
  1364. X    force_keypad_geometry(m);
  1365. X    force_dbprog_geometry(m);
  1366. X    force_extd_geometry(m);
  1367. X    force_extt_geometry(m);
  1368. X    force_help_geometry(m);
  1369. X    force_dirsel_geometry(m);
  1370. X    force_linksel_geometry(m);
  1371. X    force_dialog_geometry(m);
  1372. X}
  1373. X
  1374. X
  1375. END_OF_FILE
  1376. if test 36037 -ne `wc -c <'geometry.c'`; then
  1377.     echo shar: \"'geometry.c'\" unpacked with wrong size!
  1378. fi
  1379. # end of 'geometry.c'
  1380. fi
  1381. if test -f 'help.c' -a "${1}" != "-c" ; then 
  1382.   echo shar: Will not clobber existing file \"'help.c'\"
  1383. else
  1384. echo shar: Extracting \"'help.c'\" \(12796 characters\)
  1385. sed "s/^X//" >'help.c' <<'END_OF_FILE'
  1386. X/*
  1387. X *   xmcd - Motif(tm) CD Audio Player
  1388. X *
  1389. X *   Copyright (C) 1993  Ti Kan
  1390. X *   E-mail: ti@amb.org
  1391. X *
  1392. X *   This program is free software; you can redistribute it and/or modify
  1393. X *   it under the terms of the GNU General Public License as published by
  1394. X *   the Free Software Foundation; either version 2 of the License, or
  1395. X *   (at your option) any later version.
  1396. X *
  1397. X *   This program is distributed in the hope that it will be useful,
  1398. X *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  1399. X *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1400. X *   GNU General Public License for more details.
  1401. X *
  1402. X *   You should have received a copy of the GNU General Public License
  1403. X *   along with this program; if not, write to the Free Software
  1404. X *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1405. X *
  1406. X */
  1407. X#ifndef LINT
  1408. Xstatic char *_help_c_ident_ = "@(#)help.c    1.16 93/09/28";
  1409. X#endif
  1410. X
  1411. X#include <Xm/Xm.h>
  1412. X#include <Xm/Text.h>
  1413. X#include "xmcd.h"
  1414. X#include "widget.h"
  1415. X#include "cdfunc.h"
  1416. X#include "help.h"
  1417. X
  1418. X
  1419. X/* This structure is used to map widgets to associated help files.
  1420. X * Instead of using XtName(), this mechanism allows us to map multiple
  1421. X * widgets to a common help file.  Also, we can use arbitrary lengths
  1422. X * for the widget name and still have help files with less than 14 chars
  1423. X * in its name (necessary for compatibility with some systems).
  1424. X */
  1425. Xtypedef struct {
  1426. X    Widget    widget;
  1427. X    char    *hlpname;
  1428. X} wname_t;
  1429. X
  1430. X
  1431. Xextern AppData        app_data;
  1432. Xextern widgets_t    widgets;
  1433. X
  1434. XSTATIC wname_t        wname[MAX_HELP_WIDGETS];
  1435. XSTATIC char        tmpbuf[STR_BUF_SZ * 2];
  1436. X
  1437. X
  1438. X/*
  1439. X * help_mapinit
  1440. X *    Initialize the widget-to-helpfile_name mapping table.
  1441. X *
  1442. X * Args:
  1443. X *    Nothing.
  1444. X *
  1445. X * Return:
  1446. X *    Nothing.
  1447. X */
  1448. XSTATIC void
  1449. Xhelp_mapinit(void)
  1450. X{
  1451. X    int    i = 0;
  1452. X
  1453. X    wname[i].widget = widgets.main.check_box;
  1454. X    wname[i++].hlpname = "CheckBox";
  1455. X    wname[i].widget = widgets.main.eject_btn;
  1456. X    wname[i++].hlpname = "EjectBtn";
  1457. X    wname[i].widget = widgets.main.poweroff_btn;
  1458. X    wname[i++].hlpname = "PowerBtn";
  1459. X    wname[i].widget = widgets.main.dbprog_btn;
  1460. X    wname[i++].hlpname = "DbProgBtn";
  1461. X    wname[i].widget = widgets.main.time_btn;
  1462. X    wname[i++].hlpname = "TimeBtn";
  1463. X    wname[i].widget = widgets.main.ab_btn;
  1464. X    wname[i++].hlpname = "AbBtn";
  1465. X    wname[i].widget = widgets.main.sample_btn;
  1466. X    wname[i++].hlpname = "SampleBtn";
  1467. X    wname[i].widget = widgets.main.keypad_btn;
  1468. X    wname[i++].hlpname = "KeypadBtn";
  1469. X    wname[i].widget = widgets.main.help_btn;
  1470. X    wname[i++].hlpname = "HelpBtn";
  1471. X    wname[i].widget = widgets.main.level_scale;
  1472. X    wname[i++].hlpname = "LevelScale";
  1473. X    wname[i].widget = widgets.main.playpause_btn;
  1474. X    wname[i++].hlpname = "PlayPauseBtn";
  1475. X    wname[i].widget = widgets.main.stop_btn;
  1476. X    wname[i++].hlpname = "StopBtn";
  1477. X    wname[i].widget = widgets.main.prevtrk_btn;
  1478. X    wname[i++].hlpname = "PrevTrkBtn";
  1479. X    wname[i].widget = widgets.main.nexttrk_btn;
  1480. X    wname[i++].hlpname = "NextTrkBtn";
  1481. X    wname[i].widget = widgets.main.previdx_btn;
  1482. X    wname[i++].hlpname = "PrevIdxBtn";
  1483. X    wname[i].widget = widgets.main.nextidx_btn;
  1484. X    wname[i++].hlpname = "NextIdxBtn";
  1485. X    wname[i].widget = widgets.main.rew_btn;
  1486. X    wname[i++].hlpname = "RewBtn";
  1487. X    wname[i].widget = widgets.main.ff_btn;
  1488. X    wname[i++].hlpname = "FfBtn";
  1489. X    wname[i].widget = widgets.main.track_ind;
  1490. X    wname[i++].hlpname = "TrackInd";
  1491. X    wname[i].widget = widgets.main.index_ind;
  1492. X    wname[i++].hlpname = "IndexInd";
  1493. X    wname[i].widget = widgets.main.time_ind;
  1494. X    wname[i++].hlpname = "TimeInd";
  1495. X    wname[i].widget = widgets.main.dbmode_ind;
  1496. X    wname[i++].hlpname = "DbModeInd";
  1497. X    wname[i].widget = widgets.main.progmode_ind;
  1498. X    wname[i++].hlpname = "ProgModeInd";
  1499. X    wname[i].widget = widgets.main.timemode_ind;
  1500. X    wname[i++].hlpname = "TimeModeInd";
  1501. X    wname[i].widget = widgets.main.playmode_ind;
  1502. X    wname[i++].hlpname = "PlayModeInd";
  1503. X    wname[i].widget = widgets.keypad.keypad_ind;
  1504. X    wname[i++].hlpname = "KeypadInd";
  1505. X    wname[i].widget = widgets.keypad.num_btn[0];
  1506. X    wname[i++].hlpname = "KpNumBtn";
  1507. X    wname[i].widget = widgets.keypad.num_btn[1];
  1508. X    wname[i++].hlpname = "KpNumBtn";
  1509. X    wname[i].widget = widgets.keypad.num_btn[2];
  1510. X    wname[i++].hlpname = "KpNumBtn";
  1511. X    wname[i].widget = widgets.keypad.num_btn[3];
  1512. X    wname[i++].hlpname = "KpNumBtn";
  1513. X    wname[i].widget = widgets.keypad.num_btn[4];
  1514. X    wname[i++].hlpname = "KpNumBtn";
  1515. X    wname[i].widget = widgets.keypad.num_btn[5];
  1516. X    wname[i++].hlpname = "KpNumBtn";
  1517. X    wname[i].widget = widgets.keypad.num_btn[6];
  1518. X    wname[i++].hlpname = "KpNumBtn";
  1519. X    wname[i].widget = widgets.keypad.num_btn[7];
  1520. X    wname[i++].hlpname = "KpNumBtn";
  1521. X    wname[i].widget = widgets.keypad.num_btn[8];
  1522. X    wname[i++].hlpname = "KpNumBtn";
  1523. X    wname[i].widget = widgets.keypad.num_btn[9];
  1524. X    wname[i++].hlpname = "KpNumBtn";
  1525. X    wname[i].widget = widgets.keypad.enter_btn;
  1526. X    wname[i++].hlpname = "KpEnterBtn";
  1527. X    wname[i].widget = widgets.keypad.cancel_btn;
  1528. X    wname[i++].hlpname = "KpCancelBtn";
  1529. X    wname[i].widget = widgets.keypad.clear_btn;
  1530. X    wname[i++].hlpname = "KpClearBtn";
  1531. X    wname[i].widget = widgets.dbprog.about_btn;
  1532. X    wname[i++].hlpname = "DpAboutBtn";
  1533. X    wname[i].widget = widgets.dbprog.dtitle_txt;
  1534. X    wname[i++].hlpname = "DpDTitleTxt";
  1535. X    wname[i].widget = widgets.dbprog.extd_btn;
  1536. X    wname[i++].hlpname = "DpDExtBtn";
  1537. X    wname[i].widget = widgets.dbprog.trk_list;
  1538. X    wname[i++].hlpname = "DpTrkList";
  1539. X    wname[i].widget = widgets.dbprog.addpgm_btn;
  1540. X    wname[i++].hlpname = "DpAddPgmBtn";
  1541. X    wname[i].widget = widgets.dbprog.clrpgm_btn;
  1542. X    wname[i++].hlpname = "DpClrPgmBtn";
  1543. X    wname[i].widget = widgets.dbprog.playpgm_btn;
  1544. X    wname[i++].hlpname = "DpPlayPgmBtn";
  1545. X    wname[i].widget = widgets.dbprog.radio_box;
  1546. X    wname[i++].hlpname = "DpTimeSelBtn";
  1547. X    wname[i].widget = widgets.dbprog.ttitle_txt;
  1548. X    wname[i++].hlpname = "DpTTitleTxt";
  1549. X    wname[i].widget = widgets.dbprog.extt_btn;
  1550. X    wname[i++].hlpname = "DpTExtBtn";
  1551. X    wname[i].widget = widgets.dbprog.pgmseq_txt;
  1552. X    wname[i++].hlpname = "DpPgmSeqTxt";
  1553. X    wname[i].widget = widgets.dbprog.savedb_btn;
  1554. X    wname[i++].hlpname = "DpSaveBtn";
  1555. X    wname[i].widget = widgets.dbprog.loaddb_btn;
  1556. X    wname[i++].hlpname = "DpLoadBtn";
  1557. X    wname[i].widget = widgets.dbprog.linkdb_btn;
  1558. X    wname[i++].hlpname = "DpLinkBtn";
  1559. X    wname[i].widget = widgets.dbprog.cancel_btn;
  1560. X    wname[i++].hlpname = "DpCancelBtn";
  1561. X    wname[i].widget = widgets.dbextd.disc_txt;
  1562. X    wname[i++].hlpname = "DdDiscTxt";
  1563. X    wname[i].widget = widgets.dbextd.ok_btn;
  1564. X    wname[i++].hlpname = "DdOkBtn";
  1565. X    wname[i].widget = widgets.dbextd.clear_btn;
  1566. X    wname[i++].hlpname = "DdClrBtn";
  1567. X    wname[i].widget = widgets.dbextd.cancel_btn;
  1568. X    wname[i++].hlpname = "DdCancelBtn";
  1569. X    wname[i].widget = widgets.dbextt.trk_txt;
  1570. X    wname[i++].hlpname = "DtTrackTxt";
  1571. X    wname[i].widget = widgets.dbextt.ok_btn;
  1572. X    wname[i++].hlpname = "DtOkBtn";
  1573. X    wname[i].widget = widgets.dbextt.clear_btn;
  1574. X    wname[i++].hlpname = "DtClrBtn";
  1575. X    wname[i].widget = widgets.dbextt.cancel_btn;
  1576. X    wname[i++].hlpname = "DtCancelBtn";
  1577. X    wname[i].widget = widgets.dirsel.dir_list;
  1578. X    wname[i++].hlpname = "DsDirList";
  1579. X    wname[i].widget = widgets.dirsel.ok_btn;
  1580. X    wname[i++].hlpname = "DsOkBtn";
  1581. X    wname[i].widget = widgets.dirsel.cancel_btn;
  1582. X    wname[i++].hlpname = "DsCancelBtn";
  1583. X    wname[i].widget = widgets.linksel.link_list;
  1584. X    wname[i++].hlpname = "LsLinkList";
  1585. X    wname[i].widget = widgets.linksel.ok_btn;
  1586. X    wname[i++].hlpname = "LsOkBtn";
  1587. X    wname[i].widget = widgets.linksel.cancel_btn;
  1588. X    wname[i++].hlpname = "LsCancelBtn";
  1589. X    wname[i].widget = (Widget) NULL;
  1590. X    wname[i].hlpname = NULL;
  1591. X}
  1592. X
  1593. X
  1594. X/*
  1595. X * help_setup
  1596. X *    Top level function to set up the help subsystem.
  1597. X *
  1598. X * Args:
  1599. X *    Nothing.
  1600. X *
  1601. X * Return:
  1602. X *    Nothing.
  1603. X */
  1604. Xvoid
  1605. Xhelp_setup(widgets_t *m)
  1606. X{
  1607. X    int        i;
  1608. X    char        xlat_str[40];
  1609. X    XtTranslations    xtab1,
  1610. X            xtab2;
  1611. X
  1612. X    sprintf(xlat_str, "<Btn3Down>,<Btn3Up>: Help()\n");
  1613. X    xtab1 = XtParseTranslationTable(xlat_str);
  1614. X    sprintf(xlat_str, "<Btn3Down>,<Btn3Up>: PrimitiveHelp()\n");
  1615. X    xtab2 = XtParseTranslationTable(xlat_str);
  1616. X
  1617. X    /* Translations for the main window widgets */
  1618. X    XtOverrideTranslations(m->main.check_box, xtab1);
  1619. X    XtOverrideTranslations(m->main.eject_btn, xtab1);
  1620. X    XtOverrideTranslations(m->main.poweroff_btn, xtab1);
  1621. X    XtOverrideTranslations(m->main.track_ind, xtab1);
  1622. X    XtOverrideTranslations(m->main.index_ind, xtab1);
  1623. X    XtOverrideTranslations(m->main.time_ind, xtab1);
  1624. X    XtOverrideTranslations(m->main.dbmode_ind, xtab1);
  1625. X    XtOverrideTranslations(m->main.progmode_ind, xtab1);
  1626. X    XtOverrideTranslations(m->main.timemode_ind, xtab1);
  1627. X    XtOverrideTranslations(m->main.playmode_ind, xtab1);
  1628. X    XtOverrideTranslations(m->main.dbprog_btn, xtab1);
  1629. X    XtOverrideTranslations(m->main.time_btn, xtab1);
  1630. X    XtOverrideTranslations(m->main.ab_btn, xtab1);
  1631. X    XtOverrideTranslations(m->main.sample_btn, xtab1);
  1632. X    XtOverrideTranslations(m->main.keypad_btn, xtab1);
  1633. X    XtOverrideTranslations(m->main.help_btn, xtab1);
  1634. X    XtOverrideTranslations(m->main.level_scale, xtab1);
  1635. X    XtOverrideTranslations(m->main.playpause_btn, xtab1);
  1636. X    XtOverrideTranslations(m->main.stop_btn, xtab1);
  1637. X    XtOverrideTranslations(m->main.previdx_btn, xtab1);
  1638. X    XtOverrideTranslations(m->main.nextidx_btn, xtab1);
  1639. X    XtOverrideTranslations(m->main.prevtrk_btn, xtab1);
  1640. X    XtOverrideTranslations(m->main.nexttrk_btn, xtab1);
  1641. X    XtOverrideTranslations(m->main.rew_btn, xtab1);
  1642. X    XtOverrideTranslations(m->main.ff_btn, xtab1);
  1643. X
  1644. X    /* Translations for the keypad window widgets */
  1645. X    XtOverrideTranslations(m->keypad.keypad_ind, xtab1);
  1646. X    for (i = 0; i < 10; i++)
  1647. X        XtOverrideTranslations(m->keypad.num_btn[i], xtab1);
  1648. X    XtOverrideTranslations(m->keypad.enter_btn, xtab1);
  1649. X    XtOverrideTranslations(m->keypad.cancel_btn, xtab1);
  1650. X    XtOverrideTranslations(m->keypad.clear_btn, xtab1);
  1651. X
  1652. X    /* Translations for the dbprog window widgets */
  1653. X    XtOverrideTranslations(m->dbprog.about_btn, xtab1);
  1654. X    XtOverrideTranslations(m->dbprog.dtitle_txt, xtab1);
  1655. X    XtOverrideTranslations(m->dbprog.extd_btn, xtab1);
  1656. X    XtOverrideTranslations(m->dbprog.trk_list, xtab2);
  1657. X    XtOverrideTranslations(m->dbprog.radio_box, xtab1);
  1658. X    XtOverrideTranslations(m->dbprog.ttitle_txt, xtab1);
  1659. X    XtOverrideTranslations(m->dbprog.extt_btn, xtab1);
  1660. X    XtOverrideTranslations(m->dbprog.addpgm_btn, xtab1);
  1661. X    XtOverrideTranslations(m->dbprog.clrpgm_btn, xtab1);
  1662. X    XtOverrideTranslations(m->dbprog.playpgm_btn, xtab1);
  1663. X    XtOverrideTranslations(m->dbprog.pgmseq_txt, xtab1);
  1664. X    XtOverrideTranslations(m->dbprog.savedb_btn, xtab1);
  1665. X    XtOverrideTranslations(m->dbprog.loaddb_btn, xtab1);
  1666. X    XtOverrideTranslations(m->dbprog.linkdb_btn, xtab1);
  1667. X    XtOverrideTranslations(m->dbprog.cancel_btn, xtab1);
  1668. X
  1669. X    /* Translations for the extd window widgets */
  1670. X    XtOverrideTranslations(m->dbextd.disc_txt, xtab1);
  1671. X    XtOverrideTranslations(m->dbextd.ok_btn, xtab1);
  1672. X    XtOverrideTranslations(m->dbextd.clear_btn, xtab1);
  1673. X    XtOverrideTranslations(m->dbextd.cancel_btn, xtab1);
  1674. X
  1675. X    /* Translations for the extt window widgets */
  1676. X    XtOverrideTranslations(m->dbextt.trk_txt, xtab1);
  1677. X    XtOverrideTranslations(m->dbextt.ok_btn, xtab1);
  1678. X    XtOverrideTranslations(m->dbextt.clear_btn, xtab1);
  1679. X    XtOverrideTranslations(m->dbextt.cancel_btn, xtab1);
  1680. X
  1681. X    /* Translations for the dirsel window widgets */
  1682. X    XtOverrideTranslations(m->dirsel.dir_list, xtab2);
  1683. X    XtOverrideTranslations(m->dirsel.ok_btn, xtab1);
  1684. X    XtOverrideTranslations(m->dirsel.cancel_btn, xtab1);
  1685. X
  1686. X    /* Translations for the linksel window widgets */
  1687. X    XtOverrideTranslations(m->linksel.link_list, xtab2);
  1688. X    XtOverrideTranslations(m->linksel.ok_btn, xtab1);
  1689. X    XtOverrideTranslations(m->linksel.cancel_btn, xtab1);
  1690. X
  1691. X    /* Initialize helpfile mappings */
  1692. X    help_mapinit();
  1693. X}
  1694. X
  1695. X
  1696. X/*
  1697. X * help_getname
  1698. X *    Given a widget, return the associated help file name.
  1699. X *
  1700. X * Args:
  1701. X *    w - The widget
  1702. X *
  1703. X * Return:
  1704. X *    The help file name text string.
  1705. X */
  1706. XSTATIC char *
  1707. Xhelp_getname(Widget w)
  1708. X{
  1709. X    int    i;
  1710. X
  1711. X    for (i = 0; wname[i].widget != NULL; i++) {
  1712. X        if (w == wname[i].widget)
  1713. X            return(wname[i].hlpname);
  1714. X    }
  1715. X    return(NULL);
  1716. X}
  1717. X
  1718. X
  1719. X/*
  1720. X * help_popup
  1721. X *    Pop up the help window and display appropriate help text.
  1722. X *
  1723. X * Args:
  1724. X *    w - The widget which the help info is being displayed about.
  1725. X *
  1726. X * Return:
  1727. X *    Nothing.
  1728. X */
  1729. Xvoid
  1730. Xhelp_popup(Widget w)
  1731. X{
  1732. X    char        hlpfile[FILE_PATH_SZ],
  1733. X            *hlpname;
  1734. X    FILE        *fp;
  1735. X    static char    *helptext = NULL;
  1736. X
  1737. X    if ((hlpname = help_getname(w)) == NULL)
  1738. X        return;
  1739. X
  1740. X    sprintf(hlpfile, "%s/help/%s", app_data.libdir, hlpname);
  1741. X
  1742. X    if ((fp = fopen(hlpfile, "r")) == NULL) {
  1743. X        /* Can't read help file on this widget */
  1744. X        XmTextSetString(widgets.help.help_txt, app_data.str_nohelp);
  1745. X        XtManageChild(widgets.help.form);
  1746. X
  1747. X        return;
  1748. X    }
  1749. X
  1750. X    if (helptext != NULL) {
  1751. X        MEM_FREE(helptext);
  1752. X        helptext = NULL;
  1753. X    }
  1754. X
  1755. X    while (fgets(tmpbuf, sizeof(tmpbuf), fp) != NULL) {
  1756. X        if (tmpbuf[0] == '#')
  1757. X            /* Comment */
  1758. X            continue;
  1759. X
  1760. X        if (helptext == NULL) {
  1761. X            helptext = (char *) MEM_ALLOC(strlen(tmpbuf) + 1);
  1762. X
  1763. X            if (helptext != NULL)
  1764. X                *helptext = '\0';
  1765. X        }
  1766. X        else {
  1767. X            helptext = (char *) MEM_REALLOC(
  1768. X                helptext,
  1769. X                strlen(helptext) + strlen(tmpbuf) + 1
  1770. X            );
  1771. X        }
  1772. X
  1773. X        if (helptext == NULL) {
  1774. X            cd_fatal_popup(
  1775. X                app_data.str_fatal,
  1776. X                app_data.str_nomemory
  1777. X            );
  1778. X        }
  1779. X
  1780. X        strcat(helptext, tmpbuf);
  1781. X    }
  1782. X
  1783. X    fclose(fp);
  1784. X
  1785. X    XmTextSetString(widgets.help.help_txt, helptext);
  1786. X    XtManageChild(widgets.help.form);
  1787. X}
  1788. X
  1789. X
  1790. END_OF_FILE
  1791. if test 12796 -ne `wc -c <'help.c'`; then
  1792.     echo shar: \"'help.c'\" unpacked with wrong size!
  1793. fi
  1794. # end of 'help.c'
  1795. fi
  1796. if test -f 'hotkey.c' -a "${1}" != "-c" ; then 
  1797.   echo shar: Will not clobber existing file \"'hotkey.c'\"
  1798. else
  1799. echo shar: Extracting \"'hotkey.c'\" \(10129 characters\)
  1800. sed "s/^X//" >'hotkey.c' <<'END_OF_FILE'
  1801. X/*
  1802. X *   xmcd - Motif(tm) CD Audio Player
  1803. X *
  1804. X *   Copyright (C) 1993  Ti Kan
  1805. X *   E-mail: ti@amb.org
  1806. X *
  1807. X *   This program is free software; you can redistribute it and/or modify
  1808. X *   it under the terms of the GNU General Public License as published by
  1809. X *   the Free Software Foundation; either version 2 of the License, or
  1810. X *   (at your option) any later version.
  1811. X *
  1812. X *   This program is distributed in the hope that it will be useful,
  1813. X *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  1814. X *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1815. X *   GNU General Public License for more details.
  1816. X *
  1817. X *   You should have received a copy of the GNU General Public License
  1818. X *   along with this program; if not, write to the Free Software
  1819. X *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1820. X *
  1821. X */
  1822. X#ifndef LINT
  1823. Xstatic char *_hotkey_c_ident_ = "@(#)hotkey.c    1.24 93/09/28";
  1824. X#endif
  1825. X
  1826. X#include <Xm/Xm.h>
  1827. X#include "xmcd.h"
  1828. X#include "widget.h"
  1829. X#include "cdfunc.h"
  1830. X#include "hotkey.h"
  1831. X
  1832. X
  1833. Xtypedef struct grablist {
  1834. X    Widget        gr_button;
  1835. X    KeyCode        gr_keycode;
  1836. X    Modifiers    gr_modifier;
  1837. X    struct grablist    *next;
  1838. X} grablist_t;
  1839. X
  1840. X
  1841. Xtypedef struct {
  1842. X    char        *name;
  1843. X    Modifiers    mask;
  1844. X} modtab_t;
  1845. X
  1846. X
  1847. Xextern AppData        app_data;
  1848. Xextern widgets_t    widgets;
  1849. X
  1850. XSTATIC modtab_t        modtab[8] = {
  1851. X    { "Shift",    ShiftMask    },
  1852. X    { "Lock",    LockMask    },
  1853. X    { "Ctrl",    ControlMask    },
  1854. X    { "Mod1",    Mod1Mask    },
  1855. X    { "Mod2",    Mod2Mask    },
  1856. X    { "Mod3",    Mod3Mask    },
  1857. X    { "Mod4",    Mod4Mask    },
  1858. X    { "Mod5",    Mod5Mask    },
  1859. X};
  1860. X
  1861. X#define TOTAL_GRABLISTS    2
  1862. X#define MAIN_LIST    0
  1863. X#define KEYPAD_LIST    1
  1864. X
  1865. XSTATIC grablist_t    *grablists[TOTAL_GRABLISTS] = {
  1866. X    NULL, NULL
  1867. X};
  1868. X
  1869. X
  1870. X/*
  1871. X * hotkey
  1872. X *    Widget action routine to handle hotkey events
  1873. X */
  1874. Xvoid
  1875. Xhotkey(Widget w, XEvent *ev, String *args, Cardinal *num_args)
  1876. X{
  1877. X    int    i;
  1878. X    Widget    action_widget;
  1879. X
  1880. X    if ((int) *num_args <= 0)
  1881. X        return;    /* Error: should have at least one arg */
  1882. X
  1883. X    if ((action_widget = XtNameToWidget(w, args[0])) == (Widget) NULL)
  1884. X        return;    /* Can't find widget */
  1885. X
  1886. X    /* Switch keyboard focus to the widget of interest */
  1887. X    XmProcessTraversal(action_widget, XmTRAVERSE_CURRENT);
  1888. X
  1889. X    for (i = 1; i < (int) *num_args; i++)
  1890. X        /* Invoke the named action of the specified widget */
  1891. X        XtCallActionProc(action_widget, args[i], ev, NULL, 0);
  1892. X}
  1893. X
  1894. X
  1895. X/*
  1896. X * hotkey_label_match
  1897. X *    Find a letter in a pushbutton widget label that would
  1898. X *    match the hotkey character associated with that button,
  1899. X *    and set that letter as the mnemonic (causing the letter
  1900. X *    to be displayed with an underscore).
  1901. X *
  1902. X * Args:
  1903. X *    btn - The button widget
  1904. X *    keycode - The X keycode of the hotkey character
  1905. X *    modifier - The keycode modifier of the hotkey character
  1906. X *
  1907. X * Return:
  1908. X *    Nothing.
  1909. X */
  1910. XSTATIC void
  1911. Xhotkey_label_match(Widget btn, KeyCode keycode, unsigned int modifier)
  1912. X{
  1913. X    char        *mstr,
  1914. X            *lstr;
  1915. X    Display        *display = XtDisplay(widgets.toplevel);
  1916. X    KeySym        ks;
  1917. X    XmString    xs;
  1918. X
  1919. X    ks = XKeycodeToKeysym(display, keycode, 0),
  1920. X    mstr = XKeysymToString(ks);
  1921. X
  1922. X    if (mstr == NULL)
  1923. X        return;
  1924. X
  1925. X    XtVaGetValues(btn, XmNlabelString, &xs, NULL);
  1926. X
  1927. X    if (XmStringGetLtoR(xs, XmSTRING_DEFAULT_CHARSET, &lstr)) {
  1928. X        /* No need to set mnemonic if the first
  1929. X         * button character is a digit.
  1930. X         */
  1931. X        if (isdigit(lstr[0]))
  1932. X            return;
  1933. X
  1934. X        /* Make the first letter of the button label
  1935. X         * match if possible, even if the
  1936. X         * capitalization is wrong.
  1937. X         */
  1938. X        if (toupper(mstr[0]) == toupper(lstr[0]) &&
  1939. X            !(modifier & ~ShiftMask)) {
  1940. X            char    s[2];
  1941. X
  1942. X            s[0] = lstr[0];
  1943. X            s[1] = '\0';
  1944. X
  1945. X            ks = XStringToKeysym(s);
  1946. X        }
  1947. X    }
  1948. X
  1949. X    /* Set the mnemonic */
  1950. X    XtVaSetValues(btn, XmNmnemonic, ks, NULL);
  1951. X}
  1952. X
  1953. X
  1954. X/*
  1955. X * hotkey_set_mnemonics
  1956. X *    Set the mnemonics of all pushbuttons with hotkey support.
  1957. X *
  1958. X * Args:
  1959. X *    Nothing.
  1960. X *
  1961. X * Return:
  1962. X *    Nothing.
  1963. X */
  1964. XSTATIC void
  1965. Xhotkey_set_mnemonics(void)
  1966. X{
  1967. X    int        i;
  1968. X    grablist_t    *p;
  1969. X    Widget        prev_btn = (Widget) NULL;
  1970. X
  1971. X    /* Set mnemonics on all button faces */
  1972. X    for (i = 0; i < TOTAL_GRABLISTS; i++) {
  1973. X        for (p = grablists[i]; p != NULL; p = p->next) {
  1974. X            if (p->gr_button != (Widget) NULL) {
  1975. X                if (prev_btn == p->gr_button)
  1976. X                    continue;
  1977. X
  1978. X                hotkey_label_match(
  1979. X                    p->gr_button,
  1980. X                    p->gr_keycode,
  1981. X                    p->gr_modifier
  1982. X                );
  1983. X            }
  1984. X            prev_btn = p->gr_button;
  1985. X        }
  1986. X    }
  1987. X}
  1988. X
  1989. X
  1990. X/*
  1991. X * hotkey_parse_xlat_line
  1992. X *    A limited translation string parser.
  1993. X *
  1994. X * Args:
  1995. X *    line - The translation text string line to be parsed
  1996. X *    modp - The key modifier return string
  1997. X *    keyp - The key event return string
  1998. X *    btnp - The button event return string
  1999. X *
  2000. X * Return:
  2001. X *    Nothing.
  2002. X */
  2003. XSTATIC bool_t
  2004. Xhotkey_parse_xlat_line(
  2005. X    char *line,
  2006. X    char **modp,
  2007. X    char **keyp,
  2008. X    char **btnp
  2009. X)
  2010. X{
  2011. X    char        *p,
  2012. X            *q;
  2013. X    static char    modstr[12],
  2014. X            keystr[12],
  2015. X            btnstr[48];
  2016. X
  2017. X    /* Get modifier specification */
  2018. X    p = line;
  2019. X    q = strchr(p, '<');
  2020. X
  2021. X    if (q == NULL)
  2022. X        return(FALSE);
  2023. X    else if (q > p) {
  2024. X        *q = '\0';
  2025. X        strcpy(modstr, p);
  2026. X        *modp = modstr;
  2027. X        *q = '<';
  2028. X    }
  2029. X
  2030. X    /* Get event specification */
  2031. X    p = q + 1;
  2032. X    q = strchr(p, '>');
  2033. X
  2034. X    if (q == NULL || q == p)
  2035. X        return(FALSE);
  2036. X    else {
  2037. X        *q = '\0';
  2038. X
  2039. X        /* We are interested only in key events here */
  2040. X        if (strncmp(p, "Key", 3) != 0)
  2041. X            return(FALSE);
  2042. X
  2043. X        *q = '>';
  2044. X    }
  2045. X
  2046. X    /* Get key specification */
  2047. X    p = q + 1;
  2048. X    q = strchr(p, ':');
  2049. X
  2050. X    if (q == NULL || q == p)
  2051. X        return(FALSE);
  2052. X    else {
  2053. X        *q = '\0';
  2054. X        strcpy(keystr, p);
  2055. X        *keyp = keystr;
  2056. X        *q = ':';
  2057. X    }
  2058. X
  2059. X    /* Get associated button */
  2060. X    p = q + 1;
  2061. X    q = strchr(p, '(');
  2062. X
  2063. X    if (q == NULL || q == p)
  2064. X        return(FALSE);
  2065. X    else {
  2066. X        p = q + 1;
  2067. X        q = strchr(p, ',');
  2068. X
  2069. X        if (q == NULL || q == p)
  2070. X            return(FALSE);
  2071. X        else {
  2072. X            *q = '\0';
  2073. X            strcpy(btnstr, p);
  2074. X            *btnp = btnstr;
  2075. X            *q = ',';
  2076. X        }
  2077. X    }
  2078. X
  2079. X    return(TRUE);
  2080. X}
  2081. X
  2082. X
  2083. X/*
  2084. X * hotkey_build_grablist
  2085. X *    Build a linked list of widgets which have associated
  2086. X *    hotkey support, and information about the hotkey.  These
  2087. X *    keys will be grabbed when the parent form window has input
  2088. X *    focus.
  2089. X *
  2090. X * Args:
  2091. X *    form - The parent form widget
  2092. X *    str - The translation string specifying the hotkey
  2093. X *    listhead - The list head (return)
  2094. X *
  2095. X * Return:
  2096. X *    Nothing.
  2097. X */
  2098. XSTATIC void
  2099. Xhotkey_build_grablist(Widget form, char *str, grablist_t **listhead)
  2100. X{
  2101. X    int        i;
  2102. X    char        *p,
  2103. X            *q,
  2104. X            *end,
  2105. X            *modstr,
  2106. X            *keystr,
  2107. X            *btnstr;
  2108. X    grablist_t    *g;
  2109. X
  2110. X    p = str;
  2111. X    end = p + strlen(p);
  2112. X
  2113. X    do {
  2114. X        while (isspace(*p))
  2115. X            p++;
  2116. X        q = strchr(p, '\n');
  2117. X
  2118. X        if (p >= end)
  2119. X            break;
  2120. X
  2121. X        if (q == NULL) {
  2122. X            if (q > end)
  2123. X                break;
  2124. X        }
  2125. X        else
  2126. X            *q = '\0';
  2127. X
  2128. X        modstr = keystr = btnstr = NULL;
  2129. X
  2130. X        /* Parse translation line */
  2131. X        if (*p != '#' &&
  2132. X            hotkey_parse_xlat_line(p, &modstr, &keystr, &btnstr) &&
  2133. X            keystr != NULL) {
  2134. X
  2135. X            /* Allocate new list element */
  2136. X            if (*listhead == NULL) {
  2137. X                *listhead = g = (grablist_t *)(void *)
  2138. X                    MEM_ALLOC(sizeof(grablist_t));
  2139. X
  2140. X                if (g == NULL) {
  2141. X                    fprintf(stderr, "%s: %s\n",
  2142. X                        PROGNAME,
  2143. X                        app_data.str_nomemory);
  2144. X                    exit(1);
  2145. X                }
  2146. X            }
  2147. X            else {
  2148. X                g->next = (grablist_t *)(void *)
  2149. X                    MEM_ALLOC(sizeof(grablist_t));
  2150. X
  2151. X                if (g->next == NULL) {
  2152. X                    fprintf(stderr, "%s: %s\n",
  2153. X                        PROGNAME,
  2154. X                        app_data.str_nomemory);
  2155. X                    exit(1);
  2156. X                }
  2157. X
  2158. X                g = g->next;
  2159. X            }
  2160. X            g->next = NULL;
  2161. X
  2162. X            g->gr_keycode = XKeysymToKeycode(
  2163. X                XtDisplay(widgets.toplevel),
  2164. X                XStringToKeysym(keystr)
  2165. X            );
  2166. X
  2167. X            g->gr_modifier = 0;
  2168. X            if (modstr != NULL) {
  2169. X                for (i = 0; i < 8; i++) {
  2170. X                    if (strcmp(modtab[i].name,
  2171. X                           modstr) == 0) {
  2172. X                        g->gr_modifier =
  2173. X                            modtab[i].mask;
  2174. X                        break;
  2175. X                    }
  2176. X                }
  2177. X            }
  2178. X
  2179. X            g->gr_button = (Widget) NULL;
  2180. X            if (btnstr != NULL)
  2181. X                g->gr_button = XtNameToWidget(form, btnstr);
  2182. X        }
  2183. X
  2184. X        if (q != NULL) {
  2185. X            *q = '\n';
  2186. X            p = q + 1;
  2187. X        }
  2188. X        else
  2189. X            p = end;
  2190. X
  2191. X    } while (p < end);
  2192. X}
  2193. X
  2194. X
  2195. X/*
  2196. X * hotkey_setup
  2197. X *    Top level setup function for the hotkey subsystem.  Called
  2198. X *    once at program startup.
  2199. X *
  2200. X * Args:
  2201. X *    m - The main widgets structure.
  2202. X *
  2203. X * Return:
  2204. X *    Nothing.
  2205. X */
  2206. Xvoid
  2207. Xhotkey_setup(widgets_t *m)
  2208. X{
  2209. X    char    xlat_str[MAX_TRANSLATIONS_SZ];
  2210. X
  2211. X    /* Translations for the main window form */
  2212. X    sprintf(xlat_str,
  2213. X        "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
  2214. X        app_data.btnlbl_key,
  2215. X        app_data.lock_key,
  2216. X        app_data.repeat_key,
  2217. X        app_data.shuffle_key,
  2218. X        app_data.eject_key,
  2219. X        app_data.poweroff_key,
  2220. X        app_data.dbprog_key,
  2221. X        app_data.help_key,
  2222. X        app_data.time_key,
  2223. X        app_data.ab_key,
  2224. X        app_data.sample_key,
  2225. X        app_data.keypad_key,
  2226. X        app_data.playpause_key,
  2227. X        app_data.stop_key,
  2228. X        app_data.prevtrk_key,
  2229. X        app_data.nexttrk_key,
  2230. X        app_data.previdx_key,
  2231. X        app_data.nextidx_key,
  2232. X        app_data.rew_key,
  2233. X        app_data.ff_key);
  2234. X
  2235. X    XtOverrideTranslations(
  2236. X        m->main.form,
  2237. X        XtParseTranslationTable(xlat_str)
  2238. X    );
  2239. X
  2240. X    hotkey_build_grablist(
  2241. X        m->main.form,
  2242. X        xlat_str,
  2243. X        &grablists[MAIN_LIST]
  2244. X    );
  2245. X
  2246. X    /* Translations for the keypad window form */
  2247. X    sprintf(xlat_str,
  2248. X        "%s%s%s%s%s%s%s%s%s%s%s%s%s",
  2249. X        app_data.keypad0_key,
  2250. X        app_data.keypad1_key,
  2251. X        app_data.keypad2_key,
  2252. X        app_data.keypad3_key,
  2253. X        app_data.keypad4_key,
  2254. X        app_data.keypad5_key,
  2255. X        app_data.keypad6_key,
  2256. X        app_data.keypad7_key,
  2257. X        app_data.keypad8_key,
  2258. X        app_data.keypad9_key,
  2259. X        app_data.keypadenter_key,
  2260. X        app_data.keypadclear_key,
  2261. X        app_data.keypadcancel_key);
  2262. X
  2263. X    XtOverrideTranslations(
  2264. X        m->keypad.form,
  2265. X        XtParseTranslationTable(xlat_str)
  2266. X    );
  2267. X
  2268. X    hotkey_build_grablist(
  2269. X        m->keypad.form,
  2270. X        xlat_str,
  2271. X        &grablists[KEYPAD_LIST]
  2272. X    );
  2273. X
  2274. X    /* Set key label mnemonics */
  2275. X    hotkey_set_mnemonics();
  2276. X}
  2277. X
  2278. X
  2279. X/*
  2280. X * hotkey_grabkeys
  2281. X *    Grab all keys used as hotkeys in the specified window form.
  2282. X *
  2283. X * Args:
  2284. X *    form - The parent form widget.
  2285. X *
  2286. X * Return:
  2287. X *    Nothing.
  2288. X */
  2289. Xvoid
  2290. Xhotkey_grabkeys(Widget form)
  2291. X{
  2292. X    grablist_t    *list,
  2293. X            *p;
  2294. X
  2295. X    if (form == widgets.main.form)
  2296. X        list = grablists[MAIN_LIST];
  2297. X    else if (form == widgets.keypad.form)
  2298. X        list = grablists[KEYPAD_LIST];
  2299. X    else
  2300. X        list = NULL;
  2301. X
  2302. X    for (p = list; p != NULL; p = p->next) {
  2303. X        XtGrabKey(
  2304. X            form,
  2305. X            p->gr_keycode,
  2306. X            p->gr_modifier,
  2307. X            True,
  2308. X            GrabModeAsync,
  2309. X            GrabModeAsync
  2310. X        );
  2311. X    }
  2312. X}
  2313. X
  2314. X
  2315. X/*
  2316. X * hotkey_ungrabkeys
  2317. X *    Ungrab all keys used as hotkeys in the specified window form.
  2318. X *
  2319. X * Args:
  2320. X *    form - The parent form widget.
  2321. X *
  2322. X * Return:
  2323. X *    Nothing.
  2324. X */
  2325. Xvoid
  2326. Xhotkey_ungrabkeys(Widget form)
  2327. X{
  2328. X    grablist_t    *list,
  2329. X            *p;
  2330. X
  2331. X    if (form == widgets.main.form)
  2332. X        list = grablists[MAIN_LIST];
  2333. X    else if (form == widgets.keypad.form)
  2334. X        list = grablists[KEYPAD_LIST];
  2335. X    else
  2336. X        list = NULL;
  2337. X
  2338. X    for (p = list; p != NULL; p = p->next)
  2339. X        XtUngrabKey(form, p->gr_keycode, p->gr_modifier);
  2340. X}
  2341. X
  2342. X
  2343. END_OF_FILE
  2344. if test 10129 -ne `wc -c <'hotkey.c'`; then
  2345.     echo shar: \"'hotkey.c'\" unpacked with wrong size!
  2346. fi
  2347. # end of 'hotkey.c'
  2348. fi
  2349. echo shar: End of archive 7 \(of 13\).
  2350. cp /dev/null ark7isdone
  2351. MISSING=""
  2352. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
  2353.     if test ! -f ark${I}isdone ; then
  2354.     MISSING="${MISSING} ${I}"
  2355.     fi
  2356. done
  2357. if test "${MISSING}" = "" ; then
  2358.     echo You have unpacked all 13 archives.
  2359.     echo "Now read the README and INSTALL files for further instructions."
  2360.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2361. else
  2362.     echo You still need to unpack the following archives:
  2363.     echo "        " ${MISSING}
  2364. fi
  2365. ##  End of shell archive.
  2366. exit 0
  2367. -- 
  2368.     ///  Ti Kan                vorsprung durch technik
  2369.    ///   AMB Research Laboratories, Sunnyvale, CA. USA
  2370.   ///    ti@amb.org
  2371.  //////  ...!{decwrl,synopsys,tandem,tsoft,ultra}!sgiblab!bazooka!ti
  2372. ///      ...!uunet!bazooka!ti
  2373.  
  2374.  
  2375.  
  2376. exit 0 # Just in case...
  2377. -- 
  2378.   // chris@Sterling.COM           | Send comp.sources.x submissions to:
  2379. \X/  Amiga: The only way to fly!  |    sources-x@sterling.com
  2380.        "It's intuitively obvious to the most casual observer..."
  2381.  GCS d++(--) -p+ c++ !l u++ e+ m+(-) s++/++ n h--- f+ g+++ w+ t++ r+ y+
  2382.