diff options
Diffstat (limited to 'module/riff.m')
| -rw-r--r-- | module/riff.m | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/module/riff.m b/module/riff.m new file mode 100644 index 00000000..130c71f6 --- /dev/null +++ b/module/riff.m @@ -0,0 +1,96 @@ +# +# Microsoft Resource Interchange File Format +# with AVI support +# +Riff: module +{ + PATH: con "/dis/lib/riff.dis"; + + DEFBUF: con 8192; + + BI_RGB: con 0; + BI_RLE8: con 1; + BI_RLE4: con 2; + BI_BITFEILD: con 3; + + RGB: adt + { + r: int; + g: int; + b: int; + }; + + Binfosize: con 10*4; + Bitmapinfo: adt # Windows bitmap info structure + { + width: int; # width in pixels + height: int; # height in pixels + planes: int; # planes of output device (must be 1) + bitcount: int; # bits per pixel + compression: int; # coding BI_RGB... or IV32 for indeo + sizeimage: int; # size in bytes of image + xpelpermeter: int; # resolution in pixels per meter + ypelpermeter: int; + clrused: int; # colors used + clrimportant: int; # how fixed is the map + + cmap: array of RGB; # color map + }; + + AVImainhdr: con 14*4; + AVIhdr: adt + { + usecperframe: int; + bytesec: int; + flag: int; + frames: int; + initframes: int; + streams: int; + bufsize: int; + width: int; + height: int; + }; + + AVIstreamhdr: con 2*4 + 10*4; + AVIstream: adt + { + # Stream Header information + stype: string; + handler: string; + flags: int; + priority: int; + initframes: int; + scale: int; + rate: int; + start: int; + length: int; + bufsize: int; + quality: int; + samplesz: int; + + # Stream Format information (decoder specific) + fmt: array of byte; + binfo: ref Bitmapinfo; + + fmt2binfo: fn(a: self ref AVIstream): string; + }; + + # Riff descriptor + RD: adt + { + fd: ref sys->FD; # descriptor of RIFF file + buf: array of byte; # buffer + nbyte: int; # bytes remaining + ptr: int; # buffer pointer + + gethdr: fn(r: self ref RD): (string, int); + readn: fn(r: self ref RD, b: array of byte, l: int): int; + check4: fn(r: self ref RD, code: string): string; + avihdr: fn(r: self ref RD): (ref AVIhdr, string); + streaminfo: fn(r: self ref RD): (ref AVIstream, string); + skip: fn(r: self ref RD, size: int): int; + }; + + init: fn(); + open: fn(file: string): (ref RD, string); +}; |
