home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol247 / examples.lbr / PCLI.DQC / pcli.doc
Text File  |  1986-02-27  |  3KB  |  65 lines

  1.  
  2.           Documentation For PCLI.A86 and CCLI.A86 Files
  3.  
  4.                     Producer/Consumer Example
  5.  
  6.  
  7. The programs PCLI.A86 and CCLI.A86 work together to demonstrate 
  8. the basic Producer/Consumer situation under Concurrent CP/M.  
  9. PCLI.A86 is the producer part of the process, and CCLI.A86 is the 
  10. consumer part.  Both files require RASM86 and LINK86.
  11.  
  12. This example shows the simplist method to have to concurrently 
  13. running processes comunicate.  In this model, the producer reads 
  14. data from a disk file and sends the data to a queue.  Meanwhile, 
  15. the consumer reads data from the queue and prints it on the 
  16. printer.  This concept can be enhanced to create a simple print 
  17. spooler.
  18.  
  19. When the producer is executed, it first sets up a queue for 
  20. inter-process communication, and then initiates the second 
  21. process (the consumer) using the P_CLI function.  This function 
  22. takes data from a Command Line Buffer and executes it as it were 
  23. a command line typed at the console.  If this command line 
  24. contains a valid command, the progrm it loads will start 
  25. execution in background while the program that called the P_CLI 
  26. function continues execution in the foreground.  The main process 
  27. (the producer) then enters a loop that reads a record from a disk 
  28. file and writes the record to the queue.  When the end of file is 
  29. reached, it writes a specially formatted end-of-transmission 
  30. message to the queue.
  31.  
  32. The consumer must only be started by the producer and not 
  33. executed from the console.  When this program is initiated by the 
  34. producer, it opens the queue that the producer created, and then 
  35. enters a loop that continually reads records for the queue and 
  36. prints them on the printer.  When the end-of-transmission message 
  37. is read, it delets the queue and terminates.  The listing 
  38. includes a line of code that causes the process to detach from 
  39. the console after it has created the queue and opened the file 
  40. successfully.  If this code is included, this example could be 
  41. used as a primitive "Print Spooler".
  42.  
  43. The queue that is used by these two processes to communicate had 
  44. messages that are 81h bytes long.  The first byte is used to 
  45. determine whether the message contains a valid data record or 
  46. whether it is a end-of-transmission message.  The rest of the 
  47. message (128 bytes) will contain a valid data record when the 
  48. message is not a end-of-transmission message.  If the message 
  49. contains a valid data record, the first byte will contain the 
  50. value ffh.  If the message is the end-of-transmission message the 
  51. first byte contains the value 00h, and the rest of the message is 
  52. ignored.
  53.  
  54. Note that the program names PCLI and CCLI can be changed to 
  55. whatever you wish, but if you do change CCLI to something else, 
  56. you also must change the command in the Command Line Buffer area 
  57. in the data segment of the first program (PCLI).  If you wish to 
  58. expand the number of messages the queue can hold so that the 
  59. program will work as a print spooler more effectively, make sure 
  60. that you don't overflow the Free Queue Buffer space.  You can 
  61. find out what the free queue buffer space is by executing the 
  62. SYSTAT utility and giving the O option.  The buffer space under 
  63. Concurrent PC-DOS is 0500h bytes, so the maximum number of 129 
  64. byte messages we can have under this O/S is 9.
  65.