home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / vmsnet / sources / 354 < prev    next >
Encoding:
Internet Message Format  |  1992-09-04  |  47.9 KB

  1. Path: sparky!uunet!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources
  2. From: mahan@tgv.com (Patrick L. Mahan - TGV Window Washer)
  3. Newsgroups: vmsnet.sources
  4. Subject: XSCOPE/VMS 1.0, part 07/08
  5. Message-ID: <8045410@MVB.SAIC.COM>
  6. Date: Fri, 04 Sep 1992 05:34:37 GMT
  7. Reply-To: mahan@tgv.com
  8. Organization: TGV Incorporated (Tech Support) in Santa Cruz, CA
  9. Lines: 1455
  10. Approved: Mark.Berryman@Mvb.Saic.Com
  11.  
  12. Submitted-by: mahan@tgv.com (Patrick L. Mahan - TGV Window Washer)
  13. Posting-number: Volume 3, Issue 159
  14. Archive-name: xscope/part07
  15.  
  16.  
  17. -+-+-+-+-+-+-+-+ START OF PART 7 -+-+-+-+-+-+-+-+
  18. X  sec = tp.tv_sec - ZeroTime1;
  19. X  hsec = tp.tv_usec / 10000 - ZeroTime2;
  20. X  if (hsec < 0)
  21. X    `7B
  22. X      hsec += 100;
  23. X      sec -= 1;
  24. X    `7D
  25. X  fprintf(stdout, "%2d.%02ld: ", sec, hsec);
  26. X`7D
  27. X
  28. X/* ************************************************************ */
  29. X/*`09`09`09`09`09`09`09`09*/
  30. X/*`09`09`09`09`09`09`09`09*/
  31. X/* ************************************************************ */
  32. X
  33. X/* we will need to be able to interpret the values stored in the
  34. X   requests as various built-in types.  The following routines
  35. X   support the types built into X11 */
  36. X
  37. Xlong    pad (n)
  38. X     long    n;
  39. X`7B
  40. X  /* round up to next multiple of 4 */
  41. X  return((n + 3) & `7E0x3);
  42. X`7D
  43. X
  44. Xextern int  littleEndian;
  45. X
  46. Xunsigned long    ILong (buf)
  47. X     unsigned char   buf`5B`5D;
  48. X`7B
  49. X  if (littleEndian)
  50. X    return((((((buf`5B3`5D << 8) `7C buf`5B2`5D) << 8) `7C buf`5B1`5D) << 8)
  51. V `7C buf`5B0`5D);
  52. X  return((((((buf`5B0`5D << 8) `7C buf`5B1`5D) << 8) `7C buf`5B2`5D) << 8) `
  53. V7C buf`5B3`5D);
  54. X`7D
  55. X
  56. Xunsigned short   IShort (buf)
  57. Xunsigned char   buf`5B`5D;
  58. X`7B
  59. X  if (littleEndian)
  60. X    return (buf`5B1`5D << 8) `7C buf`5B0`5D;
  61. X  return((buf`5B0`5D << 8) `7C buf`5B1`5D);
  62. X`7D
  63. X
  64. Xunsigned short   IByte (buf)
  65. Xunsigned char   buf`5B`5D;
  66. X`7B
  67. X  return(buf`5B0`5D);
  68. X`7D
  69. X
  70. XBoolean IBool(buf)
  71. X     unsigned char   buf`5B`5D;
  72. X`7B
  73. X  if (buf`5B0`5D != 0)
  74. X    return(true);
  75. X  else
  76. X    return(false);
  77. X`7D
  78. X
  79. X
  80. X/* ************************************************************ */
  81. X/*`09`09`09`09`09`09`09`09*/
  82. X/*`09`09`09`09`09`09`09`09*/
  83. X/* ************************************************************ */
  84. X
  85. X/* we will need to save bytes until we get a complete request to
  86. X   interpret.  The following procedures provide this ability */
  87. X
  88. XSaveBytes(fd, buf, n)
  89. X     FD fd;
  90. X     unsigned char *buf;
  91. X     long    n;
  92. X`7B
  93. X  /* check if there is enough space to hold the bytes we want */
  94. X  if (CS`5Bfd`5D.NumberofSavedBytes + n > CS`5Bfd`5D.SizeofSavedBytes)
  95. X    `7B
  96. X      /* not enough room so far; malloc more space and copy */
  97. X      long    SizeofNewBytes = (CS`5Bfd`5D.NumberofSavedBytes + n + 1);
  98. X#ifdef vax11c
  99. X      unsigned char   *NewBytes = (unsigned char *)MyMalloc (SizeofNewBytes)
  100. V;
  101. X#else
  102. X      unsigned char   *NewBytes = (unsigned char *)Malloc (SizeofNewBytes);
  103. X#endif /* vax11c */
  104. X      bcopy(/* from  */(char *)CS`5Bfd`5D.SavedBytes,
  105. X`09    /* to    */(char *)NewBytes,
  106. X`09    /* count */(int)CS`5Bfd`5D.SizeofSavedBytes);
  107. X#ifdef vax11c
  108. X      MyFree((char *)CS`5Bfd`5D.SavedBytes);
  109. X#else
  110. X      Free((char *)CS`5Bfd`5D.SavedBytes);
  111. X#endif /* vax11c */
  112. X      CS`5Bfd`5D.SavedBytes = NewBytes;
  113. X      CS`5Bfd`5D.SizeofSavedBytes = SizeofNewBytes;
  114. X    `7D
  115. X
  116. X  /* now copy the new bytes onto the end of the old bytes */
  117. X  bcopy(/* from  */(char *)buf,
  118. X`09/* to    */(char *)(CS`5Bfd`5D.SavedBytes + CS`5Bfd`5D.NumberofSavedBytes
  119. V),
  120. X`09/* count */(int)n);
  121. X  CS`5Bfd`5D.NumberofSavedBytes += n;
  122. X`7D
  123. X
  124. XRemoveSavedBytes(fd, n)
  125. X     FD fd;
  126. X     long    n;
  127. X`7B
  128. X  /* check if all bytes are being removed -- easiest case */
  129. X  if (CS`5Bfd`5D.NumberofSavedBytes <= n)
  130. X    CS`5Bfd`5D.NumberofSavedBytes = 0;
  131. X  else if (n == 0)
  132. X    return;
  133. X  else
  134. X    `7B
  135. X      /* not all bytes are being removed -- shift the remaining ones down  *
  136. V/
  137. X      register unsigned char  *p = CS`5Bfd`5D.SavedBytes;
  138. X      register unsigned char  *q = CS`5Bfd`5D.SavedBytes + n;
  139. X      register long   i = CS`5Bfd`5D.NumberofSavedBytes - n;
  140. X      while (i-- > 0)
  141. X`09*p++ = *q++;
  142. X      CS`5Bfd`5D.NumberofSavedBytes -= n;
  143. X    `7D
  144. X`7D
  145. X
  146. X
  147. X/* ************************************************************ */
  148. X/*`09`09`09`09`09`09`09`09*/
  149. X/*`09`09`09`09`09`09`09`09*/
  150. X/* ************************************************************ */
  151. X
  152. X
  153. X/* following are the possible values for ByteProcessing */
  154. X/* forward declarations */
  155. Xlong    StartSetUpMessage ();
  156. Xlong    FinishSetUpMessage ();
  157. Xlong    StartRequest ();
  158. Xlong    FinishRequest ();
  159. X
  160. Xlong    StartSetUpReply ();
  161. Xlong    FinishSetUpReply ();
  162. Xlong    ServerPacket ();
  163. Xlong    FinishReply ();
  164. X
  165. X
  166. X/* ************************************************************ */
  167. X/*`09`09`09`09`09`09`09`09*/
  168. X/*`09`09`09`09`09`09`09`09*/
  169. X/* ************************************************************ */
  170. X
  171. Xint littleEndian;
  172. X
  173. XProcessBuffer(fd, buf, n)
  174. X     FD fd;
  175. X     unsigned char *buf;
  176. X     long    n;
  177. X`7B
  178. X  unsigned char   *BytesToProcess;
  179. X  long    NumberofUsedBytes;
  180. X
  181. X  /* as long as we have enough bytes to do anything -- do it */
  182. X
  183. X  littleEndian = CS`5Bfd`5D.littleEndian;
  184. X  while (CS`5Bfd`5D.NumberofSavedBytes + n >= CS`5Bfd`5D.NumberofBytesNeeded
  185. V)
  186. X    `7B
  187. X      /*
  188. X`09we have enough bytes to do something.  We want the bytes to be
  189. X`09grouped together into one contiguous block of bytes. We have three
  190. X`09cases:
  191. X
  192. X`09(1) NumberofSavedBytes = 0; so all needed bytes are in the
  193. X`09read buffer, buf.
  194. X
  195. X`09(2) NumberofSavedBytes >= NumberofBytesNeeded;`09in this case we
  196. X`09will not need to copy any extra bytes into the save buffer.
  197. X
  198. X`09(3) 0 < NumberofSavedBytes < NumberofBytesNeeded; so
  199. X`09some bytes are in the save buffer and others are in the read
  200. X`09buffer.  In this case we need to copy some of the bytes from the
  201. X`09read buffer to the save buffer to get as many bytes as we need,
  202. X`09then use these bytes.
  203. X      */
  204. X
  205. X      if (CS`5Bfd`5D.NumberofSavedBytes == 0)
  206. X`09`7B
  207. X`09  /* no saved bytes, so just process the first bytes in the
  208. X`09     read buffer */
  209. X`09  BytesToProcess = buf /* address of request bytes */;
  210. X`09`7D
  211. X      else
  212. X`09`7B
  213. X`09  if (CS`5Bfd`5D.NumberofSavedBytes < CS`5Bfd`5D.NumberofBytesNeeded)
  214. X`09    `7B
  215. X`09      /* first determine the number of bytes we need to
  216. X`09`09 transfer; then transfer them and remove them from
  217. X`09`09 the read buffer. (there may be additional requests
  218. X`09`09 in the read buffer) */
  219. X`09      long    m;
  220. X`09      m = CS`5Bfd`5D.NumberofBytesNeeded - CS`5Bfd`5D.NumberofSavedBytes;
  221. X`09      SaveBytes(fd, buf, m);
  222. X`09      buf += m;
  223. X`09      n -= m;
  224. X`09    `7D
  225. X`09  BytesToProcess = CS`5Bfd`5D.SavedBytes /* address of request bytes */;
  226. X`09`7D
  227. X
  228. X      /*
  229. X`09BytesToProcess points to a contiguous block of NumberofBytesNeeded
  230. X`09bytes that we should process.  The type of processing depends upon
  231. X`09the state we are in. The processing routine should return the
  232. X`09number of bytes that it actually used.
  233. X      */
  234. X      NumberofUsedBytes = (*CS`5Bfd`5D.ByteProcessing)
  235. X                             (fd, BytesToProcess, CS`5Bfd`5D.NumberofBytesNe
  236. Veded);
  237. X
  238. X      /* the number of bytes that were actually used is normally (but not
  239. X`09 always) the number of bytes needed.  Discard the bytes that were
  240. X`09 actually used, not the bytes that were needed. The number of used
  241. X`09 bytes must be less than or equal to the number of needed bytes. */
  242. X
  243. X      if (NumberofUsedBytes > 0)
  244. X`09`7B
  245. X`09  if (CS`5Bfd`5D.NumberofSavedBytes > 0)
  246. X`09    RemoveSavedBytes(fd, NumberofUsedBytes);
  247. X`09  else
  248. X`09    `7B
  249. X`09      /* there are no saved bytes, so the bytes that were
  250. X`09`09 used must have been in the read buffer */
  251. X`09      buf += NumberofUsedBytes;
  252. X`09      n -= NumberofUsedBytes;
  253. X`09    `7D
  254. X`09`7D
  255. X    `7D /* end of while (NumberofSavedBytes + n >= NumberofBytesNeeded) */
  256. X
  257. X  /* not enough bytes -- just save the new bytes for more later */
  258. X  if (n > 0)
  259. X    SaveBytes(fd, buf, n);
  260. X  return;
  261. X`7D
  262. X
  263. X
  264. X
  265. X/* ************************************************************ */
  266. X/*`09`09`09`09`09`09`09`09*/
  267. X/*`09`09`09`09`09`09`09`09*/
  268. X/* ************************************************************ */
  269. X/*
  270. X  Byte Processing Routines.  Each routine MUST set NumberofBytesNeeded
  271. X  and ByteProcessing.  It probably needs to do some computation first.
  272. X*/
  273. X
  274. X
  275. XStartClientConnection(fd)
  276. X     FD fd;
  277. X`7B
  278. X  enterprocedure("StartClientConnection");
  279. X  /* when a new connection is started, we have no saved bytes */
  280. X  CS`5Bfd`5D.SavedBytes = NULL;
  281. X  CS`5Bfd`5D.SizeofSavedBytes = 0;
  282. X  CS`5Bfd`5D.NumberofSavedBytes = 0;
  283. X
  284. X  /* when a new connection is started, we have no reply Queue */
  285. X  FlushReplyQ(fd);
  286. X
  287. X  /* each new connection gets a request sequence number */
  288. X  CS`5Bfd`5D.SequenceNumber = 0;
  289. X
  290. X  /* we need 12 bytes to start a SetUp message */
  291. X  CS`5Bfd`5D.ByteProcessing = StartSetUpMessage;
  292. X  CS`5Bfd`5D.NumberofBytesNeeded = 12;
  293. X`7D
  294. X
  295. XStopClientConnection(fd)
  296. X     FD fd;
  297. X`7B
  298. X  enterprocedure("StopClientConnection");
  299. X  /* when a new connection is stopped, discard the old buffer */
  300. X
  301. X  if (CS`5Bfd`5D.SizeofSavedBytes > 0)
  302. X#ifdef vax11c
  303. X    MyFree((char*)CS`5Bfd`5D.SavedBytes);
  304. X#else
  305. X    Free((char*)CS`5Bfd`5D.SavedBytes);
  306. X#endif /* vax11c */
  307. X`7D
  308. X
  309. Xlong    StartSetUpMessage (fd, buf, n)
  310. X     FD fd;
  311. X     unsigned char *buf;
  312. X     long    n;
  313. X`7B
  314. X  short   namelength;
  315. X  short   datalength;
  316. X
  317. X  enterprocedure("StartSetUpMessage");
  318. X  /*
  319. X    we need the first 12 bytes to be able to determine if, and how many,
  320. X    additional bytes we need for name and data authorization.  However, we
  321. X    can't process the first 12 bytes until we get all of them, so
  322. X    return zero bytes used, and increase the number of bytes needed
  323. X  */
  324. X
  325. X  namelength = IShort(&buf`5B6`5D);
  326. X  datalength = IShort(&buf`5B8`5D);
  327. X  CS`5Bfd`5D.ByteProcessing = FinishSetUpMessage;
  328. X  CS`5Bfd`5D.NumberofBytesNeeded = n
  329. X                               + pad((long)namelength) + pad((long)datalengt
  330. Vh);
  331. X  debug(8,(stderr, "need %d bytes to finish startup\n",
  332. X`09   CS`5Bfd`5D.NumberofBytesNeeded - n));
  333. X  return(0);
  334. X`7D
  335. X
  336. Xlong    FinishSetUpMessage (fd, buf, n)
  337. X     FD fd;
  338. X     unsigned char *buf;
  339. X     long    n;
  340. X`7B
  341. X  enterprocedure("FinishSetUpMessage");
  342. X  CS`5Bfd`5D.littleEndian = (buf`5B0`5D == 'l');
  343. X  CS`5BServerHalf(fd)`5D.littleEndian = CS`5Bfd`5D.littleEndian;
  344. X  littleEndian = CS`5Bfd`5D.littleEndian;
  345. X  PrintSetUpMessage(buf);
  346. X
  347. X  /* after a set-up message, we expect a string of requests */
  348. X  CS`5Bfd`5D.ByteProcessing = StartRequest;
  349. X  CS`5Bfd`5D.NumberofBytesNeeded = 4;
  350. X  return(n);
  351. X`7D
  352. X
  353. X
  354. Xlong    StartRequest (fd, buf, n)
  355. X     FD fd;
  356. X     unsigned char *buf;
  357. X     long    n;
  358. X`7B
  359. X  short   requestlength;
  360. X  enterprocedure("StartRequest");
  361. X
  362. X  /* bytes 0,1 are ignored now; bytes 2,3 tell us the request length */
  363. X  requestlength = IShort(&buf`5B2`5D);
  364. X  CS`5Bfd`5D.ByteProcessing = FinishRequest;
  365. X  CS`5Bfd`5D.NumberofBytesNeeded = 4 * requestlength;
  366. X  debug(8,(stderr, "need %d more bytes to finish request\n",
  367. X`09   CS`5Bfd`5D.NumberofBytesNeeded - n));
  368. X  return(0);
  369. X`7D
  370. X
  371. X
  372. Xlong    FinishRequest (fd, buf, n)
  373. X     FD fd;
  374. X     unsigned char *buf;
  375. X     long    n;
  376. X`7B
  377. X  enterprocedure("FinishRequest");
  378. X  DecodeRequest(fd, buf, n);
  379. X  CS`5Bfd`5D.ByteProcessing = StartRequest;
  380. X  CS`5Bfd`5D.NumberofBytesNeeded = 4;
  381. X  return(n);
  382. X`7D
  383. X
  384. X/* ************************************************************ */
  385. X/*`09`09`09`09`09`09`09`09*/
  386. X/*`09`09`09`09`09`09`09`09*/
  387. X/* ************************************************************ */
  388. X
  389. XStartServerConnection(fd)
  390. X     FD fd;
  391. X`7B
  392. X  enterprocedure("StartServerConnection");
  393. X  /* when a new connection is started, we have no saved bytes */
  394. X  CS`5Bfd`5D.SavedBytes = NULL;
  395. X  CS`5Bfd`5D.SizeofSavedBytes = 0;
  396. X  CS`5Bfd`5D.NumberofSavedBytes = 0;
  397. X
  398. X  /* when a new connection is started, we have no reply Queue */
  399. X  FlushReplyQ(fd);
  400. X
  401. X  /* we need 8 bytes to start a SetUp reply */
  402. X  CS`5Bfd`5D.ByteProcessing = StartSetUpReply;
  403. X  CS`5Bfd`5D.NumberofBytesNeeded = 8;
  404. X`7D
  405. X
  406. XStopServerConnection(fd)
  407. X     FD fd;
  408. X`7B
  409. X  enterprocedure("StopServerConnection");
  410. X  /* when a new connection is stopped, discard the old buffer */
  411. X
  412. X  if (CS`5Bfd`5D.SizeofSavedBytes > 0)
  413. X#ifdef vax11c
  414. X    MyFree((char *)CS`5Bfd`5D.SavedBytes);
  415. X#else
  416. X    Free((char *)CS`5Bfd`5D.SavedBytes);
  417. X#endif /* vax11c */
  418. X`7D
  419. X
  420. Xlong    StartSetUpReply (fd, buf, n)
  421. X     FD fd;
  422. X     unsigned char *buf;
  423. X     long    n;
  424. X`7B
  425. X  short   replylength;
  426. X
  427. X  enterprocedure("StartSetUpReply");
  428. X  replylength = IShort(&buf`5B6`5D);
  429. X  CS`5Bfd`5D.ByteProcessing = FinishSetUpReply;
  430. X  CS`5Bfd`5D.NumberofBytesNeeded = n + 4 * replylength;
  431. X  debug(8,(stderr, "need %d bytes to finish startup reply\n",
  432. X`09   CS`5Bfd`5D.NumberofBytesNeeded - n));
  433. X  return(0);
  434. X`7D
  435. X
  436. Xlong    FinishSetUpReply (fd, buf, n)
  437. X     FD fd;
  438. X     unsigned char *buf;
  439. X     long    n;
  440. X`7B
  441. X  enterprocedure("FinishSetUpReply");
  442. X  PrintSetUpReply(buf);
  443. X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
  444. X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
  445. X  return(n);
  446. X`7D
  447. X
  448. X/* ************************************************************ */
  449. X
  450. Xlong    ErrorPacket (fd, buf, n)
  451. X     FD fd;
  452. X     unsigned char *buf;
  453. X     long    n;
  454. X`7B
  455. X  fprintf(stdout, "Error: ");
  456. X  DecodeError(fd, buf, n);
  457. X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
  458. X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
  459. X  return(n);
  460. X`7D
  461. X
  462. X
  463. Xlong    EventPacket (fd, buf, n)
  464. X     FD fd;
  465. X     unsigned char *buf;
  466. X     long    n;
  467. X`7B
  468. X  DecodeEvent(fd, buf, n);
  469. X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
  470. X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
  471. X  return(n);
  472. X`7D
  473. X
  474. X
  475. Xlong    ReplyPacket (fd, buf, n)
  476. X     FD fd;
  477. X     unsigned char *buf;
  478. X     long    n;
  479. X`7B
  480. X  short   replylength;
  481. X
  482. X  replylength = ILong(&buf`5B4`5D);
  483. X
  484. X  /*
  485. X    Replies may need more bytes, so we compute how many more
  486. X    bytes are needed and ask for them, not using any of the bytes
  487. X    we were given (return(0) to say that no bytes were used).
  488. X    If the replylength is zero (we don't need any more bytes), the
  489. X    number of bytes needed will be the same as what we have, and
  490. X    so the top-level loop will call the next routine immediately
  491. X    with the same buffer of bytes that we were given.
  492. X  */
  493. X
  494. X  CS`5Bfd`5D.ByteProcessing = FinishReply;
  495. X  CS`5Bfd`5D.NumberofBytesNeeded = n + 4 * replylength;
  496. X  debug(8,(stderr, "need %d bytes to finish reply\n", (4 * replylength)));
  497. X  return(0);
  498. X`7D
  499. X
  500. Xlong    ServerPacket (fd, buf, n)
  501. X     FD fd;
  502. X     unsigned char *buf;
  503. X     long    n;
  504. X`7B
  505. X  short   PacketType;
  506. X  enterprocedure("ServerPacket");
  507. X
  508. X  PacketType = IByte(&buf`5B0`5D);
  509. X  if (PacketType == 0)
  510. X    return(ErrorPacket(fd, buf, n));
  511. X  if (PacketType == 1)
  512. X    return(ReplyPacket(fd, buf, n));
  513. X  return(EventPacket(fd, buf, n));
  514. X`7D
  515. X
  516. Xlong    FinishReply (fd, buf, n)
  517. X     FD fd;
  518. X     unsigned char *buf;
  519. X     long    n;
  520. X`7B
  521. X  enterprocedure("FinishReply");
  522. X  DecodeReply(fd, buf, n);
  523. X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
  524. X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
  525. X  return(n);
  526. X`7D
  527. $ CALL UNPACK SERVER.C;10 355330808
  528. $ create 'f'
  529. X/* ************************************************** *
  530. X *`09`09`09`09`09`09      *
  531. X *  Table initialization for X11 protocol`09      *
  532. X *`09`09`09`09`09`09      *
  533. X *`09James Peterson, 1988`09`09`09      *
  534. X *`09(c) Copyright MCC, 1988 `09`09      *
  535. X *`09`09`09`09`09`09      *
  536. X * ************************************************** */
  537. X#if defined(vax11c) && !defined(MULTINET)
  538. X#include "emulationlib.h"
  539. X#endif
  540. X
  541. X#include "scope.h"
  542. X#include "x11.h"
  543. X
  544. X/*
  545. X  To initialize for the X11 protocol, we need to create data structures
  546. X  describing the data types used by X11.
  547. X*/
  548. X
  549. X/*
  550. X  There are about 100-128 data types for X11.  This start with the simple
  551. X  INT8, INT16, INT32 (byte, short, long), and the CARD8, CARD16, CARD32
  552. X  (unsigned) and extend to records like RGB (a resource id, 3 color
  553. X  values and a bitmask to select a subset of the 3 color values).  Each
  554. X  data type has an assigned type index.  The type index identifies the
  555. X  type (with a #define in x11.h) and is used to access an entry in an
  556. X  array of type descriptors (TD).  Each type descriptor has the type name,
  557. X  the kind of type, and a procedure to print an object of that type.
  558. X  The print procedure for a type <foo> is named Print<foo>.  The kind of
  559. X  type is
  560. X
  561. X  BUILTIN:      one of the primitive types.
  562. X  ENUMERATED:   value should be one of a small set of values.  This type
  563. X                needs a list of allowed values (and their print names).
  564. X  SET:          value is a bitmask of a small set of values.  Each value
  565. X                is a one-bit mask (and its print name).
  566. X  RECORD:       value is a record of fields of other types.
  567. X
  568. X  The Type Descriptor array allows us to print a value if we know its type
  569. X  (index) and the bytes in memory that are its value.
  570. X*/
  571. X
  572. X
  573. XInitializeX11()
  574. X`7B
  575. X  InitReplyQ();
  576. X
  577. X  InitBuiltInTypes();
  578. X  InitEnumeratedTypes();
  579. X  InitSetTypes();
  580. X  InitValuesTypes();
  581. X  InitRecordTypes();
  582. X`7D
  583. X
  584. X/* ************************************************************ */
  585. X/*`09`09`09`09`09`09`09`09*/
  586. X/*`09`09`09`09`09`09`09`09*/
  587. X/* ************************************************************ */
  588. X
  589. X/* define the various types */
  590. X
  591. XTYPE DefineType(typeid, class, name, printproc)
  592. X     short   typeid;
  593. X     short   class;
  594. X     char   *name;
  595. X     int     (*printproc)();
  596. X`7B
  597. X  TD`5Btypeid`5D.Name = name;
  598. X  TD`5Btypeid`5D.Type = class;
  599. X  TD`5Btypeid`5D.ValueList = NULL;
  600. X  TD`5Btypeid`5D.PrintProc = printproc;
  601. X  return(&TD`5Btypeid`5D);
  602. X`7D
  603. X
  604. X/* ************************************************************ */
  605. X/* define an Enumerated Value (or a Set Value) */
  606. X
  607. XDefineEValue(type, value, name)
  608. X     TYPE type;
  609. X     long    value;
  610. X     char   *name;
  611. X`7B
  612. X  struct ValueListEntry  *p;
  613. X
  614. X  /* define the new value */
  615. X  p = (struct ValueListEntry *)
  616. X#ifdef vax11c
  617. X                          MyMalloc ((long)(sizeof (struct ValueListEntry)));
  618. X#else
  619. X                          Malloc ((long)(sizeof (struct ValueListEntry)));
  620. X#endif /* vax11c */
  621. X  p->Name = name;
  622. X  p->Value = value;
  623. X
  624. X  /* add an new value to the list. */
  625. X  if (type->ValueList == NULL `7C`7C type->ValueList->Value > p->Value)
  626. X    `7B
  627. X      p->Next = type->ValueList;
  628. X      type->ValueList = p;
  629. X    `7D
  630. X  else
  631. X    `7B
  632. X      /* keep the list sorted, smallest to largest */
  633. X      struct ValueListEntry  *q = type->ValueList;
  634. X      while (q->Next != NULL && q->Next->Value < p->Value)
  635. X`09q = q->Next;
  636. X      p->Next = q->Next;
  637. X      q->Next = p;
  638. X    `7D
  639. X`7D
  640. X
  641. X/* ************************************************************ */
  642. X/* a Values list is like an enumerated Value, but has a type and length
  643. X   in addition to a value and name.  It is used to print a Values List */
  644. X
  645. X/* A Values List is a bitmask (like a set), but if the bit is set on, then
  646. X   we have an associated value.  We need to know the length and type of the
  647. X   associated value for each bit */
  648. X
  649. XDefineValues(type, value, length, ctype, name)
  650. X     TYPE type;
  651. X     long    value;
  652. X     char   *name;
  653. X`7B
  654. X  struct ValueListEntry  *p;
  655. X
  656. X  p = (struct ValueListEntry *)
  657. X#ifdef vax11c
  658. X                            MyMalloc ((long)(sizeof (struct ValueListEntry))
  659. V);
  660. X#else
  661. X                            Malloc ((long)(sizeof (struct ValueListEntry)));
  662. X#endif /* vax11c */
  663. X  p->Name = name;
  664. X  p->Type = ctype;
  665. X  p->Length = length;
  666. X  p->Value = value;
  667. X
  668. X  /* add an new value to the list. */
  669. X  if (type->ValueList == NULL `7C`7C type->ValueList->Value > p->Value)
  670. X    `7B
  671. X      p->Next = type->ValueList;
  672. X      type->ValueList = p;
  673. X    `7D
  674. X  else
  675. X    `7B
  676. X      /* keep the list sorted, smallest to largest  */
  677. X      struct ValueListEntry  *q = type->ValueList;
  678. X      while (q->Next != NULL && q->Next->Value < p->Value)
  679. X`09q = q->Next;
  680. X      p->Next = q->Next;
  681. X      q->Next = p;
  682. X    `7D
  683. X`7D
  684. X
  685. X
  686. X
  687. X/* ************************************************************ */
  688. X
  689. XInitBuiltInTypes()
  690. X`7B
  691. X  (void) DefineType(INT8, BUILTIN, "INT8", PrintINT8);
  692. X  (void) DefineType(INT16, BUILTIN, "INT16", PrintINT16);
  693. X  (void) DefineType(INT32, BUILTIN, "INT32", PrintINT32);
  694. X  (void) DefineType(CARD8, BUILTIN, "CARD8", PrintCARD8);
  695. X  (void) DefineType(CARD16, BUILTIN, "CARD16", PrintCARD16);
  696. X  (void) DefineType(CARD32, BUILTIN, "CARD32", PrintCARD32);
  697. X  (void) DefineType(BYTE, BUILTIN, "BYTE", PrintBYTE);
  698. X  (void) DefineType(CHAR8, BUILTIN, "CHAR8", PrintCHAR8);
  699. X  (void) DefineType(STRING16, BUILTIN, "STRING16", PrintSTRING16);
  700. X  (void) DefineType(STR, BUILTIN, "STR", PrintSTR);
  701. X  (void) DefineType(WINDOW, BUILTIN, "WINDOW", PrintWINDOW);
  702. X  (void) DefineType(WINDOWD, BUILTIN, "WINDOWD", PrintWINDOWD);
  703. X  (void) DefineType(WINDOWNR, BUILTIN, "WINDOWNR", PrintWINDOWNR);
  704. X  (void) DefineType(PIXMAP, BUILTIN, "PIXMAP", PrintPIXMAP);
  705. X  (void) DefineType(PIXMAPNPR, BUILTIN, "PIXMAPNPR", PrintPIXMAPNPR);
  706. X  (void) DefineType(PIXMAPC, BUILTIN, "PIXMAPC", PrintPIXMAPC);
  707. X  (void) DefineType(CURSOR, BUILTIN, "CURSOR", PrintCURSOR);
  708. X  (void) DefineType(FONT, BUILTIN, "FONT", PrintFONT);
  709. X  (void) DefineType(GCONTEXT, BUILTIN, "GCONTEXT", PrintGCONTEXT);
  710. X  (void) DefineType(COLORMAP, BUILTIN, "COLORMAP", PrintCOLORMAP);
  711. X  (void) DefineType(COLORMAPC, BUILTIN, "COLORMAPC", PrintCOLORMAPC);
  712. X  (void) DefineType(DRAWABLE, BUILTIN, "DRAWABLE", PrintDRAWABLE);
  713. X  (void) DefineType(FONTABLE, BUILTIN, "FONTABLE", PrintFONTABLE);
  714. X  (void) DefineType(ATOM, BUILTIN, "ATOM", PrintATOM);
  715. X  (void) DefineType(ATOMT, BUILTIN, "ATOMT", PrintATOMT);
  716. X  (void) DefineType(VISUALID, BUILTIN, "VISUALID", PrintVISUALID);
  717. X  (void) DefineType(VISUALIDC, BUILTIN, "VISUALIDC", PrintVISUALIDC);
  718. X  (void) DefineType(TIMESTAMP, BUILTIN, "TIMESTAMP", PrintTIMESTAMP);
  719. X  (void) DefineType(RESOURCEID, BUILTIN, "RESOURCEID", PrintRESOURCEID);
  720. X  (void) DefineType(KEYSYM, BUILTIN, "KEYSYM", PrintKEYSYM);
  721. X  (void) DefineType(KEYCODE, BUILTIN, "KEYCODE", PrintKEYCODE);
  722. X  (void) DefineType(KEYCODEA, BUILTIN, "KEYCODEA", PrintKEYCODEA);
  723. X  (void) DefineType(BUTTON, BUILTIN, "BUTTON", PrintBUTTON);
  724. X  (void) DefineType(BUTTONA, BUILTIN, "BUTTONA", PrintBUTTONA);
  725. X  (void) DefineType(EVENTFORM, BUILTIN, "EVENTFORM", PrintEVENTFORM);
  726. X`7D
  727. X
  728. X/* ************************************************************ */
  729. X/*`09`09`09`09`09`09`09`09*/
  730. X/*`09`09`09`09`09`09`09`09*/
  731. X/* ************************************************************ */
  732. X
  733. XInitEnumeratedTypes()
  734. X`7B
  735. X  TYPE p;
  736. X
  737. X  p = DefineType(REQUEST, ENUMERATED, "REQUEST", PrintENUMERATED);
  738. X  DefineEValue(p, 1L, "CreateWindow");
  739. X  DefineEValue(p, 2L, "ChangeWindowAttributes");
  740. X  DefineEValue(p, 3L, "GetWindowAttributes");
  741. X  DefineEValue(p, 4L, "DestroyWindow");
  742. X  DefineEValue(p, 5L, "DestroySubwindows");
  743. X  DefineEValue(p, 6L, "ChangeSaveSet");
  744. X  DefineEValue(p, 7L, "ReparentWindow");
  745. X  DefineEValue(p, 8L, "MapWindow");
  746. X  DefineEValue(p, 9L, "MapSubwindows");
  747. X  DefineEValue(p, 10L, "UnmapWindow");
  748. X  DefineEValue(p, 11L, "UnmapSubwindows");
  749. X  DefineEValue(p, 12L, "ConfigureWindow");
  750. X  DefineEValue(p, 13L, "CirculateWindow");
  751. X  DefineEValue(p, 14L, "GetGeometry");
  752. X  DefineEValue(p, 15L, "QueryTree");
  753. X  DefineEValue(p, 16L, "InternAtom");
  754. X  DefineEValue(p, 17L, "GetAtomName");
  755. X  DefineEValue(p, 18L, "ChangeProperty");
  756. X  DefineEValue(p, 19L, "DeleteProperty");
  757. X  DefineEValue(p, 20L, "GetProperty");
  758. X  DefineEValue(p, 21L, "ListProperties");
  759. X  DefineEValue(p, 22L, "SetSelectionOwner");
  760. X  DefineEValue(p, 23L, "GetSelectionOwner");
  761. X  DefineEValue(p, 24L, "ConvertSelection");
  762. X  DefineEValue(p, 25L, "SendEvent");
  763. X  DefineEValue(p, 26L, "GrabPointer");
  764. X  DefineEValue(p, 27L, "UngrabPointer");
  765. X  DefineEValue(p, 28L, "GrabButton");
  766. X  DefineEValue(p, 29L, "UngrabButton");
  767. X  DefineEValue(p, 30L, "ChangeActivePointerGrab");
  768. X  DefineEValue(p, 31L, "GrabKeyboard");
  769. X  DefineEValue(p, 32L, "UngrabKeyboard");
  770. X  DefineEValue(p, 33L, "GrabKey");
  771. X  DefineEValue(p, 34L, "UngrabKey");
  772. X  DefineEValue(p, 35L, "AllowEvents");
  773. X  DefineEValue(p, 36L, "GrabServer");
  774. X  DefineEValue(p, 37L, "UngrabServer");
  775. X  DefineEValue(p, 38L, "QueryPointer");
  776. X  DefineEValue(p, 39L, "GetMotionEvents");
  777. X  DefineEValue(p, 40L, "TranslateCoordinates");
  778. X  DefineEValue(p, 41L, "WarpPointer");
  779. X  DefineEValue(p, 42L, "SetInputFocus");
  780. X  DefineEValue(p, 43L, "GetInputFocus");
  781. X  DefineEValue(p, 44L, "QueryKeymap");
  782. X  DefineEValue(p, 45L, "OpenFont");
  783. X  DefineEValue(p, 46L, "CloseFont");
  784. X  DefineEValue(p, 47L, "QueryFont");
  785. X  DefineEValue(p, 48L, "QueryTextExtents");
  786. X  DefineEValue(p, 49L, "ListFonts");
  787. X  DefineEValue(p, 50L, "ListFontsWithInfo");
  788. X  DefineEValue(p, 51L, "SetFontPath");
  789. X  DefineEValue(p, 52L, "GetFontPath");
  790. X  DefineEValue(p, 53L, "CreatePixmap");
  791. X  DefineEValue(p, 54L, "FreePixmap");
  792. X  DefineEValue(p, 55L, "CreateGC");
  793. X  DefineEValue(p, 56L, "ChangeGC");
  794. X  DefineEValue(p, 57L, "CopyGC");
  795. X  DefineEValue(p, 58L, "SetDashes");
  796. X  DefineEValue(p, 59L, "SetClipRectangles");
  797. X  DefineEValue(p, 60L, "FreeGC");
  798. X  DefineEValue(p, 61L, "ClearArea");
  799. X  DefineEValue(p, 62L, "CopyArea");
  800. X  DefineEValue(p, 63L, "CopyPlane");
  801. X  DefineEValue(p, 64L, "PolyPoint");
  802. X  DefineEValue(p, 65L, "PolyLine");
  803. X  DefineEValue(p, 66L, "PolySegment");
  804. X  DefineEValue(p, 67L, "PolyRectangle");
  805. X  DefineEValue(p, 68L, "PolyArc");
  806. X  DefineEValue(p, 69L, "FillPoly");
  807. X  DefineEValue(p, 70L, "PolyFillRectangle");
  808. X  DefineEValue(p, 71L, "PolyFillArc");
  809. X  DefineEValue(p, 72L, "PutImage");
  810. X  DefineEValue(p, 73L, "GetImage");
  811. X  DefineEValue(p, 74L, "PolyText8");
  812. X  DefineEValue(p, 75L, "PolyText16");
  813. X  DefineEValue(p, 76L, "ImageText8");
  814. X  DefineEValue(p, 77L, "ImageText16");
  815. X  DefineEValue(p, 78L, "CreateColormap");
  816. X  DefineEValue(p, 79L, "FreeColormap");
  817. X  DefineEValue(p, 80L, "CopyColormapAndFree");
  818. X  DefineEValue(p, 81L, "InstallColormap");
  819. X  DefineEValue(p, 82L, "UninstallColormap");
  820. X  DefineEValue(p, 83L, "ListInstalledColormaps");
  821. X  DefineEValue(p, 84L, "AllocColor");
  822. X  DefineEValue(p, 85L, "AllocNamedColor");
  823. X  DefineEValue(p, 86L, "AllocColorCells");
  824. X  DefineEValue(p, 87L, "AllocColorPlanes");
  825. X  DefineEValue(p, 88L, "FreeColors");
  826. X  DefineEValue(p, 89L, "StoreColors");
  827. X  DefineEValue(p, 90L, "StoreNamedColor");
  828. X  DefineEValue(p, 91L, "QueryColors");
  829. X  DefineEValue(p, 92L, "LookupColor");
  830. X  DefineEValue(p, 93L, "CreateCursor");
  831. X  DefineEValue(p, 94L, "CreateGlyphCursor");
  832. X  DefineEValue(p, 95L, "FreeCursor");
  833. X  DefineEValue(p, 96L, "RecolorCursor");
  834. X  DefineEValue(p, 97L, "QueryBestSize");
  835. X  DefineEValue(p, 98L, "QueryExtension");
  836. X  DefineEValue(p, 99L, "ListExtensions");
  837. X  DefineEValue(p, 100L, "ChangeKeyboardMapping");
  838. X  DefineEValue(p, 101L, "GetKeyboardMapping");
  839. X  DefineEValue(p, 102L, "ChangeKeyboardControl");
  840. X  DefineEValue(p, 103L, "GetKeyboardControl");
  841. X  DefineEValue(p, 104L, "Bell");
  842. X  DefineEValue(p, 105L, "ChangePointerControl");
  843. X  DefineEValue(p, 106L, "GetPointerControl");
  844. X  DefineEValue(p, 107L, "SetScreenSaver");
  845. X  DefineEValue(p, 108L, "GetScreenSaver");
  846. X  DefineEValue(p, 109L, "ChangeHosts");
  847. X  DefineEValue(p, 110L, "ListHosts");
  848. X  DefineEValue(p, 111L, "SetAccessControl");
  849. X  DefineEValue(p, 112L, "SetCloseDownMode");
  850. X  DefineEValue(p, 113L, "KillClient");
  851. X  DefineEValue(p, 114L, "RotateProperties");
  852. X  DefineEValue(p, 115L, "ForceScreenSaver");
  853. X  DefineEValue(p, 116L, "SetPointerMapping");
  854. X  DefineEValue(p, 117L, "GetPointerMapping");
  855. X  DefineEValue(p, 118L, "SetModifierMapping");
  856. X  DefineEValue(p, 119L, "GetModifierMapping");
  857. X  DefineEValue(p, 127L, "NoOperation");
  858. X
  859. X  p = DefineType(REPLY, ENUMERATED, "REPLY", PrintENUMERATED);
  860. X  DefineEValue(p, 3L, "GetWindowAttributes");
  861. X  DefineEValue(p, 14L, "GetGeometry");
  862. X  DefineEValue(p, 15L, "QueryTree");
  863. X  DefineEValue(p, 16L, "InternAtom");
  864. X  DefineEValue(p, 17L, "GetAtomName");
  865. X  DefineEValue(p, 20L, "GetProperty");
  866. X  DefineEValue(p, 21L, "ListProperties");
  867. X  DefineEValue(p, 23L, "GetSelectionOwner");
  868. X  DefineEValue(p, 26L, "GrabPointer");
  869. X  DefineEValue(p, 31L, "GrabKeyboard");
  870. X  DefineEValue(p, 38L, "QueryPointer");
  871. X  DefineEValue(p, 39L, "GetMotionEvents");
  872. X  DefineEValue(p, 40L, "TranslateCoordinates");
  873. X  DefineEValue(p, 43L, "GetInputFocus");
  874. X  DefineEValue(p, 44L, "QueryKeymap");
  875. X  DefineEValue(p, 47L, "QueryFont");
  876. X  DefineEValue(p, 48L, "QueryTextExtents");
  877. X  DefineEValue(p, 49L, "ListFonts");
  878. X  DefineEValue(p, 50L, "ListFontsWithInfo");
  879. X  DefineEValue(p, 52L, "GetFontPath");
  880. X  DefineEValue(p, 73L, "GetImage");
  881. X  DefineEValue(p, 83L, "ListInstalledColormaps");
  882. X  DefineEValue(p, 84L, "AllocColor");
  883. X  DefineEValue(p, 85L, "AllocNamedColor");
  884. X  DefineEValue(p, 86L, "AllocColorCells");
  885. X  DefineEValue(p, 87L, "AllocColorPlanes");
  886. X  DefineEValue(p, 91L, "QueryColors");
  887. X  DefineEValue(p, 92L, "LookupColor");
  888. X  DefineEValue(p, 97L, "QueryBestSize");
  889. X  DefineEValue(p, 98L, "QueryExtension");
  890. X  DefineEValue(p, 99L, "ListExtensions");
  891. X  DefineEValue(p, 101L, "GetKeyboardMapping");
  892. X  DefineEValue(p, 103L, "GetKeyboardControl");
  893. X  DefineEValue(p, 106L, "GetPointerControl");
  894. X  DefineEValue(p, 108L, "GetScreenSaver");
  895. X  DefineEValue(p, 110L, "ListHosts");
  896. X  DefineEValue(p, 116L, "SetPointerMapping");
  897. X  DefineEValue(p, 117L, "GetPointerMapping");
  898. X  DefineEValue(p, 118L, "SetModifierMapping");
  899. X  DefineEValue(p, 119L, "GetModifierMapping");
  900. X
  901. X  p = DefineType(ERROR, ENUMERATED, "ERROR", PrintENUMERATED);
  902. X  DefineEValue(p, 1L, "Request");
  903. X  DefineEValue(p, 2L, "Value");
  904. X  DefineEValue(p, 3L, "Window");
  905. X  DefineEValue(p, 4L, "Pixmap");
  906. X  DefineEValue(p, 5L, "Atom");
  907. X  DefineEValue(p, 6L, "Cursor");
  908. X  DefineEValue(p, 7L, "Font");
  909. X  DefineEValue(p, 8L, "Match");
  910. X  DefineEValue(p, 9L, "Drawable");
  911. X  DefineEValue(p, 10L, "Access");
  912. X  DefineEValue(p, 11L, "Alloc");
  913. X  DefineEValue(p, 12L, "Colormap");
  914. X  DefineEValue(p, 13L, "GContext");
  915. X  DefineEValue(p, 14L, "IDChoice");
  916. X  DefineEValue(p, 15L, "Name");
  917. X  DefineEValue(p, 16L, "Length");
  918. X  DefineEValue(p, 17L, "Implementation");
  919. X
  920. X  p = DefineType(EVENT, ENUMERATED, "EVENT", PrintENUMERATED);
  921. X  DefineEValue(p, 2L, "KeyPress");
  922. X  DefineEValue(p, 3L, "KeyRelease");
  923. X  DefineEValue(p, 4L, "ButtonPress");
  924. X  DefineEValue(p, 5L, "ButtonRelease");
  925. X  DefineEValue(p, 6L, "MotionNotify");
  926. X  DefineEValue(p, 7L, "EnterNotify");
  927. X  DefineEValue(p, 8L, "LeaveNotify");
  928. X  DefineEValue(p, 9L, "FocusIn");
  929. X  DefineEValue(p, 10L, "FocusOut");
  930. X  DefineEValue(p, 11L, "KeymapNotify");
  931. X  DefineEValue(p, 12L, "Expose");
  932. X  DefineEValue(p, 13L, "GraphicsExposure");
  933. X  DefineEValue(p, 14L, "NoExposure");
  934. X  DefineEValue(p, 15L, "VisibilityNotify");
  935. X  DefineEValue(p, 16L, "CreateNotify");
  936. X  DefineEValue(p, 17L, "DestroyNotify");
  937. X  DefineEValue(p, 18L, "UnmapNotify");
  938. X  DefineEValue(p, 19L, "MapNotify");
  939. X  DefineEValue(p, 20L, "MapRequest");
  940. X  DefineEValue(p, 21L, "ReparentNotify");
  941. X  DefineEValue(p, 22L, "ConfigureNotify");
  942. X  DefineEValue(p, 23L, "ConfigureRequest");
  943. X  DefineEValue(p, 24L, "GravityNotify");
  944. X  DefineEValue(p, 25L, "ResizeRequest");
  945. X  DefineEValue(p, 26L, "CirculateNotify");
  946. X  DefineEValue(p, 27L, "CirculateRequest");
  947. X  DefineEValue(p, 28L, "PropertyNotify");
  948. X  DefineEValue(p, 29L, "SelectionClear");
  949. X  DefineEValue(p, 30L, "SelectionRequest");
  950. X  DefineEValue(p, 31L, "SelectionNotify");
  951. X  DefineEValue(p, 32L, "ColormapNotify");
  952. X  DefineEValue(p, 33L, "ClientMessage");
  953. X  DefineEValue(p, 34L, "MappingNotify");
  954. X
  955. X
  956. X  p = DefineType(BITGRAVITY, ENUMERATED, "BITGRAVITY", PrintENUMERATED);
  957. X  DefineEValue(p, 0L, "Forget");
  958. X  DefineEValue(p, 1L, "NorthWest");
  959. X  DefineEValue(p, 2L, "North");
  960. X  DefineEValue(p, 3L, "NorthEast");
  961. X  DefineEValue(p, 4L, "West");
  962. X  DefineEValue(p, 5L, "Center");
  963. X  DefineEValue(p, 6L, "East");
  964. X  DefineEValue(p, 7L, "SouthWest");
  965. X  DefineEValue(p, 8L, "South");
  966. X  DefineEValue(p, 9L, "SouthEast");
  967. X  DefineEValue(p, 10L, "Static");
  968. X
  969. X  p = DefineType(WINGRAVITY, ENUMERATED, "WINGRAVITY", PrintENUMERATED);
  970. X  DefineEValue(p, 0L, "Unmap");
  971. X  DefineEValue(p, 1L, "NorthWest");
  972. X  DefineEValue(p, 2L, "North");
  973. X  DefineEValue(p, 3L, "NorthEast");
  974. X  DefineEValue(p, 4L, "West");
  975. X  DefineEValue(p, 5L, "Center");
  976. X  DefineEValue(p, 6L, "East");
  977. X  DefineEValue(p, 7L, "SouthWest");
  978. X  DefineEValue(p, 8L, "South");
  979. X  DefineEValue(p, 9L, "SouthEast");
  980. X  DefineEValue(p, 10L, "Static");
  981. X
  982. X  p = DefineType(BOOL, ENUMERATED, "BOOL", PrintENUMERATED);
  983. X  DefineEValue(p, 0L, "False");
  984. X  DefineEValue(p, 1L, "True");
  985. X
  986. X  p = DefineType(HOSTFAMILY, ENUMERATED, "HOSTFAMILY", PrintENUMERATED);
  987. X  DefineEValue(p, 0L, "Internet");
  988. X  DefineEValue(p, 1L, "DECnet");
  989. X  DefineEValue(p, 2L, "Chaos");
  990. X
  991. X  p = DefineType(PK_MODE, ENUMERATED, "PK_MODE", PrintENUMERATED);
  992. X  DefineEValue(p, 0L, "Synchronous");
  993. X  DefineEValue(p, 1L, "Asynchronous");
  994. X
  995. X  p = DefineType(NO_YES, ENUMERATED, "NO_YES", PrintENUMERATED);
  996. X  DefineEValue(p, 0L, "No");
  997. X  DefineEValue(p, 1L, "Yes");
  998. X  DefineEValue(p, 2L, "Default");
  999. X
  1000. X  p = DefineType(WINDOWCLASS, ENUMERATED, "WINDOWCLASS", PrintENUMERATED);
  1001. X  DefineEValue(p, 0L, "CopyFromParent");
  1002. X  DefineEValue(p, 1L, "InputOutput");
  1003. X  DefineEValue(p, 2L, "InputOnly");
  1004. X
  1005. X  p = DefineType(BACKSTORE, ENUMERATED, "BACKSTORE", PrintENUMERATED);
  1006. X  DefineEValue(p, 0L, "NotUseful");
  1007. X  DefineEValue(p, 1L, "WhenMapped");
  1008. X  DefineEValue(p, 2L, "Always");
  1009. X
  1010. X  p = DefineType(MAPSTATE, ENUMERATED, "MAPSTATE", PrintENUMERATED);
  1011. X  DefineEValue(p, 0L, "Unmapped");
  1012. X  DefineEValue(p, 1L, "Unviewable");
  1013. X  DefineEValue(p, 2L, "Viewable");
  1014. X
  1015. X  p = DefineType(STACKMODE, ENUMERATED, "STACKMODE", PrintENUMERATED);
  1016. X  DefineEValue(p, 0L, "Above");
  1017. X  DefineEValue(p, 1L, "Below");
  1018. X  DefineEValue(p, 2L, "TopIf");
  1019. X  DefineEValue(p, 3L, "BottomIf");
  1020. X  DefineEValue(p, 4L, "Opposite");
  1021. X
  1022. X  p = DefineType(CIRMODE, ENUMERATED, "CIRMODE", PrintENUMERATED);
  1023. X  DefineEValue(p, 0L, "RaiseLowest");
  1024. X  DefineEValue(p, 1L, "LowerHighest");
  1025. X
  1026. X  p = DefineType(CHANGEMODE, ENUMERATED, "CHANGEMODE", PrintENUMERATED);
  1027. X  DefineEValue(p, 0L, "Replace");
  1028. X  DefineEValue(p, 1L, "Prepend");
  1029. X  DefineEValue(p, 2L, "Append");
  1030. X
  1031. X  p = DefineType(GRABSTAT, ENUMERATED, "GRABSTAT", PrintENUMERATED);
  1032. X  DefineEValue(p, 0L, "Success");
  1033. X  DefineEValue(p, 1L, "AlreadyGrabbed");
  1034. X  DefineEValue(p, 2L, "InvalidTime");
  1035. X  DefineEValue(p, 3L, "NotViewable");
  1036. X  DefineEValue(p, 4L, "Frozen");
  1037. X
  1038. X  p = DefineType(EVENTMODE, ENUMERATED, "EVENTMODE", PrintENUMERATED);
  1039. X  DefineEValue(p, 0L, "AsyncPointer");
  1040. X  DefineEValue(p, 1L, "SyncPointer");
  1041. X  DefineEValue(p, 2L, "ReplayPointer");
  1042. X  DefineEValue(p, 3L, "AsyncKeyboard");
  1043. X  DefineEValue(p, 4L, "SyncKeyboard");
  1044. X  DefineEValue(p, 5L, "ReplayKeyboard");
  1045. X  DefineEValue(p, 6L, "AsyncBoth");
  1046. X  DefineEValue(p, 7L, "SyncBoth");
  1047. X
  1048. X  p = DefineType(FOCUSAGENT, ENUMERATED, "FOCUSAGENT", PrintENUMERATED);
  1049. X  DefineEValue(p, 0L, "None");
  1050. X  DefineEValue(p, 1L, "PointerRoot");
  1051. X  DefineEValue(p, 2L, "Parent");
  1052. X
  1053. X  p = DefineType(DIRECT, ENUMERATED, "DIRECT", PrintENUMERATED);
  1054. X  DefineEValue(p, 0L, "LeftToRight");
  1055. X  DefineEValue(p, 1L, "RightToLeft");
  1056. X
  1057. X  p = DefineType(GCFUNC, ENUMERATED, "GCFUNC", PrintENUMERATED);
  1058. X  DefineEValue(p, 0L, "Clear");
  1059. X  DefineEValue(p, 1L, "And");
  1060. X  DefineEValue(p, 2L, "AndReverse");
  1061. X  DefineEValue(p, 3L, "Copy");
  1062. X  DefineEValue(p, 4L, "AndInverted");
  1063. X  DefineEValue(p, 5L, "Noop");
  1064. X  DefineEValue(p, 6L, "Xor");
  1065. X  DefineEValue(p, 7L, "Or");
  1066. X  DefineEValue(p, 8L, "Nor");
  1067. X  DefineEValue(p, 9L, "Equiv");
  1068. X  DefineEValue(p, 10L, "Invert");
  1069. X  DefineEValue(p, 11L, "OrReverse");
  1070. X  DefineEValue(p, 12L, "CopyInverted");
  1071. X  DefineEValue(p, 13L, "OrInverted");
  1072. X  DefineEValue(p, 14L, "Nand");
  1073. X  DefineEValue(p, 15L, "Set");
  1074. X
  1075. X  p = DefineType(LINESTYLE, ENUMERATED, "LINESTYLE", PrintENUMERATED);
  1076. X  DefineEValue(p, 0L, "Solid");
  1077. X  DefineEValue(p, 1L, "OnOffDash");
  1078. X  DefineEValue(p, 2L, "DoubleDash");
  1079. X
  1080. X  p = DefineType(CAPSTYLE, ENUMERATED, "CAPSTYLE", PrintENUMERATED);
  1081. X  DefineEValue(p, 0L, "NotLast");
  1082. X  DefineEValue(p, 1L, "Butt");
  1083. X  DefineEValue(p, 2L, "Round");
  1084. X  DefineEValue(p, 3L, "Projecting");
  1085. X
  1086. X  p = DefineType(JOINSTYLE, ENUMERATED, "JOINSTYLE", PrintENUMERATED);
  1087. X  DefineEValue(p, 0L, "Miter");
  1088. X  DefineEValue(p, 1L, "Round");
  1089. X  DefineEValue(p, 2L, "Bevel");
  1090. X
  1091. X  p = DefineType(FILLSTYLE, ENUMERATED, "FILLSTYLE", PrintENUMERATED);
  1092. X  DefineEValue(p, 0L, "Solid");
  1093. X  DefineEValue(p, 1L, "Tiled");
  1094. X  DefineEValue(p, 2L, "Stippled");
  1095. X  DefineEValue(p, 3L, "OpaqueStippled");
  1096. X
  1097. X  p = DefineType(FILLRULE, ENUMERATED, "FILLRULE", PrintENUMERATED);
  1098. X  DefineEValue(p, 0L, "EvenOdd");
  1099. X  DefineEValue(p, 1L, "Winding");
  1100. X
  1101. X  p = DefineType(SUBWINMODE, ENUMERATED, "SUBWINMODE", PrintENUMERATED);
  1102. X  DefineEValue(p, 0L, "ClipByChildren");
  1103. X  DefineEValue(p, 1L, "IncludeInferiors");
  1104. X
  1105. X  p = DefineType(ARCMODE, ENUMERATED, "ARCMODE", PrintENUMERATED);
  1106. X  DefineEValue(p, 0L, "Chord");
  1107. X  DefineEValue(p, 1L, "PieSlice");
  1108. X
  1109. X  p = DefineType(RECTORDER, ENUMERATED, "RECTORDER", PrintENUMERATED);
  1110. X  DefineEValue(p, 0L, "UnSorted");
  1111. X  DefineEValue(p, 1L, "YSorted");
  1112. X  DefineEValue(p, 2L, "YXSorted");
  1113. X  DefineEValue(p, 3L, "YXBanded");
  1114. X
  1115. X  p = DefineType(COORMODE, ENUMERATED, "COORMODE", PrintENUMERATED);
  1116. X  DefineEValue(p, 0L, "Origin");
  1117. X  DefineEValue(p, 1L, "Previous");
  1118. X
  1119. X  p = DefineType(POLYSHAPE, ENUMERATED, "POLYSHAPE", PrintENUMERATED);
  1120. X  DefineEValue(p, 0L, "Complex");
  1121. X  DefineEValue(p, 1L, "Nonconvex");
  1122. X  DefineEValue(p, 2L, "Convex");
  1123. X
  1124. X  p = DefineType(IMAGEMODE, ENUMERATED, "IMAGEMODE", PrintENUMERATED);
  1125. X  DefineEValue(p, 0L, "Bitmap");
  1126. X  DefineEValue(p, 1L, "XYPixmap");
  1127. X  DefineEValue(p, 2L, "ZPixmap");
  1128. X
  1129. X  p = DefineType(ALLORNONE, ENUMERATED, "ALLORNONE", PrintENUMERATED);
  1130. X  DefineEValue(p, 0L, "None");
  1131. X  DefineEValue(p, 1L, "All");
  1132. X
  1133. X  p = DefineType(OBJECTCLASS, ENUMERATED, "OBJECTCLASS", PrintENUMERATED);
  1134. X  DefineEValue(p, 0L, "Cursor");
  1135. X  DefineEValue(p, 1L, "Tile");
  1136. X  DefineEValue(p, 2L, "Stipple");
  1137. X
  1138. X  p = DefineType(OFF_ON, ENUMERATED, "OFF_ON", PrintENUMERATED);
  1139. X  DefineEValue(p, 0L, "Off");
  1140. X  DefineEValue(p, 1L, "On");
  1141. X  DefineEValue(p, 2L, "Default");
  1142. X
  1143. X  p = DefineType(INS_DEL, ENUMERATED, "INS_DEL", PrintENUMERATED);
  1144. X  DefineEValue(p, 0L, "Insert");
  1145. X  DefineEValue(p, 1L, "Delete");
  1146. X
  1147. X  p = DefineType(DIS_EN, ENUMERATED, "DIS_EN", PrintENUMERATED);
  1148. X  DefineEValue(p, 0L, "Disabled");
  1149. X  DefineEValue(p, 1L, "Enabled");
  1150. X
  1151. X  p = DefineType(CLOSEMODE, ENUMERATED, "CLOSEMODE", PrintENUMERATED);
  1152. X  DefineEValue(p, 0L, "Destroy");
  1153. X  DefineEValue(p, 1L, "RetainPermanent");
  1154. X  DefineEValue(p, 2L, "RetainTemporary");
  1155. X
  1156. X  p = DefineType(SAVEMODE, ENUMERATED, "SAVEMODE", PrintENUMERATED);
  1157. X  DefineEValue(p, 0L, "Reset");
  1158. X  DefineEValue(p, 1L, "Activate");
  1159. X
  1160. X  p = DefineType(RSTATUS, ENUMERATED, "RSTATUS", PrintENUMERATED);
  1161. X  DefineEValue(p, 0L, "Success");
  1162. X  DefineEValue(p, 1L, "Busy");
  1163. X  DefineEValue(p, 2L, "Failed");
  1164. X
  1165. X  p = DefineType(MOTIONDETAIL, ENUMERATED, "MOTIONDETAIL", PrintENUMERATED);
  1166. X  DefineEValue(p, 0L, "Normal");
  1167. X  DefineEValue(p, 1L, "Hint");
  1168. X
  1169. X  p = DefineType(ENTERDETAIL, ENUMERATED, "ENTERDETAIL", PrintENUMERATED);
  1170. X  DefineEValue(p, 0L, "Ancestor");
  1171. X  DefineEValue(p, 1L, "Virtual");
  1172. X  DefineEValue(p, 2L, "Inferior");
  1173. X  DefineEValue(p, 3L, "Nonlinear");
  1174. X  DefineEValue(p, 4L, "NonlinearVirtual");
  1175. X  DefineEValue(p, 5L, "Pointer");
  1176. X  DefineEValue(p, 6L, "PointerRoot");
  1177. X  DefineEValue(p, 7L, "None");
  1178. X
  1179. X  p = DefineType(BUTTONMODE, ENUMERATED, "BUTTONMODE", PrintENUMERATED);
  1180. X  DefineEValue(p, 0L, "Normal");
  1181. X  DefineEValue(p, 1L, "Grab");
  1182. X  DefineEValue(p, 2L, "Ungrab");
  1183. X  DefineEValue(p, 3L, "WhileGrabbed");
  1184. X
  1185. X  p = DefineType(VISIBLE, ENUMERATED, "VISIBLE", PrintENUMERATED);
  1186. X  DefineEValue(p, 0L, "Unobscured");
  1187. X  DefineEValue(p, 1L, "PartiallyObscured");
  1188. X  DefineEValue(p, 2L, "FullyObscured");
  1189. X
  1190. X  p = DefineType(CIRSTAT, ENUMERATED, "CIRSTAT", PrintENUMERATED);
  1191. X  DefineEValue(p, 0L, "Top");
  1192. X  DefineEValue(p, 1L, "Bottom");
  1193. X
  1194. X  p = DefineType(PROPCHANGE, ENUMERATED, "PROPCHANGE", PrintENUMERATED);
  1195. X  DefineEValue(p, 0L, "NewValue");
  1196. X  DefineEValue(p, 1L, "Deleted");
  1197. X
  1198. X  p = DefineType(CMAPCHANGE, ENUMERATED, "CMAPCHANGE", PrintENUMERATED);
  1199. X  DefineEValue(p, 0L, "Uninstalled");
  1200. X  DefineEValue(p, 1L, "Installed");
  1201. X
  1202. X  p = DefineType(MAPOBJECT, ENUMERATED, "MAPOBJECT", PrintENUMERATED);
  1203. X  DefineEValue(p, 0L, "Modifier");
  1204. X  DefineEValue(p, 1L, "Keyboard");
  1205. X  DefineEValue(p, 2L, "Pointer");
  1206. X
  1207. X  p = DefineType(BYTEMODE, ENUMERATED, "BYTEMODE", PrintENUMERATED);
  1208. X  DefineEValue(p, 0x42L, "MSB first");
  1209. X  DefineEValue(p, 0x6CL, "LSB first");
  1210. X
  1211. X  p = DefineType(BYTEORDER, ENUMERATED, "BYTEORDER", PrintENUMERATED);
  1212. X  DefineEValue(p, 0L, "LSB first");
  1213. X  DefineEValue(p, 1L, "MSB first");
  1214. X
  1215. X  p = DefineType(COLORCLASS, ENUMERATED, "COLORCLASS", PrintENUMERATED);
  1216. X  DefineEValue(p, 0L, "StaticGray");
  1217. X  DefineEValue(p, 1L, "GrayScale");
  1218. X  DefineEValue(p, 2L, "StaticColor");
  1219. X  DefineEValue(p, 3L, "PseudoColor");
  1220. X  DefineEValue(p, 4L, "TrueColor");
  1221. X  DefineEValue(p, 5L, "DirectColor");
  1222. X`7D
  1223. X
  1224. X/* ************************************************************ */
  1225. X/*`09`09`09`09`09`09`09`09*/
  1226. X/*`09`09`09`09`09`09`09`09*/
  1227. X/* ************************************************************ */
  1228. X
  1229. XInitSetTypes()
  1230. X`7B
  1231. X  TYPE p;
  1232. X
  1233. X  p = DefineType(SETofEVENT, SET, "SETofEVENT", PrintSET);
  1234. X  DefineEValue(p, 0x00000001L, "KeyPress");
  1235. X  DefineEValue(p, 0x00000002L, "KeyRelease");
  1236. X  DefineEValue(p, 0x00000004L, "ButtonPress");
  1237. X  DefineEValue(p, 0x00000008L, "ButtonRelease");
  1238. X  DefineEValue(p, 0x00000010L, "EnterWindow");
  1239. X  DefineEValue(p, 0x00000020L, "LeaveWindow");
  1240. X  DefineEValue(p, 0x00000040L, "PointerMotion");
  1241. X  DefineEValue(p, 0x00000080L, "PointerMotionHint");
  1242. X  DefineEValue(p, 0x00000100L, "Button1Motion");
  1243. X  DefineEValue(p, 0x00000200L, "Button2Motion");
  1244. X  DefineEValue(p, 0x00000400L, "Button3Motion");
  1245. X  DefineEValue(p, 0x00000800L, "Button4Motion");
  1246. X  DefineEValue(p, 0x00001000L, "Button5Motion");
  1247. X  DefineEValue(p, 0x00002000L, "ButtonMotion");
  1248. X  DefineEValue(p, 0x00004000L, "KeymapState");
  1249. X  DefineEValue(p, 0x00008000L, "Exposure");
  1250. X  DefineEValue(p, 0x00010000L, "VisibilityChange");
  1251. X  DefineEValue(p, 0x00020000L, "StructureNotify");
  1252. X  DefineEValue(p, 0x00040000L, "ResizeRedirect");
  1253. X  DefineEValue(p, 0x00080000L, "SubstructureNotify");
  1254. X  DefineEValue(p, 0x00100000L, "SubstructureRedirect");
  1255. X  DefineEValue(p, 0x00200000L, "FocusChange");
  1256. X  DefineEValue(p, 0x00400000L, "PropertyChange");
  1257. X  DefineEValue(p, 0x00800000L, "ColormapChange");
  1258. X  DefineEValue(p, 0x01000000L, "OwnerGrabButton");
  1259. X
  1260. X  p = DefineType(SETofPOINTEREVENT, SET, "SETofPOINTEREVENT", PrintSET);
  1261. X  DefineEValue(p, 0x00000004L, "ButtonPress");
  1262. X  DefineEValue(p, 0x00000008L, "ButtonRelease");
  1263. X  DefineEValue(p, 0x00000010L, "EnterWindow");
  1264. X  DefineEValue(p, 0x00000020L, "LeaveWindow");
  1265. X  DefineEValue(p, 0x00000040L, "PointerMotion");
  1266. X  DefineEValue(p, 0x00000080L, "PointerMotionHint");
  1267. X  DefineEValue(p, 0x00000100L, "Button1Motion");
  1268. X  DefineEValue(p, 0x00000200L, "Button2Motion");
  1269. X  DefineEValue(p, 0x00000400L, "Button3Motion");
  1270. X  DefineEValue(p, 0x00000800L, "Button4Motion");
  1271. X  DefineEValue(p, 0x00001000L, "Button5Motion");
  1272. X  DefineEValue(p, 0x00002000L, "ButtonMotion");
  1273. X  DefineEValue(p, 0x00004000L, "KeymapState");
  1274. X
  1275. X  p = DefineType(SETofDEVICEEVENT, SET, "SETofDEVICEEVENT", PrintSET);
  1276. X  DefineEValue(p, 0x00000001L, "KeyPress");
  1277. X  DefineEValue(p, 0x00000002L, "KeyRelease");
  1278. X  DefineEValue(p, 0x00000004L, "ButtonPress");
  1279. X  DefineEValue(p, 0x00000008L, "ButtonRelease");
  1280. X  DefineEValue(p, 0x00000040L, "PointerMotion");
  1281. X  DefineEValue(p, 0x00000100L, "Button1Motion");
  1282. X  DefineEValue(p, 0x00000200L, "Button2Motion");
  1283. X  DefineEValue(p, 0x00000400L, "Button3Motion");
  1284. X  DefineEValue(p, 0x00000800L, "Button4Motion");
  1285. X  DefineEValue(p, 0x00001000L, "Button5Motion");
  1286. X  DefineEValue(p, 0x00002000L, "ButtonMotion");
  1287. X
  1288. X  p = DefineType(SETofKEYBUTMASK, SET, "SETofKEYBUTMASK", PrintSET);
  1289. X  DefineEValue(p, 0x0001L, "Shift");
  1290. X  DefineEValue(p, 0x0002L, "Lock");
  1291. X  DefineEValue(p, 0x0004L, "Control");
  1292. X  DefineEValue(p, 0x0008L, "Mod1");
  1293. X  DefineEValue(p, 0x0010L, "Mod2");
  1294. X  DefineEValue(p, 0x0020L, "Mod3");
  1295. X  DefineEValue(p, 0x0040L, "Mod4");
  1296. X  DefineEValue(p, 0x0080L, "Mod5");
  1297. X  DefineEValue(p, 0x0100L, "Button1");
  1298. X  DefineEValue(p, 0x0200L, "Button2");
  1299. X  DefineEValue(p, 0x0400L, "Button3");
  1300. X  DefineEValue(p, 0x0800L, "Button4");
  1301. X  DefineEValue(p, 0x1000L, "Button5");
  1302. X
  1303. X  p = DefineType(SETofKEYMASK, SET, "SETofKEYMASK", PrintSET);
  1304. X  DefineEValue(p, 0x0001L, "Shift");
  1305. X  DefineEValue(p, 0x0002L, "Lock");
  1306. X  DefineEValue(p, 0x0004L, "Control");
  1307. X  DefineEValue(p, 0x0008L, "Mod1");
  1308. X  DefineEValue(p, 0x0010L, "Mod2");
  1309. X  DefineEValue(p, 0x0020L, "Mod3");
  1310. X  DefineEValue(p, 0x0040L, "Mod4");
  1311. X  DefineEValue(p, 0x0080L, "Mod5");
  1312. X  DefineEValue(p, 0x8000L, "AnyModifier");
  1313. X
  1314. X  p = DefineType(COLORMASK, SET, "COLORMASK", PrintSET);
  1315. X  DefineEValue(p, 0x01L, "do-red");
  1316. X  DefineEValue(p, 0x02L, "do-green");
  1317. X  DefineEValue(p, 0x04L, "do-blue");
  1318. X
  1319. X  p = DefineType(SCREENFOCUS, SET, "SCREENFOCUS", PrintSET);
  1320. X  DefineEValue(p, 0x01L, "focus");
  1321. X  DefineEValue(p, 0x02L, "same-screen");
  1322. X`7D
  1323. X
  1324. X
  1325. X/* ************************************************************ */
  1326. X/*`09`09`09`09`09`09`09`09*/
  1327. X/*`09`09`09`09`09`09`09`09*/
  1328. X/* ************************************************************ */
  1329. X
  1330. X/* Print Routines for builtin record types */
  1331. X
  1332. XPrintCHAR2B(buf)
  1333. X     unsigned char *buf;
  1334. X`7B
  1335. X  PrintField(buf, 0, 1, CARD8, "byte1");
  1336. X  PrintField(buf, 1, 1, CARD8, "byte2");
  1337. X`7D
  1338. X
  1339. XPrintPOINT(buf)
  1340. X     unsigned char *buf;
  1341. X`7B
  1342. X  PrintField(buf, 0, 2, INT16, "x");
  1343. X  PrintField(buf, 2, 2, INT16, "y");
  1344. X  return(4);
  1345. X`7D
  1346. X
  1347. XPrintRECTANGLE(buf)
  1348. X     unsigned char *buf;
  1349. X`7B
  1350. X  PrintField(buf, 0, 2, INT16, "x");
  1351. X  PrintField(buf, 2, 2, INT16, "y");
  1352. X  PrintField(buf, 4, 2, CARD16, "width");
  1353. X  PrintField(buf, 6, 2, CARD16, "height");
  1354. X  return(8);
  1355. X`7D
  1356. X
  1357. XPrintARC(buf)
  1358. X     unsigned char *buf;
  1359. X`7B
  1360. X  PrintField(buf, 0, 2, INT16, "x");
  1361. X  PrintField(buf, 2, 2, INT16, "y");
  1362. X  PrintField(buf, 4, 2, CARD16, "width");
  1363. X  PrintField(buf, 6, 2, CARD16, "height");
  1364. X  PrintField(buf, 8, 2, INT16, "angle1");
  1365. X  PrintField(buf, 10, 2, INT16, "angle2");
  1366. X  return(12);
  1367. X`7D
  1368. X
  1369. XPrintHOST(buf)
  1370. X     unsigned char *buf;
  1371. X`7B
  1372. X  short   n;
  1373. X  PrintField(buf, 0, 1, HOSTFAMILY, "family");
  1374. X  PrintField(buf, 2, 2, DVALUE2(n), "length of address");
  1375. X  n = IShort(&buf`5B2`5D);
  1376. X  PrintList(&buf`5B4`5D, (long)n, BYTE, "address");
  1377. X  return(pad((long)(4 + n)));
  1378. X`7D
  1379. X
  1380. XPrintTIMECOORD(buf)
  1381. X     unsigned char *buf;
  1382. X`7B
  1383. X  PrintField(buf, 0, 4, TIMESTAMP, "time");
  1384. X  PrintField(buf, 4, 2, CARD16, "x");
  1385. X  PrintField(buf, 6, 2, CARD16, "y");
  1386. X  return(8);
  1387. X`7D
  1388. X
  1389. XPrintFONTPROP(buf)
  1390. X     unsigned char *buf;
  1391. X`7B
  1392. X  PrintField(buf, 0, 4, ATOM, "name");
  1393. X  PrintField(buf, 4, 4, INT32, "value");
  1394. X  return(8);
  1395. X`7D
  1396. X
  1397. XPrintCHARINFO(buf)
  1398. X     unsigned char *buf;
  1399. X`7B
  1400. X  PrintField(buf, 0, 2, INT16, "left-side-bearing");
  1401. X  PrintField(buf, 2, 2, INT16, "right-side-bearing");
  1402. X  PrintField(buf, 4, 2, INT16, "character-width");
  1403. X  PrintField(buf, 6, 2, INT16, "ascent");
  1404. X  PrintField(buf, 8, 2, INT16, "descent");
  1405. X  PrintField(buf, 10, 2, CARD16, "attributes");
  1406. X  return(12);
  1407. X`7D
  1408. X
  1409. XPrintSEGMENT(buf)
  1410. X     unsigned char *buf;
  1411. X`7B
  1412. X  PrintField(buf, 0, 2, INT16, "x1");
  1413. X  PrintField(buf, 2, 2, INT16, "y1");
  1414. X  PrintField(buf, 4, 2, INT16, "x2");
  1415. X  PrintField(buf, 6, 2, INT16, "y2");
  1416. X  return(8);
  1417. X`7D
  1418. X
  1419. XPrintCOLORITEM(buf)
  1420. X     unsigned char *buf;
  1421. X`7B
  1422. X  PrintField(buf, 0, 4, CARD32, "pixel");
  1423. X  PrintField(buf, 4, 2, CARD16, "red");
  1424. X  PrintField(buf, 6, 2, CARD16, "green");
  1425. X  PrintField(buf, 8, 2, CARD16, "blue");
  1426. X  PrintField(buf, 10, 1, COLORMASK, "component selector");
  1427. X  return(12);
  1428. X`7D
  1429. X
  1430. XPrintRGB(buf)
  1431. X     unsigned char *buf;
  1432. X`7B
  1433. X  PrintField(buf, 0, 2, CARD16, "red");
  1434. X  PrintField(buf, 2, 2, CARD16, "green");
  1435. X  PrintField(buf, 4, 2, CARD16, "blue");
  1436. X  return(8);
  1437. X`7D
  1438. X
  1439. XPrintFORMAT(buf)
  1440. X     unsigned char *buf;
  1441. X`7B
  1442. X  PrintField(buf, 0, 1, CARD8, "depth");
  1443. X  PrintField(buf, 1, 1, CARD8, "bits-per-pixel");
  1444. X  PrintField(buf, 2, 1, CARD8, "scanline-pad");
  1445. X  return(8);
  1446. X`7D
  1447. X
  1448. XPrintSCREEN(buf)
  1449. X     unsigned char *buf;
  1450. X`7B
  1451. X  short   n /* number of elements in List of DEPTH */ ;
  1452. X  long    m /* length (in bytes) of List of DEPTH */ ;
  1453. X
  1454. X  PrintField(buf, 0, 4, WINDOW, "root");
  1455. X  PrintField(buf, 4, 4, COLORMAP, "default-colormap");
  1456. X  PrintField(buf, 8, 4, CARD32, "white-pixel");
  1457. +-+-+-+-+-+-+-+-  END  OF PART 7 +-+-+-+-+-+-+-+-
  1458. --
  1459. Patrick L. Mahan
  1460.  
  1461. --- TGV Window Washer ------------------------------- Mahan@TGV.COM ---------
  1462.  
  1463. Waking a person unnecessarily should not be considered  - Lazarus Long
  1464. a capital crime.  For a first offense, that is            From the Notebooks of
  1465.                               Lazarus Long
  1466.  
  1467.