home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / language / bcpl / BCPL / alib / IOHdr < prev    next >
Encoding:
Text File  |  1986-03-19  |  3.3 KB  |  82 lines

  1. /* BCPL I/O Library
  2.  * Stream control block definitions
  3.  */
  4.  
  5. GLOBAL $(
  6.    MakeNewStream : 135;
  7.    EndStream: 136 $);
  8.  
  9. MANIFEST $(
  10. s.name.max.size  = 32
  11.  
  12. // Stream vector offsets
  13. s.magic      = 0            // Must be s.is.a.stream
  14. s.stream.chain     = s.magic        + 1 // All streams are linked on this
  15. s.flags      = s.stream.chain   + 1 // A flag word
  16. s.name         = s.flags        + 1 // First byte of stream name
  17. s.name.end     = s.name + ( s.name.max.size / bytesperword )
  18. s.channel     = s.name.end        // The OS file handle
  19. s.error.handler  = s.channel        + 1 // Caller if any serious errors
  20. s.selecter     = s.error.handler  + 1 // Called before any IO on this stream
  21. s.reader     = s.selecter        + 1 // The rdch() function
  22. s.writer     = s.reader        + 1 // The wrch() routine
  23. s.unreader     = s.writer        + 1 // The unrdch() routine
  24. s.last.char     = s.unreader        + 1 // Last character read by the reader()
  25. s.real.reader     = s.last.char        + 1 // The real reader if unreadch pending
  26. s.error.count     = s.real.reader    + 1 // Number of OS errors since created
  27. s.last.error     = s.error.count    + 1 // The last OS error from this stream
  28. s.endreader     = s.last.error     + 1 // The endread() routine
  29. s.endwriter     = s.endreader        + 1 // The endwrite() routine
  30. s.buffer.size     = s.endwriter        + 1 // The size of the IO buffer
  31. s.buffer.address = s.buffer.size    + 1 // The machine address of the buffer
  32. s.buffer.pointer = s.buffer.address + 1 // The extraction pointer
  33. s.buffer.count     = s.buffer.pointer + 1 // Number of elements in the buffer
  34.  
  35. s.stream.size     = s.buffer.count    // The size of the stream block
  36.  
  37. s.is.a.stream     = #x52A5A552 // A magic number indicating the stream is valid
  38. s.is.a.store.file= (('s'<<8|'t')<<8|'o')<<8|'r'
  39.  
  40. s.stream.type.bits    = #b00000000000000000000000011111111
  41. s.is.wrch.bit          = #b00000000000000000000000000000001
  42. s.is.vdu.bits          = #b00000000000000000000000000000011
  43. s.is.printer.bits     = #b00000000000000000000000000000101
  44. s.is.serial.bits      = #b00000000000000000000000000001001
  45. s.is.store.bits       = #b00000000000000000000000000010000
  46. s.is.null.bits          = #b00000000000000000000000001000000
  47. s.is.file.bits          = #b00000000000000000000000010000000
  48. s.has.channel.bit     = #b00000100000000000000000000000000
  49. s.is.input.bit          = #b00010000000000000000000000000000
  50. s.is.output.bit       = #b00100000000000000000000000000000
  51. s.ended.bit          = #b10000000000000000000000000000000
  52.  
  53.  
  54. // Store file vector offsets
  55. store.magic       = 0              // magic to test validity
  56. store.nextfile       = store.magic + 1      // Pointer to next store file
  57. store.name       = store.nextfile + 1   // name of the file (first byte)
  58. store.name.end       = store.name + (s.name.max.size/bytesperword)
  59. store.start       = store.name.end + 1   // where file is in store (bcpl ptr)
  60. store.size       = store.start + 1      // size of data (bytes)
  61. store.maxsize       = store.size + 1      // space allocated for file (bytes)
  62. store.block.size   = store.maxsize      // The size of the file block
  63.  
  64.  
  65. e.no.work.space          = 700
  66. e.bad.input.stream         = 701
  67. e.bad.output.stream         = 702
  68. e.has.been.ended         = 703
  69. e.must.not.read          = 704
  70. e.must.not.write         = 705
  71. e.no.buffer.room         = 706
  72. e.nasty.error             = 707
  73. e.cant.load.file         = 708
  74. e.store.file.full         = 709
  75.  
  76. s.op.close             = #x00
  77. s.op.input             = #x40
  78. s.op.output             = #x80
  79. s.op.update             = #xC0
  80.  
  81. $)
  82.