blob: d2f367dd54309a2e2f53138ff7aec6e42a8d666e [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()
27 print "=== Done scanning and generating, now importing the generated code... ==="
28 exec "import " + SHORT + "support"
29 print "=== Done. It's up to you to compile it now! ==="
30
Jack Jansenb99e5212002-01-11 12:37:15 +000031#class MyScanner(Scanner_PreUH3):
32class MyScanner(Scanner):
Jack Jansen90ecdf41996-04-16 14:29:15 +000033
Jack Jansen90ecdf41996-04-16 14:29:15 +000034 def destination(self, type, name, arglist):
35 classname = "Function"
36 listname = "functions"
37 if arglist:
38 t, n, m = arglist[-1]
39 # This is non-functional today
40 if t == OBJECT and m == "InMode":
41 classname = "Method"
42 listname = "methods"
43 else:
44 t, n, m = arglist[0]
45 if t == OBJECT2 and m == "InMode":
46 classname = "Method2"
47 listname = "methods2"
48 return classname, listname
49
Jack Jansen2369a981998-02-20 15:57:30 +000050 def writeinitialdefs(self):
51 self.defsfile.write("kPascalStackBased = None # workaround for header parsing\n")
Jack Jansen9d799902002-03-24 23:04:18 +000052 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
53
Jack Jansen90ecdf41996-04-16 14:29:15 +000054 def makeblacklistnames(self):
55 return [
56 "WEDispose",
57 "WESetInfo", # Argument type unknown...
58 "WEGetInfo",
Jack Jansen2268af51996-08-06 16:04:22 +000059 "WEVersion", # Unfortunately...
Jack Jansenb99e5212002-01-11 12:37:15 +000060 "WEPut", # XXXX TBD: needs array of flavortypes.
61 "WEGetOneAttribute", # XXXX TBD: output buffer
Jack Jansen9d799902002-03-24 23:04:18 +000062 # Incompatible constant definitions
63 "weDoAutoScroll",
64 "weDoOutlineHilite",
65 "weDoReadOnly",
66 "weDoUndo",
67 "weDoIntCutAndPaste",
68 "weDoDragAndDrop",
69 "weDoInhibitRecal",
70 "weDoUseTempMem",
71 "weDoDrawOffscreen",
72 "weDoInhibitRedraw",
73 "weDoMonoStyled",
74 "weDoMultipleUndo",
75 "weDoNoKeyboardSync",
76 "weDoInhibitICSupport",
77 "weDoInhibitColor",
Jack Jansen90ecdf41996-04-16 14:29:15 +000078 ]
79
80 def makeblacklisttypes(self):
81 return [
82 "DragReference", # For now...
83 "UniversalProcPtr",
Jack Jansen8505ef81997-08-27 14:09:25 +000084 "WEFontIDToNameUPP",
85 "WEFontNameToIDUPP",
Jack Jansenb99e5212002-01-11 12:37:15 +000086 "WEClickLoopUPP",
87 "WEScrollUPP",
88 "WETSMPreUpdateUPP",
89 "WETSMPostUpdateUPP",
90 "WEPreTrackDragUPP",
91 "WETranslateDragUPP",
92 "WEHiliteDropAreaUPP",
93 "WEDrawTextUPP",
94 "WEDrawTSMHiliteUPP",
95 "WEPixelToCharUPP",
96 "WECharToPixelUPP",
97 "WELineBreakUPP",
98 "WEWordBreakUPP",
99 "WECharByteUPP",
100 "WECharTypeUPP",
101 "WEEraseUPP",
102 "WEFluxUPP",
103 "WENewObjectUPP",
104 "WEDisposeObjectUPP",
105 "WEDrawObjectUPP",
106 "WEClickObjectUPP",
107 "WEStreamObjectUPP",
108 "WEHoverObjectUPP",
109 "WERuler", # XXXX To be done
110 "WERuler_ptr", # ditto
111 "WEParaInfo", # XXXX To be done
112 "WEPrintSession", # XXXX To be done
113 "WEPrintOptions_ptr", # XXXX To be done
Jack Jansen90ecdf41996-04-16 14:29:15 +0000114 ]
115
116 def makerepairinstructions(self):
117 return [
Jack Jansen2268af51996-08-06 16:04:22 +0000118 ([("void_ptr", "*", "InMode"), ("SInt32", "*", "InMode")],
Jack Jansen90ecdf41996-04-16 14:29:15 +0000119 [("InBuffer", "*", "*")]),
120
121 # WEContinuousStyle
Jack Jansenb99e5212002-01-11 12:37:15 +0000122 ([("WEStyleMode", "ioMode", "OutMode"), ("TextStyle", "outTextStyle", "OutMode")],
123 [("WEStyleMode", "*", "InOutMode"), ("TextStyle", "*", "*")]),
Jack Jansen8ae8e4f1996-04-23 16:17:08 +0000124
125 # WECopyRange
Jack Jansenb99e5212002-01-11 12:37:15 +0000126 ([('Handle', 'outText', 'InMode'), ('StScrpHandle', 'outStyles', 'InMode'),
127 ('WESoupHandle', 'outSoup', 'InMode')],
128 [('OptHandle', '*', '*'), ('OptStScrpHandle', '*', '*'),
129 ('OptSoupHandle', '*', '*')]),
Jack Jansen8ae8e4f1996-04-23 16:17:08 +0000130
131 # WEInsert
Jack Jansenb99e5212002-01-11 12:37:15 +0000132 ([('StScrpHandle', 'inStyles', 'InMode'), ('WESoupHandle', 'inSoup', 'InMode')],
133 [('OptStScrpHandle', '*', '*'), ('OptSoupHandle', '*', '*')]),
Jack Jansen756522f1996-05-07 15:24:01 +0000134
135 # WEGetObjectOwner
136 ("WEGetObjectOwner",
137 [('WEReference', '*', 'ReturnMode')],
Jack Jansenb99e5212002-01-11 12:37:15 +0000138 [('ExistingWEReference', '*', 'ReturnMode')]),
139
140 # WEFindParagraph
141 ([("char_ptr", "inKey", "InMode")],
142 [("stringptr", "*", "*")]),
143
144 # WESetOneAttribute
145 ([("void_ptr", "*", "InMode"), ("ByteCount", "*", "InMode")],
146 [("InBuffer", "*", "*")]),
Jack Jansen90ecdf41996-04-16 14:29:15 +0000147 ]
148
149if __name__ == "__main__":
150 main()