blob: b0644ecf66fc9313e5034b41aa13b8a930c5a27f [file] [log] [blame]
Jack Jansen90ecdf41996-04-16 14:29:15 +00001# Scan an Apple header file, generating a Python file of generator calls.
2
Jack Jansen0c4d9471998-04-17 14:07:56 +00003import sys
4import os
Jack Jansenc4ff1942002-08-05 21:13:07 +00005from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen0c4d9471998-04-17 14:07:56 +00006sys.path.append(BGENDIR)
Jack Jansenb99e5212002-01-11 12:37:15 +00007from scantools import Scanner
Jack Jansen90ecdf41996-04-16 14:29:15 +00008
Jack Jansenc4ff1942002-08-05 21:13:07 +00009WASTEDIR='/Applications/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/MacOS Support/(Third Party Support)/Waste 2.0 Distribution/C_C++ Headers/'
10
11if not os.path.exists(WASTEDIR):
12 raise 'Error: not found: %s', WASTEDIR
Jack Jansen90ecdf41996-04-16 14:29:15 +000013
14OBJECT = "TEHandle"
15SHORT = "waste"
16OBJECT = "WEReference"
17OBJECT2 = "WEObjectReference"
18
19def main():
Jack Jansen8505ef81997-08-27 14:09:25 +000020 input = WASTEDIR + "WASTE.h"
Jack Jansen90ecdf41996-04-16 14:29:15 +000021 output = SHORT + "gen.py"
22 defsoutput = TOOLBOXDIR + "WASTEconst.py"
23 scanner = MyScanner(input, output, defsoutput)
24 scanner.scan()
Jack Jansen8ae8e4f1996-04-23 16:17:08 +000025## scanner.gentypetest(SHORT+"typetest.py")
Jack Jansen90ecdf41996-04-16 14:29:15 +000026 scanner.close()
Jack Jansen87eea882002-08-15 21:48:16 +000027 print "=== Testing definitions output code ==="
28 execfile(defsoutput, {}, {})
Jack Jansen90ecdf41996-04-16 14:29:15 +000029 print "=== Done scanning and generating, now importing the generated code... ==="
30 exec "import " + SHORT + "support"
31 print "=== Done. It's up to you to compile it now! ==="
32
Jack Jansenb99e5212002-01-11 12:37:15 +000033#class MyScanner(Scanner_PreUH3):
34class MyScanner(Scanner):
Jack Jansen90ecdf41996-04-16 14:29:15 +000035
Jack Jansen90ecdf41996-04-16 14:29:15 +000036 def destination(self, type, name, arglist):
37 classname = "Function"
38 listname = "functions"
39 if arglist:
40 t, n, m = arglist[-1]
41 # This is non-functional today
42 if t == OBJECT and m == "InMode":
43 classname = "Method"
44 listname = "methods"
45 else:
46 t, n, m = arglist[0]
47 if t == OBJECT2 and m == "InMode":
48 classname = "Method2"
49 listname = "methods2"
50 return classname, listname
51
Jack Jansen2369a981998-02-20 15:57:30 +000052 def writeinitialdefs(self):
53 self.defsfile.write("kPascalStackBased = None # workaround for header parsing\n")
Jack Jansen9d799902002-03-24 23:04:18 +000054 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
55
Jack Jansen90ecdf41996-04-16 14:29:15 +000056 def makeblacklistnames(self):
57 return [
58 "WEDispose",
59 "WESetInfo", # Argument type unknown...
60 "WEGetInfo",
Jack Jansen2268af51996-08-06 16:04:22 +000061 "WEVersion", # Unfortunately...
Jack Jansenb99e5212002-01-11 12:37:15 +000062 "WEPut", # XXXX TBD: needs array of flavortypes.
63 "WEGetOneAttribute", # XXXX TBD: output buffer
Jack Jansen9d799902002-03-24 23:04:18 +000064 # Incompatible constant definitions
65 "weDoAutoScroll",
66 "weDoOutlineHilite",
67 "weDoReadOnly",
68 "weDoUndo",
69 "weDoIntCutAndPaste",
70 "weDoDragAndDrop",
71 "weDoInhibitRecal",
72 "weDoUseTempMem",
73 "weDoDrawOffscreen",
74 "weDoInhibitRedraw",
75 "weDoMonoStyled",
76 "weDoMultipleUndo",
77 "weDoNoKeyboardSync",
78 "weDoInhibitICSupport",
79 "weDoInhibitColor",
Jack Jansen90ecdf41996-04-16 14:29:15 +000080 ]
81
82 def makeblacklisttypes(self):
83 return [
84 "DragReference", # For now...
85 "UniversalProcPtr",
Jack Jansen8505ef81997-08-27 14:09:25 +000086 "WEFontIDToNameUPP",
87 "WEFontNameToIDUPP",
Jack Jansenb99e5212002-01-11 12:37:15 +000088 "WEClickLoopUPP",
89 "WEScrollUPP",
90 "WETSMPreUpdateUPP",
91 "WETSMPostUpdateUPP",
92 "WEPreTrackDragUPP",
93 "WETranslateDragUPP",
94 "WEHiliteDropAreaUPP",
95 "WEDrawTextUPP",
96 "WEDrawTSMHiliteUPP",
97 "WEPixelToCharUPP",
98 "WECharToPixelUPP",
99 "WELineBreakUPP",
100 "WEWordBreakUPP",
101 "WECharByteUPP",
102 "WECharTypeUPP",
103 "WEEraseUPP",
104 "WEFluxUPP",
105 "WENewObjectUPP",
106 "WEDisposeObjectUPP",
107 "WEDrawObjectUPP",
108 "WEClickObjectUPP",
109 "WEStreamObjectUPP",
110 "WEHoverObjectUPP",
111 "WERuler", # XXXX To be done
112 "WERuler_ptr", # ditto
113 "WEParaInfo", # XXXX To be done
114 "WEPrintSession", # XXXX To be done
115 "WEPrintOptions_ptr", # XXXX To be done
Jack Jansen90ecdf41996-04-16 14:29:15 +0000116 ]
117
118 def makerepairinstructions(self):
119 return [
Jack Jansen2268af51996-08-06 16:04:22 +0000120 ([("void_ptr", "*", "InMode"), ("SInt32", "*", "InMode")],
Jack Jansen90ecdf41996-04-16 14:29:15 +0000121 [("InBuffer", "*", "*")]),
122
123 # WEContinuousStyle
Jack Jansenb99e5212002-01-11 12:37:15 +0000124 ([("WEStyleMode", "ioMode", "OutMode"), ("TextStyle", "outTextStyle", "OutMode")],
125 [("WEStyleMode", "*", "InOutMode"), ("TextStyle", "*", "*")]),
Jack Jansen8ae8e4f1996-04-23 16:17:08 +0000126
127 # WECopyRange
Jack Jansenb99e5212002-01-11 12:37:15 +0000128 ([('Handle', 'outText', 'InMode'), ('StScrpHandle', 'outStyles', 'InMode'),
129 ('WESoupHandle', 'outSoup', 'InMode')],
130 [('OptHandle', '*', '*'), ('OptStScrpHandle', '*', '*'),
131 ('OptSoupHandle', '*', '*')]),
Jack Jansen8ae8e4f1996-04-23 16:17:08 +0000132
133 # WEInsert
Jack Jansenb99e5212002-01-11 12:37:15 +0000134 ([('StScrpHandle', 'inStyles', 'InMode'), ('WESoupHandle', 'inSoup', 'InMode')],
135 [('OptStScrpHandle', '*', '*'), ('OptSoupHandle', '*', '*')]),
Jack Jansen756522f1996-05-07 15:24:01 +0000136
137 # WEGetObjectOwner
138 ("WEGetObjectOwner",
139 [('WEReference', '*', 'ReturnMode')],
Jack Jansenb99e5212002-01-11 12:37:15 +0000140 [('ExistingWEReference', '*', 'ReturnMode')]),
141
142 # WEFindParagraph
143 ([("char_ptr", "inKey", "InMode")],
144 [("stringptr", "*", "*")]),
145
146 # WESetOneAttribute
147 ([("void_ptr", "*", "InMode"), ("ByteCount", "*", "InMode")],
148 [("InBuffer", "*", "*")]),
Jack Jansen90ecdf41996-04-16 14:29:15 +0000149 ]
150
151if __name__ == "__main__":
152 main()