README 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* $XConsortium: README /main/2 1996/07/15 14:07:37 drk $ */
  2. This is CoEd, a shared text editor. Building CoEd requires DevGuide,
  3. C++, and ToolTalk (which is part of OpenWindows). CoEd is known to
  4. build with DevGuide 3.0.1, C++ from SPARCompilers 2.0.1, and either
  5. OpenWindows 3.1 or OpenWindows 3.2.
  6. NOTE: The libgolit in DevGuide 3.0.1 was based on the OW3.0.1/3.1 OLIT
  7. libraries, and has some incompatibilites with the OW3.2 OLIT
  8. libraries. A CoEd built with with libgolit 3.0.1 and running under
  9. OW3.2 will crash, e.g., if you press MENU or HELP over the OLIT
  10. textedit widget embedded in CoEd. However, the basic features of
  11. editing, selecting, copy/paste, drag-and-drop, and scrolling seem to
  12. work.
  13. Run it with "CoEd <filename>". (Of course, the ToolTalk dbserver must
  14. be installed on the machine that owns the file. See the ToolTalk
  15. Setup And Administration Guide.)
  16. Basically, it's an editor that uses ToolTalk so that multiple
  17. instances of the editor can edit the same file at the same time,
  18. and have all the changes keep in sync. It has some serious limitations:
  19. - CoEd has no facility for saving the edited file to disk.
  20. - All the CoEd's must come up before any typing occurs. We haven't
  21. implemented the part of the protocol where newcomers can request
  22. the current state of the file. CoEd's can quit at any time without
  23. messing up the others. Here's a sketch for the rest of
  24. the protocol, in case anyone is interested in completely implementing
  25. the dOPT algorithm (cf. C.A. Ellis and S.J. Gibbs,
  26. "Concurrency Control in Groupware Systems", Proc. 1989 ACM SIGMOD,
  27. Int. Conf. on the Mgt. of Data).
  28. * CoEd protocol
  29. * Notices every editor should register for
  30. * Text_File_Changed(
  31. in CoEdTextVersion appliesTo,
  32. in int changeNum,
  33. in int start,
  34. in int end,
  35. in string text )
  36. * Text_File_Poll_Version()
  37. * Used by the moderator to detect quiescence.
  38. * Text_File_Saved()
  39. * Text_File_Reverted()
  40. * Text_File_Renamed(
  41. in string newName )
  42. * Requests every editor should register to handle
  43. * Text_File_New_Moderator()
  44. * Sent by the Moderator when closing the file. Whoever
  45. handles it must register for the Moderator requests and
  46. act as the new Moderator.
  47. * Point-to-point notices the Moderator should be ready for
  48. * Text_File_Version_Vote(
  49. in CoEdTextVersion myVersion )
  50. * When a Text_File_Poll_Version notice is received,
  51. this notice is sent directly to the party that called
  52. for the version vote.
  53. * Requests the moderator should register to handle
  54. * Text_File_Join(
  55. out CoEdSiteIDList coEditors )
  56. * Sent every time an editor opens a file. If the request
  57. fails, then no one is editing the file and the requestor
  58. should become the Moderator -- i.e., register to handle
  59. this request. If the request succeeds, then issue a
  60. Text_File_Poll_Version notice, and wait until each
  61. coEditor responds with a Text_File_Version_Vote.
  62. Then send a Text_File_Update_Me request to catch up on
  63. what you've missed.
  64. * Text_File_Update_Me(
  65. inout CoEdTextVersion version,
  66. out string text )
  67. * Sent by new coEditors after they've received a
  68. Text_File_Version_Vote from each coEditor they learned
  69. about when they did their Text_File_Join. In the
  70. request, <version> is the earliest version of the text
  71. that would not leave the requestor with missing changes
  72. from any of the coEditors. In the reply, <version> is
  73. identical to or later than the requested version, and
  74. corresponds to the <text> in the reply.