annotate stitch/source.h @ 0:5242703e91d3 tip

Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author tomwalters
date Fri, 20 May 2011 15:19:45 +0100
parents
children
rev   line source
tomwalters@0 1 /*
tomwalters@0 2 source.h
tomwalters@0 3 ========
tomwalters@0 4
tomwalters@0 5
tomwalters@0 6
tomwalters@0 7 */
tomwalters@0 8
tomwalters@0 9 #ifndef _SOURCE_H_
tomwalters@0 10 #define _SOURCE_H_
tomwalters@0 11
tomwalters@0 12 #include "buffer.h"
tomwalters@0 13
tomwalters@0 14 /* standard entry points */
tomwalters@0 15
tomwalters@0 16 #define PullSome( _source, _bytes ) ( _SPTR( _source )->returned = _SPTR( _source )->pull( _SPTR( _source ), (ByteCount *) ( _bytes ) ) )
tomwalters@0 17 #define FillSome( _source, _bytes, _buffer ) ( _SPTR( _source )->returned = _SPTR( _source )->fill( _SPTR( _source ), (ByteCount *) ( _bytes ), (Pointer ) ( _buffer ) ) )
tomwalters@0 18 #define RollSome( _source, _bytes, _kept ) ( _SPTR( _source )->returned = _SPTR( _source )->roll( _SPTR( _source ), (ByteCount *) ( _bytes ), (ByteCount) ( _kept ) ) )
tomwalters@0 19
tomwalters@0 20 /* for compatability */
tomwalters@0 21
tomwalters@0 22 #define Pull( _source, _bytes ) ( _SPTR( _source )->returned = oldPull( _SPTR( _source ), (ByteCount ) ( _bytes ) ) )
tomwalters@0 23 #define Fill( _source, _bytes, _buffer ) ( _SPTR( _source )->returned = oldFill( _SPTR( _source ), (ByteCount ) ( _bytes ), (Pointer ) ( _buffer ) ) )
tomwalters@0 24 #define Roll( _source, _bytes, _kept ) ( _SPTR( _source )->returned = oldRoll( _SPTR( _source ), (ByteCount ) ( _bytes ), (ByteCount) ( _kept ) ) )
tomwalters@0 25
tomwalters@0 26 /* for more compatability */
tomwalters@0 27
tomwalters@0 28 #define Shift( _source, _bytes, _kept ) Roll( _source, _bytes, _kept )
tomwalters@0 29
tomwalters@0 30 /* count conversions */
tomwalters@0 31
tomwalters@0 32 #define ToPoints( _type, _bytes ) ( ( _bytes ) >> ( sizeof(_type) >> 1 ) )
tomwalters@0 33 #define ToBytes( _type, _points ) ( ( char *) ( (_type *) 0l + ( _points ) ) - ( char *) 0l )
tomwalters@0 34
tomwalters@0 35 /* for convenience */
tomwalters@0 36
tomwalters@0 37 #define PullItems( _source, _number, _type ) ( (_type *) Pull( _source, ToBytes( _type, _number ) ) )
tomwalters@0 38
tomwalters@0 39 #define PullChars( _source, _number ) PullItems( _source, _number, char )
tomwalters@0 40 #define PullShorts( _source, _number ) PullItems( _source, _number, short )
tomwalters@0 41 #define PullInts( _source, _number ) PullItems( _source, _number, int )
tomwalters@0 42 #define PullDoubles( _source, _number ) PullItems( _source, _number, double )
tomwalters@0 43
tomwalters@0 44
tomwalters@0 45 #define FillItems( _source, _number, _buffer, _type ) ( (_type *) Fill( _source, ToBytes( _type, _number ), (Pointer) ( _buffer ) ) )
tomwalters@0 46
tomwalters@0 47 #define FillChars( _source, _number, _buffer ) FillItems( _source, _number, _buffer, char )
tomwalters@0 48 #define FillShorts( _source, _number, _buffer ) FillItems( _source, _number, _buffer, short )
tomwalters@0 49 #define FillInts( _source, _number, _buffer ) FillItems( _source, _number, _buffer, int )
tomwalters@0 50 #define FillDoubles( _source, _number, _buffer ) FillItems( _source, _number, _buffer, double )
tomwalters@0 51
tomwalters@0 52
tomwalters@0 53 #define RollItems( _source, _number, _keep, _type ) ( (_type *) Roll( _source, ToBytes( _type, _number ), ( _keep ) * sizeof ( _type ) ) )
tomwalters@0 54
tomwalters@0 55 #define RollChars( _source, _number, _keep ) RollItems( _source, _number, _keep, char )
tomwalters@0 56 #define RollShorts( _source, _number, _keep ) RollItems( _source, _number, _keep, short )
tomwalters@0 57 #define RollInts( _source, _number, _keep ) RollItems( _source, _number, _keep, int )
tomwalters@0 58 #define RollDoubles( _source, _number, _keep ) RollItems( _source, _number, _keep, double )
tomwalters@0 59
tomwalters@0 60 /* operators on sources */
tomwalters@0 61
tomwalters@0 62 #define SetSource( _src, _puller, _filler, _roller, _name ) setSource( (struct _source *) _src, _puller, _filler, _roller, _name )
tomwalters@0 63 #define TypeSource( _src, _type ) typeSource( (struct _source *) _src, _type )
tomwalters@0 64 #define SourceType( _src ) sourceType( (struct _source *) _src )
tomwalters@0 65 #define SourceName( _src ) sourceName( (struct _source *) _src )
tomwalters@0 66 #define DeleteSource( _src ) deleteSource( (struct _source *) _src )
tomwalters@0 67
tomwalters@0 68 #if 00
tomwalters@0 69 #define NameOfClass BasicSourceClass
tomwalters@0 70
tomwalters@0 71 #define SetSource( _source, _puller, _filler, _roller, _name ) NameOfClass.set( (struct _source *) _source, _puller, _filler, _roller, _name )
tomwalters@0 72 #define TypeSource( _source, _type ) NameOfClass.setType( (struct _source *) _source, _type )
tomwalters@0 73 #define SourceType( _source ) NameOfClass.getType( (struct _source *) _source )
tomwalters@0 74 #define SourceName( _source ) NameOfClass.getName( (struct _source *) _source )
tomwalters@0 75 #define DeleteSource( _source ) NameOfClass.delete( (struct _source *) _source )
tomwalters@0 76 #endif
tomwalters@0 77
tomwalters@0 78
tomwalters@0 79
tomwalters@0 80 #define SinkSource( _source, _framebytes , _frames ) \
tomwalters@0 81 sinkSource( _source, (ByteCount) ( _framebytes ), (long) _frames )
tomwalters@0 82
tomwalters@0 83 #define SinkAndCloseSource( _source, _framebytes , _frames ) \
tomwalters@0 84 sinkAndCloseSource( _source, (ByteCount) ( _framebytes ), (long) _frames )
tomwalters@0 85
tomwalters@0 86 /* moving towards buffer abstraction, slowly */
tomwalters@0 87
tomwalters@0 88 #define SourceBuffer( _source ) ( ( _source )->buffer )
tomwalters@0 89 #define SetSourceBuffer( _source, _buffer ) ( ( _source )->buffer = _buffer )
tomwalters@0 90
tomwalters@0 91 /* only pure source */
tomwalters@0 92
tomwalters@0 93 #define NewTappingSource( _source , _state, _callback, _close, _name ) \
tomwalters@0 94 newTappingSource( (Pointer) ( _source ), _state, _callback, _close, _name )
tomwalters@0 95
tomwalters@0 96 #define NewRollableSource( _source ) \
tomwalters@0 97 newRollableSource( _source )
tomwalters@0 98
tomwalters@0 99 #if 0
tomwalters@0 100 /* for compatability */
tomwalters@0 101
tomwalters@0 102 #define NewShiftableSource( _source ) \
tomwalters@0 103 NewRollableSource( _source )
tomwalters@0 104 #endif
tomwalters@0 105
tomwalters@0 106 /* for binding with C++ perhaps someday */
tomwalters@0 107
tomwalters@0 108 #if defined(__cplusplus) || defined(c_plusplus)
tomwalters@0 109 #define CPLPL 1
tomwalters@0 110 #else
tomwalters@0 111 #define CPLPL 0
tomwalters@0 112 #endif
tomwalters@0 113
tomwalters@0 114 #if CPLPL
tomwalters@0 115
tomwalters@0 116 #define _SPTR( _s ) ((_s).ptr)
tomwalters@0 117 #define _MANY_ARGS ...
tomwalters@0 118 #define _ONE_SOURCE Source source
tomwalters@0 119 #define _TWO_SOURCES Source source1, Source source2
tomwalters@0 120 #define _ONE_SOURCE_PLUS Source source...
tomwalters@0 121
tomwalters@0 122 typedef class _source &Source ; /* ?? or something */
tomwalters@0 123
tomwalters@0 124 #else
tomwalters@0 125
tomwalters@0 126 #define _SPTR( _s ) _s
tomwalters@0 127 #define _MANY_ARGS /* ... */
tomwalters@0 128 #define _ONE_SOURCE /* Source source */
tomwalters@0 129 #define _TWO_SOURCES /* Source source1, Source source2 */
tomwalters@0 130 #define _ONE_SOURCE_PLUS /* Source source... */
tomwalters@0 131
tomwalters@0 132 /* basic types */
tomwalters@0 133
tomwalters@0 134 typedef struct _source *Source, *SourceArray[1] ;
tomwalters@0 135
tomwalters@0 136 #endif
tomwalters@0 137
tomwalters@0 138 typedef Source CharSource, ShortSource, IntSource, FloatSource, DoubleSource, ComplexSource ;
tomwalters@0 139 typedef SourceArray CharSourceArray, ShortSourceArray, IntSourceArray, FloatSourceArray, DoubleSourceArray, ComplexSourceArray ;
tomwalters@0 140
tomwalters@0 141 typedef int ByteCount ;
tomwalters@0 142
tomwalters@0 143 /* dependant on type of source */
tomwalters@0 144
tomwalters@0 145 struct _source { Pointer (*pull)(), (*fill)(), (*roll)(), returned ; char *name, *type ; int opened ; Source (*open)() ; } ;
tomwalters@0 146 struct _source_operators { Source (*set)() ; Pointer (*delete)() ; Source (*setType)() ; char *(*getType)() ; char *(*getName)() ; } ;
tomwalters@0 147
tomwalters@0 148 struct _pullable_source { struct _source parent ; } ;
tomwalters@0 149 struct _fillable_source { struct _source parent ; Buffer buffer ; } ;
tomwalters@0 150
tomwalters@0 151 #if 00
tomwalters@0 152 extern struct _source_operators NameOfClass ;
tomwalters@0 153 extern struct _source *call_conversions ;
tomwalters@0 154 #endif
tomwalters@0 155
tomwalters@0 156 extern Source setSource() ;
tomwalters@0 157 extern Source typeSource() ;
tomwalters@0 158 extern char *sourceType() ;
tomwalters@0 159 extern char *sourceName() ;
tomwalters@0 160 extern Pointer deleteSource() ;
tomwalters@0 161
tomwalters@0 162 extern Pointer oldPull(), oldFill(), oldRoll() ;
tomwalters@0 163
tomwalters@0 164
tomwalters@0 165 extern void sinkSource() ;
tomwalters@0 166 extern void CloseSource() ;
tomwalters@0 167 extern void sinkAndCloseSource() ;
tomwalters@0 168
tomwalters@0 169 /* derived source types for different purposes */
tomwalters@0 170
tomwalters@0 171 extern Source newTappingSource() ;
tomwalters@0 172 extern Source newRollableSource() ;
tomwalters@0 173
tomwalters@0 174 extern Pointer nonRoller() ;
tomwalters@0 175
tomwalters@0 176 #include "pullable.h"
tomwalters@0 177
tomwalters@0 178 #include "fillable.h"
tomwalters@0 179
tomwalters@0 180 extern Source *BindSources() ;
tomwalters@0 181
tomwalters@0 182 /* for compatability... for now */
tomwalters@0 183
tomwalters@0 184 extern Source stdStaticSource() ;
tomwalters@0 185 extern Source stdSlaveSource() ;
tomwalters@0 186 extern Source stdAutoSource() ;
tomwalters@0 187 extern Source stdSelfSource() ;
tomwalters@0 188
tomwalters@0 189 #endif
tomwalters@0 190
tomwalters@0 191 extern Source EmptySource ;