1 | # Scan Sound.h header file, generate sndgen.py and Sound.py files.
|
---|
2 | # Then import sndsupport (which execs sndgen.py) to generate Sndmodule.c.
|
---|
3 | # (Should learn how to tell the compiler to compile it as well.)
|
---|
4 |
|
---|
5 | import sys
|
---|
6 | from bgenlocations import TOOLBOXDIR, BGENDIR
|
---|
7 | sys.path.append(BGENDIR)
|
---|
8 |
|
---|
9 | from scantools import Scanner
|
---|
10 |
|
---|
11 | def main():
|
---|
12 | input = "Sound.h"
|
---|
13 | output = "sndgen.py"
|
---|
14 | defsoutput = TOOLBOXDIR + "Sound.py"
|
---|
15 | scanner = SoundScanner(input, output, defsoutput)
|
---|
16 | scanner.scan()
|
---|
17 | scanner.close()
|
---|
18 | print "=== Testing definitions output code ==="
|
---|
19 | execfile(defsoutput, {}, {})
|
---|
20 | print "=== Done scanning and generating, now doing 'import sndsupport' ==="
|
---|
21 | import sndsupport
|
---|
22 | print "=== Done. It's up to you to compile Sndmodule.c ==="
|
---|
23 |
|
---|
24 | class SoundScanner(Scanner):
|
---|
25 |
|
---|
26 | def destination(self, type, name, arglist):
|
---|
27 | classname = "SndFunction"
|
---|
28 | listname = "functions"
|
---|
29 | if arglist:
|
---|
30 | t, n, m = arglist[0]
|
---|
31 | if t == "SndChannelPtr" and m == "InMode":
|
---|
32 | classname = "SndMethod"
|
---|
33 | listname = "sndmethods"
|
---|
34 | return classname, listname
|
---|
35 |
|
---|
36 | def writeinitialdefs(self):
|
---|
37 | self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
|
---|
38 |
|
---|
39 | def makeblacklistnames(self):
|
---|
40 | return [
|
---|
41 | 'SndDisposeChannel', # automatic on deallocation
|
---|
42 | 'SndAddModifier', # for internal use only
|
---|
43 | 'SndPlayDoubleBuffer', # very low level routine
|
---|
44 | # Missing from libraries (UH332)
|
---|
45 | 'SoundManagerSetInfo',
|
---|
46 | 'SoundManagerGetInfo',
|
---|
47 | # Constants with funny definitions
|
---|
48 | 'rate48khz',
|
---|
49 | 'rate44khz',
|
---|
50 | 'kInvalidSource',
|
---|
51 | # OS8 only:
|
---|
52 | 'MACEVersion',
|
---|
53 | 'SPBRecordToFile',
|
---|
54 | 'Exp1to6',
|
---|
55 | 'Comp6to1',
|
---|
56 | 'Exp1to3',
|
---|
57 | 'Comp3to1',
|
---|
58 | 'SndControl',
|
---|
59 | 'SndStopFilePlay',
|
---|
60 | 'SndStartFilePlay',
|
---|
61 | 'SndPauseFilePlay',
|
---|
62 | 'SndRecordToFile',
|
---|
63 |
|
---|
64 | ]
|
---|
65 |
|
---|
66 | def makeblacklisttypes(self):
|
---|
67 | return [
|
---|
68 | "GetSoundVol",
|
---|
69 | "SetSoundVol",
|
---|
70 | "UnsignedFixed",
|
---|
71 | # Don't have the time to dig into this...
|
---|
72 | "Component",
|
---|
73 | "ComponentInstance",
|
---|
74 | "SoundComponentDataPtr",
|
---|
75 | "SoundComponentData",
|
---|
76 | "SoundComponentData_ptr",
|
---|
77 | "SoundConverter",
|
---|
78 | ]
|
---|
79 |
|
---|
80 | def makerepairinstructions(self):
|
---|
81 | return [
|
---|
82 | ([("Str255", "*", "InMode")],
|
---|
83 | [("*", "*", "OutMode")]),
|
---|
84 |
|
---|
85 | ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
|
---|
86 | [("InBuffer", "*", "*")]),
|
---|
87 |
|
---|
88 | ([("void", "*", "OutMode"), ("long", "*", "InMode"),
|
---|
89 | ("long", "*", "OutMode")],
|
---|
90 | [("VarVarOutBuffer", "*", "InOutMode")]),
|
---|
91 |
|
---|
92 | ([("SCStatusPtr", "*", "InMode")],
|
---|
93 | [("SCStatus", "*", "OutMode")]),
|
---|
94 |
|
---|
95 | ([("SMStatusPtr", "*", "InMode")],
|
---|
96 | [("SMStatus", "*", "OutMode")]),
|
---|
97 |
|
---|
98 | ([("CompressionInfoPtr", "*", "InMode")],
|
---|
99 | [("CompressionInfo", "*", "OutMode")]),
|
---|
100 |
|
---|
101 | # For SndPlay's SndListHandle argument
|
---|
102 | ([("Handle", "sndHdl", "InMode")],
|
---|
103 | [("SndListHandle", "*", "*")]),
|
---|
104 |
|
---|
105 | # For SndStartFilePlay
|
---|
106 | ([("long", "bufferSize", "InMode"), ("void", "theBuffer", "OutMode")],
|
---|
107 | [("*", "*", "*"), ("FakeType('0')", "*", "InMode")]),
|
---|
108 |
|
---|
109 | # For Comp3to1 etc.
|
---|
110 | ([("void_ptr", "inBuffer", "InMode"),
|
---|
111 | ("void", "outBuffer", "OutMode"),
|
---|
112 | ("unsigned_long", "cnt", "InMode")],
|
---|
113 | [("InOutBuffer", "buffer", "InOutMode")]),
|
---|
114 |
|
---|
115 | # Ditto
|
---|
116 | ## ([("void_ptr", "inState", "InMode"), ("void", "outState", "OutMode")],
|
---|
117 | ## [("InOutBuf128", "state", "InOutMode")]),
|
---|
118 | ([("StateBlockPtr", "inState", "InMode"), ("StateBlockPtr", "outState", "InMode")],
|
---|
119 | [("StateBlock", "state", "InOutMode")]),
|
---|
120 |
|
---|
121 | # Catch-all for the last couple of void pointers
|
---|
122 | ([("void", "*", "OutMode")],
|
---|
123 | [("void_ptr", "*", "InMode")]),
|
---|
124 | ]
|
---|
125 |
|
---|
126 | if __name__ == "__main__":
|
---|
127 | main()
|
---|