Initial megacommit.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
a3be5d89ae
commit
775dc8a9c0
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,155 @@
|
||||||
|
[OnFrame]
|
||||||
|
|
||||||
|
[ActionReplay]
|
||||||
|
All Shines
|
||||||
|
00E60AE1 18000000
|
||||||
|
045708E8 FFFFFFFF
|
||||||
|
045708EC FFFFFFFF
|
||||||
|
045708F0 FFFFFFFF
|
||||||
|
|
||||||
|
Open all levels and nozzles
|
||||||
|
00E60AE0 18000000
|
||||||
|
04570958 FFFFFFFF
|
||||||
|
0457095C FFFFFFFF
|
||||||
|
|
||||||
|
8 red coins(press L & B)
|
||||||
|
00E61642 18000000
|
||||||
|
0A3FBBF4 00000240
|
||||||
|
025709DE 00000008
|
||||||
|
|
||||||
|
Infinite hover time
|
||||||
|
00E61520 18000000
|
||||||
|
042640BC 60000000
|
||||||
|
|
||||||
|
Infinite water
|
||||||
|
00E6151F 18000000
|
||||||
|
04263F58 38002710
|
||||||
|
042635B0 60000000
|
||||||
|
|
||||||
|
Infinite health
|
||||||
|
00E60ADF 18000000
|
||||||
|
424057F4 00040009
|
||||||
|
|
||||||
|
+99 lives
|
||||||
|
00E60ADE 18000000
|
||||||
|
00570967 00000063
|
||||||
|
|
||||||
|
+Test Level
|
||||||
|
00B86425 08000000
|
||||||
|
043E9710 00000C01
|
||||||
|
|
||||||
|
+Low Gravity
|
||||||
|
00B809F5 08000000
|
||||||
|
4240E12C 05003E00
|
||||||
|
|
||||||
|
Jesus Mode A.K.A. Walk on Water D-Pad Up/Down = On/Off
|
||||||
|
00B813BC 08000000
|
||||||
|
04002F00 3C608041
|
||||||
|
04002F04 8063E12C
|
||||||
|
04002F08 80C3FFCC
|
||||||
|
04002F0C 2C060000
|
||||||
|
04002F10 4D820020
|
||||||
|
04002F14 C2660008
|
||||||
|
04002F18 EE852824
|
||||||
|
04002F1C EE93A02A
|
||||||
|
04002F20 FC019840
|
||||||
|
04002F24 4C800020
|
||||||
|
04002F28 FC20A090
|
||||||
|
04002F2C 38C00008
|
||||||
|
04002F30 90C30248
|
||||||
|
04002F34 4E800020
|
||||||
|
0A404454 00000008
|
||||||
|
04189854 4BE796AC
|
||||||
|
0A404454 00000004
|
||||||
|
04189854 4E800020
|
||||||
|
|
||||||
|
+Do Not Have To Move Before Triple Jump
|
||||||
|
00B819B3 08000000
|
||||||
|
4240E10C 06B00000
|
||||||
|
|
||||||
|
Spin Jump Gravity - Really Slow Fall
|
||||||
|
00B86E48 08000000
|
||||||
|
4240E10C 058E3D00
|
||||||
|
|
||||||
|
Spin Jump Gravity - Almost No Fall
|
||||||
|
00B8369D 08000000
|
||||||
|
4240E10C 058E0000
|
||||||
|
|
||||||
|
Spin Jump Gravity - Fall Really Fast
|
||||||
|
00B86350 08000000
|
||||||
|
4240E10C 058E4200
|
||||||
|
|
||||||
|
Spin Jump Gravity - Normal Speed
|
||||||
|
00B80454 08000000
|
||||||
|
4240E10C 058E3EB3
|
||||||
|
|
||||||
|
+Insane heat waves Crazy colors everywhere!
|
||||||
|
00B80485 08000000
|
||||||
|
043AA070 41200000
|
||||||
|
|
||||||
|
Double vision heat wave (narrow)
|
||||||
|
00B856EB 08000000
|
||||||
|
043AA070 3F600000
|
||||||
|
|
||||||
|
Double vision heat wave (wide)
|
||||||
|
00B85C4A 08000000
|
||||||
|
043AA070 3F400000
|
||||||
|
|
||||||
|
Use only one of following two. Vanish point visual distortion
|
||||||
|
00B842EC 08000000
|
||||||
|
043AB304 3E000000
|
||||||
|
|
||||||
|
Hard to select file, activators will work if you add them.. Camera is far out
|
||||||
|
00B82579 08000000
|
||||||
|
043AB304 3F000000
|
||||||
|
|
||||||
|
X textures
|
||||||
|
00B80A69 08000000
|
||||||
|
043DB210 41200000
|
||||||
|
|
||||||
|
|
||||||
|
Y textures
|
||||||
|
00B80605 08000000
|
||||||
|
043DB224 41200000
|
||||||
|
|
||||||
|
|
||||||
|
Z textures
|
||||||
|
00B86358 08000000
|
||||||
|
043DB238 41200000
|
||||||
|
|
||||||
|
|
||||||
|
Strangely distorted people
|
||||||
|
00B82C96 08000000
|
||||||
|
0440CC24 3F900000
|
||||||
|
|
||||||
|
Mute game
|
||||||
|
00B87829 08000000
|
||||||
|
04417248 00000000
|
||||||
|
|
||||||
|
Magnify camera
|
||||||
|
00B87EB7 08000000
|
||||||
|
04417690 3F900000
|
||||||
|
|
||||||
|
Warped camera view
|
||||||
|
00B851AB 08000000
|
||||||
|
044176A8 3E000000
|
||||||
|
|
||||||
|
Poorly Shaded Mario
|
||||||
|
00B87DA5 08000000
|
||||||
|
044176FC 00000000
|
||||||
|
|
||||||
|
Nozzle Modifier Press the buttons below to switch to another nozzle. You must have your nozzle set to squirt for it to work. You will never use another nozzle box again!! Just kidding.B+D-Pad Up:Rocket NozzleB+D-Pad Left:Turbo NozzleB+D-Pad Right:Hover NozzleB+D-Pad Down:Jump Nozzle
|
||||||
|
|
||||||
|
00B83682 08000000
|
||||||
|
0A404454 00000208
|
||||||
|
04269F50 3BE00001
|
||||||
|
0A404454 00000204
|
||||||
|
04269F50 3BE00002
|
||||||
|
0A404454 00000201
|
||||||
|
04269F50 3BE00005
|
||||||
|
0A404454 00000202
|
||||||
|
04269F50 3BE00004
|
||||||
|
|
||||||
|
Always Green Yoshi
|
||||||
|
00B80C27 08000000
|
||||||
|
405F3A90 04AE4C00
|
|
@ -0,0 +1,420 @@
|
||||||
|
[OnFrame]
|
||||||
|
0x802904b4=dword:0x4E800020 #Fix item hang
|
||||||
|
|
||||||
|
# WARNING - cheats may screw up your save games
|
||||||
|
# 0x803C4C09=byte:0x50 #Max health
|
||||||
|
# 0x803C4C0B=byte:0x50 #Current health
|
||||||
|
|
||||||
|
# Hidden dungeon
|
||||||
|
# 0x803C9D44=dword:0x000000FF
|
||||||
|
# 0x803C9D48=dword:0x485F7465
|
||||||
|
# 0x803C9D4C=dword:0x73740000
|
||||||
|
|
||||||
|
# Snow test room
|
||||||
|
# 0x803C9D44=dword:0x000000FF
|
||||||
|
# 0x803C9D48=dword:0x49546573
|
||||||
|
# 0x803C9D4C=dword:0x74363200
|
||||||
|
|
||||||
|
#only supports decrypted AR codes
|
||||||
|
|
||||||
|
[ActionReplay]
|
||||||
|
# Use GCNCrypt to decrypt large chunks of codes found online, and paste here.
|
||||||
|
# Add a + to the name to activate.
|
||||||
|
# Codes by GCNHacker87 (yes we forgot to ask permission)
|
||||||
|
+Master Code (useless)
|
||||||
|
01E0197D 88000000
|
||||||
|
C4323EA8 0000FF00
|
||||||
|
|
||||||
|
Shadow Link
|
||||||
|
01E05E82 08000000
|
||||||
|
041926B8 60000000
|
||||||
|
423BCDA0 00BCFFFF
|
||||||
|
423BCDA0 00BDFF87
|
||||||
|
403BCDA0 00017E3F
|
||||||
|
|
||||||
|
Stuff at the top right of the screen is not visible
|
||||||
|
01E00EFA 08000000
|
||||||
|
903ED848 00000000
|
||||||
|
023F633C 00028000
|
||||||
|
003F710A 00000080
|
||||||
|
003F713A 00000080
|
||||||
|
003F715E 00000080
|
||||||
|
403BB494 00106A80
|
||||||
|
403BB498 002F5080
|
||||||
|
00000000 40000000
|
||||||
|
|
||||||
|
Super Hookshot
|
||||||
|
01E03C97 08000000
|
||||||
|
043F9DFC 48420B00
|
||||||
|
040F1E68 28030001
|
||||||
|
043F9E00 43008700
|
||||||
|
0A3ED84A 00000140
|
||||||
|
040F2898 3C000000
|
||||||
|
123ED84A 00000140
|
||||||
|
040F2898 8001004C
|
||||||
|
|
||||||
|
+Teleport to Fire Mountain up R Y
|
||||||
|
01E05660 08000000
|
||||||
|
4A3ED84A 00000828
|
||||||
|
043E440C 482F85A1
|
||||||
|
043E4414 C7EA36FD
|
||||||
|
|
||||||
|
Hold A to swim fast
|
||||||
|
01E0712B 08000000
|
||||||
|
0A3ED84A 00000100
|
||||||
|
0435D548 44610000
|
||||||
|
123ED84A 00000100
|
||||||
|
0435D548 41900000
|
||||||
|
|
||||||
|
+Run/Swim/Crawl fast Hold A
|
||||||
|
01E06820 08000000
|
||||||
|
4A3ED84A 00000100
|
||||||
|
0435CEEC 42480000
|
||||||
|
0435D548 44610000
|
||||||
|
523ED84A 00000100
|
||||||
|
0435CEEC 41880000
|
||||||
|
0435D548 41900000
|
||||||
|
0A3ED84A 00000120
|
||||||
|
0435DB94 42800000
|
||||||
|
123ED84A 00000120
|
||||||
|
0435DB94 40400000
|
||||||
|
|
||||||
|
(m)
|
||||||
|
01E0197D 88000000
|
||||||
|
C4323EA8 0000FF00
|
||||||
|
|
||||||
|
Max Health
|
||||||
|
01E0197E 08000000
|
||||||
|
003C4C09 00000050
|
||||||
|
|
||||||
|
Infinite Health
|
||||||
|
01E0197F 08000000
|
||||||
|
003C4C0B 00000050
|
||||||
|
|
||||||
|
Full Nintendo Gallery
|
||||||
|
01E01A3B 08000000
|
||||||
|
003C5260 00000001
|
||||||
|
023C52AC 0003FFFF
|
||||||
|
023C52B8 0005FFFF
|
||||||
|
003C52C8 000000FF
|
||||||
|
023C52DC 0000FFFF
|
||||||
|
|
||||||
|
Small energy sword
|
||||||
|
01E058C4 08000000
|
||||||
|
0435DF6C 004A004A
|
||||||
|
|
||||||
|
Full energy Sword
|
||||||
|
01E03B23 08000000
|
||||||
|
0435DF6C 004C004C
|
||||||
|
|
||||||
|
HookShot Head/beam sword
|
||||||
|
01E064B0 08000000
|
||||||
|
0435DF6C 004C001E
|
||||||
|
|
||||||
|
Normal/no glow
|
||||||
|
01E042B7 08000000
|
||||||
|
0435DF6C 00460046
|
||||||
|
|
||||||
|
Jesus Mode aka WalkOnWater
|
||||||
|
01E071C7 08000000
|
||||||
|
04004010 2C070003
|
||||||
|
04004014 C01EFFA0
|
||||||
|
04004018 4182000C
|
||||||
|
0400401C C01F008C
|
||||||
|
04004020 4809EF60
|
||||||
|
04004024 FC16A840
|
||||||
|
04004028 C2DEFFA4
|
||||||
|
0400402C 4182FFF0
|
||||||
|
04004030 4809EF54
|
||||||
|
04004048 281E5787
|
||||||
|
0400404C 4081001C
|
||||||
|
04004050 FC010040
|
||||||
|
04004054 4080000C
|
||||||
|
04004058 D2BEFFA0
|
||||||
|
0400405C 4800000C
|
||||||
|
04004060 C2DEFF9C
|
||||||
|
04004064 D03EFFA0
|
||||||
|
04004068 EC210028
|
||||||
|
0400406C 48138FB8
|
||||||
|
043C5E44 04071987
|
||||||
|
040A2F7C 4BF61094
|
||||||
|
0413D020 4BEC7028
|
||||||
|
|
||||||
|
Use anything indoors
|
||||||
|
01E01C68 08000000
|
||||||
|
0020485F 0000007E
|
||||||
|
|
||||||
|
Sink or Swim A+D-pad down sink B+D-pad down swim
|
||||||
|
01E00949 08000000
|
||||||
|
0A3ED84A 00000104
|
||||||
|
0435D560 50000000
|
||||||
|
0A3ED84A 00000204
|
||||||
|
0435D560 42B40000
|
||||||
|
|
||||||
|
Jump to a ledge at any height
|
||||||
|
01E05CFA 08000000
|
||||||
|
0435D734 469C4000
|
||||||
|
|
||||||
|
Very Fast on Ladders (May have to barly tap forward on joystick inorder to get on vein walls)
|
||||||
|
01E01534 08000000
|
||||||
|
00000000 8435DB18
|
||||||
|
41200000 00040002
|
||||||
|
0435DB38 7F7FFFFF
|
||||||
|
|
||||||
|
Extra deku leaf controls (Y makes you rise, Z keeps you at your current height, X wind pulls you instead of push, to stop it from rising you must close and reopen the leaf quickly)
|
||||||
|
01E04637 08000000
|
||||||
|
0A3ED84A 00000800
|
||||||
|
0435DC90 40700000
|
||||||
|
0A3ED84A 00000010
|
||||||
|
0435DC90 00000000
|
||||||
|
0A3ED84A 00000400
|
||||||
|
0435DCA4 C1200000
|
||||||
|
4A3ED84A 00000000
|
||||||
|
0435DC90 C0000000
|
||||||
|
0435DCA4 41166666
|
||||||
|
|
||||||
|
Roll further
|
||||||
|
01E05AB9 08000000
|
||||||
|
0435D3D0 40000000
|
||||||
|
|
||||||
|
Instead of rolling, you glide
|
||||||
|
01E05AAE 08000000
|
||||||
|
0435D3CC 45500000
|
||||||
|
|
||||||
|
#DON'T USE ANY OF THE FOLLOWING CODES UNTIL AFTER MEETING THE DRAGON BOAT
|
||||||
|
Max Magic
|
||||||
|
01E01983 08000000
|
||||||
|
003C4C1B 00000020
|
||||||
|
|
||||||
|
Infinite Magic
|
||||||
|
01E01984 08000000
|
||||||
|
003C4C1C 00000020
|
||||||
|
|
||||||
|
Can Carry 1000 Rupees
|
||||||
|
01E01985 08000000
|
||||||
|
003C4C1A 00000001
|
||||||
|
|
||||||
|
Can Carry 5000 Rupees
|
||||||
|
01E01986 08000000
|
||||||
|
003C4C1A 00000002
|
||||||
|
|
||||||
|
Always Have 1000 Rupees
|
||||||
|
01E01987 08000000
|
||||||
|
023C4C0C 000003E8
|
||||||
|
|
||||||
|
Always Have 5000 Rupees
|
||||||
|
01E01988 08000000
|
||||||
|
023C4C0C 00001388
|
||||||
|
|
||||||
|
Link Can Swim Forever
|
||||||
|
01E01989 08000000
|
||||||
|
023CA76E 00000384
|
||||||
|
|
||||||
|
Have All Songs
|
||||||
|
01E0198A 08000000
|
||||||
|
003C4CC5 0000003F
|
||||||
|
|
||||||
|
Have Hero's Sword
|
||||||
|
01E0198B 08000000
|
||||||
|
003C4C16 00000038
|
||||||
|
003C4CBC 00000001
|
||||||
|
|
||||||
|
Have Mirror Shield
|
||||||
|
01E0198C 08000000
|
||||||
|
003C4C17 0000003C
|
||||||
|
003C4CBD 00000003
|
||||||
|
|
||||||
|
Have Telescope
|
||||||
|
01E0198D 08000000
|
||||||
|
003C4C44 00000020
|
||||||
|
|
||||||
|
Have Sail
|
||||||
|
01E0198E 08000000
|
||||||
|
003C4C45 00000078
|
||||||
|
|
||||||
|
Have Wind Waker
|
||||||
|
01E0198F 08000000
|
||||||
|
003C4C46 00000022
|
||||||
|
|
||||||
|
Have Grappling Hook
|
||||||
|
01E01990 08000000
|
||||||
|
003C4C47 00000025
|
||||||
|
|
||||||
|
Have Boomerang
|
||||||
|
01E01991 08000000
|
||||||
|
003C4C49 0000002D
|
||||||
|
|
||||||
|
Have Deku Leaf
|
||||||
|
01E01992 08000000
|
||||||
|
003C4C4A 00000034
|
||||||
|
|
||||||
|
Have Tingle Tuner
|
||||||
|
01E01993 08000000
|
||||||
|
003C4C4B 00000021
|
||||||
|
|
||||||
|
Have DX Camera
|
||||||
|
01E01994 08000000
|
||||||
|
003C4C4C 00000026
|
||||||
|
|
||||||
|
Have Iron Boots
|
||||||
|
01E01995 08000000
|
||||||
|
003C4C4D 00000029
|
||||||
|
|
||||||
|
Have Magic Shielding
|
||||||
|
01E01996 08000000
|
||||||
|
003C4C4E 0000002A
|
||||||
|
|
||||||
|
Have Bow And All Arrows
|
||||||
|
01E01997 08000000
|
||||||
|
003C4C50 00000036
|
||||||
|
|
||||||
|
Have Bombs
|
||||||
|
01E01998 08000000
|
||||||
|
003C4C51 00000031
|
||||||
|
|
||||||
|
Have Hookshot
|
||||||
|
01E01999 08000000
|
||||||
|
003C4C57 0000002F
|
||||||
|
|
||||||
|
Have Megaton Hammer
|
||||||
|
01E0199A 08000000
|
||||||
|
003C4C58 00000033
|
||||||
|
|
||||||
|
Have Bottle 1
|
||||||
|
01E0199B 08000000
|
||||||
|
003C4C52 00000050
|
||||||
|
|
||||||
|
Have Bottle 2
|
||||||
|
01E0199C 08000000
|
||||||
|
003C4C53 00000050
|
||||||
|
|
||||||
|
Have Bottle 2 With Fairy
|
||||||
|
01E01ACC 08000000
|
||||||
|
003C4C53 00000057
|
||||||
|
|
||||||
|
Have Bottle 3
|
||||||
|
01E0199D 08000000
|
||||||
|
003C4C54 00000050
|
||||||
|
|
||||||
|
Have Bottle 3 With Blue Potion
|
||||||
|
01E01ACD 08000000
|
||||||
|
003C4C54 00000053
|
||||||
|
|
||||||
|
Have Bottle 4
|
||||||
|
01E0199E 08000000
|
||||||
|
003C4C55 00000050
|
||||||
|
|
||||||
|
Have Spoils Bag
|
||||||
|
01E0199F 08000000
|
||||||
|
003C4C48 00000024
|
||||||
|
|
||||||
|
Have Bait Bag
|
||||||
|
01E019A0 08000000
|
||||||
|
003C4C4F 0000002C
|
||||||
|
|
||||||
|
Have Delivery Bag
|
||||||
|
01E019A1 08000000
|
||||||
|
003C4C56 00000030
|
||||||
|
|
||||||
|
Infinite Berry Feed
|
||||||
|
01E019A2 08000000
|
||||||
|
003C4C86 00000082
|
||||||
|
003C4CAC 00000009
|
||||||
|
|
||||||
|
Infinite Pear Feed
|
||||||
|
01E019A3 08000000
|
||||||
|
003C4C87 00000083
|
||||||
|
003C4CAD 00000009
|
||||||
|
|
||||||
|
Max Red Chu Jelly
|
||||||
|
01E019A4 08000000
|
||||||
|
003C4C7E 00000049
|
||||||
|
003C4CA4 00000063
|
||||||
|
|
||||||
|
Max Green Chu Jelly
|
||||||
|
01E019A5 08000000
|
||||||
|
003C4C83 0000004A
|
||||||
|
003C4CA5 00000063
|
||||||
|
|
||||||
|
Max Blue Chu Jelly
|
||||||
|
01E019A6 08000000
|
||||||
|
003C4C85 0000004B
|
||||||
|
003C4CA6 00000063
|
||||||
|
|
||||||
|
Max Joy Pendants
|
||||||
|
01E019A7 08000000
|
||||||
|
003C4C7F 0000001F
|
||||||
|
003C4CA7 00000063
|
||||||
|
|
||||||
|
Max Skull Necklaces
|
||||||
|
01E019A8 08000000
|
||||||
|
003C4C80 00000045
|
||||||
|
003C4CA8 00000063
|
||||||
|
|
||||||
|
Max Knight's Crest
|
||||||
|
01E019A9 08000000
|
||||||
|
003C4C81 00000048
|
||||||
|
003C4CA9 00000063
|
||||||
|
|
||||||
|
Max Boko Baba Seeds
|
||||||
|
01E019AA 08000000
|
||||||
|
003C4C82 00000046
|
||||||
|
003C4CAA 00000063
|
||||||
|
|
||||||
|
Max Golden Feathers
|
||||||
|
01E019AB 08000000
|
||||||
|
003C4C84 00000047
|
||||||
|
003C4CAB 00000063
|
||||||
|
|
||||||
|
Can Carry 99 Arrows
|
||||||
|
01E019AC 08000000
|
||||||
|
003C4C77 00000063
|
||||||
|
|
||||||
|
Can Carry 99 Bombs
|
||||||
|
01E019AD 08000000
|
||||||
|
003C4C78 00000063
|
||||||
|
|
||||||
|
Infinite Arrows
|
||||||
|
01E019AE 08000000
|
||||||
|
003C4C71 00000063
|
||||||
|
|
||||||
|
Infinite Bombs
|
||||||
|
01E019AF 08000000
|
||||||
|
003C4C72 00000063
|
||||||
|
|
||||||
|
Have Fully Detailed Map
|
||||||
|
01E019B0 08000000
|
||||||
|
023C4D0C 00170303
|
||||||
|
003C4D3C 00000003
|
||||||
|
|
||||||
|
Have All Quest Maps
|
||||||
|
01E019B1 08000000
|
||||||
|
023C4CDC 0003FFFF
|
||||||
|
|
||||||
|
All Triforce Maps Translated
|
||||||
|
01E019B2 08000000
|
||||||
|
003C4D4D 000000FF
|
||||||
|
|
||||||
|
Fully Charged Master Sword DON'T USE THIS CODE UNTIL YOU HAVE THE MASTER SWORD
|
||||||
|
01E01A3E 08000000
|
||||||
|
003C4C16 0000003E
|
||||||
|
003C4CBC 0000000F
|
||||||
|
|
||||||
|
Have All Element Stones DON'T USE THIS CODE UNTIL DRAGON ROOST ISLAND
|
||||||
|
01E019B5 08000000
|
||||||
|
003C4CC7 00000007
|
||||||
|
003C524A 00000040
|
||||||
|
|
||||||
|
Have Complete Triforce USE THIS CODE AFTER BEATING THE TOWER OF THE GODS
|
||||||
|
01E019B8 08000000
|
||||||
|
003C4CC6 000000FF
|
||||||
|
|
||||||
|
+Press R to Jump
|
||||||
|
01E019BB 08000000
|
||||||
|
0A3ED84A 00000020
|
||||||
|
863E4410 00000001
|
||||||
|
|
||||||
|
Press R to Mega Jump
|
||||||
|
01E019BC 08000000
|
||||||
|
0A3ED84A 00000020
|
||||||
|
863E4410 00000003
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,156 @@
|
||||||
|
[OnFrame]
|
||||||
|
|
||||||
|
[ActionReplay]
|
||||||
|
All Shines
|
||||||
|
00E60AE1 18000000
|
||||||
|
045708E8 FFFFFFFF
|
||||||
|
045708EC FFFFFFFF
|
||||||
|
045708F0 FFFFFFFF
|
||||||
|
|
||||||
|
Open all levels and nozzles
|
||||||
|
00E60AE0 18000000
|
||||||
|
04570958 FFFFFFFF
|
||||||
|
0457095C FFFFFFFF
|
||||||
|
|
||||||
|
8 red coins(press L & B)
|
||||||
|
00E61642 18000000
|
||||||
|
0A3FBBF4 00000240
|
||||||
|
025709DE 00000008
|
||||||
|
|
||||||
|
Infinite hover time
|
||||||
|
00E61520 18000000
|
||||||
|
042640BC 60000000
|
||||||
|
|
||||||
|
Infinite water
|
||||||
|
00E6151F 18000000
|
||||||
|
04263F58 38002710
|
||||||
|
042635B0 60000000
|
||||||
|
|
||||||
|
Infinite health
|
||||||
|
00E60ADF 18000000
|
||||||
|
424057F4 00040009
|
||||||
|
|
||||||
|
+99 lives
|
||||||
|
00E60ADE 18000000
|
||||||
|
00570967 00000063
|
||||||
|
|
||||||
|
+Test Level
|
||||||
|
00B86425 08000000
|
||||||
|
043E9710 00000C01
|
||||||
|
|
||||||
|
+Low Gravity
|
||||||
|
00B809F5 08000000
|
||||||
|
4240E12C 05003E00
|
||||||
|
|
||||||
|
Jesus Mode A.K.A. Walk on Water D-Pad Up/Down = On/Off
|
||||||
|
00B813BC 08000000
|
||||||
|
04002F00 3C608041
|
||||||
|
04002F04 8063E12C
|
||||||
|
04002F08 80C3FFCC
|
||||||
|
04002F0C 2C060000
|
||||||
|
04002F10 4D820020
|
||||||
|
04002F14 C2660008
|
||||||
|
04002F18 EE852824
|
||||||
|
04002F1C EE93A02A
|
||||||
|
04002F20 FC019840
|
||||||
|
04002F24 4C800020
|
||||||
|
04002F28 FC20A090
|
||||||
|
04002F2C 38C00008
|
||||||
|
04002F30 90C30248
|
||||||
|
04002F34 4E800020
|
||||||
|
0A404454 00000008
|
||||||
|
04189854 4BE796AC
|
||||||
|
0A404454 00000004
|
||||||
|
04189854 4E800020
|
||||||
|
|
||||||
|
+Do Not Have To Move Before Triple Jump
|
||||||
|
00B819B3 08000000
|
||||||
|
4240E10C 06B00000
|
||||||
|
|
||||||
|
Spin Jump Gravity - Really Slow Fall
|
||||||
|
00B86E48 08000000
|
||||||
|
4240E10C 058E3D00
|
||||||
|
|
||||||
|
Spin Jump Gravity - Almost No Fall
|
||||||
|
00B8369D 08000000
|
||||||
|
4240E10C 058E0000
|
||||||
|
|
||||||
|
Spin Jump Gravity - Fall Really Fast
|
||||||
|
00B86350 08000000
|
||||||
|
4240E10C 058E4200
|
||||||
|
|
||||||
|
Spin Jump Gravity - Normal Speed
|
||||||
|
00B80454 08000000
|
||||||
|
4240E10C 058E3EB3
|
||||||
|
|
||||||
|
+Insane heat waves Crazy colors everywhere!
|
||||||
|
00B80485 08000000
|
||||||
|
043AA070 41200000
|
||||||
|
|
||||||
|
Double vision heat wave (narrow)
|
||||||
|
00B856EB 08000000
|
||||||
|
043AA070 3F600000
|
||||||
|
|
||||||
|
Double vision heat wave (wide)
|
||||||
|
00B85C4A 08000000
|
||||||
|
043AA070 3F400000
|
||||||
|
|
||||||
|
Use only one of following two. Vanish point visual distortion
|
||||||
|
00B842EC 08000000
|
||||||
|
043AB304 3E000000
|
||||||
|
|
||||||
|
Hard to select file, activators will work if you add them.. Camera is far out
|
||||||
|
00B82579 08000000
|
||||||
|
043AB304 3F000000
|
||||||
|
|
||||||
|
X textures
|
||||||
|
00B80A69 08000000
|
||||||
|
043DB210 41200000
|
||||||
|
|
||||||
|
|
||||||
|
Y textures
|
||||||
|
00B80605 08000000
|
||||||
|
043DB224 41200000
|
||||||
|
|
||||||
|
|
||||||
|
Z textures
|
||||||
|
00B86358 08000000
|
||||||
|
043DB238 41200000
|
||||||
|
|
||||||
|
|
||||||
|
Strangely distorted people
|
||||||
|
00B82C96 08000000
|
||||||
|
0440CC24 3F900000
|
||||||
|
|
||||||
|
Mute game
|
||||||
|
00B87829 08000000
|
||||||
|
04417248 00000000
|
||||||
|
|
||||||
|
Magnify camera
|
||||||
|
00B87EB7 08000000
|
||||||
|
04417690 3F900000
|
||||||
|
|
||||||
|
Warped camera view
|
||||||
|
00B851AB 08000000
|
||||||
|
044176A8 3E000000
|
||||||
|
|
||||||
|
Poorly Shaded Mario
|
||||||
|
00B87DA5 08000000
|
||||||
|
044176FC 00000000
|
||||||
|
|
||||||
|
|
||||||
|
Nozzle Modifier Press the buttons below to switch to another nozzle. You must have your nozzle set to squirt for it to work. You will never use another nozzle box again!! Just kidding.B+D-Pad Up:Rocket NozzleB+D-Pad Left:Turbo NozzleB+D-Pad Right:Hover NozzleB+D-Pad Down:Jump Nozzle
|
||||||
|
|
||||||
|
00B83682 08000000
|
||||||
|
0A404454 00000208
|
||||||
|
04269F50 3BE00001
|
||||||
|
0A404454 00000204
|
||||||
|
04269F50 3BE00002
|
||||||
|
0A404454 00000201
|
||||||
|
04269F50 3BE00005
|
||||||
|
0A404454 00000202
|
||||||
|
04269F50 3BE00004
|
||||||
|
|
||||||
|
Always Green Yoshi
|
||||||
|
00B80C27 08000000
|
||||||
|
405F3A90 04AE4C00
|
|
@ -0,0 +1,420 @@
|
||||||
|
[OnFrame]
|
||||||
|
0x802904b4=dword:0x4E800020 #Fix item hang
|
||||||
|
|
||||||
|
# WARNING - cheats may screw up your save games
|
||||||
|
# 0x803C4C09=byte:0x50 #Max health
|
||||||
|
# 0x803C4C0B=byte:0x50 #Current health
|
||||||
|
|
||||||
|
# Hidden dungeon
|
||||||
|
# 0x803C9D44=dword:0x000000FF
|
||||||
|
# 0x803C9D48=dword:0x485F7465
|
||||||
|
# 0x803C9D4C=dword:0x73740000
|
||||||
|
|
||||||
|
# Snow test room
|
||||||
|
# 0x803C9D44=dword:0x000000FF
|
||||||
|
# 0x803C9D48=dword:0x49546573
|
||||||
|
# 0x803C9D4C=dword:0x74363200
|
||||||
|
|
||||||
|
#only supports decrypted AR codes
|
||||||
|
|
||||||
|
[ActionReplay]
|
||||||
|
# Use GCNCrypt to decrypt large chunks of codes found online, and paste here.
|
||||||
|
# Add a + to the name to activate.
|
||||||
|
# Codes by GCNHacker87 (yes we forgot to ask permission)
|
||||||
|
+Master Code (useless)
|
||||||
|
01E0197D 88000000
|
||||||
|
C4323EA8 0000FF00
|
||||||
|
|
||||||
|
Shadow Link
|
||||||
|
01E05E82 08000000
|
||||||
|
041926B8 60000000
|
||||||
|
423BCDA0 00BCFFFF
|
||||||
|
423BCDA0 00BDFF87
|
||||||
|
403BCDA0 00017E3F
|
||||||
|
|
||||||
|
Stuff at the top right of the screen is not visible
|
||||||
|
01E00EFA 08000000
|
||||||
|
903ED848 00000000
|
||||||
|
023F633C 00028000
|
||||||
|
003F710A 00000080
|
||||||
|
003F713A 00000080
|
||||||
|
003F715E 00000080
|
||||||
|
403BB494 00106A80
|
||||||
|
403BB498 002F5080
|
||||||
|
00000000 40000000
|
||||||
|
|
||||||
|
Super Hookshot
|
||||||
|
01E03C97 08000000
|
||||||
|
043F9DFC 48420B00
|
||||||
|
040F1E68 28030001
|
||||||
|
043F9E00 43008700
|
||||||
|
0A3ED84A 00000140
|
||||||
|
040F2898 3C000000
|
||||||
|
123ED84A 00000140
|
||||||
|
040F2898 8001004C
|
||||||
|
|
||||||
|
+Teleport to Fire Mountain up R Y
|
||||||
|
01E05660 08000000
|
||||||
|
4A3ED84A 00000828
|
||||||
|
043E440C 482F85A1
|
||||||
|
043E4414 C7EA36FD
|
||||||
|
|
||||||
|
Hold A to swim fast
|
||||||
|
01E0712B 08000000
|
||||||
|
0A3ED84A 00000100
|
||||||
|
0435D548 44610000
|
||||||
|
123ED84A 00000100
|
||||||
|
0435D548 41900000
|
||||||
|
|
||||||
|
+Run/Swim/Crawl fast Hold A
|
||||||
|
01E06820 08000000
|
||||||
|
4A3ED84A 00000100
|
||||||
|
0435CEEC 42480000
|
||||||
|
0435D548 44610000
|
||||||
|
523ED84A 00000100
|
||||||
|
0435CEEC 41880000
|
||||||
|
0435D548 41900000
|
||||||
|
0A3ED84A 00000120
|
||||||
|
0435DB94 42800000
|
||||||
|
123ED84A 00000120
|
||||||
|
0435DB94 40400000
|
||||||
|
|
||||||
|
(m)
|
||||||
|
01E0197D 88000000
|
||||||
|
C4323EA8 0000FF00
|
||||||
|
|
||||||
|
Max Health
|
||||||
|
01E0197E 08000000
|
||||||
|
003C4C09 00000050
|
||||||
|
|
||||||
|
Infinite Health
|
||||||
|
01E0197F 08000000
|
||||||
|
003C4C0B 00000050
|
||||||
|
|
||||||
|
Full Nintendo Gallery
|
||||||
|
01E01A3B 08000000
|
||||||
|
003C5260 00000001
|
||||||
|
023C52AC 0003FFFF
|
||||||
|
023C52B8 0005FFFF
|
||||||
|
003C52C8 000000FF
|
||||||
|
023C52DC 0000FFFF
|
||||||
|
|
||||||
|
Small energy sword
|
||||||
|
01E058C4 08000000
|
||||||
|
0435DF6C 004A004A
|
||||||
|
|
||||||
|
Full energy Sword
|
||||||
|
01E03B23 08000000
|
||||||
|
0435DF6C 004C004C
|
||||||
|
|
||||||
|
HookShot Head/beam sword
|
||||||
|
01E064B0 08000000
|
||||||
|
0435DF6C 004C001E
|
||||||
|
|
||||||
|
Normal/no glow
|
||||||
|
01E042B7 08000000
|
||||||
|
0435DF6C 00460046
|
||||||
|
|
||||||
|
Jesus Mode aka WalkOnWater
|
||||||
|
01E071C7 08000000
|
||||||
|
04004010 2C070003
|
||||||
|
04004014 C01EFFA0
|
||||||
|
04004018 4182000C
|
||||||
|
0400401C C01F008C
|
||||||
|
04004020 4809EF60
|
||||||
|
04004024 FC16A840
|
||||||
|
04004028 C2DEFFA4
|
||||||
|
0400402C 4182FFF0
|
||||||
|
04004030 4809EF54
|
||||||
|
04004048 281E5787
|
||||||
|
0400404C 4081001C
|
||||||
|
04004050 FC010040
|
||||||
|
04004054 4080000C
|
||||||
|
04004058 D2BEFFA0
|
||||||
|
0400405C 4800000C
|
||||||
|
04004060 C2DEFF9C
|
||||||
|
04004064 D03EFFA0
|
||||||
|
04004068 EC210028
|
||||||
|
0400406C 48138FB8
|
||||||
|
043C5E44 04071987
|
||||||
|
040A2F7C 4BF61094
|
||||||
|
0413D020 4BEC7028
|
||||||
|
|
||||||
|
Use anything indoors
|
||||||
|
01E01C68 08000000
|
||||||
|
0020485F 0000007E
|
||||||
|
|
||||||
|
Sink or Swim A+D-pad down sink B+D-pad down swim
|
||||||
|
01E00949 08000000
|
||||||
|
0A3ED84A 00000104
|
||||||
|
0435D560 50000000
|
||||||
|
0A3ED84A 00000204
|
||||||
|
0435D560 42B40000
|
||||||
|
|
||||||
|
Jump to a ledge at any height
|
||||||
|
01E05CFA 08000000
|
||||||
|
0435D734 469C4000
|
||||||
|
|
||||||
|
Very Fast on Ladders (May have to barly tap forward on joystick inorder to get on vein walls)
|
||||||
|
01E01534 08000000
|
||||||
|
00000000 8435DB18
|
||||||
|
41200000 00040002
|
||||||
|
0435DB38 7F7FFFFF
|
||||||
|
|
||||||
|
Extra deku leaf controls (Y makes you rise, Z keeps you at your current height, X wind pulls you instead of push, to stop it from rising you must close and reopen the leaf quickly)
|
||||||
|
01E04637 08000000
|
||||||
|
0A3ED84A 00000800
|
||||||
|
0435DC90 40700000
|
||||||
|
0A3ED84A 00000010
|
||||||
|
0435DC90 00000000
|
||||||
|
0A3ED84A 00000400
|
||||||
|
0435DCA4 C1200000
|
||||||
|
4A3ED84A 00000000
|
||||||
|
0435DC90 C0000000
|
||||||
|
0435DCA4 41166666
|
||||||
|
|
||||||
|
Roll further
|
||||||
|
01E05AB9 08000000
|
||||||
|
0435D3D0 40000000
|
||||||
|
|
||||||
|
Instead of rolling, you glide
|
||||||
|
01E05AAE 08000000
|
||||||
|
0435D3CC 45500000
|
||||||
|
|
||||||
|
#DON'T USE ANY OF THE FOLLOWING CODES UNTIL AFTER MEETING THE DRAGON BOAT
|
||||||
|
Max Magic
|
||||||
|
01E01983 08000000
|
||||||
|
003C4C1B 00000020
|
||||||
|
|
||||||
|
Infinite Magic
|
||||||
|
01E01984 08000000
|
||||||
|
003C4C1C 00000020
|
||||||
|
|
||||||
|
Can Carry 1000 Rupees
|
||||||
|
01E01985 08000000
|
||||||
|
003C4C1A 00000001
|
||||||
|
|
||||||
|
Can Carry 5000 Rupees
|
||||||
|
01E01986 08000000
|
||||||
|
003C4C1A 00000002
|
||||||
|
|
||||||
|
Always Have 1000 Rupees
|
||||||
|
01E01987 08000000
|
||||||
|
023C4C0C 000003E8
|
||||||
|
|
||||||
|
Always Have 5000 Rupees
|
||||||
|
01E01988 08000000
|
||||||
|
023C4C0C 00001388
|
||||||
|
|
||||||
|
Link Can Swim Forever
|
||||||
|
01E01989 08000000
|
||||||
|
023CA76E 00000384
|
||||||
|
|
||||||
|
Have All Songs
|
||||||
|
01E0198A 08000000
|
||||||
|
003C4CC5 0000003F
|
||||||
|
|
||||||
|
Have Hero's Sword
|
||||||
|
01E0198B 08000000
|
||||||
|
003C4C16 00000038
|
||||||
|
003C4CBC 00000001
|
||||||
|
|
||||||
|
Have Mirror Shield
|
||||||
|
01E0198C 08000000
|
||||||
|
003C4C17 0000003C
|
||||||
|
003C4CBD 00000003
|
||||||
|
|
||||||
|
Have Telescope
|
||||||
|
01E0198D 08000000
|
||||||
|
003C4C44 00000020
|
||||||
|
|
||||||
|
Have Sail
|
||||||
|
01E0198E 08000000
|
||||||
|
003C4C45 00000078
|
||||||
|
|
||||||
|
Have Wind Waker
|
||||||
|
01E0198F 08000000
|
||||||
|
003C4C46 00000022
|
||||||
|
|
||||||
|
Have Grappling Hook
|
||||||
|
01E01990 08000000
|
||||||
|
003C4C47 00000025
|
||||||
|
|
||||||
|
Have Boomerang
|
||||||
|
01E01991 08000000
|
||||||
|
003C4C49 0000002D
|
||||||
|
|
||||||
|
Have Deku Leaf
|
||||||
|
01E01992 08000000
|
||||||
|
003C4C4A 00000034
|
||||||
|
|
||||||
|
Have Tingle Tuner
|
||||||
|
01E01993 08000000
|
||||||
|
003C4C4B 00000021
|
||||||
|
|
||||||
|
Have DX Camera
|
||||||
|
01E01994 08000000
|
||||||
|
003C4C4C 00000026
|
||||||
|
|
||||||
|
Have Iron Boots
|
||||||
|
01E01995 08000000
|
||||||
|
003C4C4D 00000029
|
||||||
|
|
||||||
|
Have Magic Shielding
|
||||||
|
01E01996 08000000
|
||||||
|
003C4C4E 0000002A
|
||||||
|
|
||||||
|
Have Bow And All Arrows
|
||||||
|
01E01997 08000000
|
||||||
|
003C4C50 00000036
|
||||||
|
|
||||||
|
Have Bombs
|
||||||
|
01E01998 08000000
|
||||||
|
003C4C51 00000031
|
||||||
|
|
||||||
|
Have Hookshot
|
||||||
|
01E01999 08000000
|
||||||
|
003C4C57 0000002F
|
||||||
|
|
||||||
|
Have Megaton Hammer
|
||||||
|
01E0199A 08000000
|
||||||
|
003C4C58 00000033
|
||||||
|
|
||||||
|
Have Bottle 1
|
||||||
|
01E0199B 08000000
|
||||||
|
003C4C52 00000050
|
||||||
|
|
||||||
|
Have Bottle 2
|
||||||
|
01E0199C 08000000
|
||||||
|
003C4C53 00000050
|
||||||
|
|
||||||
|
Have Bottle 2 With Fairy
|
||||||
|
01E01ACC 08000000
|
||||||
|
003C4C53 00000057
|
||||||
|
|
||||||
|
Have Bottle 3
|
||||||
|
01E0199D 08000000
|
||||||
|
003C4C54 00000050
|
||||||
|
|
||||||
|
Have Bottle 3 With Blue Potion
|
||||||
|
01E01ACD 08000000
|
||||||
|
003C4C54 00000053
|
||||||
|
|
||||||
|
Have Bottle 4
|
||||||
|
01E0199E 08000000
|
||||||
|
003C4C55 00000050
|
||||||
|
|
||||||
|
Have Spoils Bag
|
||||||
|
01E0199F 08000000
|
||||||
|
003C4C48 00000024
|
||||||
|
|
||||||
|
Have Bait Bag
|
||||||
|
01E019A0 08000000
|
||||||
|
003C4C4F 0000002C
|
||||||
|
|
||||||
|
Have Delivery Bag
|
||||||
|
01E019A1 08000000
|
||||||
|
003C4C56 00000030
|
||||||
|
|
||||||
|
Infinite Berry Feed
|
||||||
|
01E019A2 08000000
|
||||||
|
003C4C86 00000082
|
||||||
|
003C4CAC 00000009
|
||||||
|
|
||||||
|
Infinite Pear Feed
|
||||||
|
01E019A3 08000000
|
||||||
|
003C4C87 00000083
|
||||||
|
003C4CAD 00000009
|
||||||
|
|
||||||
|
Max Red Chu Jelly
|
||||||
|
01E019A4 08000000
|
||||||
|
003C4C7E 00000049
|
||||||
|
003C4CA4 00000063
|
||||||
|
|
||||||
|
Max Green Chu Jelly
|
||||||
|
01E019A5 08000000
|
||||||
|
003C4C83 0000004A
|
||||||
|
003C4CA5 00000063
|
||||||
|
|
||||||
|
Max Blue Chu Jelly
|
||||||
|
01E019A6 08000000
|
||||||
|
003C4C85 0000004B
|
||||||
|
003C4CA6 00000063
|
||||||
|
|
||||||
|
Max Joy Pendants
|
||||||
|
01E019A7 08000000
|
||||||
|
003C4C7F 0000001F
|
||||||
|
003C4CA7 00000063
|
||||||
|
|
||||||
|
Max Skull Necklaces
|
||||||
|
01E019A8 08000000
|
||||||
|
003C4C80 00000045
|
||||||
|
003C4CA8 00000063
|
||||||
|
|
||||||
|
Max Knight's Crest
|
||||||
|
01E019A9 08000000
|
||||||
|
003C4C81 00000048
|
||||||
|
003C4CA9 00000063
|
||||||
|
|
||||||
|
Max Boko Baba Seeds
|
||||||
|
01E019AA 08000000
|
||||||
|
003C4C82 00000046
|
||||||
|
003C4CAA 00000063
|
||||||
|
|
||||||
|
Max Golden Feathers
|
||||||
|
01E019AB 08000000
|
||||||
|
003C4C84 00000047
|
||||||
|
003C4CAB 00000063
|
||||||
|
|
||||||
|
Can Carry 99 Arrows
|
||||||
|
01E019AC 08000000
|
||||||
|
003C4C77 00000063
|
||||||
|
|
||||||
|
Can Carry 99 Bombs
|
||||||
|
01E019AD 08000000
|
||||||
|
003C4C78 00000063
|
||||||
|
|
||||||
|
Infinite Arrows
|
||||||
|
01E019AE 08000000
|
||||||
|
003C4C71 00000063
|
||||||
|
|
||||||
|
Infinite Bombs
|
||||||
|
01E019AF 08000000
|
||||||
|
003C4C72 00000063
|
||||||
|
|
||||||
|
Have Fully Detailed Map
|
||||||
|
01E019B0 08000000
|
||||||
|
023C4D0C 00170303
|
||||||
|
003C4D3C 00000003
|
||||||
|
|
||||||
|
Have All Quest Maps
|
||||||
|
01E019B1 08000000
|
||||||
|
023C4CDC 0003FFFF
|
||||||
|
|
||||||
|
All Triforce Maps Translated
|
||||||
|
01E019B2 08000000
|
||||||
|
003C4D4D 000000FF
|
||||||
|
|
||||||
|
Fully Charged Master Sword DON'T USE THIS CODE UNTIL YOU HAVE THE MASTER SWORD
|
||||||
|
01E01A3E 08000000
|
||||||
|
003C4C16 0000003E
|
||||||
|
003C4CBC 0000000F
|
||||||
|
|
||||||
|
Have All Element Stones DON'T USE THIS CODE UNTIL DRAGON ROOST ISLAND
|
||||||
|
01E019B5 08000000
|
||||||
|
003C4CC7 00000007
|
||||||
|
003C524A 00000040
|
||||||
|
|
||||||
|
Have Complete Triforce USE THIS CODE AFTER BEATING THE TOWER OF THE GODS
|
||||||
|
01E019B8 08000000
|
||||||
|
003C4CC6 000000FF
|
||||||
|
|
||||||
|
+Press R to Jump
|
||||||
|
01E019BB 08000000
|
||||||
|
0A3ED84A 00000020
|
||||||
|
863E4410 00000001
|
||||||
|
|
||||||
|
Press R to Mega Jump
|
||||||
|
01E019BC 08000000
|
||||||
|
0A3ED84A 00000020
|
||||||
|
863E4410 00000003
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,509 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="Bochs_disasm"
|
||||||
|
ProjectGUID="{29C2ABC1-ADA5-42CD-A5FC-96022D52A510}"
|
||||||
|
RootNamespace="Bochs_disasm"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
ForcedIncludeFiles="stdafx.h"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
ForcedIncludeFiles="stdafx.h"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="0"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
WholeProgramOptimization="false"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
ForcedIncludeFiles="stdafx.h"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="0"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
FavorSizeOrSpeed="2"
|
||||||
|
WholeProgramOptimization="false"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
ForcedIncludeFiles="stdafx.h"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="DebugFast|Win32"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="0"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
WholeProgramOptimization="false"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
ForcedIncludeFiles="stdafx.h"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="DebugFast|x64"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="4"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="0"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
FavorSizeOrSpeed="2"
|
||||||
|
WholeProgramOptimization="false"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
ForcedIncludeFiles="stdafx.h"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLibrarianTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\config.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dis_decode.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dis_groups.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dis_tables.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dis_tables.inl"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\disasm.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\opcodes.inl"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\PowerPCDisasm.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\PowerPCDisasm.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\resolve.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stdafx.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="DebugFast|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="DebugFast|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\stdafx.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\syntax.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
||||||
|
/* $VER: ppc_disasm V0.1 (23.05.1998)
|
||||||
|
*
|
||||||
|
* Disassembler module for the PowerPC microprocessor family
|
||||||
|
* Copyright (c) 1998-2000 Frank Wille
|
||||||
|
*
|
||||||
|
* ppc_disasm.c is freeware and may be freely redistributed as long as
|
||||||
|
* no modifications are made and nothing is charged for it.
|
||||||
|
* Non-commercial usage is allowed without any restrictions.
|
||||||
|
* EVERY PRODUCT OR PROGRAM DERIVED DIRECTLY FROM MY SOURCE MAY NOT BE
|
||||||
|
* SOLD COMMERCIALLY WITHOUT PERMISSION FROM THE AUTHOR.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* v0.1 (23.05.1998) phx
|
||||||
|
* First version, which implements all PowerPC instructions.
|
||||||
|
* v0.0 (09.05.1998) phx
|
||||||
|
* File created.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Yeah, this does not really belong in bochs_disasm, but hey, it's a disasm and it needed a common location...
|
||||||
|
|
||||||
|
#ifndef _POWERPC_DISASM
|
||||||
|
#define _POWERPC_DISASM
|
||||||
|
|
||||||
|
const char *DisassembleGekko(unsigned int opcode, unsigned int curInstAddr);
|
||||||
|
const char *GetGRPName(unsigned int index);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,11 @@
|
||||||
|
Import('env')
|
||||||
|
|
||||||
|
files = ["dis_decode.cpp",
|
||||||
|
"dis_groups.cpp",
|
||||||
|
"resolve.cpp",
|
||||||
|
"syntax.cpp",
|
||||||
|
"PowerPCDisasm.cpp",
|
||||||
|
]
|
||||||
|
|
||||||
|
env_bochs = env.Copy(CXXFLAGS = " -fPIC ")
|
||||||
|
env_bochs.StaticLibrary("bdisasm", files)
|
|
@ -0,0 +1,41 @@
|
||||||
|
#ifndef _BOCHS_CONFIG_H
|
||||||
|
#define _BOCHS_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
typedef signed __int8 Bit8s;
|
||||||
|
typedef signed __int16 Bit16s;
|
||||||
|
typedef signed __int32 Bit32s;
|
||||||
|
typedef signed __int64 Bit64s;
|
||||||
|
|
||||||
|
typedef unsigned __int8 Bit8u;
|
||||||
|
typedef unsigned __int16 Bit16u;
|
||||||
|
typedef unsigned __int32 Bit32u;
|
||||||
|
typedef unsigned __int64 Bit64u;
|
||||||
|
|
||||||
|
typedef bool bx_bool;
|
||||||
|
typedef Bit64u bx_address;
|
||||||
|
|
||||||
|
#define BX_CPP_INLINE inline
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef int8_t Bit8s;
|
||||||
|
typedef int16_t Bit16s;
|
||||||
|
typedef int32_t Bit32s;
|
||||||
|
typedef int64_t Bit64s;
|
||||||
|
|
||||||
|
typedef uint8_t Bit8u;
|
||||||
|
typedef uint16_t Bit16u;
|
||||||
|
typedef uint32_t Bit32u;
|
||||||
|
typedef uint64_t Bit64u;
|
||||||
|
|
||||||
|
typedef bool bx_bool;
|
||||||
|
typedef Bit64u bx_address;
|
||||||
|
|
||||||
|
#define BX_CPP_INLINE inline
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,328 @@
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// $Id: dis_decode.cc,v 1.32 2006/05/12 17:04:19 sshwarts Exp $
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "disasm.h"
|
||||||
|
#include "dis_tables.h"
|
||||||
|
|
||||||
|
#define OPCODE(entry) ((BxDisasmOpcodeInfo_t*) entry->OpcodeInfo)
|
||||||
|
#define OPCODE_TABLE(entry) ((BxDisasmOpcodeTable_t*) entry->OpcodeInfo)
|
||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#define NULL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static const unsigned char instruction_has_modrm[512] = {
|
||||||
|
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||||
|
/* ------------------------------- */
|
||||||
|
/* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
/* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
/* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
/* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
|
||||||
|
/* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
|
||||||
|
/* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||||
|
/* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* A0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* B0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* C0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
|
||||||
|
/* D0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
|
||||||
|
/* E0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
/* F0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,
|
||||||
|
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||||
|
/* ------------------------------- */
|
||||||
|
1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0F 00 */
|
||||||
|
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1, /* 0F 10 */
|
||||||
|
1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 0F 20 */
|
||||||
|
0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 0F 30 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 40 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 50 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 60 */
|
||||||
|
1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1, /* 0F 70 */
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0F 80 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 90 */
|
||||||
|
0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* 0F A0 */
|
||||||
|
1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* 0F B0 */
|
||||||
|
1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* 0F C0 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F D0 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F E0 */
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* 0F F0 */
|
||||||
|
/* ------------------------------- */
|
||||||
|
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned disassembler::disasm(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{
|
||||||
|
x86_insn insn = decode(is_32, is_64, base, ip, instr, disbuf);
|
||||||
|
return insn.ilen;
|
||||||
|
}
|
||||||
|
|
||||||
|
x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{
|
||||||
|
x86_insn insn(is_32, is_64);
|
||||||
|
const Bit8u *instruction_begin = instruction = instr;
|
||||||
|
resolve_modrm = NULL;
|
||||||
|
unsigned b3 = 0;
|
||||||
|
|
||||||
|
db_eip = ip;
|
||||||
|
db_base = base; // cs linear base (base for PM & cs<<4 for RM & VM)
|
||||||
|
|
||||||
|
disbufptr = disbuf; // start sprintf()'ing into beginning of buffer
|
||||||
|
|
||||||
|
#define SSE_PREFIX_NONE 0
|
||||||
|
#define SSE_PREFIX_66 1
|
||||||
|
#define SSE_PREFIX_F2 2
|
||||||
|
#define SSE_PREFIX_F3 3 /* only one SSE prefix could be used */
|
||||||
|
unsigned sse_prefix = SSE_PREFIX_NONE;
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
insn.b1 = fetch_byte();
|
||||||
|
insn.prefixes++;
|
||||||
|
|
||||||
|
switch(insn.b1) {
|
||||||
|
case 0x40: // rex
|
||||||
|
case 0x41:
|
||||||
|
case 0x42:
|
||||||
|
case 0x43:
|
||||||
|
case 0x44:
|
||||||
|
case 0x45:
|
||||||
|
case 0x46:
|
||||||
|
case 0x47:
|
||||||
|
case 0x48:
|
||||||
|
case 0x49:
|
||||||
|
case 0x4A:
|
||||||
|
case 0x4B:
|
||||||
|
case 0x4C:
|
||||||
|
case 0x4D:
|
||||||
|
case 0x4E:
|
||||||
|
case 0x4F:
|
||||||
|
if (! is_64) break;
|
||||||
|
insn.extend8b = 1;
|
||||||
|
if (insn.b1 & 0x8) {
|
||||||
|
insn.os_64 = 1;
|
||||||
|
insn.os_32 = 1;
|
||||||
|
}
|
||||||
|
if (insn.b1 & 0x4) insn.rex_r = 8;
|
||||||
|
if (insn.b1 & 0x2) insn.rex_x = 8;
|
||||||
|
if (insn.b1 & 0x1) insn.rex_b = 8;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x26: // ES:
|
||||||
|
if (! is_64) insn.seg_override = ES_REG;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x2e: // CS:
|
||||||
|
if (! is_64) insn.seg_override = CS_REG;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x36: // SS:
|
||||||
|
if (! is_64) insn.seg_override = SS_REG;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x3e: // DS:
|
||||||
|
if (! is_64) insn.seg_override = DS_REG;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x64: // FS:
|
||||||
|
insn.seg_override = FS_REG;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x65: // GS:
|
||||||
|
insn.seg_override = GS_REG;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x66: // operand size override
|
||||||
|
if (!insn.os_64) insn.os_32 = !is_32;
|
||||||
|
if (!sse_prefix) sse_prefix = SSE_PREFIX_66;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0x67: // address size override
|
||||||
|
if (!is_64) insn.as_32 = !is_32;
|
||||||
|
insn.as_64 = 0;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0xf0: // lock
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0xf2: // repne
|
||||||
|
if (!sse_prefix) sse_prefix = SSE_PREFIX_F2;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case 0xf3: // rep
|
||||||
|
if (!sse_prefix) sse_prefix = SSE_PREFIX_F3;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// no more prefixes
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
insn.prefixes--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (insn.b1 == 0x0f)
|
||||||
|
{
|
||||||
|
insn.b1 = 0x100 | fetch_byte();
|
||||||
|
}
|
||||||
|
|
||||||
|
const BxDisasmOpcodeTable_t *opcode_table, *entry;
|
||||||
|
|
||||||
|
if (is_64) {
|
||||||
|
if (insn.os_64)
|
||||||
|
opcode_table = BxDisasmOpcodes64q;
|
||||||
|
else if (insn.os_32)
|
||||||
|
opcode_table = BxDisasmOpcodes64d;
|
||||||
|
else
|
||||||
|
opcode_table = BxDisasmOpcodes64w;
|
||||||
|
} else {
|
||||||
|
if (insn.os_32)
|
||||||
|
opcode_table = BxDisasmOpcodes32;
|
||||||
|
else
|
||||||
|
opcode_table = BxDisasmOpcodes16;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry = opcode_table + insn.b1;
|
||||||
|
|
||||||
|
// will require 3rd byte for 3-byte opcode
|
||||||
|
if (entry->Attr & _GRP3BTAB) b3 = fetch_byte();
|
||||||
|
|
||||||
|
if (instruction_has_modrm[insn.b1])
|
||||||
|
{
|
||||||
|
decode_modrm(&insn);
|
||||||
|
}
|
||||||
|
|
||||||
|
int attr = entry->Attr;
|
||||||
|
while(attr)
|
||||||
|
{
|
||||||
|
switch(attr) {
|
||||||
|
case _GROUPN:
|
||||||
|
entry = &(OPCODE_TABLE(entry)[insn.nnn]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _GRPSSE:
|
||||||
|
if(sse_prefix) insn.prefixes--;
|
||||||
|
/* For SSE opcodes, look into another 4 entries table
|
||||||
|
with the opcode prefixes (NONE, 0x66, 0xF2, 0xF3) */
|
||||||
|
entry = &(OPCODE_TABLE(entry)[sse_prefix]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _SPLIT11B:
|
||||||
|
entry = &(OPCODE_TABLE(entry)[insn.mod != 3]); /* REG/MEM */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _GRPRM:
|
||||||
|
entry = &(OPCODE_TABLE(entry)[insn.rm]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _GRPFP:
|
||||||
|
if(insn.mod != 3)
|
||||||
|
{
|
||||||
|
entry = &(OPCODE_TABLE(entry)[insn.nnn]);
|
||||||
|
} else {
|
||||||
|
int index = (insn.b1-0xD8)*64 + (insn.modrm & 0x3f);
|
||||||
|
entry = &(BxDisasmOpcodeInfoFP[index]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _GRP3DNOW:
|
||||||
|
entry = &(BxDisasm3DNowGroup[peek_byte()]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _GRP3BTAB:
|
||||||
|
entry = &(OPCODE_TABLE(entry)[b3 >> 4]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _GRP3BOP:
|
||||||
|
entry = &(OPCODE_TABLE(entry)[b3 & 15]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Internal disassembler error - unknown attribute !\n");
|
||||||
|
return x86_insn(is_32, is_64);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get additional attributes from group table */
|
||||||
|
attr = entry->Attr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BRANCH_NOT_TAKEN 0x2E
|
||||||
|
#define BRANCH_TAKEN 0x3E
|
||||||
|
|
||||||
|
unsigned branch_hint = 0;
|
||||||
|
|
||||||
|
// print prefixes
|
||||||
|
for(unsigned i=0;i<insn.prefixes;i++)
|
||||||
|
{
|
||||||
|
Bit8u prefix_byte = *(instr+i);
|
||||||
|
|
||||||
|
if (prefix_byte == 0xF3 || prefix_byte == 0xF2 || prefix_byte == 0xF0)
|
||||||
|
{
|
||||||
|
const BxDisasmOpcodeTable_t *prefix = &(opcode_table[prefix_byte]);
|
||||||
|
dis_sprintf("%s ", OPCODE(prefix)->IntelOpcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// branch hint for jcc instructions
|
||||||
|
if ((insn.b1 >= 0x070 && insn.b1 <= 0x07F) ||
|
||||||
|
(insn.b1 >= 0x180 && insn.b1 <= 0x18F))
|
||||||
|
{
|
||||||
|
if (prefix_byte == BRANCH_NOT_TAKEN || prefix_byte == BRANCH_TAKEN)
|
||||||
|
branch_hint = prefix_byte;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const BxDisasmOpcodeInfo_t *opcode = OPCODE(entry);
|
||||||
|
|
||||||
|
// patch jecx opcode
|
||||||
|
if (insn.b1 == 0xE3 && insn.as_32 && !insn.as_64)
|
||||||
|
opcode = &Ia_jecxz_Jb;
|
||||||
|
|
||||||
|
// fix nop opcode
|
||||||
|
if (insn.b1 == 0x90 && !insn.rex_b) {
|
||||||
|
opcode = &Ia_nop;
|
||||||
|
}
|
||||||
|
|
||||||
|
// print instruction disassembly
|
||||||
|
if (intel_mode)
|
||||||
|
print_disassembly_intel(&insn, opcode);
|
||||||
|
else
|
||||||
|
print_disassembly_att (&insn, opcode);
|
||||||
|
|
||||||
|
if (branch_hint == BRANCH_NOT_TAKEN)
|
||||||
|
{
|
||||||
|
dis_sprintf(", not taken");
|
||||||
|
}
|
||||||
|
else if (branch_hint == BRANCH_TAKEN)
|
||||||
|
{
|
||||||
|
dis_sprintf(", taken");
|
||||||
|
}
|
||||||
|
|
||||||
|
insn.ilen = (unsigned)(instruction - instruction_begin);
|
||||||
|
|
||||||
|
return insn;
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::dis_sprintf(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
vsprintf(disbufptr, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
disbufptr += strlen(disbufptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::dis_putc(char symbol)
|
||||||
|
{
|
||||||
|
*disbufptr++ = symbol;
|
||||||
|
*disbufptr = 0;
|
||||||
|
}
|
|
@ -0,0 +1,607 @@
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// $Id: dis_groups.cc,v 1.33 2006/08/13 09:40:07 sshwarts Exp $
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include "disasm.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
#if BX_DEBUGGER
|
||||||
|
#include "../bx_debug/debug.h"
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
void disassembler::Apw(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
Bit16u imm16 = fetch_word();
|
||||||
|
Bit16u cs_selector = fetch_word();
|
||||||
|
dis_sprintf("%04x:%04x", (unsigned) cs_selector, (unsigned) imm16);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Apd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
Bit32u imm32 = fetch_dword();
|
||||||
|
Bit16u cs_selector = fetch_word();
|
||||||
|
dis_sprintf("%04x:%08x", (unsigned) cs_selector, (unsigned) imm32);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8-bit general purpose registers
|
||||||
|
void disassembler::AL(const x86_insn *insn) { dis_sprintf("%s", general_8bit_regname[rAX_REG]); }
|
||||||
|
void disassembler::CL(const x86_insn *insn) { dis_sprintf("%s", general_8bit_regname[rCX_REG]); }
|
||||||
|
|
||||||
|
// 16-bit general purpose registers
|
||||||
|
void disassembler::AX(const x86_insn *insn) {
|
||||||
|
dis_sprintf("%s", general_16bit_regname[rAX_REG]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::DX(const x86_insn *insn) {
|
||||||
|
dis_sprintf("%s", general_16bit_regname[rDX_REG]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 32-bit general purpose registers
|
||||||
|
void disassembler::EAX(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_32bit_regname[rAX_REG]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 64-bit general purpose registers
|
||||||
|
void disassembler::RAX(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_64bit_regname[rAX_REG]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// segment registers
|
||||||
|
void disassembler::CS(const x86_insn *insn) { dis_sprintf("%s", segment_name[CS_REG]); }
|
||||||
|
void disassembler::DS(const x86_insn *insn) { dis_sprintf("%s", segment_name[DS_REG]); }
|
||||||
|
void disassembler::ES(const x86_insn *insn) { dis_sprintf("%s", segment_name[ES_REG]); }
|
||||||
|
void disassembler::SS(const x86_insn *insn) { dis_sprintf("%s", segment_name[SS_REG]); }
|
||||||
|
void disassembler::FS(const x86_insn *insn) { dis_sprintf("%s", segment_name[FS_REG]); }
|
||||||
|
void disassembler::GS(const x86_insn *insn) { dis_sprintf("%s", segment_name[GS_REG]); }
|
||||||
|
|
||||||
|
void disassembler::Sw(const x86_insn *insn) { dis_sprintf("%s", segment_name[insn->nnn]); }
|
||||||
|
|
||||||
|
// test registers
|
||||||
|
void disassembler::Td(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("tr%d", insn->nnn);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%tr%d", insn->nnn);
|
||||||
|
}
|
||||||
|
|
||||||
|
// control register
|
||||||
|
void disassembler::Cd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("cr%d", insn->nnn);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%cr%d", insn->nnn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Cq(const x86_insn *insn) { Cd(insn); }
|
||||||
|
|
||||||
|
// debug register
|
||||||
|
void disassembler::Dd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("db%d", insn->nnn);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%db%d", insn->nnn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Dq(const x86_insn *insn) { Dd(insn); }
|
||||||
|
|
||||||
|
// 8-bit general purpose register
|
||||||
|
void disassembler::R8(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
unsigned reg = (insn->b1 & 7) | insn->rex_b;
|
||||||
|
|
||||||
|
if (reg < 4 || insn->extend8b)
|
||||||
|
dis_sprintf("%s", general_8bit_regname_rex[reg]);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s", general_8bit_regname[reg]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 16-bit general purpose register
|
||||||
|
void disassembler::RX(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_16bit_regname[(insn->b1 & 7) | insn->rex_b]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 32-bit general purpose register
|
||||||
|
void disassembler::ERX(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_32bit_regname[(insn->b1 & 7) | insn->rex_b]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 64-bit general purpose register
|
||||||
|
void disassembler::RRX(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_64bit_regname[(insn->b1 & 7) | insn->rex_b]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// general purpose register or memory operand
|
||||||
|
void disassembler::Eb(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3) {
|
||||||
|
if (insn->rm < 4 || insn->extend8b)
|
||||||
|
dis_sprintf("%s", general_8bit_regname_rex[insn->rm]);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s", general_8bit_regname[insn->rm]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, B_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Ew(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
dis_sprintf("%s", general_16bit_regname[insn->rm]);
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, W_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Ed(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
dis_sprintf("%s", general_32bit_regname[insn->rm]);
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, D_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Eq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
dis_sprintf("%s", general_64bit_regname[insn->rm]);
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, Q_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// general purpose register
|
||||||
|
void disassembler::Gb(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->nnn < 4 || insn->extend8b)
|
||||||
|
dis_sprintf("%s", general_8bit_regname_rex[insn->nnn]);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s", general_8bit_regname[insn->nnn]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Gw(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_16bit_regname[insn->nnn]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Gd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_32bit_regname[insn->nnn]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Gq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_64bit_regname[insn->nnn]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// immediate
|
||||||
|
void disassembler::I1(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
dis_putc ('1');
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Ib(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
dis_sprintf("0x%02x", (unsigned) fetch_byte());
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Iw(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
dis_sprintf("0x%04x", (unsigned) fetch_word());
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::IwIb(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
Bit16u iw = fetch_word();
|
||||||
|
Bit8u ib = fetch_byte();
|
||||||
|
|
||||||
|
if (intel_mode) {
|
||||||
|
dis_sprintf("0x%04x, 0x%02x", iw, ib);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dis_sprintf("$0x%02x, $0x%04x", ib, iw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Id(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
dis_sprintf("0x%08x", (unsigned) fetch_dword());
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Iq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
Bit64u value = fetch_qword();
|
||||||
|
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
dis_sprintf("0x%08x%08x",
|
||||||
|
(unsigned)(value>>32), (unsigned)(value & 0xffffffff));
|
||||||
|
}
|
||||||
|
|
||||||
|
// sign extended immediate
|
||||||
|
void disassembler::sIbw(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
Bit16u imm16 = (Bit8s) fetch_byte();
|
||||||
|
dis_sprintf("0x%04x", (unsigned) imm16);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sign extended immediate
|
||||||
|
void disassembler::sIbd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
Bit32u imm32 = (Bit8s) fetch_byte();
|
||||||
|
dis_sprintf ("0x%08x", (unsigned) imm32);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sign extended immediate
|
||||||
|
void disassembler::sIbq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
Bit64u imm64 = (Bit8s) fetch_byte();
|
||||||
|
dis_sprintf ("0x%08x%08x",
|
||||||
|
(unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff));
|
||||||
|
}
|
||||||
|
|
||||||
|
// sign extended immediate
|
||||||
|
void disassembler::sIdq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (! intel_mode) dis_putc('$');
|
||||||
|
Bit64u imm64 = (Bit32s) fetch_dword();
|
||||||
|
dis_sprintf ("0x%08x%08x",
|
||||||
|
(unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff));
|
||||||
|
}
|
||||||
|
|
||||||
|
// floating point
|
||||||
|
void disassembler::ST0(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("st(0)");
|
||||||
|
else
|
||||||
|
dis_sprintf("%%st(0)");
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::STi(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("st(%d)", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%st(%d)", insn->rm);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 16-bit general purpose register
|
||||||
|
void disassembler::Rw(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_16bit_regname[insn->rm]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 32-bit general purpose register
|
||||||
|
void disassembler::Rd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_32bit_regname[insn->rm]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 64-bit general purpose register
|
||||||
|
void disassembler::Rq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s", general_64bit_regname[insn->rm]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// mmx register
|
||||||
|
void disassembler::Pq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("mm%d", insn->nnn);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%mm%d", insn->nnn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Nq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("mm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%mm%d", insn->rm);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Qd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("mm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%mm%d", insn->rm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, D_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Qq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("mm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%mm%d", insn->rm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, Q_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// xmm register
|
||||||
|
void disassembler::Udq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("xmm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%xmm%d", insn->rm);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Vq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("xmm%d", insn->nnn);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%xmm%d", insn->nnn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Vdq(const x86_insn *insn) { Vq(insn); }
|
||||||
|
void disassembler::Vss(const x86_insn *insn) { Vq(insn); }
|
||||||
|
void disassembler::Vsd(const x86_insn *insn) { Vq(insn); }
|
||||||
|
void disassembler::Vps(const x86_insn *insn) { Vq(insn); }
|
||||||
|
void disassembler::Vpd(const x86_insn *insn) { Vq(insn); }
|
||||||
|
|
||||||
|
void disassembler::Wq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("xmm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%xmm%d", insn->rm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, Q_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Wdq(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("xmm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%xmm%d", insn->rm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, O_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Wsd(const x86_insn *insn) { Wq(insn); }
|
||||||
|
|
||||||
|
void disassembler::Wss(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
if (insn->mod == 3)
|
||||||
|
{
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf ("xmm%d", insn->rm);
|
||||||
|
else
|
||||||
|
dis_sprintf("%%xmm%d", insn->rm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, D_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Wpd(const x86_insn *insn) { Wdq(insn); }
|
||||||
|
void disassembler::Wps(const x86_insn *insn) { Wdq(insn); }
|
||||||
|
|
||||||
|
// direct memory access
|
||||||
|
void disassembler::OP_O(const x86_insn *insn, unsigned size)
|
||||||
|
{
|
||||||
|
const char *seg;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = segment_name[DS_REG];
|
||||||
|
|
||||||
|
print_datasize(size);
|
||||||
|
|
||||||
|
if (insn->as_64) {
|
||||||
|
Bit64u imm64 = fetch_qword();
|
||||||
|
dis_sprintf("%s:0x%08x%08x", seg,
|
||||||
|
(unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff));
|
||||||
|
}
|
||||||
|
else if (insn->as_32) {
|
||||||
|
Bit32u imm32 = fetch_dword();
|
||||||
|
dis_sprintf("%s:0x%x", seg, (unsigned) imm32);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Bit16u imm16 = fetch_word();
|
||||||
|
dis_sprintf("%s:0x%x", seg, (unsigned) imm16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Ob(const x86_insn *insn) { OP_O(insn, B_SIZE); }
|
||||||
|
void disassembler::Ow(const x86_insn *insn) { OP_O(insn, W_SIZE); }
|
||||||
|
void disassembler::Od(const x86_insn *insn) { OP_O(insn, D_SIZE); }
|
||||||
|
void disassembler::Oq(const x86_insn *insn) { OP_O(insn, Q_SIZE); }
|
||||||
|
|
||||||
|
// memory operand
|
||||||
|
void disassembler::OP_M(const x86_insn *insn, unsigned size)
|
||||||
|
{
|
||||||
|
if(insn->mod == 3)
|
||||||
|
dis_sprintf("(bad)");
|
||||||
|
else
|
||||||
|
(this->*resolve_modrm)(insn, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Ma(const x86_insn *insn) { OP_M(insn, X_SIZE); }
|
||||||
|
void disassembler::Mp(const x86_insn *insn) { OP_M(insn, X_SIZE); }
|
||||||
|
void disassembler::Ms(const x86_insn *insn) { OP_M(insn, X_SIZE); }
|
||||||
|
void disassembler::Mx(const x86_insn *insn) { OP_M(insn, X_SIZE); }
|
||||||
|
|
||||||
|
void disassembler::Mb(const x86_insn *insn) { OP_M(insn, B_SIZE); }
|
||||||
|
void disassembler::Mw(const x86_insn *insn) { OP_M(insn, W_SIZE); }
|
||||||
|
void disassembler::Md(const x86_insn *insn) { OP_M(insn, D_SIZE); }
|
||||||
|
void disassembler::Mq(const x86_insn *insn) { OP_M(insn, Q_SIZE); }
|
||||||
|
void disassembler::Mt(const x86_insn *insn) { OP_M(insn, T_SIZE); }
|
||||||
|
|
||||||
|
void disassembler::Mdq(const x86_insn *insn) { OP_M(insn, O_SIZE); }
|
||||||
|
void disassembler::Mps(const x86_insn *insn) { OP_M(insn, O_SIZE); }
|
||||||
|
void disassembler::Mpd(const x86_insn *insn) { OP_M(insn, O_SIZE); }
|
||||||
|
|
||||||
|
// string instructions
|
||||||
|
void disassembler::OP_X(const x86_insn *insn, unsigned size)
|
||||||
|
{
|
||||||
|
const char *rsi, *seg;
|
||||||
|
|
||||||
|
if (insn->as_64) {
|
||||||
|
rsi = general_64bit_regname[rSI_REG];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (insn->as_32)
|
||||||
|
rsi = general_32bit_regname[rSI_REG];
|
||||||
|
else
|
||||||
|
rsi = general_16bit_regname[rSI_REG];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = segment_name[DS_REG];
|
||||||
|
|
||||||
|
print_datasize(size);
|
||||||
|
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf("%s:[%s]", seg, rsi);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:(%s)", seg, rsi);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Xb(const x86_insn *insn) { OP_X(insn, B_SIZE); }
|
||||||
|
void disassembler::Xw(const x86_insn *insn) { OP_X(insn, W_SIZE); }
|
||||||
|
void disassembler::Xd(const x86_insn *insn) { OP_X(insn, D_SIZE); }
|
||||||
|
void disassembler::Xq(const x86_insn *insn) { OP_X(insn, Q_SIZE); }
|
||||||
|
|
||||||
|
void disassembler::OP_Y(const x86_insn *insn, unsigned size)
|
||||||
|
{
|
||||||
|
const char *rdi;
|
||||||
|
|
||||||
|
if (insn->as_64) {
|
||||||
|
rdi = general_64bit_regname[rDI_REG];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (insn->as_32)
|
||||||
|
rdi = general_32bit_regname[rDI_REG];
|
||||||
|
else
|
||||||
|
rdi = general_16bit_regname[rDI_REG];
|
||||||
|
}
|
||||||
|
|
||||||
|
print_datasize(size);
|
||||||
|
|
||||||
|
if (intel_mode)
|
||||||
|
dis_sprintf("%s:[%s]", segment_name[ES_REG], rdi);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:(%s)", segment_name[ES_REG], rdi);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Yb(const x86_insn *insn) { OP_Y(insn, B_SIZE); }
|
||||||
|
void disassembler::Yw(const x86_insn *insn) { OP_Y(insn, W_SIZE); }
|
||||||
|
void disassembler::Yd(const x86_insn *insn) { OP_Y(insn, D_SIZE); }
|
||||||
|
void disassembler::Yq(const x86_insn *insn) { OP_Y(insn, Q_SIZE); }
|
||||||
|
|
||||||
|
#define BX_JUMP_TARGET_NOT_REQ ((bx_address)(-1))
|
||||||
|
|
||||||
|
// jump offset
|
||||||
|
void disassembler::Jb(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
Bit8s imm8 = (Bit8s) fetch_byte();
|
||||||
|
|
||||||
|
if (insn->is_64) {
|
||||||
|
Bit64u imm64 = (Bit64s) imm8;
|
||||||
|
dis_sprintf(".+0x%08x%08x",
|
||||||
|
(unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff));
|
||||||
|
|
||||||
|
if (db_base != BX_JUMP_TARGET_NOT_REQ) {
|
||||||
|
Bit64u target = db_eip + (Bit64s) imm64; target += db_base;
|
||||||
|
dis_sprintf(" (0x%08x%08x)",
|
||||||
|
(unsigned)(target>>32), (unsigned)(target & 0xffffffff));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (insn->os_32) {
|
||||||
|
Bit32u imm32 = (Bit32s) imm8;
|
||||||
|
dis_sprintf(".+0x%08x", (unsigned) imm32);
|
||||||
|
|
||||||
|
if (db_base != BX_JUMP_TARGET_NOT_REQ) {
|
||||||
|
Bit32u target = db_eip + (Bit32s) imm32; target += db_base;
|
||||||
|
dis_sprintf(" (0x%08x)", target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Bit16u imm16 = (Bit16s) imm8;
|
||||||
|
dis_sprintf(".+0x%04x", (unsigned) imm16);
|
||||||
|
|
||||||
|
if (db_base != BX_JUMP_TARGET_NOT_REQ) {
|
||||||
|
Bit16u target = (db_eip + (Bit16s) imm16) & 0xffff;
|
||||||
|
dis_sprintf(" (0x%08x)", target + db_base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Jw(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
// Jw supported in 16-bit mode only
|
||||||
|
assert(! insn->is_64);
|
||||||
|
assert(! insn->is_32);
|
||||||
|
|
||||||
|
Bit16u imm16 = (Bit16s) fetch_word();
|
||||||
|
dis_sprintf(".+0x%04x", (unsigned) imm16);
|
||||||
|
|
||||||
|
if (db_base != BX_JUMP_TARGET_NOT_REQ) {
|
||||||
|
Bit16u target = (db_eip + (Bit16s) imm16) & 0xffff;
|
||||||
|
dis_sprintf(" (0x%08x)", target + db_base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::Jd(const x86_insn *insn)
|
||||||
|
{
|
||||||
|
Bit32s imm32 = (Bit32s) fetch_dword();
|
||||||
|
|
||||||
|
if (insn->is_64) {
|
||||||
|
Bit64u imm64 = (Bit64s) imm32;
|
||||||
|
dis_sprintf(".+0x%08x%08x",
|
||||||
|
(unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff));
|
||||||
|
|
||||||
|
if (db_base != BX_JUMP_TARGET_NOT_REQ) {
|
||||||
|
Bit64u target = db_eip + (Bit64s) imm64; target += db_base;
|
||||||
|
dis_sprintf(" (0x%08x%08x)",
|
||||||
|
(unsigned)(target>>32), (unsigned)(target & 0xffffffff));
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dis_sprintf(".+0x%08x", (unsigned) imm32);
|
||||||
|
|
||||||
|
if (db_base != BX_JUMP_TARGET_NOT_REQ) {
|
||||||
|
Bit32u target = db_eip + (Bit32s) imm32; target += db_base;
|
||||||
|
dis_sprintf(" (0x%08x)", target);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,152 @@
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// $Id: dis_tables.h,v 1.29 2006/04/27 15:11:45 sshwarts Exp $
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _BX_DISASM_TABLES_
|
||||||
|
#define _BX_DISASM_TABLES_
|
||||||
|
|
||||||
|
// opcode table attributes
|
||||||
|
#define _GROUPN 1
|
||||||
|
#define _SPLIT11B 2
|
||||||
|
#define _GRPFP 3
|
||||||
|
#define _GRP3DNOW 4
|
||||||
|
#define _GRPSSE 5
|
||||||
|
#define _GRPRM 6
|
||||||
|
#define _GRP3BOP 7
|
||||||
|
#define _GRP3BTAB 8
|
||||||
|
|
||||||
|
/* ************************************************************************ */
|
||||||
|
#define GRPSSE(n) _GRPSSE, BxDisasmGroupSSE_##n
|
||||||
|
#define GRPN(n) _GROUPN, BxDisasmGroup##n
|
||||||
|
#define GRPRM(n) _GRPRM, BxDisasmGroupRm##n
|
||||||
|
#define GRPMOD(n) _SPLIT11B, BxDisasmGroupMod##n
|
||||||
|
#define GRPFP(n) _GRPFP, BxDisasmFPGroup##n
|
||||||
|
#define GRP3DNOW _GRP3DNOW, BxDisasm3DNowGroup
|
||||||
|
#define GR3BOP(n) _GRP3BOP, BxDisasm3ByteOp##n
|
||||||
|
#define GR3BTAB(n) _GRP3BTAB, BxDisasm3ByteTable##n
|
||||||
|
/* ************************************************************************ */
|
||||||
|
|
||||||
|
#define Apw &disassembler::Apw
|
||||||
|
#define Apd &disassembler::Apd
|
||||||
|
|
||||||
|
#define AL &disassembler::AL
|
||||||
|
#define CL &disassembler::CL
|
||||||
|
#define AX &disassembler::AX
|
||||||
|
#define DX &disassembler::DX
|
||||||
|
|
||||||
|
#define EAX &disassembler::EAX
|
||||||
|
#define RAX &disassembler::RAX
|
||||||
|
|
||||||
|
#define CS &disassembler::CS
|
||||||
|
#define DS &disassembler::DS
|
||||||
|
#define ES &disassembler::ES
|
||||||
|
#define SS &disassembler::SS
|
||||||
|
#define FS &disassembler::FS
|
||||||
|
#define GS &disassembler::GS
|
||||||
|
|
||||||
|
#define Sw &disassembler::Sw
|
||||||
|
|
||||||
|
#define Td &disassembler::Td
|
||||||
|
|
||||||
|
#define Cd &disassembler::Cd
|
||||||
|
#define Cq &disassembler::Cq
|
||||||
|
|
||||||
|
#define Dd &disassembler::Dd
|
||||||
|
#define Dq &disassembler::Dq
|
||||||
|
|
||||||
|
#define R8 &disassembler::R8
|
||||||
|
#define RX &disassembler::RX
|
||||||
|
#define ERX &disassembler::ERX
|
||||||
|
#define RRX &disassembler::RRX
|
||||||
|
|
||||||
|
#define Eb &disassembler::Eb
|
||||||
|
#define Ew &disassembler::Ew
|
||||||
|
#define Ed &disassembler::Ed
|
||||||
|
#define Eq &disassembler::Eq
|
||||||
|
|
||||||
|
#define Gb &disassembler::Gb
|
||||||
|
#define Gw &disassembler::Gw
|
||||||
|
#define Gd &disassembler::Gd
|
||||||
|
#define Gq &disassembler::Gq
|
||||||
|
|
||||||
|
#define I1 &disassembler::I1
|
||||||
|
#define Ib &disassembler::Ib
|
||||||
|
#define Iw &disassembler::Iw
|
||||||
|
#define Id &disassembler::Id
|
||||||
|
#define Iq &disassembler::Iq
|
||||||
|
|
||||||
|
#define IwIb &disassembler::IwIb
|
||||||
|
|
||||||
|
#define sIbw &disassembler::sIbw
|
||||||
|
#define sIbd &disassembler::sIbd
|
||||||
|
#define sIbq &disassembler::sIbq
|
||||||
|
#define sIdq &disassembler::sIdq
|
||||||
|
|
||||||
|
#define ST0 &disassembler::ST0
|
||||||
|
#define STi &disassembler::STi
|
||||||
|
|
||||||
|
#define Rw &disassembler::Rw
|
||||||
|
#define Rd &disassembler::Rd
|
||||||
|
#define Rq &disassembler::Rq
|
||||||
|
|
||||||
|
#define Pq &disassembler::Pq
|
||||||
|
#define Qd &disassembler::Qd
|
||||||
|
#define Qq &disassembler::Qq
|
||||||
|
#define Nq &disassembler::Nq
|
||||||
|
|
||||||
|
#define Vq &disassembler::Vq
|
||||||
|
#define Vdq &disassembler::Vdq
|
||||||
|
#define Vss &disassembler::Vss
|
||||||
|
#define Vsd &disassembler::Vsd
|
||||||
|
#define Vps &disassembler::Vps
|
||||||
|
#define Vpd &disassembler::Vpd
|
||||||
|
#define Udq &disassembler::Udq
|
||||||
|
|
||||||
|
#define Wq &disassembler::Wq
|
||||||
|
#define Wdq &disassembler::Wdq
|
||||||
|
#define Wss &disassembler::Wss
|
||||||
|
#define Wsd &disassembler::Wsd
|
||||||
|
#define Wps &disassembler::Wps
|
||||||
|
#define Wpd &disassembler::Wpd
|
||||||
|
|
||||||
|
#define Ob &disassembler::Ob
|
||||||
|
#define Ow &disassembler::Ow
|
||||||
|
#define Od &disassembler::Od
|
||||||
|
#define Oq &disassembler::Oq
|
||||||
|
|
||||||
|
#define Ma &disassembler::Ma
|
||||||
|
#define Mp &disassembler::Mp
|
||||||
|
#define Ms &disassembler::Ms
|
||||||
|
#define Mx &disassembler::Mx
|
||||||
|
#define Mb &disassembler::Mb
|
||||||
|
#define Mw &disassembler::Mw
|
||||||
|
#define Md &disassembler::Md
|
||||||
|
#define Mq &disassembler::Mq
|
||||||
|
#define Mt &disassembler::Mt
|
||||||
|
#define Mdq &disassembler::Mdq
|
||||||
|
#define Mps &disassembler::Mps
|
||||||
|
#define Mpd &disassembler::Mpd
|
||||||
|
|
||||||
|
#define Xb &disassembler::Xb
|
||||||
|
#define Xw &disassembler::Xw
|
||||||
|
#define Xd &disassembler::Xd
|
||||||
|
#define Xq &disassembler::Xq
|
||||||
|
|
||||||
|
#define Yb &disassembler::Yb
|
||||||
|
#define Yw &disassembler::Yw
|
||||||
|
#define Yd &disassembler::Yd
|
||||||
|
#define Yq &disassembler::Yq
|
||||||
|
|
||||||
|
#define Jb &disassembler::Jb
|
||||||
|
#define Jw &disassembler::Jw
|
||||||
|
#define Jd &disassembler::Jd
|
||||||
|
|
||||||
|
#define XX 0
|
||||||
|
|
||||||
|
const struct BxDisasmOpcodeInfo_t
|
||||||
|
#include "opcodes.inl"
|
||||||
|
#include "dis_tables.inl"
|
||||||
|
|
||||||
|
#undef XX
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,508 @@
|
||||||
|
#ifndef _BX_DISASM_H_
|
||||||
|
#define _BX_DISASM_H_
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define BX_DECODE_MODRM(modrm_byte, mod, opcode, rm) { \
|
||||||
|
mod = (modrm_byte >> 6) & 0x03; \
|
||||||
|
opcode = (modrm_byte >> 3) & 0x07; \
|
||||||
|
rm = modrm_byte & 0x07; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BX_DECODE_SIB(sib_byte, scale, index, base) { \
|
||||||
|
scale = sib_byte >> 6; \
|
||||||
|
index = (sib_byte >> 3) & 0x07; \
|
||||||
|
base = sib_byte & 0x07; \
|
||||||
|
}
|
||||||
|
|
||||||
|
// will be used in future
|
||||||
|
#define IA_286 0x00000001 /* 286+ instruction */
|
||||||
|
#define IA_386 0x00000002 /* 386+ instruction */
|
||||||
|
#define IA_486 0x00000004 /* 486+ instruction */
|
||||||
|
#define IA_PENTIUM 0x00000008 /* Pentium+ instruction */
|
||||||
|
#define IA_P6 0x00000010 /* P6 new instruction */
|
||||||
|
#define IA_SYSTEM 0x00000020 /* system instruction (require CPL=0) */
|
||||||
|
#define IA_LEGACY 0x00000040 /* legacy instruction */
|
||||||
|
#define IA_X87 0x00000080 /* FPU (X87) instruction */
|
||||||
|
#define IA_MMX 0x00000100 /* MMX instruction */
|
||||||
|
#define IA_3DNOW 0x00000200 /* 3DNow! instruction */
|
||||||
|
#define IA_PREFETCH 0x00000400 /* Prefetch instruction */
|
||||||
|
#define IA_SSE 0x00000800 /* SSE instruction */
|
||||||
|
#define IA_SSE2 0x00001000 /* SSE2 instruction */
|
||||||
|
#define IA_SSE3 0x00002000 /* SSE3 instruction */
|
||||||
|
#define IA_SSE4 0x00004000 /* SSE4 instruction */
|
||||||
|
#define IA_X86_64 0x00008000 /* x86-64 instruction */
|
||||||
|
|
||||||
|
/* general purpose bit register */
|
||||||
|
enum {
|
||||||
|
rAX_REG,
|
||||||
|
rCX_REG,
|
||||||
|
rDX_REG,
|
||||||
|
rBX_REG,
|
||||||
|
rSP_REG,
|
||||||
|
rBP_REG,
|
||||||
|
rSI_REG,
|
||||||
|
rDI_REG
|
||||||
|
};
|
||||||
|
|
||||||
|
/* segment register */
|
||||||
|
enum {
|
||||||
|
ES_REG,
|
||||||
|
CS_REG,
|
||||||
|
SS_REG,
|
||||||
|
DS_REG,
|
||||||
|
FS_REG,
|
||||||
|
GS_REG,
|
||||||
|
INVALID_SEG1,
|
||||||
|
INVALID_SEG2
|
||||||
|
};
|
||||||
|
|
||||||
|
class disassembler;
|
||||||
|
struct x86_insn;
|
||||||
|
|
||||||
|
typedef void (disassembler::*BxDisasmPtr_t)(const x86_insn *insn);
|
||||||
|
typedef void (disassembler::*BxDisasmResolveModrmPtr_t)(const x86_insn *insn, unsigned attr);
|
||||||
|
|
||||||
|
struct BxDisasmOpcodeInfo_t
|
||||||
|
{
|
||||||
|
const char *IntelOpcode;
|
||||||
|
const char *AttOpcode;
|
||||||
|
BxDisasmPtr_t Operand1;
|
||||||
|
BxDisasmPtr_t Operand2;
|
||||||
|
BxDisasmPtr_t Operand3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BxDisasmOpcodeTable_t
|
||||||
|
{
|
||||||
|
Bit32u Attr;
|
||||||
|
const void *OpcodeInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
// segment override not used
|
||||||
|
#define NO_SEG_OVERRIDE 0xFF
|
||||||
|
|
||||||
|
// datasize attributes
|
||||||
|
#define X_SIZE 0x0000
|
||||||
|
#define B_SIZE 0x0100
|
||||||
|
#define W_SIZE 0x0200
|
||||||
|
#define D_SIZE 0x0300
|
||||||
|
#define Q_SIZE 0x0400
|
||||||
|
#define Z_SIZE 0x0500
|
||||||
|
#define V_SIZE 0x0600
|
||||||
|
#define O_SIZE 0x0700
|
||||||
|
#define T_SIZE 0x0800
|
||||||
|
#define P_SIZE 0x0900
|
||||||
|
|
||||||
|
// branch hint attribute
|
||||||
|
#define BRANCH_HINT 0x1000
|
||||||
|
|
||||||
|
struct x86_insn
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
x86_insn(bx_bool is32, bx_bool is64);
|
||||||
|
|
||||||
|
bx_bool is_seg_override() const {
|
||||||
|
return (seg_override != NO_SEG_OVERRIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
bx_bool is_32, is_64;
|
||||||
|
bx_bool as_32, as_64;
|
||||||
|
bx_bool os_32, os_64;
|
||||||
|
|
||||||
|
Bit8u extend8b;
|
||||||
|
Bit8u rex_r, rex_x, rex_b;
|
||||||
|
Bit8u seg_override;
|
||||||
|
unsigned b1, prefixes;
|
||||||
|
unsigned ilen;
|
||||||
|
|
||||||
|
Bit8u modrm, mod, nnn, rm;
|
||||||
|
Bit8u sib, scale, index, base;
|
||||||
|
union {
|
||||||
|
Bit16u displ16;
|
||||||
|
Bit32u displ32;
|
||||||
|
} displacement;
|
||||||
|
};
|
||||||
|
|
||||||
|
BX_CPP_INLINE x86_insn::x86_insn(bx_bool is32, bx_bool is64)
|
||||||
|
{
|
||||||
|
is_32 = is32;
|
||||||
|
is_64 = is64;
|
||||||
|
|
||||||
|
if (is_64) {
|
||||||
|
os_64 = 0;
|
||||||
|
as_64 = 1;
|
||||||
|
os_32 = 1;
|
||||||
|
as_32 = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
os_64 = 0;
|
||||||
|
as_64 = 0;
|
||||||
|
os_32 = is_32;
|
||||||
|
as_32 = is_32;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend8b = 0;
|
||||||
|
rex_r = rex_b = rex_x = 0;
|
||||||
|
seg_override = NO_SEG_OVERRIDE;
|
||||||
|
prefixes = 0;
|
||||||
|
ilen = 0;
|
||||||
|
b1 = 0;
|
||||||
|
|
||||||
|
modrm = mod = nnn = rm = 0;
|
||||||
|
sib = scale = index = base = 0;
|
||||||
|
displacement.displ32 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
class disassembler {
|
||||||
|
public:
|
||||||
|
disassembler() { set_syntax_intel(); }
|
||||||
|
|
||||||
|
unsigned disasm(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf);
|
||||||
|
|
||||||
|
unsigned disasm16(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{ return disasm(0, 0, base, ip, instr, disbuf); }
|
||||||
|
|
||||||
|
unsigned disasm32(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{ return disasm(1, 0, base, ip, instr, disbuf); }
|
||||||
|
|
||||||
|
unsigned disasm64(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{ return disasm(1, 1, base, ip, instr, disbuf); }
|
||||||
|
|
||||||
|
x86_insn decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf);
|
||||||
|
|
||||||
|
x86_insn decode16(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{ return decode(0, 0, base, ip, instr, disbuf); }
|
||||||
|
|
||||||
|
x86_insn decode32(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{ return decode(1, 0, base, ip, instr, disbuf); }
|
||||||
|
|
||||||
|
x86_insn decode64(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf)
|
||||||
|
{ return decode(1, 1, base, ip, instr, disbuf); }
|
||||||
|
|
||||||
|
void set_syntax_intel();
|
||||||
|
void set_syntax_att ();
|
||||||
|
|
||||||
|
void toggle_syntax_mode();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bx_bool intel_mode;
|
||||||
|
|
||||||
|
const char **general_16bit_regname;
|
||||||
|
const char **general_8bit_regname;
|
||||||
|
const char **general_32bit_regname;
|
||||||
|
const char **general_8bit_regname_rex;
|
||||||
|
const char **general_64bit_regname;
|
||||||
|
|
||||||
|
const char **segment_name;
|
||||||
|
const char **index16;
|
||||||
|
|
||||||
|
const char *sreg_mod01or10_rm32[8];
|
||||||
|
const char *sreg_mod00_base32[8];
|
||||||
|
const char *sreg_mod01or10_base32[8];
|
||||||
|
const char *sreg_mod00_rm16[8];
|
||||||
|
const char *sreg_mod01or10_rm16[8];
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
bx_address db_eip, db_base;
|
||||||
|
|
||||||
|
const Bit8u *instruction; // for fetching of next byte of instruction
|
||||||
|
|
||||||
|
char *disbufptr;
|
||||||
|
|
||||||
|
BxDisasmResolveModrmPtr_t resolve_modrm;
|
||||||
|
|
||||||
|
BX_CPP_INLINE Bit8u fetch_byte() {
|
||||||
|
db_eip++;
|
||||||
|
return(*instruction++);
|
||||||
|
};
|
||||||
|
|
||||||
|
BX_CPP_INLINE Bit8u peek_byte() {
|
||||||
|
return(*instruction);
|
||||||
|
};
|
||||||
|
|
||||||
|
BX_CPP_INLINE Bit16u fetch_word() {
|
||||||
|
Bit8u b0 = * (Bit8u *) instruction++;
|
||||||
|
Bit8u b1 = * (Bit8u *) instruction++;
|
||||||
|
Bit16u ret16 = (b1<<8) | b0;
|
||||||
|
db_eip += 2;
|
||||||
|
return(ret16);
|
||||||
|
};
|
||||||
|
|
||||||
|
BX_CPP_INLINE Bit32u fetch_dword() {
|
||||||
|
Bit8u b0 = * (Bit8u *) instruction++;
|
||||||
|
Bit8u b1 = * (Bit8u *) instruction++;
|
||||||
|
Bit8u b2 = * (Bit8u *) instruction++;
|
||||||
|
Bit8u b3 = * (Bit8u *) instruction++;
|
||||||
|
Bit32u ret32 = (b3<<24) | (b2<<16) | (b1<<8) | b0;
|
||||||
|
db_eip += 4;
|
||||||
|
return(ret32);
|
||||||
|
};
|
||||||
|
|
||||||
|
BX_CPP_INLINE Bit64u fetch_qword() {
|
||||||
|
Bit64u d0 = fetch_dword();
|
||||||
|
Bit64u d1 = fetch_dword();
|
||||||
|
Bit64u ret64 = (d1<<32) | d0;
|
||||||
|
return(ret64);
|
||||||
|
};
|
||||||
|
|
||||||
|
void dis_putc(char symbol);
|
||||||
|
void dis_sprintf(const char *fmt, ...);
|
||||||
|
void decode_modrm(x86_insn *insn);
|
||||||
|
|
||||||
|
void resolve16_mod0 (const x86_insn *insn, unsigned mode);
|
||||||
|
void resolve16_mod1or2(const x86_insn *insn, unsigned mode);
|
||||||
|
|
||||||
|
void resolve32_mod0 (const x86_insn *insn, unsigned mode);
|
||||||
|
void resolve32_mod1or2(const x86_insn *insn, unsigned mode);
|
||||||
|
|
||||||
|
void resolve32_mod0_rm4 (const x86_insn *insn, unsigned mode);
|
||||||
|
void resolve32_mod1or2_rm4(const x86_insn *insn, unsigned mode);
|
||||||
|
|
||||||
|
void resolve64_mod0 (const x86_insn *insn, unsigned mode);
|
||||||
|
void resolve64_mod1or2(const x86_insn *insn, unsigned mode);
|
||||||
|
|
||||||
|
void resolve64_mod0_rm4 (const x86_insn *insn, unsigned mode);
|
||||||
|
void resolve64_mod1or2_rm4(const x86_insn *insn, unsigned mode);
|
||||||
|
|
||||||
|
void initialize_modrm_segregs();
|
||||||
|
|
||||||
|
void print_datasize (unsigned mode);
|
||||||
|
|
||||||
|
void print_memory_access16(int datasize,
|
||||||
|
const char *seg, const char *index, Bit16u disp);
|
||||||
|
void print_memory_access (int datasize,
|
||||||
|
const char *seg, const char *base, const char *index, int scale, Bit32u disp);
|
||||||
|
|
||||||
|
void print_disassembly_intel(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry);
|
||||||
|
void print_disassembly_att (const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Codes for Addressing Method:
|
||||||
|
* ---------------------------
|
||||||
|
* A - Direct address. The instruction has no ModR/M byte; the address
|
||||||
|
* of the operand is encoded in the instruction; and no base register,
|
||||||
|
* index register, or scaling factor can be applied.
|
||||||
|
* C - The reg field of the ModR/M byte selects a control register.
|
||||||
|
* D - The reg field of the ModR/M byte selects a debug register.
|
||||||
|
* E - A ModR/M byte follows the opcode and specifies the operand. The
|
||||||
|
* operand is either a general-purpose register or a memory address.
|
||||||
|
* If it is a memory address, the address is computed from a segment
|
||||||
|
* register and any of the following values: a base register, an
|
||||||
|
* index register, a scaling factor, a displacement.
|
||||||
|
* F - Flags Register.
|
||||||
|
* G - The reg field of the ModR/M byte selects a general register.
|
||||||
|
* I - Immediate data. The operand value is encoded in subsequent bytes of
|
||||||
|
* the instruction.
|
||||||
|
* J - The instruction contains a relative offset to be added to the
|
||||||
|
* instruction pointer register.
|
||||||
|
* M - The ModR/M byte may refer only to memory.
|
||||||
|
* N - The R/M field of the ModR/M byte selects a packed-quadword MMX
|
||||||
|
technology register.
|
||||||
|
* O - The instruction has no ModR/M byte; the offset of the operand is
|
||||||
|
* coded as a word or double word (depending on address size attribute)
|
||||||
|
* in the instruction. No base register, index register, or scaling
|
||||||
|
* factor can be applied.
|
||||||
|
* P - The reg field of the ModR/M byte selects a packed quadword MMX
|
||||||
|
* technology register.
|
||||||
|
* Q - A ModR/M byte follows the opcode and specifies the operand. The
|
||||||
|
* operand is either an MMX technology register or a memory address.
|
||||||
|
* If it is a memory address, the address is computed from a segment
|
||||||
|
* register and any of the following values: a base register, an
|
||||||
|
* index register, a scaling factor, and a displacement.
|
||||||
|
* R - The mod field of the ModR/M byte may refer only to a general register.
|
||||||
|
* S - The reg field of the ModR/M byte selects a segment register.
|
||||||
|
* U - The R/M field of the ModR/M byte selects a 128-bit XMM register.
|
||||||
|
* T - The reg field of the ModR/M byte selects a test register.
|
||||||
|
* V - The reg field of the ModR/M byte selects a 128-bit XMM register.
|
||||||
|
* W - A ModR/M byte follows the opcode and specifies the operand. The
|
||||||
|
* operand is either a 128-bit XMM register or a memory address. If
|
||||||
|
* it is a memory address, the address is computed from a segment
|
||||||
|
* register and any of the following values: a base register, an
|
||||||
|
* index register, a scaling factor, and a displacement.
|
||||||
|
* X - Memory addressed by the DS:rSI register pair.
|
||||||
|
* Y - Memory addressed by the ES:rDI register pair.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Codes for Operand Type:
|
||||||
|
* ----------------------
|
||||||
|
* a - Two one-word operands in memory or two double-word operands in
|
||||||
|
* memory, depending on operand-size attribute (used only by the BOUND
|
||||||
|
* instruction).
|
||||||
|
* b - Byte, regardless of operand-size attribute.
|
||||||
|
* d - Doubleword, regardless of operand-size attribute.
|
||||||
|
* dq - Double-quadword, regardless of operand-size attribute.
|
||||||
|
* p - 32-bit or 48-bit pointer, depending on operand-size attribute.
|
||||||
|
* pd - 128-bit packed double-precision floating-point data.
|
||||||
|
* pi - Quadword MMX technology register (packed integer)
|
||||||
|
* ps - 128-bit packed single-precision floating-point data.
|
||||||
|
* q - Quadword, regardless of operand-size attribute.
|
||||||
|
* s - 6-byte or 10-byte pseudo-descriptor.
|
||||||
|
* si - Doubleword integer register (scalar integer)
|
||||||
|
* ss - Scalar element of a 128-bit packed single-precision floating data.
|
||||||
|
* sd - Scalar element of a 128-bit packed double-precision floating data.
|
||||||
|
* v - Word, doubleword or quadword, depending on operand-size attribute.
|
||||||
|
* w - Word, regardless of operand-size attr.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// far call/jmp
|
||||||
|
void Apw(const x86_insn *insn);
|
||||||
|
void Apd(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 8-bit general purpose registers
|
||||||
|
void AL(const x86_insn *insn);
|
||||||
|
void CL(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 16-bit general purpose registers
|
||||||
|
void AX(const x86_insn *insn);
|
||||||
|
void DX(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 32-bit general purpose registers
|
||||||
|
void EAX(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 64-bit general purpose registers
|
||||||
|
void RAX(const x86_insn *insn);
|
||||||
|
|
||||||
|
// segment registers
|
||||||
|
void CS(const x86_insn *insn);
|
||||||
|
void DS(const x86_insn *insn);
|
||||||
|
void ES(const x86_insn *insn);
|
||||||
|
void SS(const x86_insn *insn);
|
||||||
|
void FS(const x86_insn *insn);
|
||||||
|
void GS(const x86_insn *insn);
|
||||||
|
|
||||||
|
// segment registers
|
||||||
|
void Sw(const x86_insn *insn);
|
||||||
|
|
||||||
|
// test registers
|
||||||
|
void Td(const x86_insn *insn);
|
||||||
|
|
||||||
|
// control register
|
||||||
|
void Cd(const x86_insn *insn);
|
||||||
|
void Cq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// debug register
|
||||||
|
void Dd(const x86_insn *insn);
|
||||||
|
void Dq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 8-bit general purpose register
|
||||||
|
void R8(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 16-bit general purpose register
|
||||||
|
void RX(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 32-bit general purpose register
|
||||||
|
void ERX(const x86_insn *insn);
|
||||||
|
|
||||||
|
// 64-bit general purpose register
|
||||||
|
void RRX(const x86_insn *insn);
|
||||||
|
|
||||||
|
// general purpose register or memory operand
|
||||||
|
void Eb(const x86_insn *insn);
|
||||||
|
void Ew(const x86_insn *insn);
|
||||||
|
void Ed(const x86_insn *insn);
|
||||||
|
void Eq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// general purpose register
|
||||||
|
void Gb(const x86_insn *insn);
|
||||||
|
void Gw(const x86_insn *insn);
|
||||||
|
void Gd(const x86_insn *insn);
|
||||||
|
void Gq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// immediate
|
||||||
|
void I1(const x86_insn *insn);
|
||||||
|
void Ib(const x86_insn *insn);
|
||||||
|
void Iw(const x86_insn *insn);
|
||||||
|
void Id(const x86_insn *insn);
|
||||||
|
void Iq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// two immediates Iw/Ib
|
||||||
|
void IwIb(const x86_insn *insn);
|
||||||
|
|
||||||
|
// sign extended immediate
|
||||||
|
void sIbw(const x86_insn *insn);
|
||||||
|
void sIbd(const x86_insn *insn);
|
||||||
|
void sIbq(const x86_insn *insn);
|
||||||
|
void sIdq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// floating point
|
||||||
|
void ST0(const x86_insn *insn);
|
||||||
|
void STi(const x86_insn *insn);
|
||||||
|
|
||||||
|
// general purpose register
|
||||||
|
void Rw(const x86_insn *insn);
|
||||||
|
void Rd(const x86_insn *insn);
|
||||||
|
void Rq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// mmx register
|
||||||
|
void Pq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// mmx register or memory operand
|
||||||
|
void Qd(const x86_insn *insn);
|
||||||
|
void Qq(const x86_insn *insn);
|
||||||
|
void Vq(const x86_insn *insn);
|
||||||
|
void Nq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// xmm register
|
||||||
|
void Udq(const x86_insn *insn);
|
||||||
|
void Vdq(const x86_insn *insn);
|
||||||
|
void Vss(const x86_insn *insn);
|
||||||
|
void Vsd(const x86_insn *insn);
|
||||||
|
void Vps(const x86_insn *insn);
|
||||||
|
void Vpd(const x86_insn *insn);
|
||||||
|
|
||||||
|
// xmm register or memory operand
|
||||||
|
void Wq(const x86_insn *insn);
|
||||||
|
void Wdq(const x86_insn *insn);
|
||||||
|
void Wss(const x86_insn *insn);
|
||||||
|
void Wsd(const x86_insn *insn);
|
||||||
|
void Wps(const x86_insn *insn);
|
||||||
|
void Wpd(const x86_insn *insn);
|
||||||
|
|
||||||
|
// direct memory access
|
||||||
|
void OP_O(const x86_insn *insn, unsigned size);
|
||||||
|
void Ob(const x86_insn *insn);
|
||||||
|
void Ow(const x86_insn *insn);
|
||||||
|
void Od(const x86_insn *insn);
|
||||||
|
void Oq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// memory operand
|
||||||
|
void OP_M(const x86_insn *insn, unsigned size);
|
||||||
|
void Ma(const x86_insn *insn);
|
||||||
|
void Mp(const x86_insn *insn);
|
||||||
|
void Ms(const x86_insn *insn);
|
||||||
|
void Mx(const x86_insn *insn);
|
||||||
|
void Mb(const x86_insn *insn);
|
||||||
|
void Mw(const x86_insn *insn);
|
||||||
|
void Md(const x86_insn *insn);
|
||||||
|
void Mq(const x86_insn *insn);
|
||||||
|
void Mt(const x86_insn *insn);
|
||||||
|
void Mdq(const x86_insn *insn);
|
||||||
|
void Mps(const x86_insn *insn);
|
||||||
|
void Mpd(const x86_insn *insn);
|
||||||
|
|
||||||
|
// string instructions
|
||||||
|
void OP_X(const x86_insn *insn, unsigned size);
|
||||||
|
void Xb(const x86_insn *insn);
|
||||||
|
void Xw(const x86_insn *insn);
|
||||||
|
void Xd(const x86_insn *insn);
|
||||||
|
void Xq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// string instructions
|
||||||
|
void OP_Y(const x86_insn *insn, unsigned size);
|
||||||
|
void Yb(const x86_insn *insn);
|
||||||
|
void Yw(const x86_insn *insn);
|
||||||
|
void Yd(const x86_insn *insn);
|
||||||
|
void Yq(const x86_insn *insn);
|
||||||
|
|
||||||
|
// jump offset
|
||||||
|
void Jb(const x86_insn *insn);
|
||||||
|
void Jw(const x86_insn *insn);
|
||||||
|
void Jd(const x86_insn *insn);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,460 @@
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// $Id: resolve.cc,v 1.13 2006/08/11 17:22:43 sshwarts Exp $
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include "disasm.h"
|
||||||
|
|
||||||
|
void disassembler::decode_modrm(x86_insn *insn)
|
||||||
|
{
|
||||||
|
insn->modrm = fetch_byte();
|
||||||
|
BX_DECODE_MODRM(insn->modrm, insn->mod, insn->nnn, insn->rm);
|
||||||
|
// MOVs with CRx and DRx always use register ops and ignore the mod field.
|
||||||
|
if ((insn->b1 & ~3) == 0x120) insn->mod = 3;
|
||||||
|
insn->nnn |= insn->rex_r;
|
||||||
|
|
||||||
|
if (insn->mod == 3) {
|
||||||
|
/* mod, reg, reg */
|
||||||
|
insn->rm |= insn->rex_b;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (insn->as_64)
|
||||||
|
{
|
||||||
|
if (insn->rm != 4) { /* rm != 100b, no s-i-b byte */
|
||||||
|
insn->rm |= insn->rex_b;
|
||||||
|
// one byte modrm
|
||||||
|
switch (insn->mod) {
|
||||||
|
case 0:
|
||||||
|
resolve_modrm = &disassembler::resolve64_mod0;
|
||||||
|
if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* reg, 8-bit displacement, sign extend */
|
||||||
|
resolve_modrm = &disassembler::resolve64_mod1or2;
|
||||||
|
insn->displacement.displ32 = (Bit8s) fetch_byte();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
/* reg, 32-bit displacement */
|
||||||
|
resolve_modrm = &disassembler::resolve64_mod1or2;
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
} /* switch (mod) */
|
||||||
|
} /* if (rm != 4) */
|
||||||
|
else { /* rm == 4, s-i-b byte follows */
|
||||||
|
insn->sib = fetch_byte();
|
||||||
|
BX_DECODE_SIB(insn->sib, insn->scale, insn->index, insn->base);
|
||||||
|
insn->base |= insn->rex_b;
|
||||||
|
insn->index |= insn->rex_x;
|
||||||
|
|
||||||
|
switch (insn->mod) {
|
||||||
|
case 0:
|
||||||
|
resolve_modrm = &disassembler::resolve64_mod0_rm4;
|
||||||
|
if ((insn->base & 7) == 5)
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
resolve_modrm = &disassembler::resolve64_mod1or2_rm4;
|
||||||
|
insn->displacement.displ32 = (Bit8s) fetch_byte();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
resolve_modrm = &disassembler::resolve64_mod1or2_rm4;
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} /* s-i-b byte follows */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (insn->as_32)
|
||||||
|
{
|
||||||
|
if (insn->rm != 4) { /* rm != 100b, no s-i-b byte */
|
||||||
|
insn->rm |= insn->rex_b;
|
||||||
|
// one byte modrm
|
||||||
|
switch (insn->mod) {
|
||||||
|
case 0:
|
||||||
|
resolve_modrm = &disassembler::resolve32_mod0;
|
||||||
|
if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* reg, 8-bit displacement, sign extend */
|
||||||
|
resolve_modrm = &disassembler::resolve32_mod1or2;
|
||||||
|
insn->displacement.displ32 = (Bit8s) fetch_byte();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
/* reg, 32-bit displacement */
|
||||||
|
resolve_modrm = &disassembler::resolve32_mod1or2;
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
} /* switch (mod) */
|
||||||
|
} /* if (rm != 4) */
|
||||||
|
else { /* rm == 4, s-i-b byte follows */
|
||||||
|
insn->sib = fetch_byte();
|
||||||
|
BX_DECODE_SIB(insn->sib, insn->scale, insn->index, insn->base);
|
||||||
|
insn->base |= insn->rex_b;
|
||||||
|
insn->index |= insn->rex_x;
|
||||||
|
|
||||||
|
switch (insn->mod) {
|
||||||
|
case 0:
|
||||||
|
resolve_modrm = &disassembler::resolve32_mod0_rm4;
|
||||||
|
if ((insn->base & 7) == 5)
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
resolve_modrm = &disassembler::resolve32_mod1or2_rm4;
|
||||||
|
insn->displacement.displ32 = (Bit8s) fetch_byte();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
resolve_modrm = &disassembler::resolve32_mod1or2_rm4;
|
||||||
|
insn->displacement.displ32 = fetch_dword();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} /* s-i-b byte follows */
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert(insn->rex_b == 0);
|
||||||
|
assert(insn->rex_x == 0);
|
||||||
|
assert(insn->rex_r == 0);
|
||||||
|
/* 16 bit addressing modes. */
|
||||||
|
switch (insn->mod) {
|
||||||
|
case 0:
|
||||||
|
resolve_modrm = &disassembler::resolve16_mod0;
|
||||||
|
if(insn->rm == 6)
|
||||||
|
insn->displacement.displ16 = fetch_word();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* reg, 8-bit displacement, sign extend */
|
||||||
|
resolve_modrm = &disassembler::resolve16_mod1or2;
|
||||||
|
insn->displacement.displ16 = (Bit8s) fetch_byte();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
resolve_modrm = &disassembler::resolve16_mod1or2;
|
||||||
|
insn->displacement.displ16 = fetch_word();
|
||||||
|
break;
|
||||||
|
} /* switch (mod) ... */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve16_mod0(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod00_rm16[insn->rm];
|
||||||
|
|
||||||
|
if(insn->rm == 6)
|
||||||
|
print_memory_access16(mode, seg, NULL, insn->displacement.displ16);
|
||||||
|
else
|
||||||
|
print_memory_access16(mode, seg, index16[insn->rm], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve16_mod1or2(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod01or10_rm16[insn->rm];
|
||||||
|
|
||||||
|
print_memory_access16(mode, seg, index16[insn->rm], insn->displacement.displ16);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve32_mod0(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = segment_name[DS_REG];
|
||||||
|
|
||||||
|
if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */
|
||||||
|
print_memory_access(mode, seg, NULL, NULL, 0, insn->displacement.displ32);
|
||||||
|
else
|
||||||
|
print_memory_access(mode, seg, general_32bit_regname[insn->rm], NULL, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve32_mod1or2(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod01or10_rm32[insn->rm];
|
||||||
|
|
||||||
|
print_memory_access(mode, seg,
|
||||||
|
general_32bit_regname[insn->rm], NULL, 0, insn->displacement.displ32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve32_mod0_rm4(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg, *base = NULL, *index = NULL;
|
||||||
|
Bit32u disp32 = 0;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod00_base32[insn->base];
|
||||||
|
|
||||||
|
if ((insn->base & 7) != 5)
|
||||||
|
base = general_32bit_regname[insn->base];
|
||||||
|
else
|
||||||
|
disp32 = insn->displacement.displ32;
|
||||||
|
|
||||||
|
if (insn->index != 4)
|
||||||
|
index = general_32bit_regname[insn->index];
|
||||||
|
|
||||||
|
print_memory_access(mode, seg, base, index, insn->scale, disp32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve32_mod1or2_rm4(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg, *index = NULL;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod01or10_base32[insn->base];
|
||||||
|
|
||||||
|
if (insn->index != 4)
|
||||||
|
index = general_32bit_regname[insn->index];
|
||||||
|
|
||||||
|
print_memory_access(mode, seg,
|
||||||
|
general_32bit_regname[insn->base], index, insn->scale, insn->displacement.displ32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve64_mod0(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg, *rip_regname;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = segment_name[DS_REG];
|
||||||
|
|
||||||
|
if (intel_mode) rip_regname = "rip";
|
||||||
|
else rip_regname = "%rip";
|
||||||
|
|
||||||
|
if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */
|
||||||
|
print_memory_access(mode, seg, rip_regname, NULL, 0, insn->displacement.displ32);
|
||||||
|
else
|
||||||
|
print_memory_access(mode, seg, general_64bit_regname[insn->rm], NULL, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve64_mod1or2(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod01or10_rm32[insn->rm];
|
||||||
|
|
||||||
|
print_memory_access(mode, seg,
|
||||||
|
general_64bit_regname[insn->rm], NULL, 0, insn->displacement.displ32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve64_mod0_rm4(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg, *base = NULL, *index = NULL;
|
||||||
|
Bit32u disp32 = 0;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod00_base32[insn->base];
|
||||||
|
|
||||||
|
if ((insn->base & 7) != 5)
|
||||||
|
base = general_64bit_regname[insn->base];
|
||||||
|
else
|
||||||
|
disp32 = insn->displacement.displ32;
|
||||||
|
|
||||||
|
if (insn->index != 4)
|
||||||
|
index = general_64bit_regname[insn->index];
|
||||||
|
|
||||||
|
print_memory_access(mode, seg, base, index, insn->scale, disp32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::resolve64_mod1or2_rm4(const x86_insn *insn, unsigned mode)
|
||||||
|
{
|
||||||
|
const char *seg, *index = NULL;
|
||||||
|
|
||||||
|
if (insn->is_seg_override())
|
||||||
|
seg = segment_name[insn->seg_override];
|
||||||
|
else
|
||||||
|
seg = sreg_mod01or10_base32[insn->base];
|
||||||
|
|
||||||
|
if (insn->index != 4)
|
||||||
|
index = general_64bit_regname[insn->index];
|
||||||
|
|
||||||
|
print_memory_access(mode, seg,
|
||||||
|
general_64bit_regname[insn->base], index, insn->scale, insn->displacement.displ32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::print_datasize(unsigned size)
|
||||||
|
{
|
||||||
|
if (!intel_mode) return;
|
||||||
|
|
||||||
|
switch(size)
|
||||||
|
{
|
||||||
|
case B_SIZE:
|
||||||
|
dis_sprintf("byte ptr ");
|
||||||
|
break;
|
||||||
|
case W_SIZE:
|
||||||
|
dis_sprintf("word ptr ");
|
||||||
|
break;
|
||||||
|
case D_SIZE:
|
||||||
|
dis_sprintf("dword ptr ");
|
||||||
|
break;
|
||||||
|
case Q_SIZE:
|
||||||
|
dis_sprintf("qword ptr ");
|
||||||
|
break;
|
||||||
|
case O_SIZE:
|
||||||
|
dis_sprintf("dqword ptr ");
|
||||||
|
break;
|
||||||
|
case T_SIZE:
|
||||||
|
dis_sprintf("tbyte ptr ");
|
||||||
|
break;
|
||||||
|
case P_SIZE:
|
||||||
|
break;
|
||||||
|
case X_SIZE:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::print_memory_access16(int datasize,
|
||||||
|
const char *seg, const char *index, Bit16u disp)
|
||||||
|
{
|
||||||
|
print_datasize(datasize);
|
||||||
|
|
||||||
|
if (intel_mode)
|
||||||
|
{
|
||||||
|
if (index == NULL)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s:0x%x", seg, (unsigned) disp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:[%s+0x%x]", seg, index, (unsigned) disp);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:[%s]", seg, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (index == NULL)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s:0x%x", seg, (unsigned) disp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:0x%x(%s,1)", seg, (unsigned) disp, index);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:(%s,1)", seg, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::print_memory_access(int datasize,
|
||||||
|
const char *seg, const char *base, const char *index, int scale, Bit32u disp)
|
||||||
|
{
|
||||||
|
print_datasize(datasize);
|
||||||
|
|
||||||
|
if (intel_mode)
|
||||||
|
{
|
||||||
|
if (base == NULL)
|
||||||
|
{
|
||||||
|
if (index == NULL)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s:0x%x", seg, (unsigned) disp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (scale != 0)
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:[%s*%d+0x%x]", seg, index, 1<<scale, (unsigned) disp);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:[%s*%d]", seg, index, 1<<scale);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:[%s+0x%x]", seg, index, (unsigned) disp);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:[%s]", seg, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (index == NULL)
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:[%s+0x%x]", seg, base, (unsigned) disp);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:[%s]", seg, base);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (scale != 0)
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:[%s+%s*%d+0x%x]", seg, base, index, 1<<scale, (unsigned) disp);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:[%s+%s*%d]", seg, base, index, 1<<scale);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:[%s+%s+0x%x]", seg, base, index, (unsigned) disp);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:[%s+%s]", seg, base, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (base == NULL)
|
||||||
|
{
|
||||||
|
if (index == NULL)
|
||||||
|
{
|
||||||
|
dis_sprintf("%s:0x%x", seg, (unsigned) disp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:0x%x(,%s,%d)", seg, (unsigned) disp, index, 1<<scale);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:(,%s,%d)", seg, index, 1<<scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (index == NULL)
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:0x%x(%s)", seg, (unsigned) disp, base);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:(%s)", seg, base);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (disp != 0)
|
||||||
|
dis_sprintf("%s:0x%x(%s,%s,%d)", seg, (unsigned) disp, base, index, 1<<scale);
|
||||||
|
else
|
||||||
|
dis_sprintf("%s:(%s,%s,%d)", seg, base, index, 1<<scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
// stdafx.cpp : source file that includes just the standard includes
|
||||||
|
// Bochs_disasm.pch will be the pre-compiled header
|
||||||
|
// stdafx.obj will contain the pre-compiled type information
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
// TODO: reference any additional headers you need in STDAFX.H
|
||||||
|
// and not in this file
|
|
@ -0,0 +1,18 @@
|
||||||
|
// stdafx.h : include file for standard system include files,
|
||||||
|
// or project specific include files that are used frequently, but
|
||||||
|
// are changed infrequently
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: reference additional headers your program requires here
|
|
@ -0,0 +1,254 @@
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// $Id: syntax.cc,v 1.10 2006/04/27 15:11:45 sshwarts Exp $
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "disasm.h"
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Intel STYLE
|
||||||
|
//////////////////
|
||||||
|
|
||||||
|
#define BX_DISASM_SUPPORT_X86_64
|
||||||
|
|
||||||
|
#ifdef BX_DISASM_SUPPORT_X86_64
|
||||||
|
|
||||||
|
static const char *intel_general_16bit_regname[16] = {
|
||||||
|
"ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
|
||||||
|
"r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *intel_general_32bit_regname[16] = {
|
||||||
|
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
|
||||||
|
"r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *intel_general_64bit_regname[16] = {
|
||||||
|
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
|
||||||
|
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *intel_general_8bit_regname_rex[16] = {
|
||||||
|
"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
|
||||||
|
"r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static const char *intel_general_16bit_regname[8] = {
|
||||||
|
"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *intel_general_32bit_regname[8] = {
|
||||||
|
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const char *intel_general_8bit_regname[8] = {
|
||||||
|
"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *intel_segment_name[8] = {
|
||||||
|
"es", "cs", "ss", "ds", "fs", "gs", "??", "??"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *intel_index16[8] = {
|
||||||
|
"bx+si",
|
||||||
|
"bx+di",
|
||||||
|
"bp+si",
|
||||||
|
"bp+di",
|
||||||
|
"si",
|
||||||
|
"di",
|
||||||
|
"bp",
|
||||||
|
"bx"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// AT&T STYLE
|
||||||
|
//////////////////
|
||||||
|
|
||||||
|
#ifdef BX_DISASM_SUPPORT_X86_64
|
||||||
|
|
||||||
|
static const char *att_general_16bit_regname[16] = {
|
||||||
|
"%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
|
||||||
|
"%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *att_general_32bit_regname[16] = {
|
||||||
|
"%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
|
||||||
|
"%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *att_general_64bit_regname[16] = {
|
||||||
|
"%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
|
||||||
|
"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *att_general_8bit_regname_rex[16] = {
|
||||||
|
"%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
|
||||||
|
"%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static const char *att_general_16bit_regname[8] = {
|
||||||
|
"%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *att_general_32bit_regname[8] = {
|
||||||
|
"%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi"
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const char *att_general_8bit_regname[8] = {
|
||||||
|
"%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *att_segment_name[8] = {
|
||||||
|
"%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%??", "%??"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *att_index16[8] = {
|
||||||
|
"%bx, %si",
|
||||||
|
"%bx, %di",
|
||||||
|
"%bp, %si",
|
||||||
|
"%bp, %di",
|
||||||
|
"%si",
|
||||||
|
"%di",
|
||||||
|
"%bp",
|
||||||
|
"%bx"
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NULL_SEGMENT_REGISTER 7
|
||||||
|
|
||||||
|
void disassembler::initialize_modrm_segregs()
|
||||||
|
{
|
||||||
|
sreg_mod00_rm16[0] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_rm16[1] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_rm16[2] = segment_name[SS_REG];
|
||||||
|
sreg_mod00_rm16[3] = segment_name[SS_REG];
|
||||||
|
sreg_mod00_rm16[4] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_rm16[5] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_rm16[6] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_rm16[7] = segment_name[DS_REG];
|
||||||
|
|
||||||
|
sreg_mod01or10_rm16[0] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm16[1] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm16[2] = segment_name[SS_REG];
|
||||||
|
sreg_mod01or10_rm16[3] = segment_name[SS_REG];
|
||||||
|
sreg_mod01or10_rm16[4] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm16[5] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm16[6] = segment_name[SS_REG];
|
||||||
|
sreg_mod01or10_rm16[7] = segment_name[DS_REG];
|
||||||
|
|
||||||
|
sreg_mod01or10_rm32[0] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm32[1] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm32[2] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm32[3] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm32[4] = segment_name[NULL_SEGMENT_REGISTER];
|
||||||
|
sreg_mod01or10_rm32[5] = segment_name[SS_REG];
|
||||||
|
sreg_mod01or10_rm32[6] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_rm32[7] = segment_name[DS_REG];
|
||||||
|
|
||||||
|
sreg_mod00_base32[0] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_base32[1] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_base32[2] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_base32[3] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_base32[4] = segment_name[SS_REG];
|
||||||
|
sreg_mod00_base32[5] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_base32[6] = segment_name[DS_REG];
|
||||||
|
sreg_mod00_base32[7] = segment_name[DS_REG];
|
||||||
|
|
||||||
|
sreg_mod01or10_base32[0] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_base32[1] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_base32[2] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_base32[3] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_base32[4] = segment_name[SS_REG];
|
||||||
|
sreg_mod01or10_base32[5] = segment_name[SS_REG];
|
||||||
|
sreg_mod01or10_base32[6] = segment_name[DS_REG];
|
||||||
|
sreg_mod01or10_base32[7] = segment_name[DS_REG];
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Intel STYLE
|
||||||
|
//////////////////
|
||||||
|
|
||||||
|
void disassembler::set_syntax_intel()
|
||||||
|
{
|
||||||
|
intel_mode = 1;
|
||||||
|
|
||||||
|
general_16bit_regname = intel_general_16bit_regname;
|
||||||
|
general_8bit_regname = intel_general_8bit_regname;
|
||||||
|
general_32bit_regname = intel_general_32bit_regname;
|
||||||
|
general_8bit_regname_rex = intel_general_8bit_regname_rex;
|
||||||
|
general_64bit_regname = intel_general_64bit_regname;
|
||||||
|
|
||||||
|
segment_name = intel_segment_name;
|
||||||
|
index16 = intel_index16;
|
||||||
|
|
||||||
|
initialize_modrm_segregs();
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::print_disassembly_intel(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry)
|
||||||
|
{
|
||||||
|
// print opcode
|
||||||
|
dis_sprintf("%s ", entry->IntelOpcode);
|
||||||
|
|
||||||
|
if (entry->Operand1) {
|
||||||
|
(this->*entry->Operand1)(insn);
|
||||||
|
}
|
||||||
|
if (entry->Operand2) {
|
||||||
|
dis_sprintf(", ");
|
||||||
|
(this->*entry->Operand2)(insn);
|
||||||
|
}
|
||||||
|
if (entry->Operand3) {
|
||||||
|
dis_sprintf(", ");
|
||||||
|
(this->*entry->Operand3)(insn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// AT&T STYLE
|
||||||
|
//////////////////
|
||||||
|
|
||||||
|
void disassembler::set_syntax_att()
|
||||||
|
{
|
||||||
|
intel_mode = 0;
|
||||||
|
|
||||||
|
general_16bit_regname = att_general_16bit_regname;
|
||||||
|
general_8bit_regname = att_general_8bit_regname;
|
||||||
|
general_32bit_regname = att_general_32bit_regname;
|
||||||
|
general_8bit_regname_rex = att_general_8bit_regname_rex;
|
||||||
|
general_64bit_regname = att_general_64bit_regname;
|
||||||
|
|
||||||
|
segment_name = att_segment_name;
|
||||||
|
index16 = att_index16;
|
||||||
|
|
||||||
|
initialize_modrm_segregs();
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::toggle_syntax_mode()
|
||||||
|
{
|
||||||
|
if (intel_mode) set_syntax_att();
|
||||||
|
else set_syntax_intel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void disassembler::print_disassembly_att(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry)
|
||||||
|
{
|
||||||
|
// print opcode
|
||||||
|
dis_sprintf("%s ", entry->AttOpcode);
|
||||||
|
|
||||||
|
if (entry->Operand3) {
|
||||||
|
(this->*entry->Operand3)(insn);
|
||||||
|
dis_sprintf(", ");
|
||||||
|
}
|
||||||
|
if (entry->Operand2) {
|
||||||
|
(this->*entry->Operand2)(insn);
|
||||||
|
dis_sprintf(", ");
|
||||||
|
}
|
||||||
|
if (entry->Operand1) {
|
||||||
|
(this->*entry->Operand1)(insn);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,705 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _cg_h
|
||||||
|
#define _cg_h
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/*** CG Run-Time Library API ***/
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
#define CG_VERSION_NUM 2000
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# ifndef APIENTRY /* From Win32's <windef.h> */
|
||||||
|
# define CG_APIENTRY_DEFINED
|
||||||
|
# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__)
|
||||||
|
# define APIENTRY __stdcall
|
||||||
|
# else
|
||||||
|
# define APIENTRY
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# ifndef WINGDIAPI /* From Win32's <wingdi.h> and <winnt.h> */
|
||||||
|
# define CG_WINGDIAPI_DEFINED
|
||||||
|
# define WINGDIAPI __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
/* Set up for either Win32 import/export/lib. */
|
||||||
|
#ifndef CG_API
|
||||||
|
# ifdef _WIN32
|
||||||
|
# ifdef CG_EXPORTS
|
||||||
|
# define CG_API __declspec(dllexport)
|
||||||
|
# elif defined (CG_LIB)
|
||||||
|
# define CG_API
|
||||||
|
# else
|
||||||
|
# define CG_API __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define CG_API
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CGENTRY
|
||||||
|
# ifdef _WIN32
|
||||||
|
# define CGENTRY __cdecl
|
||||||
|
# else
|
||||||
|
# define CGENTRY
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/*** Data types and enumerants ***/
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
typedef int CGbool;
|
||||||
|
|
||||||
|
#define CG_FALSE ((CGbool)0)
|
||||||
|
#define CG_TRUE ((CGbool)1)
|
||||||
|
|
||||||
|
typedef struct _CGcontext *CGcontext;
|
||||||
|
typedef struct _CGprogram *CGprogram;
|
||||||
|
typedef struct _CGparameter *CGparameter;
|
||||||
|
typedef struct _CGobj *CGobj;
|
||||||
|
typedef struct _CGbuffer *CGbuffer;
|
||||||
|
typedef struct _CGeffect *CGeffect;
|
||||||
|
typedef struct _CGtechnique *CGtechnique;
|
||||||
|
typedef struct _CGpass *CGpass;
|
||||||
|
typedef struct _CGstate *CGstate;
|
||||||
|
typedef struct _CGstateassignment *CGstateassignment;
|
||||||
|
typedef struct _CGannotation *CGannotation;
|
||||||
|
typedef void *CGhandle;
|
||||||
|
|
||||||
|
|
||||||
|
//!!! PREPROCESS BEGIN
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_UNKNOWN_TYPE,
|
||||||
|
CG_STRUCT,
|
||||||
|
CG_ARRAY,
|
||||||
|
CG_TYPELESS_STRUCT,
|
||||||
|
|
||||||
|
CG_TYPE_START_ENUM = 1024,
|
||||||
|
# define CG_DATATYPE_MACRO(name, compiler_name, enum_name, base_name, ncols, nrows, pc) \
|
||||||
|
enum_name ,
|
||||||
|
|
||||||
|
#include <Cg/cg_datatypes.h>
|
||||||
|
|
||||||
|
# undef CG_DATATYPE_MACRO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} CGtype;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
# define CG_BINDLOCATION_MACRO(name,enum_name,compiler_name,\
|
||||||
|
enum_int,addressable,param_type) \
|
||||||
|
enum_name = enum_int,
|
||||||
|
|
||||||
|
#include <Cg/cg_bindlocations.h>
|
||||||
|
|
||||||
|
CG_UNDEFINED = 3256,
|
||||||
|
|
||||||
|
} CGresource;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_PROFILE_START = 6144,
|
||||||
|
CG_PROFILE_UNKNOWN,
|
||||||
|
|
||||||
|
# define CG_PROFILE_MACRO(name, compiler_id, compiler_id_caps, compiler_opt,int_id,vertex_profile) \
|
||||||
|
CG_PROFILE_##compiler_id_caps = int_id,
|
||||||
|
|
||||||
|
#include <Cg/cg_profiles.h>
|
||||||
|
|
||||||
|
CG_PROFILE_MAX = 7100,
|
||||||
|
} CGprofile;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
# define CG_ERROR_MACRO(code, enum_name, message) \
|
||||||
|
enum_name = code,
|
||||||
|
# include <Cg/cg_errors.h>
|
||||||
|
} CGerror;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
# define CG_ENUM_MACRO(enum_name, enum_val) \
|
||||||
|
enum_name = enum_val,
|
||||||
|
# include <Cg/cg_enums.h>
|
||||||
|
} CGenum;
|
||||||
|
|
||||||
|
//!!! PREPROCESS END
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_PARAMETERCLASS_UNKNOWN = 0,
|
||||||
|
CG_PARAMETERCLASS_SCALAR,
|
||||||
|
CG_PARAMETERCLASS_VECTOR,
|
||||||
|
CG_PARAMETERCLASS_MATRIX,
|
||||||
|
CG_PARAMETERCLASS_STRUCT,
|
||||||
|
CG_PARAMETERCLASS_ARRAY,
|
||||||
|
CG_PARAMETERCLASS_SAMPLER,
|
||||||
|
CG_PARAMETERCLASS_OBJECT
|
||||||
|
} CGparameterclass;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_UNKNOWN_DOMAIN = 0,
|
||||||
|
CG_FIRST_DOMAIN = 1,
|
||||||
|
CG_VERTEX_DOMAIN = 1,
|
||||||
|
CG_FRAGMENT_DOMAIN,
|
||||||
|
CG_GEOMETRY_DOMAIN,
|
||||||
|
CG_NUMBER_OF_DOMAINS
|
||||||
|
} CGdomain;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_MAP_READ = 0,
|
||||||
|
CG_MAP_WRITE,
|
||||||
|
CG_MAP_READ_WRITE,
|
||||||
|
CG_MAP_WRITE_DISCARD,
|
||||||
|
CG_MAP_WRITE_NO_OVERWRITE
|
||||||
|
} CGbufferaccess;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_BUFFER_USAGE_STREAM_DRAW = 0,
|
||||||
|
CG_BUFFER_USAGE_STREAM_READ,
|
||||||
|
CG_BUFFER_USAGE_STREAM_COPY,
|
||||||
|
CG_BUFFER_USAGE_STATIC_DRAW,
|
||||||
|
CG_BUFFER_USAGE_STATIC_READ,
|
||||||
|
CG_BUFFER_USAGE_STATIC_COPY,
|
||||||
|
CG_BUFFER_USAGE_DYNAMIC_DRAW,
|
||||||
|
CG_BUFFER_USAGE_DYNAMIC_READ,
|
||||||
|
CG_BUFFER_USAGE_DYNAMIC_COPY
|
||||||
|
} CGbufferusage;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef CGbool (CGENTRY * CGstatecallback)(CGstateassignment);
|
||||||
|
typedef void (CGENTRY * CGerrorCallbackFunc)(void);
|
||||||
|
typedef void (CGENTRY * CGerrorHandlerFunc)(CGcontext ctx, CGerror err, void *data);
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/*** Functions ***/
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CG_EXPLICIT
|
||||||
|
|
||||||
|
/*** Library policy functions ***/
|
||||||
|
|
||||||
|
CG_API CGenum CGENTRY cgSetLockingPolicy(CGenum lockingPolicy);
|
||||||
|
CG_API CGenum CGENTRY cgGetLockingPolicy(void);
|
||||||
|
CG_API CGenum CGENTRY cgSetSemanticCasePolicy(CGenum casePolicy);
|
||||||
|
CG_API CGenum CGENTRY cgGetSemanticCasePolicy(void);
|
||||||
|
|
||||||
|
/*** Context functions ***/
|
||||||
|
|
||||||
|
CG_API CGcontext CGENTRY cgCreateContext(void);
|
||||||
|
CG_API void CGENTRY cgDestroyContext(CGcontext ctx);
|
||||||
|
CG_API CGbool CGENTRY cgIsContext(CGcontext ctx);
|
||||||
|
CG_API const char * CGENTRY cgGetLastListing(CGcontext ctx);
|
||||||
|
CG_API void CGENTRY cgSetLastListing(CGhandle handle, const char *listing);
|
||||||
|
CG_API void CGENTRY cgSetAutoCompile(CGcontext ctx, CGenum flag);
|
||||||
|
CG_API CGenum CGENTRY cgGetAutoCompile(CGcontext ctx);
|
||||||
|
CG_API void CGENTRY cgSetParameterSettingMode(CGcontext ctx, CGenum parameterSettingMode);
|
||||||
|
CG_API CGenum CGENTRY cgGetParameterSettingMode(CGcontext ctx);
|
||||||
|
|
||||||
|
/*** Program functions ***/
|
||||||
|
|
||||||
|
CG_API CGprogram CGENTRY cgCreateProgram(CGcontext ctx,
|
||||||
|
CGenum program_type,
|
||||||
|
const char *program,
|
||||||
|
CGprofile profile,
|
||||||
|
const char *entry,
|
||||||
|
const char **args);
|
||||||
|
CG_API CGprogram CGENTRY cgCreateProgramFromFile(CGcontext ctx,
|
||||||
|
CGenum program_type,
|
||||||
|
const char *program_file,
|
||||||
|
CGprofile profile,
|
||||||
|
const char *entry,
|
||||||
|
const char **args);
|
||||||
|
CG_API CGprogram CGENTRY cgCopyProgram(CGprogram program);
|
||||||
|
CG_API void CGENTRY cgDestroyProgram(CGprogram program);
|
||||||
|
|
||||||
|
CG_API CGprogram CGENTRY cgGetFirstProgram(CGcontext ctx);
|
||||||
|
CG_API CGprogram CGENTRY cgGetNextProgram(CGprogram current);
|
||||||
|
CG_API CGcontext CGENTRY cgGetProgramContext(CGprogram prog);
|
||||||
|
CG_API CGbool CGENTRY cgIsProgram(CGprogram program);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgCompileProgram(CGprogram program);
|
||||||
|
CG_API CGbool CGENTRY cgIsProgramCompiled(CGprogram program);
|
||||||
|
CG_API const char * CGENTRY cgGetProgramString(CGprogram prog, CGenum pname);
|
||||||
|
CG_API CGprofile CGENTRY cgGetProgramProfile(CGprogram prog);
|
||||||
|
CG_API char const * const * CGENTRY cgGetProgramOptions(CGprogram prog);
|
||||||
|
CG_API void CGENTRY cgSetProgramProfile(CGprogram prog, CGprofile profile);
|
||||||
|
CG_API CGenum CGENTRY cgGetProgramInput(CGprogram program);
|
||||||
|
CG_API CGenum CGENTRY cgGetProgramOutput(CGprogram program);
|
||||||
|
CG_API void CGENTRY cgSetPassProgramParameters(CGprogram);
|
||||||
|
CG_API void CGENTRY cgUpdateProgramParameters(CGprogram program);
|
||||||
|
|
||||||
|
/*** Parameter functions ***/
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgCreateParameter(CGcontext ctx, CGtype type);
|
||||||
|
CG_API CGparameter CGENTRY cgCreateParameterArray(CGcontext ctx,
|
||||||
|
CGtype type,
|
||||||
|
int length);
|
||||||
|
CG_API CGparameter CGENTRY cgCreateParameterMultiDimArray(CGcontext ctx,
|
||||||
|
CGtype type,
|
||||||
|
int dim,
|
||||||
|
const int *lengths);
|
||||||
|
CG_API void CGENTRY cgDestroyParameter(CGparameter param);
|
||||||
|
CG_API void CGENTRY cgConnectParameter(CGparameter from, CGparameter to);
|
||||||
|
CG_API void CGENTRY cgDisconnectParameter(CGparameter param);
|
||||||
|
CG_API CGparameter CGENTRY cgGetConnectedParameter(CGparameter param);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetNumConnectedToParameters(CGparameter param);
|
||||||
|
CG_API CGparameter CGENTRY cgGetConnectedToParameter(CGparameter param, int index);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetNamedParameter(CGprogram prog, const char *name);
|
||||||
|
CG_API CGparameter CGENTRY cgGetNamedProgramParameter(CGprogram prog,
|
||||||
|
CGenum name_space,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetFirstParameter(CGprogram prog, CGenum name_space);
|
||||||
|
CG_API CGparameter CGENTRY cgGetNextParameter(CGparameter current);
|
||||||
|
CG_API CGparameter CGENTRY cgGetFirstLeafParameter(CGprogram prog, CGenum name_space);
|
||||||
|
CG_API CGparameter CGENTRY cgGetNextLeafParameter(CGparameter current);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetFirstStructParameter(CGparameter param);
|
||||||
|
CG_API CGparameter CGENTRY cgGetNamedStructParameter(CGparameter param,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetFirstDependentParameter(CGparameter param);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetArrayParameter(CGparameter aparam, int index);
|
||||||
|
CG_API int CGENTRY cgGetArrayDimension(CGparameter param);
|
||||||
|
CG_API CGtype CGENTRY cgGetArrayType(CGparameter param);
|
||||||
|
CG_API int CGENTRY cgGetArraySize(CGparameter param, int dimension);
|
||||||
|
CG_API int CGENTRY cgGetArrayTotalSize(CGparameter param);
|
||||||
|
CG_API void CGENTRY cgSetArraySize(CGparameter param, int size);
|
||||||
|
CG_API void CGENTRY cgSetMultiDimArraySize(CGparameter param, const int *sizes);
|
||||||
|
|
||||||
|
CG_API CGprogram CGENTRY cgGetParameterProgram(CGparameter param);
|
||||||
|
CG_API CGcontext CGENTRY cgGetParameterContext(CGparameter param);
|
||||||
|
CG_API CGbool CGENTRY cgIsParameter(CGparameter param);
|
||||||
|
CG_API const char * CGENTRY cgGetParameterName(CGparameter param);
|
||||||
|
CG_API CGtype CGENTRY cgGetParameterType(CGparameter param);
|
||||||
|
CG_API CGtype CGENTRY cgGetParameterBaseType(CGparameter param);
|
||||||
|
CG_API CGparameterclass CGENTRY cgGetParameterClass(CGparameter param);
|
||||||
|
CG_API int CGENTRY cgGetParameterRows(CGparameter param);
|
||||||
|
CG_API int CGENTRY cgGetParameterColumns(CGparameter param);
|
||||||
|
CG_API CGtype CGENTRY cgGetParameterNamedType(CGparameter param);
|
||||||
|
CG_API const char * CGENTRY cgGetParameterSemantic(CGparameter param);
|
||||||
|
CG_API CGresource CGENTRY cgGetParameterResource(CGparameter param);
|
||||||
|
CG_API CGresource CGENTRY cgGetParameterBaseResource(CGparameter param);
|
||||||
|
CG_API unsigned long CGENTRY cgGetParameterResourceIndex(CGparameter param);
|
||||||
|
CG_API CGenum CGENTRY cgGetParameterVariability(CGparameter param);
|
||||||
|
CG_API CGenum CGENTRY cgGetParameterDirection(CGparameter param);
|
||||||
|
CG_API CGbool CGENTRY cgIsParameterReferenced(CGparameter param);
|
||||||
|
CG_API CGbool CGENTRY cgIsParameterUsed(CGparameter param, CGhandle handle);
|
||||||
|
CG_API const double * CGENTRY cgGetParameterValues(CGparameter param,
|
||||||
|
CGenum value_type,
|
||||||
|
int *nvalues);
|
||||||
|
CG_API void CGENTRY cgSetParameterValuedr(CGparameter param, int n, const double *vals);
|
||||||
|
CG_API void CGENTRY cgSetParameterValuedc(CGparameter param, int n, const double *vals);
|
||||||
|
CG_API void CGENTRY cgSetParameterValuefr(CGparameter param, int n, const float *vals);
|
||||||
|
CG_API void CGENTRY cgSetParameterValuefc(CGparameter param, int n, const float *vals);
|
||||||
|
CG_API void CGENTRY cgSetParameterValueir(CGparameter param, int n, const int *vals);
|
||||||
|
CG_API void CGENTRY cgSetParameterValueic(CGparameter param, int n, const int *vals);
|
||||||
|
CG_API int CGENTRY cgGetParameterValuedr(CGparameter param, int n, double *vals);
|
||||||
|
CG_API int CGENTRY cgGetParameterValuedc(CGparameter param, int n, double *vals);
|
||||||
|
CG_API int CGENTRY cgGetParameterValuefr(CGparameter param, int n, float *vals);
|
||||||
|
CG_API int CGENTRY cgGetParameterValuefc(CGparameter param, int n, float *vals);
|
||||||
|
CG_API int CGENTRY cgGetParameterValueir(CGparameter param, int n, int *vals);
|
||||||
|
CG_API int CGENTRY cgGetParameterValueic(CGparameter param, int n, int *vals);
|
||||||
|
CG_API const char * CGENTRY cgGetStringParameterValue(CGparameter param);
|
||||||
|
CG_API void CGENTRY cgSetStringParameterValue(CGparameter param, const char *str);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetParameterOrdinalNumber(CGparameter param);
|
||||||
|
CG_API CGbool CGENTRY cgIsParameterGlobal(CGparameter param);
|
||||||
|
CG_API int CGENTRY cgGetParameterIndex(CGparameter param);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgSetParameterVariability(CGparameter param, CGenum vary);
|
||||||
|
CG_API void CGENTRY cgSetParameterSemantic(CGparameter param, const char *semantic);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgSetParameter1f(CGparameter param, float x);
|
||||||
|
CG_API void CGENTRY cgSetParameter2f(CGparameter param, float x, float y);
|
||||||
|
CG_API void CGENTRY cgSetParameter3f(CGparameter param, float x, float y, float z);
|
||||||
|
CG_API void CGENTRY cgSetParameter4f(CGparameter param,
|
||||||
|
float x,
|
||||||
|
float y,
|
||||||
|
float z,
|
||||||
|
float w);
|
||||||
|
CG_API void CGENTRY cgSetParameter1d(CGparameter param, double x);
|
||||||
|
CG_API void CGENTRY cgSetParameter2d(CGparameter param, double x, double y);
|
||||||
|
CG_API void CGENTRY cgSetParameter3d(CGparameter param,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double z);
|
||||||
|
CG_API void CGENTRY cgSetParameter4d(CGparameter param,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double z,
|
||||||
|
double w);
|
||||||
|
CG_API void CGENTRY cgSetParameter1i(CGparameter param, int x);
|
||||||
|
CG_API void CGENTRY cgSetParameter2i(CGparameter param, int x, int y);
|
||||||
|
CG_API void CGENTRY cgSetParameter3i(CGparameter param, int x, int y, int z);
|
||||||
|
CG_API void CGENTRY cgSetParameter4i(CGparameter param,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int z,
|
||||||
|
int w);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgSetParameter1iv(CGparameter param, const int *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter2iv(CGparameter param, const int *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter3iv(CGparameter param, const int *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter4iv(CGparameter param, const int *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter1fv(CGparameter param, const float *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter2fv(CGparameter param, const float *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter3fv(CGparameter param, const float *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter4fv(CGparameter param, const float *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter1dv(CGparameter param, const double *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter2dv(CGparameter param, const double *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter3dv(CGparameter param, const double *v);
|
||||||
|
CG_API void CGENTRY cgSetParameter4dv(CGparameter param, const double *v);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgSetMatrixParameterir(CGparameter param, const int *matrix);
|
||||||
|
CG_API void CGENTRY cgSetMatrixParameterdr(CGparameter param, const double *matrix);
|
||||||
|
CG_API void CGENTRY cgSetMatrixParameterfr(CGparameter param, const float *matrix);
|
||||||
|
CG_API void CGENTRY cgSetMatrixParameteric(CGparameter param, const int *matrix);
|
||||||
|
CG_API void CGENTRY cgSetMatrixParameterdc(CGparameter param, const double *matrix);
|
||||||
|
CG_API void CGENTRY cgSetMatrixParameterfc(CGparameter param, const float *matrix);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgGetMatrixParameterir(CGparameter param, int *matrix);
|
||||||
|
CG_API void CGENTRY cgGetMatrixParameterdr(CGparameter param, double *matrix);
|
||||||
|
CG_API void CGENTRY cgGetMatrixParameterfr(CGparameter param, float *matrix);
|
||||||
|
CG_API void CGENTRY cgGetMatrixParameteric(CGparameter param, int *matrix);
|
||||||
|
CG_API void CGENTRY cgGetMatrixParameterdc(CGparameter param, double *matrix);
|
||||||
|
CG_API void CGENTRY cgGetMatrixParameterfc(CGparameter param, float *matrix);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetNamedSubParameter(CGparameter param, const char *name);
|
||||||
|
|
||||||
|
/*** Type Functions ***/
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetTypeString(CGtype type);
|
||||||
|
CG_API CGtype CGENTRY cgGetType(const char *type_string);
|
||||||
|
|
||||||
|
CG_API CGtype CGENTRY cgGetNamedUserType(CGhandle handle, const char *name);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetNumUserTypes(CGhandle handle);
|
||||||
|
CG_API CGtype CGENTRY cgGetUserType(CGhandle handle, int index);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetNumParentTypes(CGtype type);
|
||||||
|
CG_API CGtype CGENTRY cgGetParentType(CGtype type, int index);
|
||||||
|
|
||||||
|
CG_API CGbool CGENTRY cgIsParentType(CGtype parent, CGtype child);
|
||||||
|
CG_API CGbool CGENTRY cgIsInterfaceType(CGtype type);
|
||||||
|
|
||||||
|
/*** Resource Functions ***/
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetResourceString(CGresource resource);
|
||||||
|
CG_API CGresource CGENTRY cgGetResource(const char *resource_string);
|
||||||
|
|
||||||
|
/*** Enum Functions ***/
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetEnumString(CGenum en);
|
||||||
|
CG_API CGenum CGENTRY cgGetEnum(const char *enum_string);
|
||||||
|
|
||||||
|
/*** Profile Functions ***/
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetProfileString(CGprofile profile);
|
||||||
|
CG_API CGprofile CGENTRY cgGetProfile(const char *profile_string);
|
||||||
|
|
||||||
|
/*** Error Functions ***/
|
||||||
|
|
||||||
|
CG_API CGerror CGENTRY cgGetError(void);
|
||||||
|
CG_API CGerror CGENTRY cgGetFirstError(void);
|
||||||
|
CG_API const char * CGENTRY cgGetErrorString(CGerror error);
|
||||||
|
CG_API const char * CGENTRY cgGetLastErrorString(CGerror *error);
|
||||||
|
CG_API void CGENTRY cgSetErrorCallback(CGerrorCallbackFunc func);
|
||||||
|
CG_API CGerrorCallbackFunc CGENTRY cgGetErrorCallback(void);
|
||||||
|
CG_API void CGENTRY cgSetErrorHandler(CGerrorHandlerFunc func, void *data);
|
||||||
|
CG_API CGerrorHandlerFunc CGENTRY cgGetErrorHandler(void **data);
|
||||||
|
|
||||||
|
/*** Misc Functions ***/
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetString(CGenum sname);
|
||||||
|
|
||||||
|
|
||||||
|
/*** CgFX Functions ***/
|
||||||
|
|
||||||
|
CG_API CGeffect CGENTRY cgCreateEffect(CGcontext, const char *code, const char **args);
|
||||||
|
CG_API CGeffect CGENTRY cgCreateEffectFromFile(CGcontext, const char *filename,
|
||||||
|
const char **args);
|
||||||
|
CG_API CGeffect CGENTRY cgCopyEffect(CGeffect effect);
|
||||||
|
CG_API void CGENTRY cgDestroyEffect(CGeffect);
|
||||||
|
CG_API CGcontext CGENTRY cgGetEffectContext(CGeffect);
|
||||||
|
CG_API CGbool CGENTRY cgIsEffect(CGeffect effect);
|
||||||
|
|
||||||
|
CG_API CGeffect CGENTRY cgGetFirstEffect(CGcontext);
|
||||||
|
CG_API CGeffect CGENTRY cgGetNextEffect(CGeffect);
|
||||||
|
|
||||||
|
CG_API CGprogram CGENTRY cgCreateProgramFromEffect(CGeffect effect,
|
||||||
|
CGprofile profile,
|
||||||
|
const char *entry,
|
||||||
|
const char **args);
|
||||||
|
|
||||||
|
CG_API CGtechnique CGENTRY cgGetFirstTechnique(CGeffect);
|
||||||
|
CG_API CGtechnique CGENTRY cgGetNextTechnique(CGtechnique);
|
||||||
|
CG_API CGtechnique CGENTRY cgGetNamedTechnique(CGeffect, const char *name);
|
||||||
|
CG_API const char * CGENTRY cgGetTechniqueName(CGtechnique);
|
||||||
|
CG_API CGbool CGENTRY cgIsTechnique(CGtechnique);
|
||||||
|
CG_API CGbool CGENTRY cgValidateTechnique(CGtechnique);
|
||||||
|
CG_API CGbool CGENTRY cgIsTechniqueValidated(CGtechnique);
|
||||||
|
CG_API CGeffect CGENTRY cgGetTechniqueEffect(CGtechnique);
|
||||||
|
|
||||||
|
CG_API CGpass CGENTRY cgGetFirstPass(CGtechnique);
|
||||||
|
CG_API CGpass CGENTRY cgGetNamedPass(CGtechnique, const char *name);
|
||||||
|
CG_API CGpass CGENTRY cgGetNextPass(CGpass);
|
||||||
|
CG_API CGbool CGENTRY cgIsPass(CGpass);
|
||||||
|
CG_API const char * CGENTRY cgGetPassName(CGpass);
|
||||||
|
CG_API CGtechnique CGENTRY cgGetPassTechnique(CGpass);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgSetPassState(CGpass);
|
||||||
|
CG_API void CGENTRY cgResetPassState(CGpass);
|
||||||
|
|
||||||
|
CG_API CGstateassignment CGENTRY cgGetFirstStateAssignment(CGpass);
|
||||||
|
CG_API CGstateassignment CGENTRY cgGetNamedStateAssignment(CGpass, const char *name);
|
||||||
|
CG_API CGstateassignment CGENTRY cgGetNextStateAssignment(CGstateassignment);
|
||||||
|
CG_API CGbool CGENTRY cgIsStateAssignment(CGstateassignment);
|
||||||
|
CG_API CGbool CGENTRY cgCallStateSetCallback(CGstateassignment);
|
||||||
|
CG_API CGbool CGENTRY cgCallStateValidateCallback(CGstateassignment);
|
||||||
|
CG_API CGbool CGENTRY cgCallStateResetCallback(CGstateassignment);
|
||||||
|
CG_API CGpass CGENTRY cgGetStateAssignmentPass(CGstateassignment);
|
||||||
|
CG_API CGparameter CGENTRY cgGetSamplerStateAssignmentParameter(CGstateassignment);
|
||||||
|
|
||||||
|
CG_API const float * CGENTRY cgGetFloatStateAssignmentValues(CGstateassignment, int *nVals);
|
||||||
|
CG_API const int * CGENTRY cgGetIntStateAssignmentValues(CGstateassignment, int *nVals);
|
||||||
|
CG_API const CGbool * CGENTRY cgGetBoolStateAssignmentValues(CGstateassignment, int *nVals);
|
||||||
|
CG_API const char * CGENTRY cgGetStringStateAssignmentValue(CGstateassignment);
|
||||||
|
CG_API CGprogram CGENTRY cgGetProgramStateAssignmentValue(CGstateassignment);
|
||||||
|
CG_API CGparameter CGENTRY cgGetTextureStateAssignmentValue(CGstateassignment);
|
||||||
|
CG_API CGparameter CGENTRY cgGetSamplerStateAssignmentValue(CGstateassignment);
|
||||||
|
CG_API int CGENTRY cgGetStateAssignmentIndex(CGstateassignment);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetNumDependentStateAssignmentParameters(CGstateassignment);
|
||||||
|
CG_API CGparameter CGENTRY cgGetDependentStateAssignmentParameter(CGstateassignment, int index);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetConnectedStateAssignmentParameter(CGstateassignment);
|
||||||
|
|
||||||
|
CG_API CGstate CGENTRY cgGetStateAssignmentState(CGstateassignment);
|
||||||
|
CG_API CGstate CGENTRY cgGetSamplerStateAssignmentState(CGstateassignment);
|
||||||
|
|
||||||
|
CG_API CGstate CGENTRY cgCreateState(CGcontext, const char *name, CGtype);
|
||||||
|
CG_API CGstate CGENTRY cgCreateArrayState(CGcontext, const char *name, CGtype, int nelems);
|
||||||
|
CG_API void CGENTRY cgSetStateCallbacks(CGstate, CGstatecallback set, CGstatecallback reset,
|
||||||
|
CGstatecallback validate);
|
||||||
|
CG_API CGstatecallback CGENTRY cgGetStateSetCallback(CGstate);
|
||||||
|
CG_API CGstatecallback CGENTRY cgGetStateResetCallback(CGstate);
|
||||||
|
CG_API CGstatecallback CGENTRY cgGetStateValidateCallback(CGstate);
|
||||||
|
CG_API CGcontext CGENTRY cgGetStateContext(CGstate);
|
||||||
|
CG_API CGtype CGENTRY cgGetStateType(CGstate);
|
||||||
|
CG_API const char * CGENTRY cgGetStateName(CGstate);
|
||||||
|
CG_API CGstate CGENTRY cgGetNamedState(CGcontext, const char *name);
|
||||||
|
CG_API CGstate CGENTRY cgGetFirstState(CGcontext);
|
||||||
|
CG_API CGstate CGENTRY cgGetNextState(CGstate);
|
||||||
|
CG_API CGbool CGENTRY cgIsState(CGstate);
|
||||||
|
CG_API void CGENTRY cgAddStateEnumerant(CGstate, const char *name, int value);
|
||||||
|
|
||||||
|
CG_API CGstate CGENTRY cgCreateSamplerState(CGcontext, const char *name, CGtype);
|
||||||
|
CG_API CGstate CGENTRY cgCreateArraySamplerState(CGcontext, const char *name, CGtype, int nelems);
|
||||||
|
CG_API CGstate CGENTRY cgGetNamedSamplerState(CGcontext, const char *name);
|
||||||
|
CG_API CGstate CGENTRY cgGetFirstSamplerState(CGcontext);
|
||||||
|
|
||||||
|
CG_API CGstateassignment CGENTRY cgGetFirstSamplerStateAssignment(CGparameter);
|
||||||
|
CG_API CGstateassignment CGENTRY cgGetNamedSamplerStateAssignment(CGparameter, const char *);
|
||||||
|
CG_API void CGENTRY cgSetSamplerState(CGparameter);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgGetNamedEffectParameter(CGeffect, const char *);
|
||||||
|
CG_API CGparameter CGENTRY cgGetFirstLeafEffectParameter(CGeffect);
|
||||||
|
CG_API CGparameter CGENTRY cgGetFirstEffectParameter(CGeffect);
|
||||||
|
CG_API CGparameter CGENTRY cgGetEffectParameterBySemantic(CGeffect, const char *);
|
||||||
|
|
||||||
|
CG_API CGannotation CGENTRY cgGetFirstTechniqueAnnotation(CGtechnique);
|
||||||
|
CG_API CGannotation CGENTRY cgGetFirstPassAnnotation(CGpass);
|
||||||
|
CG_API CGannotation CGENTRY cgGetFirstParameterAnnotation(CGparameter);
|
||||||
|
CG_API CGannotation CGENTRY cgGetFirstProgramAnnotation(CGprogram);
|
||||||
|
CG_API CGannotation CGENTRY cgGetFirstEffectAnnotation(CGeffect);
|
||||||
|
CG_API CGannotation CGENTRY cgGetNextAnnotation(CGannotation);
|
||||||
|
|
||||||
|
CG_API CGannotation CGENTRY cgGetNamedTechniqueAnnotation(CGtechnique, const char *);
|
||||||
|
CG_API CGannotation CGENTRY cgGetNamedPassAnnotation(CGpass, const char *);
|
||||||
|
CG_API CGannotation CGENTRY cgGetNamedParameterAnnotation(CGparameter, const char *);
|
||||||
|
CG_API CGannotation CGENTRY cgGetNamedProgramAnnotation(CGprogram, const char *);
|
||||||
|
CG_API CGannotation CGENTRY cgGetNamedEffectAnnotation(CGeffect, const char *);
|
||||||
|
|
||||||
|
CG_API CGbool CGENTRY cgIsAnnotation(CGannotation);
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetAnnotationName(CGannotation);
|
||||||
|
CG_API CGtype CGENTRY cgGetAnnotationType(CGannotation);
|
||||||
|
|
||||||
|
CG_API const float * CGENTRY cgGetFloatAnnotationValues(CGannotation, int *nvalues);
|
||||||
|
CG_API const int * CGENTRY cgGetIntAnnotationValues(CGannotation, int *nvalues);
|
||||||
|
CG_API const char * CGENTRY cgGetStringAnnotationValue(CGannotation);
|
||||||
|
CG_API const char * const * CGENTRY cgGetStringAnnotationValues(CGannotation, int *nvalues);
|
||||||
|
CG_API const CGbool * CGENTRY cgGetBoolAnnotationValues(CGannotation, int *nvalues);
|
||||||
|
CG_API const int * CGENTRY cgGetBooleanAnnotationValues(CGannotation, int *nvalues);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetNumDependentAnnotationParameters(CGannotation);
|
||||||
|
CG_API CGparameter CGENTRY cgGetDependentAnnotationParameter(CGannotation, int index);
|
||||||
|
|
||||||
|
CG_API void CGENTRY cgEvaluateProgram(CGprogram, float *, int ncomps, int nx, int ny, int nz);
|
||||||
|
|
||||||
|
/*** Cg 1.5 Additions ***/
|
||||||
|
|
||||||
|
CG_API CGbool CGENTRY cgSetEffectName(CGeffect, const char *name);
|
||||||
|
CG_API const char * CGENTRY cgGetEffectName(CGeffect);
|
||||||
|
CG_API CGeffect CGENTRY cgGetNamedEffect(CGcontext, const char *name);
|
||||||
|
CG_API CGparameter CGENTRY cgCreateEffectParameter(CGeffect, const char *name, CGtype);
|
||||||
|
|
||||||
|
CG_API CGtechnique CGENTRY cgCreateTechnique(CGeffect, const char *name);
|
||||||
|
|
||||||
|
CG_API CGparameter CGENTRY cgCreateEffectParameterArray(CGeffect, const char *name, CGtype type, int length);
|
||||||
|
CG_API CGparameter CGENTRY cgCreateEffectParameterMultiDimArray(CGeffect, const char *name, CGtype type, int dim, const int *lengths);
|
||||||
|
|
||||||
|
CG_API CGpass CGENTRY cgCreatePass(CGtechnique, const char *name);
|
||||||
|
|
||||||
|
CG_API CGstateassignment CGENTRY cgCreateStateAssignment(CGpass, CGstate);
|
||||||
|
CG_API CGstateassignment CGENTRY cgCreateStateAssignmentIndex(CGpass, CGstate, int index);
|
||||||
|
CG_API CGstateassignment CGENTRY cgCreateSamplerStateAssignment(CGparameter, CGstate);
|
||||||
|
|
||||||
|
CG_API CGbool CGENTRY cgSetFloatStateAssignment(CGstateassignment, float);
|
||||||
|
CG_API CGbool CGENTRY cgSetIntStateAssignment(CGstateassignment, int);
|
||||||
|
CG_API CGbool CGENTRY cgSetBoolStateAssignment(CGstateassignment, CGbool);
|
||||||
|
CG_API CGbool CGENTRY cgSetStringStateAssignment(CGstateassignment, const char *);
|
||||||
|
CG_API CGbool CGENTRY cgSetProgramStateAssignment(CGstateassignment, CGprogram);
|
||||||
|
CG_API CGbool CGENTRY cgSetSamplerStateAssignment(CGstateassignment, CGparameter);
|
||||||
|
CG_API CGbool CGENTRY cgSetTextureStateAssignment(CGstateassignment, CGparameter);
|
||||||
|
|
||||||
|
CG_API CGbool CGENTRY cgSetFloatArrayStateAssignment(CGstateassignment, const float *vals);
|
||||||
|
CG_API CGbool CGENTRY cgSetIntArrayStateAssignment(CGstateassignment, const int *vals);
|
||||||
|
CG_API CGbool CGENTRY cgSetBoolArrayStateAssignment(CGstateassignment, const CGbool *vals);
|
||||||
|
|
||||||
|
CG_API CGannotation CGENTRY cgCreateTechniqueAnnotation(CGtechnique, const char *name, CGtype);
|
||||||
|
CG_API CGannotation CGENTRY cgCreatePassAnnotation(CGpass, const char *name, CGtype);
|
||||||
|
CG_API CGannotation CGENTRY cgCreateParameterAnnotation(CGparameter, const char *name, CGtype);
|
||||||
|
CG_API CGannotation CGENTRY cgCreateProgramAnnotation(CGprogram, const char *name, CGtype);
|
||||||
|
CG_API CGannotation CGENTRY cgCreateEffectAnnotation(CGeffect, const char *name, CGtype);
|
||||||
|
|
||||||
|
CG_API CGbool CGENTRY cgSetIntAnnotation(CGannotation, int value);
|
||||||
|
CG_API CGbool CGENTRY cgSetFloatAnnotation(CGannotation, float value);
|
||||||
|
CG_API CGbool CGENTRY cgSetBoolAnnotation(CGannotation, CGbool value);
|
||||||
|
CG_API CGbool CGENTRY cgSetStringAnnotation(CGannotation, const char *value);
|
||||||
|
|
||||||
|
CG_API const char * CGENTRY cgGetStateEnumerantName(CGstate, int value);
|
||||||
|
CG_API int CGENTRY cgGetStateEnumerantValue(CGstate, const char *name);
|
||||||
|
|
||||||
|
CG_API CGeffect CGENTRY cgGetParameterEffect(CGparameter param);
|
||||||
|
|
||||||
|
CG_API CGparameterclass CGENTRY cgGetTypeClass(CGtype type);
|
||||||
|
CG_API CGtype CGENTRY cgGetTypeBase(CGtype type);
|
||||||
|
CG_API CGbool CGENTRY cgGetTypeSizes(CGtype type, int *nrows, int *ncols);
|
||||||
|
CG_API void CGENTRY cgGetMatrixSize(CGtype type, int *nrows, int *ncols);
|
||||||
|
|
||||||
|
CG_API int CGENTRY cgGetNumProgramDomains( CGprogram program );
|
||||||
|
CG_API CGdomain CGENTRY cgGetProfileDomain( CGprofile profile );
|
||||||
|
CG_API CGprogram CGENTRY cgCombinePrograms( int n, const CGprogram *exeList );
|
||||||
|
CG_API CGprogram CGENTRY cgCombinePrograms2( const CGprogram exe1, const CGprogram exe2 );
|
||||||
|
CG_API CGprogram CGENTRY cgCombinePrograms3( const CGprogram exe1, const CGprogram exe2, const CGprogram exe3 );
|
||||||
|
CG_API CGprofile CGENTRY cgGetProgramDomainProfile(CGprogram program, int index);
|
||||||
|
|
||||||
|
/*** CGobj Functions ***/
|
||||||
|
CG_API CGobj CGENTRY cgCreateObj( CGcontext context, CGenum program_type, const char *source, CGprofile profile, const char **args );
|
||||||
|
CG_API CGobj CGENTRY cgCreateObjFromFile( CGcontext context, CGenum program_type, const char *source_file, CGprofile profile, const char **args );
|
||||||
|
CG_API void CGENTRY cgDestroyObj( CGobj obj );
|
||||||
|
|
||||||
|
CG_API long CGENTRY cgGetParameterResourceSize(CGparameter);
|
||||||
|
CG_API CGtype CGENTRY cgGetParameterResourceType(CGparameter);
|
||||||
|
CG_API int CGENTRY cgGetParameterBufferIndex(CGparameter);
|
||||||
|
CG_API int CGENTRY cgGetParameterBufferOffset(CGparameter);
|
||||||
|
|
||||||
|
CG_API CGbuffer CGENTRY cgCreateBuffer(CGcontext, int size, const void *data, CGbufferusage bufferUsage);
|
||||||
|
CG_API void CGENTRY cgSetBufferData(CGbuffer, int size, const void *data);
|
||||||
|
CG_API void CGENTRY cgSetBufferSubData(CGbuffer, int offset, int size, const void *data);
|
||||||
|
CG_API void CGENTRY cgSetProgramBuffer(CGprogram program, int bufferIndex, CGbuffer buffer);
|
||||||
|
|
||||||
|
CG_API void * CGENTRY cgMapBuffer(CGbuffer buffer, CGbufferaccess access);
|
||||||
|
CG_API void CGENTRY cgUnmapBuffer(CGbuffer buffer);
|
||||||
|
CG_API void CGENTRY cgDestroyBuffer(CGbuffer buffer);
|
||||||
|
CG_API CGbuffer CGENTRY cgGetProgramBuffer(CGprogram, int bufferIndex);
|
||||||
|
CG_API int CGENTRY cgGetBufferSize(CGbuffer);
|
||||||
|
CG_API int CGENTRY cgGetProgramBufferMaxSize(CGprofile profile);
|
||||||
|
CG_API int CGENTRY cgGetProgramBufferMaxIndex(CGprofile profile);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CG_APIENTRY_DEFINED
|
||||||
|
# undef CG_APIENTRY_DEFINED
|
||||||
|
# undef APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CG_WINGDIAPI_DEFINED
|
||||||
|
# undef CG_WINGDIAPI_DEFINED
|
||||||
|
# undef WINGDIAPI
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
Binary file not shown.
|
@ -0,0 +1,423 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _cggl_h
|
||||||
|
#define _cggl_h
|
||||||
|
|
||||||
|
#include <Cg/cg.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# ifndef APIENTRY /* From Win32's <windef.h> */
|
||||||
|
# define CGGL_APIENTRY_DEFINED
|
||||||
|
# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__)
|
||||||
|
# define APIENTRY __stdcall
|
||||||
|
# else
|
||||||
|
# define APIENTRY
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# ifndef WINGDIAPI /* From Win32's <wingdi.h> and <winnt.h> */
|
||||||
|
# define CGGL_WINGDIAPI_DEFINED
|
||||||
|
# define WINGDIAPI __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
/* Set up for either Win32 import/export/lib. */
|
||||||
|
#ifndef CGGL_API
|
||||||
|
# ifdef _WIN32
|
||||||
|
# ifdef CGGL_EXPORTS
|
||||||
|
# define CGGL_API __declspec(dllexport)
|
||||||
|
# elif defined (CG_LIB)
|
||||||
|
# define CGGL_API
|
||||||
|
# else
|
||||||
|
# define CGGL_API __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define CGGL_API
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CGGLENTRY
|
||||||
|
# ifdef _WIN32
|
||||||
|
# define CGGLENTRY __cdecl
|
||||||
|
# else
|
||||||
|
# define CGGLENTRY
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <OpenGL/gl.h>
|
||||||
|
#else
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*** cgGL Type Definitions ***/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CG_GL_MATRIX_IDENTITY = 0,
|
||||||
|
CG_GL_MATRIX_TRANSPOSE = 1,
|
||||||
|
CG_GL_MATRIX_INVERSE = 2,
|
||||||
|
CG_GL_MATRIX_INVERSE_TRANSPOSE = 3,
|
||||||
|
|
||||||
|
CG_GL_MODELVIEW_MATRIX,
|
||||||
|
CG_GL_PROJECTION_MATRIX,
|
||||||
|
CG_GL_TEXTURE_MATRIX,
|
||||||
|
CG_GL_MODELVIEW_PROJECTION_MATRIX,
|
||||||
|
|
||||||
|
CG_GL_VERTEX,
|
||||||
|
CG_GL_FRAGMENT,
|
||||||
|
CG_GL_GEOMETRY
|
||||||
|
|
||||||
|
} CGGLenum;
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CGGL_EXPLICIT
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Profile Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API CGbool CGGLENTRY cgGLIsProfileSupported(CGprofile profile);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLEnableProfile(CGprofile profile);
|
||||||
|
CGGL_API void CGGLENTRY cgGLDisableProfile(CGprofile profile);
|
||||||
|
|
||||||
|
CGGL_API CGprofile CGGLENTRY cgGLGetLatestProfile(CGGLenum profile_type);
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetOptimalOptions(CGprofile profile);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Program Managment Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLLoadProgram(CGprogram program);
|
||||||
|
CGGL_API CGbool CGGLENTRY cgGLIsProgramLoaded(CGprogram program);
|
||||||
|
CGGL_API void CGGLENTRY cgGLBindProgram(CGprogram program);
|
||||||
|
CGGL_API void CGGLENTRY cgGLUnbindProgram(CGprofile profile);
|
||||||
|
CGGL_API GLuint CGGLENTRY cgGLGetProgramID(CGprogram program);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Parameter Managment Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter1f(CGparameter param,
|
||||||
|
float x);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter2f(CGparameter param,
|
||||||
|
float x,
|
||||||
|
float y);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter3f(CGparameter param,
|
||||||
|
float x,
|
||||||
|
float y,
|
||||||
|
float z);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter4f(CGparameter param,
|
||||||
|
float x,
|
||||||
|
float y,
|
||||||
|
float z,
|
||||||
|
float w);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter1fv(CGparameter param, const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter2fv(CGparameter param, const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter3fv(CGparameter param, const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter4fv(CGparameter param, const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter1d(CGparameter param,
|
||||||
|
double x);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter2d(CGparameter param,
|
||||||
|
double x,
|
||||||
|
double y);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter3d(CGparameter param,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double z);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter4d(CGparameter param,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double z,
|
||||||
|
double w);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter1dv(CGparameter param, const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter2dv(CGparameter param, const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter3dv(CGparameter param, const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameter4dv(CGparameter param, const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter1f(CGparameter param, float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter2f(CGparameter param, float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter3f(CGparameter param, float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter4f(CGparameter param, float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter1d(CGparameter param, double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter2d(CGparameter param, double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter3d(CGparameter param, double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameter4d(CGparameter param, double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray1f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray2f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray3f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray4f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray1d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray2d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray3d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterArray4d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray1f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray2f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray3f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray4f(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
float *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray1d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray2d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray3d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetParameterArray4d(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
double *v);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetParameterPointer(CGparameter param,
|
||||||
|
GLint fsize,
|
||||||
|
GLenum type,
|
||||||
|
GLsizei stride,
|
||||||
|
const GLvoid *pointer);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLEnableClientState(CGparameter param);
|
||||||
|
CGGL_API void CGGLENTRY cgGLDisableClientState(CGparameter param);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Matrix Parameter Managment Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterdr(CGparameter param,
|
||||||
|
const double *matrix);
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterfr(CGparameter param,
|
||||||
|
const float *matrix);
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterdc(CGparameter param,
|
||||||
|
const double *matrix);
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterfc(CGparameter param,
|
||||||
|
const float *matrix);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterdr(CGparameter param, double *matrix);
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterfr(CGparameter param, float *matrix);
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterdc(CGparameter param, double *matrix);
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterfc(CGparameter param, float *matrix);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetStateMatrixParameter(CGparameter param,
|
||||||
|
CGGLenum matrix,
|
||||||
|
CGGLenum transform);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterArrayfc(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const float *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterArrayfr(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const float *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterArraydc(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const double *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetMatrixParameterArraydr(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
const double *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterArrayfc(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
float *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterArrayfr(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
float *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterArraydc(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
double *matrices);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLGetMatrixParameterArraydr(CGparameter param,
|
||||||
|
long offset,
|
||||||
|
long nelements,
|
||||||
|
double *matrices);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Texture Parameter Managment Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetTextureParameter(CGparameter param, GLuint texobj);
|
||||||
|
CGGL_API GLuint CGGLENTRY cgGLGetTextureParameter(CGparameter param);
|
||||||
|
CGGL_API void CGGLENTRY cgGLEnableTextureParameter(CGparameter param);
|
||||||
|
CGGL_API void CGGLENTRY cgGLDisableTextureParameter(CGparameter param);
|
||||||
|
CGGL_API GLenum CGGLENTRY cgGLGetTextureEnum(CGparameter param);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetManageTextureParameters(CGcontext ctx, CGbool flag);
|
||||||
|
CGGL_API CGbool CGGLENTRY cgGLGetManageTextureParameters(CGcontext ctx);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetupSampler(CGparameter param, GLuint texobj);
|
||||||
|
CGGL_API void CGGLENTRY cgGLRegisterStates(CGcontext);
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLEnableProgramProfiles( CGprogram program );
|
||||||
|
CGGL_API void CGGLENTRY cgGLDisableProgramProfiles( CGprogram program );
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Misc Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API void CGGLENTRY cgGLSetDebugMode( CGbool debug );
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** Buffer Functions
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
CGGL_API CGbuffer CGGLENTRY cgGLCreateBuffer(CGcontext context, int size, const void *data, GLenum bufferUsage);
|
||||||
|
CGGL_API GLuint CGGLENTRY cgGLGetBufferObject(CGbuffer buffer);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CGGL_APIENTRY_DEFINED
|
||||||
|
# undef CGGL_APIENTRY_DEFINED
|
||||||
|
# undef APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CGGL_WINGDIAPI_DEFINED
|
||||||
|
# undef CGGL_WINGDIAPI_DEFINED
|
||||||
|
# undef WINGDIAPI
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
Binary file not shown.
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
CG_PROFILE_MACRO(Vertex,vp20,VP20,"vp20",6146,1)
|
||||||
|
CG_PROFILE_MACRO(Fragment20,fp20,FP20,"fp20",6147,0)
|
||||||
|
CG_PROFILE_MACRO(Vertex30,vp30,VP30,"vp30",6148,1)
|
||||||
|
CG_PROFILE_MACRO(Fragment,fp30,FP30,"fp30",6149,0)
|
||||||
|
CG_PROFILE_MACRO(ARBVertex,arbvp1,ARBVP1,"arbvp1",6150,1)
|
||||||
|
CG_PROFILE_MACRO(Fragment40,fp40,FP40,"fp40",6151,0)
|
||||||
|
CG_PROFILE_MACRO(ARBFragment,arbfp1,ARBFP1,"arbfp1",7000,0)
|
||||||
|
CG_PROFILE_MACRO(Vertex40,vp40,VP40,"vp40",7001,1)
|
||||||
|
CG_PROFILE_MACRO(GLSLVertex,glslv,GLSLV,"glslv",7007,1)
|
||||||
|
CG_PROFILE_MACRO(GLSLFragment,glslf,GLSLF,"glslf",7008,0)
|
||||||
|
CG_PROFILE_MACRO(GLSLCombined, glslc, GLSLC, "glslc", 7009, 0)
|
||||||
|
CG_PROFILE_MACRO(GPUFragment,gpu_fp,GPU_FP,"gp4fp",7010,0)
|
||||||
|
CG_PROFILE_MACRO(GPUVertex,gpu_vp,GPU_VP,"gp4vp",7011,1)
|
||||||
|
CG_PROFILE_MACRO(GPUGeometry,gpu_gp,GPU_GP,"gp4gp",7012,0)
|
||||||
|
|
||||||
|
#ifndef CG_IN_PROFILES_INCLUDE
|
||||||
|
# undef CG_PROFILE_MACRO
|
||||||
|
#endif
|
|
@ -0,0 +1,382 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following macro invocations define the supported CG basic hardware
|
||||||
|
* bind locations.
|
||||||
|
*
|
||||||
|
* The macros have the form :
|
||||||
|
*
|
||||||
|
* CG_BINDLOCATION_MACRO(name, compiler_name, enum_int)
|
||||||
|
*
|
||||||
|
* name : The name of the location.
|
||||||
|
* enum_name : The C enumerant.
|
||||||
|
* compiler_name : The name of the location within the compiler syntax.
|
||||||
|
* int_id : Integer enumerant associated with this bind location.
|
||||||
|
* (3256 is reservered for CG_UNDEFINED)
|
||||||
|
* addressable : The bind location must have an integer address
|
||||||
|
* associated with it.
|
||||||
|
* ParamType : the cgParamType of this register.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit0,CG_TEXUNIT0,"texunit 0",2048,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit1,CG_TEXUNIT1,"texunit 1",2049,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit2,CG_TEXUNIT2,"texunit 2",2050,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit3,CG_TEXUNIT3,"texunit 3",2051,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit4,CG_TEXUNIT4,"texunit 4",2052,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit5,CG_TEXUNIT5,"texunit 5",2053,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit6,CG_TEXUNIT6,"texunit 6",2054,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit7,CG_TEXUNIT7,"texunit 7",2055,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit8,CG_TEXUNIT8,"texunit 8",2056,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit9,CG_TEXUNIT9,"texunit 9",2057,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit10,CG_TEXUNIT10,"texunit 10",2058,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit11,CG_TEXUNIT11,"texunit 11",2059,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit12,CG_TEXUNIT12,"texunit 12",2060,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit13,CG_TEXUNIT13,"texunit 13",2061,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit14,CG_TEXUNIT14,"texunit 14",2062,0,CG_TEXOBJ_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexUnit15,CG_TEXUNIT15,"texunit 15",2063,0,CG_TEXOBJ_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer0, CG_BUFFER0, "buffer[0]", 2064, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer1, CG_BUFFER1, "buffer[1]", 2065, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer2, CG_BUFFER2, "buffer[2]", 2066, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer3, CG_BUFFER3, "buffer[3]", 2067, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer4, CG_BUFFER4, "buffer[4]", 2068, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer5, CG_BUFFER5, "buffer[5]", 2069, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer6, CG_BUFFER6, "buffer[6]", 2070, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer7, CG_BUFFER7, "buffer[7]", 2071, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer8, CG_BUFFER8, "buffer[8]", 2072, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer9, CG_BUFFER9, "buffer[9]", 2073, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer10, CG_BUFFER10, "buffer[10]", 2074, 1, CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Buffer11, CG_BUFFER11, "buffer[11]", 2075, 1, CGI_UNIFORM_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(Attr0,CG_ATTR0,"ATTR0",2113,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr1,CG_ATTR1,"ATTR1",2114,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr2,CG_ATTR2,"ATTR2",2115,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr3,CG_ATTR3,"ATTR3",2116,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr4,CG_ATTR4,"ATTR4",2117,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr5,CG_ATTR5,"ATTR5",2118,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr6,CG_ATTR6,"ATTR6",2119,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr7,CG_ATTR7,"ATTR7",2120,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr8,CG_ATTR8,"ATTR8",2121,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr9,CG_ATTR9,"ATTR9",2122,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr10,CG_ATTR10,"ATTR10",2123,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr11,CG_ATTR11,"ATTR11",2124,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr12,CG_ATTR12,"ATTR12",2125,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr13,CG_ATTR13,"ATTR13",2126,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr14,CG_ATTR14,"ATTR14",2127,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Attr15,CG_ATTR15,"ATTR15",2128,0,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(VertUniform,CG_C,"c",2178,1,CGI_UNIFORM_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(Tex0,CG_TEX0,"TEX0",2179,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex1,CG_TEX1,"TEX1",2180,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex2,CG_TEX2,"TEX2",2181,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex3,CG_TEX3,"TEX3",2192,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex4,CG_TEX4,"TEX4",2193,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex5,CG_TEX5,"TEX5",2194,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex6,CG_TEX6,"TEX6",2195,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tex7,CG_TEX7,"TEX7",2196,0,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(HPos,CG_HPOS,"HPOS",2243,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Col0,CG_COL0,"COL0",2245,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Col1,CG_COL1,"COL1",2246,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Col2,CG_COL2,"COL2",2247,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Col3,CG_COL3,"COL3",2248,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSiz,CG_PSIZ,"PSIZ",2309,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Clp0,CG_CLP0,"CLP0",2310,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Clp1,CG_CLP1,"CLP1",2311,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Clp2,CG_CLP2,"CLP2",2312,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Clp3,CG_CLP3,"CLP3",2313,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Clp4,CG_CLP4,"CLP4",2314,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Clp5,CG_CLP5,"CLP5",2315,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(WPos,CG_WPOS,"WPOS",2373,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PointCoord,CG_POINTCOORD,"POINTCOORD",2374,0,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(Position0,CG_POSITION0,"POSITION0",2437,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position1,CG_POSITION1,"POSITION1",2438,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position2,CG_POSITION2,"POSITION2",2439,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position3,CG_POSITION3,"POSITION3",2440,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position4,CG_POSITION4,"POSITION4",2441,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position5,CG_POSITION5,"POSITION5",2442,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position6,CG_POSITION6,"POSITION6",2443,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position7,CG_POSITION7,"POSITION7",2444,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position8,CG_POSITION8,"POSITION8",2445,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position9,CG_POSITION9,"POSITION9",2446,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position10,CG_POSITION10,"POSITION10",2447,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position11,CG_POSITION11,"POSITION11",2448,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position12,CG_POSITION12,"POSITION12",2449,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position13,CG_POSITION13,"POSITION13",2450,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position14,CG_POSITION14,"POSITION14",2451,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Position15,CG_POSITION15,"POSITION15",2452,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Diffuse0,CG_DIFFUSE0,"DIFFUSE0",2501,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent0,CG_TANGENT0,"TANGENT0",2565,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent1,CG_TANGENT1,"TANGENT1",2566,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent2,CG_TANGENT2,"TANGENT2",2567,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent3,CG_TANGENT3,"TANGENT3",2568,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent4,CG_TANGENT4,"TANGENT4",2569,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent5,CG_TANGENT5,"TANGENT5",2570,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent6,CG_TANGENT6,"TANGENT6",2571,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent7,CG_TANGENT7,"TANGENT7",2572,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent8,CG_TANGENT8,"TANGENT8",2573,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent9,CG_TANGENT9,"TANGENT9",2574,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent10,CG_TANGENT10,"TANGENT10",2575,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent11,CG_TANGENT11,"TANGENT11",2576,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent12,CG_TANGENT12,"TANGENT12",2577,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent13,CG_TANGENT13,"TANGENT13",2578,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent14,CG_TANGENT14,"TANGENT14",2579,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Tangent15,CG_TANGENT15,"TANGENT15",2580,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Specular0,CG_SPECULAR0,"SPECULAR0",2629,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices0,CG_BLENDINDICES0,"BLENDINDICES0",2693,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices1,CG_BLENDINDICES1,"BLENDINDICES1",2694,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices2,CG_BLENDINDICES2,"BLENDINDICES2",2695,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices3,CG_BLENDINDICES3,"BLENDINDICES3",2696,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices4,CG_BLENDINDICES4,"BLENDINDICES4",2697,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices5,CG_BLENDINDICES5,"BLENDINDICES5",2698,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices6,CG_BLENDINDICES6,"BLENDINDICES6",2699,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices7,CG_BLENDINDICES7,"BLENDINDICES7",2700,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices8,CG_BLENDINDICES8,"BLENDINDICES8",2701,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices9,CG_BLENDINDICES9,"BLENDINDICES9",2702,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices10,CG_BLENDINDICES10,"BLENDINDICES10",2703,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices11,CG_BLENDINDICES11,"BLENDINDICES11",2704,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices12,CG_BLENDINDICES12,"BLENDINDICES12",2705,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices13,CG_BLENDINDICES13,"BLENDINDICES13",2706,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices14,CG_BLENDINDICES14,"BLENDINDICES14",2707,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendIndices15,CG_BLENDINDICES15,"BLENDINDICES15",2708,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color0,CG_COLOR0,"COLOR0",2757,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color1,CG_COLOR1,"COLOR1",2758,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color2,CG_COLOR2,"COLOR2",2759,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color3,CG_COLOR3,"COLOR3",2760,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color4,CG_COLOR4,"COLOR4",2761,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color5,CG_COLOR5,"COLOR5",2762,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color6,CG_COLOR6,"COLOR6",2763,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color7,CG_COLOR7,"COLOR7",2764,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color8,CG_COLOR8,"COLOR8",2765,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color9,CG_COLOR9,"COLOR9",2766,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color10,CG_COLOR10,"COLOR10",2767,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color11,CG_COLOR11,"COLOR11",2768,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color12,CG_COLOR12,"COLOR12",2769,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color13,CG_COLOR13,"COLOR13",2770,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color14,CG_COLOR14,"COLOR14",2771,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Color15,CG_COLOR15,"COLOR15",2772,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize0,CG_PSIZE0,"PSIZE0",2821,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize1,CG_PSIZE1,"PSIZE1",2822,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize2,CG_PSIZE2,"PSIZE2",2823,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize3,CG_PSIZE3,"PSIZE3",2824,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize4,CG_PSIZE4,"PSIZE4",2825,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize5,CG_PSIZE5,"PSIZE5",2826,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize6,CG_PSIZE6,"PSIZE6",2827,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize7,CG_PSIZE7,"PSIZE7",2828,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize8,CG_PSIZE8,"PSIZE8",2829,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize9,CG_PSIZE9,"PSIZE9",2830,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize10,CG_PSIZE10,"PSIZE10",2831,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize11,CG_PSIZE11,"PSIZE11",2832,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize12,CG_PSIZE12,"PSIZE12",2833,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize13,CG_PSIZE13,"PSIZE13",2834,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize14,CG_PSIZE14,"PSIZE14",2835,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PSize15,CG_PSIZE15,"PSIZE15",2836,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal0,CG_BINORMAL0,"BINORMAL0",2885,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal1,CG_BINORMAL1,"BINORMAL1",2886,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal2,CG_BINORMAL2,"BINORMAL2",2887,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal3,CG_BINORMAL3,"BINORMAL3",2888,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal4,CG_BINORMAL4,"BINORMAL4",2889,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal5,CG_BINORMAL5,"BINORMAL5",2890,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal6,CG_BINORMAL6,"BINORMAL6",2891,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal7,CG_BINORMAL7,"BINORMAL7",2892,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal8,CG_BINORMAL8,"BINORMAL8",2893,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal9,CG_BINORMAL9,"BINORMAL9",2894,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal10,CG_BINORMAL10,"BINORMAL10",2895,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal11,CG_BINORMAL11,"BINORMAL11",2896,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal12,CG_BINORMAL12,"BINORMAL12",2897,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal13,CG_BINORMAL13,"BINORMAL13",2898,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal14,CG_BINORMAL14,"BINORMAL14",2899,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BiNormal15,CG_BINORMAL15,"BINORMAL15",2900,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG0,CG_FOG0,"FOG0",2917,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG1,CG_FOG1,"FOG1",2918,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG2,CG_FOG2,"FOG2",2919,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG3,CG_FOG3,"FOG3",2920,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG4,CG_FOG4,"FOG4",2921,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG5,CG_FOG5,"FOG5",2922,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG6,CG_FOG6,"FOG6",2923,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG7,CG_FOG7,"FOG7",2924,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG8,CG_FOG8,"FOG8",2925,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG9,CG_FOG9,"FOG9",2926,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG10,CG_FOG10,"FOG10",2927,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG11,CG_FOG11,"FOG11",2928,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG12,CG_FOG12,"FOG12",2929,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG13,CG_FOG13,"FOG13",2930,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG14,CG_FOG14,"FOG14",2931,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FOG15,CG_FOG15,"FOG15",2932,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH0,CG_DEPTH0,"DEPTH0",2933,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH1,CG_DEPTH1,"DEPTH1",2934,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH2,CG_DEPTH2,"DEPTH2",2935,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH3,CG_DEPTH3,"DEPTH3",2936,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH4,CG_DEPTH4,"DEPTH4",2937,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH5,CG_DEPTH5,"DEPTH5",2938,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH6,CG_DEPTH6,"DEPTH6",2939,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH7,CG_DEPTH7,"DEPTH7",2940,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH8,CG_DEPTH8,"DEPTH8",2941,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH9,CG_DEPTH9,"DEPTH9",2942,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH10,CG_DEPTH10,"DEPTH10",2943,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH11,CG_DEPTH11,"DEPTH11",2944,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH12,CG_DEPTH12,"DEPTH12",2945,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH13,CG_DEPTH13,"DEPTH13",2946,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH14,CG_DEPTH14,"DEPTH14",2947,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(DEPTH15,CG_DEPTH15,"DEPTH15",2948,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE0,CG_SAMPLE0,"SAMPLE0",2949,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE1,CG_SAMPLE1,"SAMPLE1",2950,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE2,CG_SAMPLE2,"SAMPLE2",2951,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE3,CG_SAMPLE3,"SAMPLE3",2952,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE4,CG_SAMPLE4,"SAMPLE4",2953,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE5,CG_SAMPLE5,"SAMPLE5",2954,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE6,CG_SAMPLE6,"SAMPLE6",2955,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE7,CG_SAMPLE7,"SAMPLE7",2956,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE8,CG_SAMPLE8,"SAMPLE8",2957,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE9,CG_SAMPLE9,"SAMPLE9",2958,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE10,CG_SAMPLE10,"SAMPLE10",2959,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE11,CG_SAMPLE11,"SAMPLE11",2960,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE12,CG_SAMPLE12,"SAMPLE12",2961,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE13,CG_SAMPLE13,"SAMPLE13",2962,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE14,CG_SAMPLE14,"SAMPLE14",2963,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SAMPLE15,CG_SAMPLE15,"SAMPLE15",2964,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight0,CG_BLENDWEIGHT0,"BLENDWEIGHT0",3028,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight1,CG_BLENDWEIGHT1,"BLENDWEIGHT1",3029,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight2,CG_BLENDWEIGHT2,"BLENDWEIGHT2",3030,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight3,CG_BLENDWEIGHT3,"BLENDWEIGHT3",3031,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight4,CG_BLENDWEIGHT4,"BLENDWEIGHT4",3032,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight5,CG_BLENDWEIGHT5,"BLENDWEIGHT5",3033,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight6,CG_BLENDWEIGHT6,"BLENDWEIGHT6",3034,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight7,CG_BLENDWEIGHT7,"BLENDWEIGHT7",3035,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight8,CG_BLENDWEIGHT8,"BLENDWEIGHT8",3036,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight9,CG_BLENDWEIGHT9,"BLENDWEIGHT9",3037,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight10,CG_BLENDWEIGHT10,"BLENDWEIGHT10",3038,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight11,CG_BLENDWEIGHT11,"BLENDWEIGHT11",3039,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight12,CG_BLENDWEIGHT12,"BLENDWEIGHT12",3040,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight13,CG_BLENDWEIGHT13,"BLENDWEIGHT13",3041,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight14,CG_BLENDWEIGHT14,"BLENDWEIGHT14",3042,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(BlendWeight15,CG_BLENDWEIGHT15,"BLENDWEIGHT15",3043,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal0,CG_NORMAL0,"NORMAL0",3092,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal1,CG_NORMAL1,"NORMAL1",3093,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal2,CG_NORMAL2,"NORMAL2",3094,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal3,CG_NORMAL3,"NORMAL3",3095,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal4,CG_NORMAL4,"NORMAL4",3096,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal5,CG_NORMAL5,"NORMAL5",3097,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal6,CG_NORMAL6,"NORMAL6",3098,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal7,CG_NORMAL7,"NORMAL7",3099,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal8,CG_NORMAL8,"NORMAL8",3100,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal9,CG_NORMAL9,"NORMAL9",3101,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal10,CG_NORMAL10,"NORMAL10",3102,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal11,CG_NORMAL11,"NORMAL11",3103,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal12,CG_NORMAL12,"NORMAL12",3104,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal13,CG_NORMAL13,"NORMAL13",3105,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal14,CG_NORMAL14,"NORMAL14",3106,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Normal15,CG_NORMAL15,"NORMAL15",3107,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(FogCoord,CG_FOGCOORD,"FOGCOORD",3156,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord0,CG_TEXCOORD0,"TEXCOORD0",3220,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord1,CG_TEXCOORD1,"TEXCOORD1",3221,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord2,CG_TEXCOORD2,"TEXCOORD2",3222,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord3,CG_TEXCOORD3,"TEXCOORD3",3223,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord4,CG_TEXCOORD4,"TEXCOORD4",3224,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord5,CG_TEXCOORD5,"TEXCOORD5",3225,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord6,CG_TEXCOORD6,"TEXCOORD6",3226,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord7,CG_TEXCOORD7,"TEXCOORD7",3227,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord8,CG_TEXCOORD8,"TEXCOORD8",3228,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord9,CG_TEXCOORD9,"TEXCOORD9",3229,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord10,CG_TEXCOORD10,"TEXCOORD10",3230,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord11,CG_TEXCOORD11,"TEXCOORD11",3231,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord12,CG_TEXCOORD12,"TEXCOORD12",3232,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord13,CG_TEXCOORD13,"TEXCOORD13",3233,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord14,CG_TEXCOORD14,"TEXCOORD14",3234,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(TexCoord15,CG_TEXCOORD15,"TEXCOORD15",3235,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(CombinerConst0,CG_COMBINER_CONST0,"COMBINER_CONST0",3284,0,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(CombinerConst1,CG_COMBINER_CONST1,"COMBINER_CONST1",3285,0,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(CombinerStageConst0,CG_COMBINER_STAGE_CONST0,"COMBINER_STAGE_CONST0",3286,1,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(CombinerStageConst1,CG_COMBINER_STAGE_CONST1,"COMBINER_STAGE_CONST1",3287,1,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(OffsetTextureMatrix,CG_OFFSET_TEXTURE_MATRIX,"OFFSET_TEXTURE_MATRIX",3288,0,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(OffsetTextureScale,CG_OFFSET_TEXTURE_SCALE,"OFFSET_TEXTURE_SCALE",3289,0,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(OffsetTextureBias,CG_OFFSET_TEXTURE_BIAS,"OFFSET_TEXTURE_BIAS",3290,0,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(ConstEye,CG_CONST_EYE,"CONST_EYE",3291,0,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Coverage, CG_COVERAGE, "COVERAGE", 3292, 0, CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(TessFactor,CG_TESSFACTOR,"TESSFACTOR",3255,0,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(GLSLUniform,CG_GLSL_UNIFORM,"glsl_uniform",3300,1,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(GLSLAttrib,CG_GLSL_ATTRIB,"glsl_attrib",3301,1,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(Env,CG_ENV,"ENV",3302,1,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(HLSLUniform,CG_HLSL_UNIFORM,"hlsl_uniform",3559,1,CGI_UNIFORM_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(HLSLAttrib,CG_HLSL_VARYING,"hlsl_attrib",3560,1,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(SamplerResource,CG_SAMPLER_RES, "SAMPLER_RES", 3561, 1, CGI_UNIFORM_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor0, CG_LASTCOL0, "LASTCOL0", 4400, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor1, CG_LASTCOL1, "LASTCOL1", 4401, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor2, CG_LASTCOL2, "LASTCOL2", 4402, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor3, CG_LASTCOL3, "LASTCOL3", 4403, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor4, CG_LASTCOL4, "LASTCOL4", 4404, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor5, CG_LASTCOL5, "LASTCOL5", 4405, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor6, CG_LASTCOL6, "LASTCOL6", 4406, 0, CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(LastColor7, CG_LASTCOL7, "LASTCOL7", 4407, 0, CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
CG_BINDLOCATION_MACRO(Face,CG_FACE,"FACE",4410,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(PrimitiveId,CG_PRIMITIVEID,"PRIMITIVEID",4411,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(InstanceId,CG_INSTANCEID,"INSTANCEID",4412,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SampleId,CG_SAMPLEID,"SAMPLEID",4413,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(VertexId,CG_VERTEXID,"VERTEXID",4414,0,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(Layer,CG_LAYER,"LAYER",4415,1,CG_VARYING_PARAM)
|
||||||
|
CG_BINDLOCATION_MACRO(SampleMask,CG_SAMPLEMASK,"SAMPLEMASK",4416,0,CG_VARYING_PARAM)
|
||||||
|
|
||||||
|
#undef CG_BINDLOCATION_MACRO
|
|
@ -0,0 +1,191 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following macro invocations define the supported CG basic data types.
|
||||||
|
*
|
||||||
|
* The macros have the form :
|
||||||
|
*
|
||||||
|
* CG_DATATYPE_MACRO(name, compiler_name, enum_name, base_name, nrows, ncols, pc_name)
|
||||||
|
*
|
||||||
|
* name : The name of the data type.
|
||||||
|
* compiler_name : The name of the data type within the compiler syntax.
|
||||||
|
* enum_name : The C enumerant.
|
||||||
|
* base_name : The C enumerant of the base type.
|
||||||
|
* nrows : Number of rows for matrix types. Should be 0 other-wise.
|
||||||
|
* ncols : Number of columns for scalar, vector, and matrix types.
|
||||||
|
* pc_name : The C enumerant of the parameter class.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CG_DATATYPE_MACRO(Half,half,CG_HALF,CG_HALF,0,1,CG_PARAMETERCLASS_SCALAR)
|
||||||
|
CG_DATATYPE_MACRO(Half2,half2,CG_HALF2,CG_HALF,0,2,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Half3,half3,CG_HALF3,CG_HALF,0,3,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Half4,half4,CG_HALF4,CG_HALF,0,4,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Half1x1,half1x1,CG_HALF1x1,CG_HALF,1,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half1x2,half1x2,CG_HALF1x2,CG_HALF,1,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half1x3,half1x3,CG_HALF1x3,CG_HALF,1,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half1x4,half1x4,CG_HALF1x4,CG_HALF,1,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half2x1,half2x1,CG_HALF2x1,CG_HALF,2,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half2x2,half2x2,CG_HALF2x2,CG_HALF,2,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half2x3,half2x3,CG_HALF2x3,CG_HALF,2,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half2x4,half2x4,CG_HALF2x4,CG_HALF,2,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half3x1,half3x1,CG_HALF3x1,CG_HALF,3,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half3x2,half3x2,CG_HALF3x2,CG_HALF,3,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half3x3,half3x3,CG_HALF3x3,CG_HALF,3,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half3x4,half3x4,CG_HALF3x4,CG_HALF,3,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half4x1,half4x1,CG_HALF4x1,CG_HALF,4,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half4x2,half4x2,CG_HALF4x2,CG_HALF,4,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half4x3,half4x3,CG_HALF4x3,CG_HALF,4,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half4x4,half4x4,CG_HALF4x4,CG_HALF,4,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float,float,CG_FLOAT,CG_FLOAT,0,1,CG_PARAMETERCLASS_SCALAR)
|
||||||
|
CG_DATATYPE_MACRO(Float2,float2,CG_FLOAT2,CG_FLOAT,0,2,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Float3,float3,CG_FLOAT3,CG_FLOAT,0,3,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Float4,float4,CG_FLOAT4,CG_FLOAT,0,4,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Float1x1,float1x1,CG_FLOAT1x1,CG_FLOAT,1,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float1x2,float1x2,CG_FLOAT1x2,CG_FLOAT,1,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float1x3,float1x3,CG_FLOAT1x3,CG_FLOAT,1,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float1x4,float1x4,CG_FLOAT1x4,CG_FLOAT,1,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float2x1,float2x1,CG_FLOAT2x1,CG_FLOAT,2,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float2x2,float2x2,CG_FLOAT2x2,CG_FLOAT,2,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float2x3,float2x3,CG_FLOAT2x3,CG_FLOAT,2,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float2x4,float2x4,CG_FLOAT2x4,CG_FLOAT,2,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float3x1,float3x1,CG_FLOAT3x1,CG_FLOAT,3,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float3x2,float3x2,CG_FLOAT3x2,CG_FLOAT,3,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float3x3,float3x3,CG_FLOAT3x3,CG_FLOAT,3,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float3x4,float3x4,CG_FLOAT3x4,CG_FLOAT,3,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float4x1,float4x1,CG_FLOAT4x1,CG_FLOAT,4,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float4x2,float4x2,CG_FLOAT4x2,CG_FLOAT,4,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float4x3,float4x3,CG_FLOAT4x3,CG_FLOAT,4,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Float4x4,float4x4,CG_FLOAT4x4,CG_FLOAT,4,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Sampler1D,sampler1D,CG_SAMPLER1D,CG_SAMPLER1D,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(Sampler2D,sampler2D,CG_SAMPLER2D,CG_SAMPLER2D,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(Sampler3D,sampler3D,CG_SAMPLER3D,CG_SAMPLER3D,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(SamplerRECT,samplerRECT,CG_SAMPLERRECT,CG_SAMPLERRECT,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(SamplerCUBE,samplerCUBE,CG_SAMPLERCUBE,CG_SAMPLERCUBE,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(Fixed,fixed,CG_FIXED,CG_FIXED,0,1,CG_PARAMETERCLASS_SCALAR)
|
||||||
|
CG_DATATYPE_MACRO(Fixed2,fixed2,CG_FIXED2,CG_FIXED,0,2,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Fixed3,fixed3,CG_FIXED3,CG_FIXED,0,3,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Fixed4,fixed4,CG_FIXED4,CG_FIXED,0,4,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Fixed1x1,fixed1x1,CG_FIXED1x1,CG_FIXED,1,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed1x2,fixed1x2,CG_FIXED1x2,CG_FIXED,1,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed1x3,fixed1x3,CG_FIXED1x3,CG_FIXED,1,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed1x4,fixed1x4,CG_FIXED1x4,CG_FIXED,1,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed2x1,fixed2x1,CG_FIXED2x1,CG_FIXED,2,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed2x2,fixed2x2,CG_FIXED2x2,CG_FIXED,2,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed2x3,fixed2x3,CG_FIXED2x3,CG_FIXED,2,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed2x4,fixed2x4,CG_FIXED2x4,CG_FIXED,2,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed3x1,fixed3x1,CG_FIXED3x1,CG_FIXED,3,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed3x2,fixed3x2,CG_FIXED3x2,CG_FIXED,3,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed3x3,fixed3x3,CG_FIXED3x3,CG_FIXED,3,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed3x4,fixed3x4,CG_FIXED3x4,CG_FIXED,3,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed4x1,fixed4x1,CG_FIXED4x1,CG_FIXED,4,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed4x2,fixed4x2,CG_FIXED4x2,CG_FIXED,4,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed4x3,fixed4x3,CG_FIXED4x3,CG_FIXED,4,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Fixed4x4,fixed4x4,CG_FIXED4x4,CG_FIXED,4,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Half1,half1,CG_HALF1,CG_HALF,0,1,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Float1,float1,CG_FLOAT1,CG_FLOAT,0,1,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Fixed1,fixed1,CG_FIXED1,CG_FIXED,0,1,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Int,int,CG_INT,CG_INT,0,1,CG_PARAMETERCLASS_SCALAR)
|
||||||
|
CG_DATATYPE_MACRO(Int1,int1,CG_INT1,CG_INT,0,1,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Int2,int2,CG_INT2,CG_INT,0,2,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Int3,int3,CG_INT3,CG_INT,0,3,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Int4,int4,CG_INT4,CG_INT,0,4,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Int1x1,int1x1,CG_INT1x1,CG_INT,1,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int1x2,int1x2,CG_INT1x2,CG_INT,1,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int1x3,int1x3,CG_INT1x3,CG_INT,1,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int1x4,int1x4,CG_INT1x4,CG_INT,1,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int2x1,int2x1,CG_INT2x1,CG_INT,2,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int2x2,int2x2,CG_INT2x2,CG_INT,2,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int2x3,int2x3,CG_INT2x3,CG_INT,2,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int2x4,int2x4,CG_INT2x4,CG_INT,2,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int3x1,int3x1,CG_INT3x1,CG_INT,3,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int3x2,int3x2,CG_INT3x2,CG_INT,3,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int3x3,int3x3,CG_INT3x3,CG_INT,3,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int3x4,int3x4,CG_INT3x4,CG_INT,3,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int4x1,int4x1,CG_INT4x1,CG_INT,4,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int4x2,int4x2,CG_INT4x2,CG_INT,4,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int4x3,int4x3,CG_INT4x3,CG_INT,4,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Int4x4,int4x4,CG_INT4x4,CG_INT,4,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool,bool,CG_BOOL,CG_BOOL,0,1,CG_PARAMETERCLASS_SCALAR)
|
||||||
|
CG_DATATYPE_MACRO(Bool1,bool1,CG_BOOL1,CG_BOOL,0,1,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Bool2,bool2,CG_BOOL2,CG_BOOL,0,2,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Bool3,bool3,CG_BOOL3,CG_BOOL,0,3,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Bool4,bool4,CG_BOOL4,CG_BOOL,0,4,CG_PARAMETERCLASS_VECTOR)
|
||||||
|
CG_DATATYPE_MACRO(Bool1x1,bool1x1,CG_BOOL1x1,CG_BOOL,1,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool1x2,bool1x2,CG_BOOL1x2,CG_BOOL,1,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool1x3,bool1x3,CG_BOOL1x3,CG_BOOL,1,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool1x4,bool1x4,CG_BOOL1x4,CG_BOOL,1,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool2x1,bool2x1,CG_BOOL2x1,CG_BOOL,2,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool2x2,bool2x2,CG_BOOL2x2,CG_BOOL,2,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool2x3,bool2x3,CG_BOOL2x3,CG_BOOL,2,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool2x4,bool2x4,CG_BOOL2x4,CG_BOOL,2,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool3x1,bool3x1,CG_BOOL3x1,CG_BOOL,3,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool3x2,bool3x2,CG_BOOL3x2,CG_BOOL,3,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool3x3,bool3x3,CG_BOOL3x3,CG_BOOL,3,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool3x4,bool3x4,CG_BOOL3x4,CG_BOOL,3,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool4x1,bool4x1,CG_BOOL4x1,CG_BOOL,4,1,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool4x2,bool4x2,CG_BOOL4x2,CG_BOOL,4,2,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool4x3,bool4x3,CG_BOOL4x3,CG_BOOL,4,3,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(Bool4x4,bool4x4,CG_BOOL4x4,CG_BOOL,4,4,CG_PARAMETERCLASS_MATRIX)
|
||||||
|
CG_DATATYPE_MACRO(String,string,CG_STRING,CG_STRING,0,1,CG_PARAMETERCLASS_OBJECT)
|
||||||
|
CG_DATATYPE_MACRO(Program,program,CG_PROGRAM_TYPE,CG_PROGRAM_TYPE,0,0,CG_PARAMETERCLASS_OBJECT)
|
||||||
|
CG_DATATYPE_MACRO(Texture,texture,CG_TEXTURE,CG_TEXTURE,0,0,CG_PARAMETERCLASS_OBJECT)
|
||||||
|
CG_DATATYPE_MACRO(Sampler1DARRAY,sampler1DARRAY,CG_SAMPLER1DARRAY,CG_SAMPLER1DARRAY,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(Sampler2DARRAY,sampler2DARRAY,CG_SAMPLER2DARRAY,CG_SAMPLER2DARRAY,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(SamplerCUBEARRAY,samplerCUBEARRAY,CG_SAMPLERCUBEARRAY,CG_SAMPLERCUBEARRAY,0,0,CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
CG_DATATYPE_MACRO(VertexShader, vertexshader, CG_VERTEXSHADER_TYPE, CG_VERTEXSHADER_TYPE, 0, 0, CG_PARAMETERCLASS_OBJECT)
|
||||||
|
CG_DATATYPE_MACRO(PixelShader, pixelshader, CG_PIXELSHADER_TYPE, CG_PIXELSHADER_TYPE, 0, 0, CG_PARAMETERCLASS_OBJECT)
|
||||||
|
CG_DATATYPE_MACRO(Sampler, sampler, CG_SAMPLER, CG_SAMPLER, 0, 0, CG_PARAMETERCLASS_SAMPLER)
|
||||||
|
#undef CG_DATATYPE_MACRO
|
|
@ -0,0 +1,112 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following macro invocations define the supported CG basic data types.
|
||||||
|
*
|
||||||
|
* The macros have the form :
|
||||||
|
*
|
||||||
|
* CG_ENUM_MACRO(enum_name, enum_val)
|
||||||
|
*
|
||||||
|
* enum_name : The C enumerant name.
|
||||||
|
* enum_val : The enumerant value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CG_ENUM_MACRO(CG_UNKNOWN, 4096)
|
||||||
|
CG_ENUM_MACRO(CG_IN, 4097)
|
||||||
|
CG_ENUM_MACRO(CG_OUT, 4098)
|
||||||
|
CG_ENUM_MACRO(CG_INOUT, 4099)
|
||||||
|
CG_ENUM_MACRO(CG_MIXED, 4100)
|
||||||
|
CG_ENUM_MACRO(CG_VARYING, 4101)
|
||||||
|
CG_ENUM_MACRO(CG_UNIFORM, 4102)
|
||||||
|
CG_ENUM_MACRO(CG_CONSTANT, 4103)
|
||||||
|
CG_ENUM_MACRO(CG_PROGRAM_SOURCE, 4104)
|
||||||
|
CG_ENUM_MACRO(CG_PROGRAM_ENTRY, 4105)
|
||||||
|
CG_ENUM_MACRO(CG_COMPILED_PROGRAM, 4106)
|
||||||
|
CG_ENUM_MACRO(CG_PROGRAM_PROFILE, 4107)
|
||||||
|
CG_ENUM_MACRO(CG_GLOBAL, 4108)
|
||||||
|
CG_ENUM_MACRO(CG_PROGRAM, 4109)
|
||||||
|
CG_ENUM_MACRO(CG_DEFAULT, 4110)
|
||||||
|
CG_ENUM_MACRO(CG_ERROR, 4111)
|
||||||
|
CG_ENUM_MACRO(CG_SOURCE, 4112)
|
||||||
|
CG_ENUM_MACRO(CG_OBJECT, 4113)
|
||||||
|
CG_ENUM_MACRO(CG_COMPILE_MANUAL, 4114)
|
||||||
|
CG_ENUM_MACRO(CG_COMPILE_IMMEDIATE, 4115)
|
||||||
|
CG_ENUM_MACRO(CG_COMPILE_LAZY, 4116)
|
||||||
|
CG_ENUM_MACRO(CG_CURRENT, 4117)
|
||||||
|
CG_ENUM_MACRO(CG_LITERAL, 4118)
|
||||||
|
CG_ENUM_MACRO(CG_VERSION, 4119)
|
||||||
|
CG_ENUM_MACRO(CG_ROW_MAJOR, 4120)
|
||||||
|
CG_ENUM_MACRO(CG_COLUMN_MAJOR, 4121)
|
||||||
|
CG_ENUM_MACRO(CG_FRAGMENT, 4122)
|
||||||
|
CG_ENUM_MACRO(CG_VERTEX, 4123)
|
||||||
|
CG_ENUM_MACRO(CG_POINT, 4124)
|
||||||
|
CG_ENUM_MACRO(CG_LINE, 4125)
|
||||||
|
CG_ENUM_MACRO(CG_LINE_ADJ, 4126)
|
||||||
|
CG_ENUM_MACRO(CG_TRIANGLE, 4127)
|
||||||
|
CG_ENUM_MACRO(CG_TRIANGLE_ADJ, 4128)
|
||||||
|
CG_ENUM_MACRO(CG_POINT_OUT, 4129)
|
||||||
|
CG_ENUM_MACRO(CG_LINE_OUT, 4130)
|
||||||
|
CG_ENUM_MACRO(CG_TRIANGLE_OUT, 4131)
|
||||||
|
CG_ENUM_MACRO(CG_IMMEDIATE_PARAMETER_SETTING, 4132)
|
||||||
|
CG_ENUM_MACRO(CG_DEFERRED_PARAMETER_SETTING, 4133)
|
||||||
|
CG_ENUM_MACRO(CG_NO_LOCKS_POLICY, 4134)
|
||||||
|
CG_ENUM_MACRO(CG_THREAD_SAFE_POLICY, 4135)
|
||||||
|
CG_ENUM_MACRO(CG_FORCE_UPPER_CASE_POLICY, 4136)
|
||||||
|
CG_ENUM_MACRO(CG_UNCHANGED_CASE_POLICY, 4137)
|
||||||
|
#undef CG_ENUM_MACRO
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,320 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following macro invocations define error codes returned by various cg
|
||||||
|
* API functions.
|
||||||
|
*
|
||||||
|
* The macros have the form :
|
||||||
|
*
|
||||||
|
* CG_ERROR_MACRO(code, enum_name, message)
|
||||||
|
*
|
||||||
|
* code : The integer error code associated with the error.
|
||||||
|
* enum_name : The name of enumerant of the error code in the API.
|
||||||
|
* message : A description string associated with the error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(0,
|
||||||
|
CG_NO_ERROR,
|
||||||
|
"No error has occurred.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(1,
|
||||||
|
CG_COMPILER_ERROR,
|
||||||
|
"The compile returned an error.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(2,
|
||||||
|
CG_INVALID_PARAMETER_ERROR,
|
||||||
|
"The parameter used is invalid.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(3,
|
||||||
|
CG_INVALID_PROFILE_ERROR,
|
||||||
|
"The profile is not supported.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(4,
|
||||||
|
CG_PROGRAM_LOAD_ERROR,
|
||||||
|
"The program could not load.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(5,
|
||||||
|
CG_PROGRAM_BIND_ERROR,
|
||||||
|
"The program could not bind.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(6,
|
||||||
|
CG_PROGRAM_NOT_LOADED_ERROR,
|
||||||
|
"The program must be loaded before this operation may be used.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(7,
|
||||||
|
CG_UNSUPPORTED_GL_EXTENSION_ERROR,
|
||||||
|
"An unsupported GL extension was required to perform this operation.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(8,
|
||||||
|
CG_INVALID_VALUE_TYPE_ERROR,
|
||||||
|
"An unknown value type was assigned to a parameter.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(9,
|
||||||
|
CG_NOT_MATRIX_PARAM_ERROR,
|
||||||
|
"The parameter is not of matrix type.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(10,
|
||||||
|
CG_INVALID_ENUMERANT_ERROR,
|
||||||
|
"The enumerant parameter has an invalid value.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(11,
|
||||||
|
CG_NOT_4x4_MATRIX_ERROR,
|
||||||
|
"The parameter must be a 4x4 matrix type.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(12,
|
||||||
|
CG_FILE_READ_ERROR,
|
||||||
|
"The file could not be read.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(13,
|
||||||
|
CG_FILE_WRITE_ERROR,
|
||||||
|
"The file could not be written.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(14,
|
||||||
|
CG_NVPARSE_ERROR,
|
||||||
|
"nvparse could not successfully parse the output from the Cg "
|
||||||
|
"compiler backend.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(15,
|
||||||
|
CG_MEMORY_ALLOC_ERROR,
|
||||||
|
"Memory allocation failed.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(16,
|
||||||
|
CG_INVALID_CONTEXT_HANDLE_ERROR,
|
||||||
|
"Invalid context handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(17,
|
||||||
|
CG_INVALID_PROGRAM_HANDLE_ERROR,
|
||||||
|
"Invalid program handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(18,
|
||||||
|
CG_INVALID_PARAM_HANDLE_ERROR,
|
||||||
|
"Invalid parameter handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(19,
|
||||||
|
CG_UNKNOWN_PROFILE_ERROR,
|
||||||
|
"The specified profile is unknown.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(20,
|
||||||
|
CG_VAR_ARG_ERROR,
|
||||||
|
"The variable arguments were specified incorrectly.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(21,
|
||||||
|
CG_INVALID_DIMENSION_ERROR,
|
||||||
|
"The dimension value is invalid.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(22,
|
||||||
|
CG_ARRAY_PARAM_ERROR,
|
||||||
|
"The parameter must be an array.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(23,
|
||||||
|
CG_OUT_OF_ARRAY_BOUNDS_ERROR,
|
||||||
|
"Index into the array is out of bounds.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(24,
|
||||||
|
CG_CONFLICTING_TYPES_ERROR,
|
||||||
|
"A type being added to the context conflicts with an "
|
||||||
|
"existing type.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(25,
|
||||||
|
CG_CONFLICTING_PARAMETER_TYPES_ERROR,
|
||||||
|
"The parameters being bound have conflicting types.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(26,
|
||||||
|
CG_PARAMETER_IS_NOT_SHARED_ERROR,
|
||||||
|
"The parameter must be global.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(27,
|
||||||
|
CG_INVALID_PARAMETER_VARIABILITY_ERROR,
|
||||||
|
"The parameter could not be changed to the given variability.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(28,
|
||||||
|
CG_CANNOT_DESTROY_PARAMETER_ERROR,
|
||||||
|
"Cannot destroy the parameter. It is bound to other parameters "
|
||||||
|
"or is not a root parameter.")
|
||||||
|
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(29,
|
||||||
|
CG_NOT_ROOT_PARAMETER_ERROR,
|
||||||
|
"The parameter is not a root parameter.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(30,
|
||||||
|
CG_PARAMETERS_DO_NOT_MATCH_ERROR,
|
||||||
|
"The two parameters being bound do not match.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(31,
|
||||||
|
CG_IS_NOT_PROGRAM_PARAMETER_ERROR,
|
||||||
|
"The parameter is not a program parameter.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(32,
|
||||||
|
CG_INVALID_PARAMETER_TYPE_ERROR,
|
||||||
|
"The type of the parameter is invalid.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(33,
|
||||||
|
CG_PARAMETER_IS_NOT_RESIZABLE_ARRAY_ERROR,
|
||||||
|
"The parameter must be a resizable array.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(34,
|
||||||
|
CG_INVALID_SIZE_ERROR,
|
||||||
|
"The size value is invalid.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(35,
|
||||||
|
CG_BIND_CREATES_CYCLE_ERROR,
|
||||||
|
"Cannot bind the given parameters. Binding will form a cycle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(36,
|
||||||
|
CG_ARRAY_TYPES_DO_NOT_MATCH_ERROR,
|
||||||
|
"Cannot bind the given parameters. Array types do not match.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(37,
|
||||||
|
CG_ARRAY_DIMENSIONS_DO_NOT_MATCH_ERROR,
|
||||||
|
"Cannot bind the given parameters. "
|
||||||
|
"Array dimensions do not match.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(38,
|
||||||
|
CG_ARRAY_HAS_WRONG_DIMENSION_ERROR,
|
||||||
|
"The array has the wrong dimension.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(39,
|
||||||
|
CG_TYPE_IS_NOT_DEFINED_IN_PROGRAM_ERROR,
|
||||||
|
"Connecting the parameters failed because The type of the "
|
||||||
|
"source parameter is not defined within the given program "
|
||||||
|
"or does not match the type with the same name in the program.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(40,
|
||||||
|
CG_INVALID_EFFECT_HANDLE_ERROR,
|
||||||
|
"Invalid effect handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(41,
|
||||||
|
CG_INVALID_STATE_HANDLE_ERROR,
|
||||||
|
"Invalid state handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(42,
|
||||||
|
CG_INVALID_STATE_ASSIGNMENT_HANDLE_ERROR,
|
||||||
|
"Invalid stateassignment handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(43,
|
||||||
|
CG_INVALID_PASS_HANDLE_ERROR,
|
||||||
|
"Invalid pass handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(44,
|
||||||
|
CG_INVALID_ANNOTATION_HANDLE_ERROR,
|
||||||
|
"Invalid annotation handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(45,
|
||||||
|
CG_INVALID_TECHNIQUE_HANDLE_ERROR,
|
||||||
|
"Invalid technique handle.")
|
||||||
|
|
||||||
|
// Do not use this! Use CG_INVALID_PARAM_HANDLE_ERROR instead.
|
||||||
|
CG_ERROR_MACRO(46,
|
||||||
|
CG_INVALID_PARAMETER_HANDLE_ERROR,
|
||||||
|
"Invalid parameter handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(47,
|
||||||
|
CG_STATE_ASSIGNMENT_TYPE_MISMATCH_ERROR,
|
||||||
|
"Operation is not valid for this type of stateassignment.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(48,
|
||||||
|
CG_INVALID_FUNCTION_HANDLE_ERROR,
|
||||||
|
"Invalid function handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(49,
|
||||||
|
CG_INVALID_TECHNIQUE_ERROR,
|
||||||
|
"Technique did not pass validation.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(50,
|
||||||
|
CG_INVALID_POINTER_ERROR,
|
||||||
|
"The supplied pointer is NULL.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(51,
|
||||||
|
CG_NOT_ENOUGH_DATA_ERROR,
|
||||||
|
"Not enough data was provided.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(52,
|
||||||
|
CG_NON_NUMERIC_PARAMETER_ERROR,
|
||||||
|
"The parameter is not of a numeric type.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(53,
|
||||||
|
CG_ARRAY_SIZE_MISMATCH_ERROR,
|
||||||
|
"The specified array sizes are not compatible with the given array.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(54,
|
||||||
|
CG_CANNOT_SET_NON_UNIFORM_PARAMETER_ERROR,
|
||||||
|
"Cannot set the value of a non-uniform parameter.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(55,
|
||||||
|
CG_DUPLICATE_NAME_ERROR,
|
||||||
|
"This name is already in use.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(56,
|
||||||
|
CG_INVALID_OBJ_HANDLE_ERROR,
|
||||||
|
"Invalid object handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(57,
|
||||||
|
CG_INVALID_BUFFER_HANDLE_ERROR,
|
||||||
|
"Invalid buffer handle.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(58,
|
||||||
|
CG_BUFFER_INDEX_OUT_OF_RANGE_ERROR,
|
||||||
|
"Buffer index is out of bounds.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(59,
|
||||||
|
CG_BUFFER_ALREADY_MAPPED_ERROR,
|
||||||
|
"The buffer is already mapped.")
|
||||||
|
|
||||||
|
CG_ERROR_MACRO(60,
|
||||||
|
CG_BUFFER_UPDATE_NOT_ALLOWED_ERROR,
|
||||||
|
"The buffer cannot be updated.")
|
||||||
|
|
||||||
|
#undef CG_ERROR_MACRO
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2007, NVIDIA Corporation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
||||||
|
* of your agreement to the following terms, and your use, installation,
|
||||||
|
* modification or redistribution of this NVIDIA software constitutes
|
||||||
|
* acceptance of these terms. If you do not agree with these terms, please do
|
||||||
|
* not use, install, modify or redistribute this NVIDIA software.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* In consideration of your agreement to abide by the following terms, and
|
||||||
|
* subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
||||||
|
* under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
|
||||||
|
* Software"), to use, reproduce, modify and redistribute the NVIDIA
|
||||||
|
* Software, with or without modifications, in source and/or binary forms;
|
||||||
|
* provided that if you redistribute the NVIDIA Software, you must retain the
|
||||||
|
* copyright notice of NVIDIA, this notice and the following text and
|
||||||
|
* disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
||||||
|
* name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
||||||
|
* to endorse or promote products derived from the NVIDIA Software without
|
||||||
|
* specific prior written permission from NVIDIA. Except as expressly stated
|
||||||
|
* in this notice, no other rights or licenses express or implied, are granted
|
||||||
|
* by NVIDIA herein, including but not limited to any patent rights that may be
|
||||||
|
* infringed by your derivative works or by other works in which the NVIDIA
|
||||||
|
* Software may be incorporated. No hardware is licensed hereunder.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
* WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
||||||
|
* EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
* EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
||||||
|
* PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
||||||
|
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
||||||
|
* HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
||||||
|
* NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following macro invocations define the supported CG profiles.
|
||||||
|
*
|
||||||
|
* The macros have the form :
|
||||||
|
*
|
||||||
|
* CG_PROFILE_MACRO(name, compiler_id, compiler_opt)
|
||||||
|
*
|
||||||
|
* name : The name of the profile. Used consistently with the API.
|
||||||
|
* compiler_id : The identifier string for the profile used by the compiler.
|
||||||
|
* compiler_id_caps : compiler_id in caps.
|
||||||
|
* compiler_opt : The command-line switch used to force compilation into
|
||||||
|
* the profile.
|
||||||
|
* int_id : Integer enumerant associated with this bind location.
|
||||||
|
* vertex_profile : Non-zero if this is a vertex profile, otherwise it
|
||||||
|
* is considered to be a fragment profile.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CG_IN_PROFILES_INCLUDE
|
||||||
|
|
||||||
|
#include <Cg/cgGL_profiles.h>
|
||||||
|
|
||||||
|
|
||||||
|
CG_PROFILE_MACRO(DX9Vertex11,vs_1_1,VS_1_1,"vs_1_1",6153,1)
|
||||||
|
CG_PROFILE_MACRO(DX9Vertex20,vs_2_0,VS_2_0,"vs_2_0",6154,1)
|
||||||
|
CG_PROFILE_MACRO(DX9Vertex2x,vs_2_x,VS_2_X,"vs_2_x",6155,1)
|
||||||
|
CG_PROFILE_MACRO(DX9Vertex2sw,vs_2_sw,VS_2_SW,"vs_2_sw",6156,1)
|
||||||
|
CG_PROFILE_MACRO(DX9Vertex30,vs_3_0,VS_3_0,"vs_3_0",6157,1)
|
||||||
|
CG_PROFILE_MACRO(DX9VertexHLSL,hlslv, HLSLV,"hlslv",6158,1)
|
||||||
|
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel11,ps_1_1,PS_1_1,"ps_1_1",6159,0)
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel12,ps_1_2,PS_1_2,"ps_1_2",6160,0)
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel13,ps_1_3,PS_1_3,"ps_1_3",6161,0)
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel20,ps_2_0,PS_2_0,"ps_2_0",6162,0)
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel2x,ps_2_x,PS_2_X,"ps_2_x",6163,0)
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel2sw,ps_2_sw,PS_2_SW,"ps_2_sw",6164,0)
|
||||||
|
CG_PROFILE_MACRO(DX9Pixel30,ps_3_0,PS_3_0,"ps_3_0",6165,0)
|
||||||
|
CG_PROFILE_MACRO(DX9PixelHLSL,hlslf,HLSLF,"hlslf",6166,0)
|
||||||
|
|
||||||
|
CG_PROFILE_MACRO(Generic, generic, GENERIC, "generic", 7002,0)
|
||||||
|
|
||||||
|
#undef CG_PROFILE_MACRO
|
||||||
|
#undef CG_IN_PROFILES_INCLUDE
|
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,624 @@
|
||||||
|
// Windows Template Library - WTL version 8.0
|
||||||
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is a part of the Windows Template Library.
|
||||||
|
// The use and distribution terms for this software are covered by the
|
||||||
|
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||||
|
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||||
|
// By using this software in any fashion, you are agreeing to be bound by
|
||||||
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
// any other, from this software.
|
||||||
|
|
||||||
|
#ifndef __ATLDDX_H__
|
||||||
|
#define __ATLDDX_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ATLAPP_H__
|
||||||
|
#error atlddx.h requires atlapp.h to be included first
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_ATL_USE_DDX_FLOAT) && defined(_ATL_MIN_CRT)
|
||||||
|
#error Cannot use floating point DDX with _ATL_MIN_CRT defined
|
||||||
|
#endif // defined(_ATL_USE_DDX_FLOAT) && defined(_ATL_MIN_CRT)
|
||||||
|
|
||||||
|
#ifdef _ATL_USE_DDX_FLOAT
|
||||||
|
#include <float.h>
|
||||||
|
#endif // _ATL_USE_DDX_FLOAT
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Classes in this file:
|
||||||
|
//
|
||||||
|
// CWinDataExchange<T>
|
||||||
|
|
||||||
|
|
||||||
|
namespace WTL
|
||||||
|
{
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
#define DDX_LOAD FALSE
|
||||||
|
#define DDX_SAVE TRUE
|
||||||
|
|
||||||
|
// DDX map macros
|
||||||
|
#define BEGIN_DDX_MAP(thisClass) \
|
||||||
|
BOOL DoDataExchange(BOOL bSaveAndValidate = FALSE, UINT nCtlID = (UINT)-1) \
|
||||||
|
{ \
|
||||||
|
bSaveAndValidate; \
|
||||||
|
nCtlID;
|
||||||
|
|
||||||
|
#define DDX_TEXT(nID, var) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Text(nID, var, sizeof(var), bSaveAndValidate)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_TEXT_LEN(nID, var, len) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Text(nID, var, sizeof(var), bSaveAndValidate, TRUE, len)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_INT(nID, var) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Int(nID, var, TRUE, bSaveAndValidate)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_INT_RANGE(nID, var, min, max) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Int(nID, var, TRUE, bSaveAndValidate, TRUE, min, max)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_UINT(nID, var) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Int(nID, var, FALSE, bSaveAndValidate)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_UINT_RANGE(nID, var, min, max) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Int(nID, var, FALSE, bSaveAndValidate, TRUE, min, max)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _ATL_USE_DDX_FLOAT
|
||||||
|
#define DDX_FLOAT(nID, var) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Float(nID, var, bSaveAndValidate)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_FLOAT_RANGE(nID, var, min, max) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Float(nID, var, bSaveAndValidate, TRUE, min, max)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
#define DDX_FLOAT_P(nID, var, precision) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Float(nID, var, bSaveAndValidate, FALSE, 0, 0, precision)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DDX_FLOAT_P_RANGE(nID, var, min, max, precision) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
{ \
|
||||||
|
if(!DDX_Float(nID, var, bSaveAndValidate, TRUE, min, max, precision)) \
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
#endif // _ATL_USE_DDX_FLOAT
|
||||||
|
|
||||||
|
#define DDX_CONTROL(nID, obj) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
DDX_Control(nID, obj, bSaveAndValidate);
|
||||||
|
|
||||||
|
#define DDX_CONTROL_HANDLE(nID, obj) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
DDX_Control_Handle(nID, obj, bSaveAndValidate);
|
||||||
|
|
||||||
|
#define DDX_CHECK(nID, var) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
DDX_Check(nID, var, bSaveAndValidate);
|
||||||
|
|
||||||
|
#define DDX_RADIO(nID, var) \
|
||||||
|
if(nCtlID == (UINT)-1 || nCtlID == nID) \
|
||||||
|
DDX_Radio(nID, var, bSaveAndValidate);
|
||||||
|
|
||||||
|
#define END_DDX_MAP() \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CWinDataExchange - provides support for DDX
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class CWinDataExchange
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Data exchange method - override in your derived class
|
||||||
|
BOOL DoDataExchange(BOOL /*bSaveAndValidate*/ = FALSE, UINT /*nCtlID*/ = (UINT)-1)
|
||||||
|
{
|
||||||
|
// this one should never be called, override it in
|
||||||
|
// your derived class by implementing DDX map
|
||||||
|
ATLASSERT(FALSE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helpers for validation error reporting
|
||||||
|
enum _XDataType
|
||||||
|
{
|
||||||
|
ddxDataNull = 0,
|
||||||
|
ddxDataText = 1,
|
||||||
|
ddxDataInt = 2,
|
||||||
|
ddxDataFloat = 3,
|
||||||
|
ddxDataDouble = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _XTextData
|
||||||
|
{
|
||||||
|
int nLength;
|
||||||
|
int nMaxLength;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _XIntData
|
||||||
|
{
|
||||||
|
long nVal;
|
||||||
|
long nMin;
|
||||||
|
long nMax;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _XFloatData
|
||||||
|
{
|
||||||
|
double nVal;
|
||||||
|
double nMin;
|
||||||
|
double nMax;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _XData
|
||||||
|
{
|
||||||
|
_XDataType nDataType;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
_XTextData textData;
|
||||||
|
_XIntData intData;
|
||||||
|
_XFloatData floatData;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Text exchange
|
||||||
|
BOOL DDX_Text(UINT nID, LPTSTR lpstrText, int cbSize, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
HWND hWndCtrl = pT->GetDlgItem(nID);
|
||||||
|
int nRetLen = ::GetWindowText(hWndCtrl, lpstrText, cbSize / sizeof(TCHAR));
|
||||||
|
if(nRetLen < ::GetWindowTextLength(hWndCtrl))
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ATLASSERT(!bValidate || lstrlen(lpstrText) <= nLength);
|
||||||
|
bSuccess = pT->SetDlgItemText(nID, lpstrText);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nLength > 0);
|
||||||
|
if(lstrlen(lpstrText) > nLength)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataText };
|
||||||
|
data.textData.nLength = lstrlen(lpstrText);
|
||||||
|
data.textData.nMaxLength = nLength;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL DDX_Text(UINT nID, BSTR& bstrText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
bSuccess = pT->GetDlgItemText(nID, bstrText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USES_CONVERSION;
|
||||||
|
LPTSTR lpstrText = OLE2T(bstrText);
|
||||||
|
ATLASSERT(!bValidate || lstrlen(lpstrText) <= nLength);
|
||||||
|
bSuccess = pT->SetDlgItemText(nID, lpstrText);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nLength > 0);
|
||||||
|
if((int)::SysStringLen(bstrText) > nLength)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataText };
|
||||||
|
data.textData.nLength = (int)::SysStringLen(bstrText);
|
||||||
|
data.textData.nMaxLength = nLength;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL DDX_Text(UINT nID, ATL::CComBSTR& bstrText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
bSuccess = pT->GetDlgItemText(nID, (BSTR&)bstrText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USES_CONVERSION;
|
||||||
|
LPTSTR lpstrText = OLE2T(bstrText);
|
||||||
|
ATLASSERT(!bValidate || lstrlen(lpstrText) <= nLength);
|
||||||
|
bSuccess = pT->SetDlgItemText(nID, lpstrText);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nLength > 0);
|
||||||
|
if((int)bstrText.Length() > nLength)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataText };
|
||||||
|
data.textData.nLength = (int)bstrText.Length();
|
||||||
|
data.textData.nMaxLength = nLength;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
||||||
|
BOOL DDX_Text(UINT nID, _CSTRING_NS::CString& strText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
HWND hWndCtrl = pT->GetDlgItem(nID);
|
||||||
|
int nLen = ::GetWindowTextLength(hWndCtrl);
|
||||||
|
int nRetLen = -1;
|
||||||
|
LPTSTR lpstr = strText.GetBufferSetLength(nLen);
|
||||||
|
if(lpstr != NULL)
|
||||||
|
{
|
||||||
|
nRetLen = ::GetWindowText(hWndCtrl, lpstr, nLen + 1);
|
||||||
|
strText.ReleaseBuffer();
|
||||||
|
}
|
||||||
|
if(nRetLen < nLen)
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bSuccess = pT->SetDlgItemText(nID, strText);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nLength > 0);
|
||||||
|
if(strText.GetLength() > nLength)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataText };
|
||||||
|
data.textData.nLength = strText.GetLength();
|
||||||
|
data.textData.nMaxLength = nLength;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
#endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
|
||||||
|
|
||||||
|
// Numeric exchange
|
||||||
|
template <class Type>
|
||||||
|
BOOL DDX_Int(UINT nID, Type& nVal, BOOL bSigned, BOOL bSave, BOOL bValidate = FALSE, Type nMin = 0, Type nMax = 0)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
nVal = (Type)pT->GetDlgItemInt(nID, &bSuccess, bSigned);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ATLASSERT(!bValidate || nVal >= nMin && nVal <= nMax);
|
||||||
|
bSuccess = pT->SetDlgItemInt(nID, nVal, bSigned);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nMin != nMax);
|
||||||
|
if(nVal < nMin || nVal > nMax)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataInt };
|
||||||
|
data.intData.nVal = (long)nVal;
|
||||||
|
data.intData.nMin = (long)nMin;
|
||||||
|
data.intData.nMax = (long)nMax;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float exchange
|
||||||
|
#ifdef _ATL_USE_DDX_FLOAT
|
||||||
|
static BOOL _AtlSimpleFloatParse(LPCTSTR lpszText, double& d)
|
||||||
|
{
|
||||||
|
ATLASSERT(lpszText != NULL);
|
||||||
|
while (*lpszText == _T(' ') || *lpszText == _T('\t'))
|
||||||
|
lpszText++;
|
||||||
|
|
||||||
|
TCHAR chFirst = lpszText[0];
|
||||||
|
d = _tcstod(lpszText, (LPTSTR*)&lpszText);
|
||||||
|
if (d == 0.0 && chFirst != _T('0'))
|
||||||
|
return FALSE; // could not convert
|
||||||
|
while (*lpszText == _T(' ') || *lpszText == _T('\t'))
|
||||||
|
lpszText++;
|
||||||
|
|
||||||
|
if (*lpszText != _T('\0'))
|
||||||
|
return FALSE; // not terminated properly
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL DDX_Float(UINT nID, float& nVal, BOOL bSave, BOOL bValidate = FALSE, float nMin = 0.F, float nMax = 0.F, int nPrecision = FLT_DIG)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
const int cchBuff = 32;
|
||||||
|
TCHAR szBuff[cchBuff] = { 0 };
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
pT->GetDlgItemText(nID, szBuff, cchBuff);
|
||||||
|
double d = 0;
|
||||||
|
if(_AtlSimpleFloatParse(szBuff, d))
|
||||||
|
nVal = (float)d;
|
||||||
|
else
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ATLASSERT(!bValidate || nVal >= nMin && nVal <= nMax);
|
||||||
|
SecureHelper::sprintf_x(szBuff, cchBuff, _T("%.*g"), nPrecision, nVal);
|
||||||
|
bSuccess = pT->SetDlgItemText(nID, szBuff);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nMin != nMax);
|
||||||
|
if(nVal < nMin || nVal > nMax)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataFloat };
|
||||||
|
data.floatData.nVal = (double)nVal;
|
||||||
|
data.floatData.nMin = (double)nMin;
|
||||||
|
data.floatData.nMax = (double)nMax;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL DDX_Float(UINT nID, double& nVal, BOOL bSave, BOOL bValidate = FALSE, double nMin = 0., double nMax = 0., int nPrecision = DBL_DIG)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
const int cchBuff = 32;
|
||||||
|
TCHAR szBuff[cchBuff] = { 0 };
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
pT->GetDlgItemText(nID, szBuff, cchBuff);
|
||||||
|
double d = 0;
|
||||||
|
if(_AtlSimpleFloatParse(szBuff, d))
|
||||||
|
nVal = d;
|
||||||
|
else
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ATLASSERT(!bValidate || nVal >= nMin && nVal <= nMax);
|
||||||
|
SecureHelper::sprintf_x(szBuff, cchBuff, _T("%.*g"), nPrecision, nVal);
|
||||||
|
bSuccess = pT->SetDlgItemText(nID, szBuff);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!bSuccess)
|
||||||
|
{
|
||||||
|
pT->OnDataExchangeError(nID, bSave);
|
||||||
|
}
|
||||||
|
else if(bSave && bValidate) // validation
|
||||||
|
{
|
||||||
|
ATLASSERT(nMin != nMax);
|
||||||
|
if(nVal < nMin || nVal > nMax)
|
||||||
|
{
|
||||||
|
_XData data = { ddxDataFloat };
|
||||||
|
data.floatData.nVal = nVal;
|
||||||
|
data.floatData.nMin = nMin;
|
||||||
|
data.floatData.nMax = nMax;
|
||||||
|
pT->OnDataValidateError(nID, bSave, data);
|
||||||
|
bSuccess = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
#endif // _ATL_USE_DDX_FLOAT
|
||||||
|
|
||||||
|
// Full control subclassing (for CWindowImpl derived controls)
|
||||||
|
template <class TControl>
|
||||||
|
void DDX_Control(UINT nID, TControl& ctrl, BOOL bSave)
|
||||||
|
{
|
||||||
|
if(!bSave && ctrl.m_hWnd == NULL)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
ctrl.SubclassWindow(pT->GetDlgItem(nID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple control attaching (for HWND wrapper controls)
|
||||||
|
template <class TControl>
|
||||||
|
void DDX_Control_Handle(UINT nID, TControl& ctrl, BOOL bSave)
|
||||||
|
{
|
||||||
|
if(!bSave && ctrl.m_hWnd == NULL)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
ctrl = pT->GetDlgItem(nID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Control state
|
||||||
|
void DDX_Check(UINT nID, int& nValue, BOOL bSave)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
HWND hWndCtrl = pT->GetDlgItem(nID);
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
nValue = (int)::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L);
|
||||||
|
ATLASSERT(nValue >= 0 && nValue <= 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(nValue < 0 || nValue > 2)
|
||||||
|
{
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("ATL: Warning - dialog data checkbox value (%d) out of range.\n"), nValue);
|
||||||
|
nValue = 0; // default to off
|
||||||
|
}
|
||||||
|
::SendMessage(hWndCtrl, BM_SETCHECK, nValue, 0L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// variant that supports bool (checked/not-checked, no intermediate state)
|
||||||
|
void DDX_Check(UINT nID, bool& bCheck, BOOL bSave)
|
||||||
|
{
|
||||||
|
int nValue = bCheck ? 1 : 0;
|
||||||
|
DDX_Check(nID, nValue, bSave);
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
if(nValue == 2)
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("ATL: Warning - checkbox state (%d) out of supported range.\n"), nValue);
|
||||||
|
bCheck = (nValue == 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DDX_Radio(UINT nID, int& nValue, BOOL bSave)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
HWND hWndCtrl = pT->GetDlgItem(nID);
|
||||||
|
ATLASSERT(hWndCtrl != NULL);
|
||||||
|
|
||||||
|
// must be first in a group of auto radio buttons
|
||||||
|
ATLASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
|
||||||
|
ATLASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON);
|
||||||
|
|
||||||
|
if(bSave)
|
||||||
|
nValue = -1; // value if none found
|
||||||
|
|
||||||
|
// walk all children in group
|
||||||
|
int nButton = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON)
|
||||||
|
{
|
||||||
|
// control in group is a radio button
|
||||||
|
if(bSave)
|
||||||
|
{
|
||||||
|
if(::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0)
|
||||||
|
{
|
||||||
|
ATLASSERT(nValue == -1); // only set once
|
||||||
|
nValue = nButton;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// select button
|
||||||
|
::SendMessage(hWndCtrl, BM_SETCHECK, (nButton == nValue), 0L);
|
||||||
|
}
|
||||||
|
nButton++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("ATL: Warning - skipping non-radio button in group.\n"));
|
||||||
|
}
|
||||||
|
hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);
|
||||||
|
}
|
||||||
|
while (hWndCtrl != NULL && !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overrideables
|
||||||
|
void OnDataExchangeError(UINT nCtrlID, BOOL /*bSave*/)
|
||||||
|
{
|
||||||
|
// Override to display an error message
|
||||||
|
::MessageBeep((UINT)-1);
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
::SetFocus(pT->GetDlgItem(nCtrlID));
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDataValidateError(UINT nCtrlID, BOOL /*bSave*/, _XData& /*data*/)
|
||||||
|
{
|
||||||
|
// Override to display an error message
|
||||||
|
::MessageBeep((UINT)-1);
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
::SetFocus(pT->GetDlgItem(nCtrlID));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}; // namespace WTL
|
||||||
|
|
||||||
|
#endif // __ATLDDX_H__
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,262 @@
|
||||||
|
// Windows Template Library - WTL version 8.0
|
||||||
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is a part of the Windows Template Library.
|
||||||
|
// The use and distribution terms for this software are covered by the
|
||||||
|
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||||
|
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||||
|
// By using this software in any fashion, you are agreeing to be bound by
|
||||||
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
// any other, from this software.
|
||||||
|
|
||||||
|
#ifndef __ATLRES_H__
|
||||||
|
#define __ATLRES_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if defined(_WIN32_WCE) && !defined(__ATLRESCE_H__)
|
||||||
|
#error Use atlresCE.h instead of atlres.h for Windows CE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef RC_INVOKED
|
||||||
|
#ifndef _INC_WINDOWS
|
||||||
|
|
||||||
|
#define _INC_WINDOWS
|
||||||
|
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
#define VS_VERSION_INFO 1
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#define APSTUDIO_HIDDEN_SYMBOLS // Ignore following symbols
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#ifndef WINVER
|
||||||
|
#define WINVER 0x0400 // default to Windows Version 4.0
|
||||||
|
#endif // !WINVER
|
||||||
|
|
||||||
|
#include <winresrc.h>
|
||||||
|
|
||||||
|
// operation messages sent to DLGINIT
|
||||||
|
#define LB_ADDSTRING (WM_USER+1)
|
||||||
|
#define CB_ADDSTRING (WM_USER+3)
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#ifdef IDC_STATIC
|
||||||
|
#undef IDC_STATIC
|
||||||
|
#endif // IDC_STATIC
|
||||||
|
#define IDC_STATIC (-1)
|
||||||
|
|
||||||
|
#endif // !_INC_WINDOWS
|
||||||
|
#endif // RC_INVOKED
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#define APSTUDIO_HIDDEN_SYMBOLS
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// ATL resource types
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
#define RT_DLGINIT MAKEINTRESOURCE(240)
|
||||||
|
#define RT_TOOLBAR MAKEINTRESOURCE(241)
|
||||||
|
#endif // RC_INVOKED
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Standard window components
|
||||||
|
|
||||||
|
#define ID_SEPARATOR 0 // special separator value
|
||||||
|
#define ID_DEFAULT_PANE 0 // default status bar pane
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED // code only
|
||||||
|
// standard control bars (IDW = window ID)
|
||||||
|
#define ATL_IDW_TOOLBAR 0xE800 // main Toolbar for window
|
||||||
|
#define ATL_IDW_STATUS_BAR 0xE801 // Status bar window
|
||||||
|
#define ATL_IDW_COMMAND_BAR 0xE802 // Command bar window
|
||||||
|
|
||||||
|
// parts of a frame window
|
||||||
|
#define ATL_IDW_CLIENT 0xE900
|
||||||
|
#define ATL_IDW_PANE_FIRST 0xE900 // first pane (256 max)
|
||||||
|
#define ATL_IDW_PANE_LAST 0xE9FF
|
||||||
|
#define ATL_IDW_HSCROLL_FIRST 0xEA00 // first Horz scrollbar (16 max)
|
||||||
|
#define ATL_IDW_VSCROLL_FIRST 0xEA10 // first Vert scrollbar (16 max)
|
||||||
|
|
||||||
|
#define ATL_IDW_SIZE_BOX 0xEA20 // size box for splitters
|
||||||
|
#define ATL_IDW_PANE_SAVE 0xEA21 // to shift ATL_IDW_PANE_FIRST
|
||||||
|
|
||||||
|
// bands for a rebar
|
||||||
|
#define ATL_IDW_BAND_FIRST 0xEB00
|
||||||
|
#define ATL_IDW_BAND_LAST 0xEBFF
|
||||||
|
#endif // !RC_INVOKED
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Standard Commands
|
||||||
|
|
||||||
|
// File commands
|
||||||
|
#define ID_FILE_NEW 0xE100
|
||||||
|
#define ID_FILE_OPEN 0xE101
|
||||||
|
#define ID_FILE_CLOSE 0xE102
|
||||||
|
#define ID_FILE_SAVE 0xE103
|
||||||
|
#define ID_FILE_SAVE_AS 0xE104
|
||||||
|
#define ID_FILE_PAGE_SETUP 0xE105
|
||||||
|
#define ID_FILE_PRINT_SETUP 0xE106
|
||||||
|
#define ID_FILE_PRINT 0xE107
|
||||||
|
#define ID_FILE_PRINT_DIRECT 0xE108
|
||||||
|
#define ID_FILE_PRINT_PREVIEW 0xE109
|
||||||
|
#define ID_FILE_UPDATE 0xE10A
|
||||||
|
#define ID_FILE_SAVE_COPY_AS 0xE10B
|
||||||
|
#define ID_FILE_SEND_MAIL 0xE10C
|
||||||
|
|
||||||
|
#define ID_FILE_MRU_FIRST 0xE110
|
||||||
|
#define ID_FILE_MRU_FILE1 0xE110 // range - 16 max
|
||||||
|
#define ID_FILE_MRU_FILE2 0xE111
|
||||||
|
#define ID_FILE_MRU_FILE3 0xE112
|
||||||
|
#define ID_FILE_MRU_FILE4 0xE113
|
||||||
|
#define ID_FILE_MRU_FILE5 0xE114
|
||||||
|
#define ID_FILE_MRU_FILE6 0xE115
|
||||||
|
#define ID_FILE_MRU_FILE7 0xE116
|
||||||
|
#define ID_FILE_MRU_FILE8 0xE117
|
||||||
|
#define ID_FILE_MRU_FILE9 0xE118
|
||||||
|
#define ID_FILE_MRU_FILE10 0xE119
|
||||||
|
#define ID_FILE_MRU_FILE11 0xE11A
|
||||||
|
#define ID_FILE_MRU_FILE12 0xE11B
|
||||||
|
#define ID_FILE_MRU_FILE13 0xE11C
|
||||||
|
#define ID_FILE_MRU_FILE14 0xE11D
|
||||||
|
#define ID_FILE_MRU_FILE15 0xE11E
|
||||||
|
#define ID_FILE_MRU_FILE16 0xE11F
|
||||||
|
#define ID_FILE_MRU_LAST 0xE11F
|
||||||
|
|
||||||
|
// Edit commands
|
||||||
|
#define ID_EDIT_CLEAR 0xE120
|
||||||
|
#define ID_EDIT_CLEAR_ALL 0xE121
|
||||||
|
#define ID_EDIT_COPY 0xE122
|
||||||
|
#define ID_EDIT_CUT 0xE123
|
||||||
|
#define ID_EDIT_FIND 0xE124
|
||||||
|
#define ID_EDIT_PASTE 0xE125
|
||||||
|
#define ID_EDIT_PASTE_LINK 0xE126
|
||||||
|
#define ID_EDIT_PASTE_SPECIAL 0xE127
|
||||||
|
#define ID_EDIT_REPEAT 0xE128
|
||||||
|
#define ID_EDIT_REPLACE 0xE129
|
||||||
|
#define ID_EDIT_SELECT_ALL 0xE12A
|
||||||
|
#define ID_EDIT_UNDO 0xE12B
|
||||||
|
#define ID_EDIT_REDO 0xE12C
|
||||||
|
|
||||||
|
// Window commands
|
||||||
|
#define ID_WINDOW_NEW 0xE130
|
||||||
|
#define ID_WINDOW_ARRANGE 0xE131
|
||||||
|
#define ID_WINDOW_CASCADE 0xE132
|
||||||
|
#define ID_WINDOW_TILE_HORZ 0xE133
|
||||||
|
#define ID_WINDOW_TILE_VERT 0xE134
|
||||||
|
#define ID_WINDOW_SPLIT 0xE135
|
||||||
|
#ifndef RC_INVOKED // code only
|
||||||
|
#define ATL_IDM_WINDOW_FIRST 0xE130
|
||||||
|
#define ATL_IDM_WINDOW_LAST 0xE13F
|
||||||
|
#define ATL_IDM_FIRST_MDICHILD 0xFF00 // window list starts here
|
||||||
|
#define ATL_IDM_LAST_MDICHILD 0xFFFD
|
||||||
|
#endif // !RC_INVOKED
|
||||||
|
// TabView
|
||||||
|
#define ID_WINDOW_TABFIRST 0xFF00 // = ATL_IDM_FIRST_MDICHILD
|
||||||
|
#define ID_WINDOW_TABLAST 0xFFFD
|
||||||
|
#define ID_WINDOW_SHOWTABLIST 0xFFFE
|
||||||
|
|
||||||
|
// Help and App commands
|
||||||
|
#define ID_APP_ABOUT 0xE140
|
||||||
|
#define ID_APP_EXIT 0xE141
|
||||||
|
#define ID_HELP_INDEX 0xE142
|
||||||
|
#define ID_HELP_FINDER 0xE143
|
||||||
|
#define ID_HELP_USING 0xE144
|
||||||
|
#define ID_CONTEXT_HELP 0xE145 // shift-F1
|
||||||
|
// special commands for processing help
|
||||||
|
#define ID_HELP 0xE146 // first attempt for F1
|
||||||
|
#define ID_DEFAULT_HELP 0xE147 // last attempt
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
#define ID_NEXT_PANE 0xE150
|
||||||
|
#define ID_PREV_PANE 0xE151
|
||||||
|
#define ID_PANE_CLOSE 0xE152
|
||||||
|
|
||||||
|
// Format
|
||||||
|
#define ID_FORMAT_FONT 0xE160
|
||||||
|
|
||||||
|
// Scroll
|
||||||
|
#define ID_SCROLL_UP 0xE170
|
||||||
|
#define ID_SCROLL_DOWN 0xE171
|
||||||
|
#define ID_SCROLL_PAGE_UP 0xE172
|
||||||
|
#define ID_SCROLL_PAGE_DOWN 0xE173
|
||||||
|
#define ID_SCROLL_TOP 0xE174
|
||||||
|
#define ID_SCROLL_BOTTOM 0xE175
|
||||||
|
#define ID_SCROLL_LEFT 0xE176
|
||||||
|
#define ID_SCROLL_RIGHT 0xE177
|
||||||
|
#define ID_SCROLL_PAGE_LEFT 0xE178
|
||||||
|
#define ID_SCROLL_PAGE_RIGHT 0xE179
|
||||||
|
#define ID_SCROLL_ALL_LEFT 0xE17A
|
||||||
|
#define ID_SCROLL_ALL_RIGHT 0xE17B
|
||||||
|
|
||||||
|
// OLE commands
|
||||||
|
#define ID_OLE_INSERT_NEW 0xE200
|
||||||
|
#define ID_OLE_EDIT_LINKS 0xE201
|
||||||
|
#define ID_OLE_EDIT_CONVERT 0xE202
|
||||||
|
#define ID_OLE_EDIT_CHANGE_ICON 0xE203
|
||||||
|
#define ID_OLE_EDIT_PROPERTIES 0xE204
|
||||||
|
#define ID_OLE_VERB_FIRST 0xE210 // range - 16 max
|
||||||
|
#ifndef RC_INVOKED // code only
|
||||||
|
#define ID_OLE_VERB_LAST 0xE21F
|
||||||
|
#endif // !RC_INVOKED
|
||||||
|
|
||||||
|
// View commands (same number used as IDW used for toolbar and status bar)
|
||||||
|
#define ID_VIEW_TOOLBAR 0xE800
|
||||||
|
#define ID_VIEW_STATUS_BAR 0xE801
|
||||||
|
#define ID_VIEW_REFRESH 0xE803
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Standard control IDs
|
||||||
|
|
||||||
|
#ifdef IDC_STATIC
|
||||||
|
#undef IDC_STATIC
|
||||||
|
#endif // IDC_STATIC
|
||||||
|
#define IDC_STATIC (-1) // all static controls
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Standard string error/warnings
|
||||||
|
|
||||||
|
// idle status bar message
|
||||||
|
#define ATL_IDS_IDLEMESSAGE 0xE001
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED // code only
|
||||||
|
#define ATL_IDS_SCFIRST 0xEF00
|
||||||
|
#endif // !RC_INVOKED
|
||||||
|
|
||||||
|
#define ATL_IDS_SCSIZE 0xEF00
|
||||||
|
#define ATL_IDS_SCMOVE 0xEF01
|
||||||
|
#define ATL_IDS_SCMINIMIZE 0xEF02
|
||||||
|
#define ATL_IDS_SCMAXIMIZE 0xEF03
|
||||||
|
#define ATL_IDS_SCNEXTWINDOW 0xEF04
|
||||||
|
#define ATL_IDS_SCPREVWINDOW 0xEF05
|
||||||
|
#define ATL_IDS_SCCLOSE 0xEF06
|
||||||
|
#define ATL_IDS_SCRESTORE 0xEF12
|
||||||
|
#define ATL_IDS_SCTASKLIST 0xEF13
|
||||||
|
|
||||||
|
#define ATL_IDS_MDICHILD 0xEF1F
|
||||||
|
#define ATL_IDS_MRU_FILE 0xEFDA
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Misc. control IDs
|
||||||
|
|
||||||
|
// Property Sheet control id's (determined with Spy++)
|
||||||
|
#define ID_APPLY_NOW 0x3021
|
||||||
|
#define ID_WIZBACK 0x3023
|
||||||
|
#define ID_WIZNEXT 0x3024
|
||||||
|
#define ID_WIZFINISH 0x3025
|
||||||
|
#define ATL_IDC_TAB_CONTROL 0x3020
|
||||||
|
|
||||||
|
#endif // __ATLRES_H__
|
|
@ -0,0 +1,93 @@
|
||||||
|
// Windows Template Library - WTL version 8.0
|
||||||
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is a part of the Windows Template Library.
|
||||||
|
// The use and distribution terms for this software are covered by the
|
||||||
|
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||||
|
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||||
|
// By using this software in any fashion, you are agreeing to be bound by
|
||||||
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
// any other, from this software.
|
||||||
|
|
||||||
|
#ifndef __ATLRESCE_H__
|
||||||
|
#define __ATLRESCE_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
#error atlresCE.h is only for Windows CE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef RC_INVOKED
|
||||||
|
#ifndef _INC_WINDOWS
|
||||||
|
|
||||||
|
#define VS_VERSION_INFO 1
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#define APSTUDIO_HIDDEN_SYMBOLS // Ignore following symbols
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#ifndef WINVER
|
||||||
|
#define WINVER 0x0400 // default to Windows Version 4.0
|
||||||
|
#endif // !WINVER
|
||||||
|
|
||||||
|
#if !defined(WCEOLE_ENABLE_DIALOGEX)
|
||||||
|
#define DIALOGEX DIALOG DISCARDABLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <commctrl.h>
|
||||||
|
#define SHMENUBAR RCDATA
|
||||||
|
|
||||||
|
#if defined(SHELLSDK_MODULES_AYGSHELL)
|
||||||
|
#include <aygshell.h>
|
||||||
|
#else
|
||||||
|
#define NOMENU 0xFFFF
|
||||||
|
#define IDS_SHNEW 1
|
||||||
|
#define IDM_SHAREDNEW 10
|
||||||
|
#define IDM_SHAREDNEWDEFAULT 11
|
||||||
|
#endif
|
||||||
|
#ifndef I_IMAGENONE
|
||||||
|
#define I_IMAGENONE (-2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#endif // !_INC_WINDOWS
|
||||||
|
#endif // RC_INVOKED
|
||||||
|
|
||||||
|
#include "atlres.h"
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
// Visual Studio dialog editor bug fix
|
||||||
|
#ifndef DS_FIXEDSYS
|
||||||
|
#define DS_FIXEDSYS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IDC_INFOSTATIC 0xFFFE // == IDC_STATIC -1
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Smartphone and PPC 2005 Resource IDs
|
||||||
|
|
||||||
|
// Command and associated string resource IDs
|
||||||
|
#define ID_MENU_OK 0xE790
|
||||||
|
#define ID_MENU_CANCEL 0xE791
|
||||||
|
#define ID_MENU 0xE792
|
||||||
|
#define ID_ACTION 0xE793
|
||||||
|
#define ID_VIEW_FULLSCREEN 0xE802
|
||||||
|
|
||||||
|
// MenuBar resource IDs
|
||||||
|
#define ATL_IDM_MENU_DONE 0xE701
|
||||||
|
#define ATL_IDM_MENU_CANCEL 0xE702
|
||||||
|
#define ATL_IDM_MENU_DONECANCEL 0xE703
|
||||||
|
|
||||||
|
// Default device MenuBar control ID and MenuBar resource ID
|
||||||
|
#define ATL_IDW_MENU_BAR 0xE802
|
||||||
|
|
||||||
|
// SmartPhone spinned controls ID offset for CSpinCtrl
|
||||||
|
#define ATL_IDW_SPIN_ID 9999
|
||||||
|
|
||||||
|
#endif // __ATLRESCE_H__
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,892 @@
|
||||||
|
// Windows Template Library - WTL version 8.0
|
||||||
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is a part of the Windows Template Library.
|
||||||
|
// The use and distribution terms for this software are covered by the
|
||||||
|
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||||
|
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||||
|
// By using this software in any fashion, you are agreeing to be bound by
|
||||||
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
// any other, from this software.
|
||||||
|
|
||||||
|
#ifndef __ATLSPLIT_H__
|
||||||
|
#define __ATLSPLIT_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ATLAPP_H__
|
||||||
|
#error atlsplit.h requires atlapp.h to be included first
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ATLWIN_H__
|
||||||
|
#error atlsplit.h requires atlwin.h to be included first
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Classes in this file:
|
||||||
|
//
|
||||||
|
// CSplitterImpl<T, t_bVertical>
|
||||||
|
// CSplitterWindowImpl<T, t_bVertical, TBase, TWinTraits>
|
||||||
|
// CSplitterWindowT<t_bVertical>
|
||||||
|
|
||||||
|
|
||||||
|
namespace WTL
|
||||||
|
{
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CSplitterImpl - Provides splitter support to any window
|
||||||
|
|
||||||
|
// Splitter panes constants
|
||||||
|
#define SPLIT_PANE_LEFT 0
|
||||||
|
#define SPLIT_PANE_RIGHT 1
|
||||||
|
#define SPLIT_PANE_TOP SPLIT_PANE_LEFT
|
||||||
|
#define SPLIT_PANE_BOTTOM SPLIT_PANE_RIGHT
|
||||||
|
#define SPLIT_PANE_NONE -1
|
||||||
|
|
||||||
|
// Splitter extended styles
|
||||||
|
#define SPLIT_PROPORTIONAL 0x00000001
|
||||||
|
#define SPLIT_NONINTERACTIVE 0x00000002
|
||||||
|
#define SPLIT_RIGHTALIGNED 0x00000004
|
||||||
|
#define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED
|
||||||
|
|
||||||
|
// Note: SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED/SPLIT_BOTTOMALIGNED are
|
||||||
|
// mutually exclusive. If both are set, splitter defaults to SPLIT_PROPORTIONAL
|
||||||
|
|
||||||
|
|
||||||
|
template <class T, bool t_bVertical = true>
|
||||||
|
class CSplitterImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum { m_nPanesCount = 2, m_nPropMax = 10000 };
|
||||||
|
|
||||||
|
HWND m_hWndPane[m_nPanesCount];
|
||||||
|
RECT m_rcSplitter;
|
||||||
|
int m_xySplitterPos;
|
||||||
|
int m_nDefActivePane;
|
||||||
|
int m_cxySplitBar; // splitter bar width/height
|
||||||
|
static HCURSOR m_hCursor;
|
||||||
|
int m_cxyMin; // minimum pane size
|
||||||
|
int m_cxyBarEdge; // splitter bar edge
|
||||||
|
bool m_bFullDrag;
|
||||||
|
int m_cxyDragOffset;
|
||||||
|
int m_nProportionalPos;
|
||||||
|
bool m_bUpdateProportionalPos;
|
||||||
|
DWORD m_dwExtendedStyle; // splitter specific extended styles
|
||||||
|
int m_nSinglePane; // single pane mode
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
CSplitterImpl() :
|
||||||
|
m_xySplitterPos(-1), m_nDefActivePane(SPLIT_PANE_NONE),
|
||||||
|
m_cxySplitBar(0), m_cxyMin(0), m_cxyBarEdge(0), m_bFullDrag(true),
|
||||||
|
m_cxyDragOffset(0), m_nProportionalPos(0), m_bUpdateProportionalPos(true),
|
||||||
|
m_dwExtendedStyle(SPLIT_PROPORTIONAL),
|
||||||
|
m_nSinglePane(SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
m_hWndPane[SPLIT_PANE_LEFT] = NULL;
|
||||||
|
m_hWndPane[SPLIT_PANE_RIGHT] = NULL;
|
||||||
|
|
||||||
|
::SetRectEmpty(&m_rcSplitter);
|
||||||
|
|
||||||
|
if(m_hCursor == NULL)
|
||||||
|
{
|
||||||
|
CStaticDataInitCriticalSectionLock lock;
|
||||||
|
if(FAILED(lock.Lock()))
|
||||||
|
{
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("ERROR : Unable to lock critical section in CSplitterImpl::CSplitterImpl.\n"));
|
||||||
|
ATLASSERT(FALSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_hCursor == NULL)
|
||||||
|
m_hCursor = ::LoadCursor(NULL, t_bVertical ? IDC_SIZEWE : IDC_SIZENS);
|
||||||
|
|
||||||
|
lock.Unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
void SetSplitterRect(LPRECT lpRect = NULL, bool bUpdate = true)
|
||||||
|
{
|
||||||
|
if(lpRect == NULL)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->GetClientRect(&m_rcSplitter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rcSplitter = *lpRect;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(IsProportional())
|
||||||
|
UpdateProportionalPos();
|
||||||
|
else if(IsRightAligned())
|
||||||
|
UpdateRightAlignPos();
|
||||||
|
|
||||||
|
if(bUpdate)
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetSplitterRect(LPRECT lpRect) const
|
||||||
|
{
|
||||||
|
ATLASSERT(lpRect != NULL);
|
||||||
|
*lpRect = m_rcSplitter;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetSplitterPos(int xyPos = -1, bool bUpdate = true)
|
||||||
|
{
|
||||||
|
if(xyPos == -1) // -1 == middle
|
||||||
|
{
|
||||||
|
if(t_bVertical)
|
||||||
|
xyPos = (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) / 2;
|
||||||
|
else
|
||||||
|
xyPos = (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adjust if out of valid range
|
||||||
|
int cxyMax = 0;
|
||||||
|
if(t_bVertical)
|
||||||
|
cxyMax = m_rcSplitter.right - m_rcSplitter.left;
|
||||||
|
else
|
||||||
|
cxyMax = m_rcSplitter.bottom - m_rcSplitter.top;
|
||||||
|
|
||||||
|
if(xyPos < m_cxyMin + m_cxyBarEdge)
|
||||||
|
xyPos = m_cxyMin;
|
||||||
|
else if(xyPos > (cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin))
|
||||||
|
xyPos = cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin;
|
||||||
|
|
||||||
|
// Set new position and update if requested
|
||||||
|
bool bRet = (m_xySplitterPos != xyPos);
|
||||||
|
m_xySplitterPos = xyPos;
|
||||||
|
|
||||||
|
if(m_bUpdateProportionalPos)
|
||||||
|
{
|
||||||
|
if(IsProportional())
|
||||||
|
StoreProportionalPos();
|
||||||
|
else if(IsRightAligned())
|
||||||
|
StoreRightAlignPos();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_bUpdateProportionalPos = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bUpdate && bRet)
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetSplitterPosPct(int nPct, bool bUpdate = true)
|
||||||
|
{
|
||||||
|
ATLASSERT(nPct >= 0 && nPct <= 100);
|
||||||
|
|
||||||
|
m_nProportionalPos = ::MulDiv(nPct, m_nPropMax, 100);
|
||||||
|
UpdateProportionalPos();
|
||||||
|
|
||||||
|
if(bUpdate)
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetSplitterPos() const
|
||||||
|
{
|
||||||
|
return m_xySplitterPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetSinglePaneMode(int nPane = SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT || nPane == SPLIT_PANE_NONE);
|
||||||
|
if(!(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT || nPane == SPLIT_PANE_NONE))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(nPane != SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
if(!::IsWindowVisible(m_hWndPane[nPane]))
|
||||||
|
::ShowWindow(m_hWndPane[nPane], SW_SHOW);
|
||||||
|
int nOtherPane = (nPane == SPLIT_PANE_LEFT) ? SPLIT_PANE_RIGHT : SPLIT_PANE_LEFT;
|
||||||
|
::ShowWindow(m_hWndPane[nOtherPane], SW_HIDE);
|
||||||
|
if(m_nDefActivePane != nPane)
|
||||||
|
m_nDefActivePane = nPane;
|
||||||
|
}
|
||||||
|
else if(m_nSinglePane != SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
int nOtherPane = (m_nSinglePane == SPLIT_PANE_LEFT) ? SPLIT_PANE_RIGHT : SPLIT_PANE_LEFT;
|
||||||
|
::ShowWindow(m_hWndPane[nOtherPane], SW_SHOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nSinglePane = nPane;
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetSinglePaneMode() const
|
||||||
|
{
|
||||||
|
return m_nSinglePane;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD GetSplitterExtendedStyle() const
|
||||||
|
{
|
||||||
|
return m_dwExtendedStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD SetSplitterExtendedStyle(DWORD dwExtendedStyle, DWORD dwMask = 0)
|
||||||
|
{
|
||||||
|
DWORD dwPrevStyle = m_dwExtendedStyle;
|
||||||
|
if(dwMask == 0)
|
||||||
|
m_dwExtendedStyle = dwExtendedStyle;
|
||||||
|
else
|
||||||
|
m_dwExtendedStyle = (m_dwExtendedStyle & ~dwMask) | (dwExtendedStyle & dwMask);
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(IsProportional() && IsRightAligned())
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("CSplitterImpl::SetSplitterExtendedStyle - SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED are mutually exclusive, defaulting to SPLIT_PROPORTIONAL.\n"));
|
||||||
|
#endif // _DEBUG
|
||||||
|
return dwPrevStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Splitter operations
|
||||||
|
void SetSplitterPanes(HWND hWndLeftTop, HWND hWndRightBottom, bool bUpdate = true)
|
||||||
|
{
|
||||||
|
m_hWndPane[SPLIT_PANE_LEFT] = hWndLeftTop;
|
||||||
|
m_hWndPane[SPLIT_PANE_RIGHT] = hWndRightBottom;
|
||||||
|
ATLASSERT(m_hWndPane[SPLIT_PANE_LEFT] == NULL || m_hWndPane[SPLIT_PANE_RIGHT] == NULL || m_hWndPane[SPLIT_PANE_LEFT] != m_hWndPane[SPLIT_PANE_RIGHT]);
|
||||||
|
if(bUpdate)
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetSplitterPane(int nPane, HWND hWnd, bool bUpdate = true)
|
||||||
|
{
|
||||||
|
ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT);
|
||||||
|
|
||||||
|
if(nPane != SPLIT_PANE_LEFT && nPane != SPLIT_PANE_RIGHT)
|
||||||
|
return false;
|
||||||
|
m_hWndPane[nPane] = hWnd;
|
||||||
|
ATLASSERT(m_hWndPane[SPLIT_PANE_LEFT] == NULL || m_hWndPane[SPLIT_PANE_RIGHT] == NULL || m_hWndPane[SPLIT_PANE_LEFT] != m_hWndPane[SPLIT_PANE_RIGHT]);
|
||||||
|
if(bUpdate)
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
HWND GetSplitterPane(int nPane) const
|
||||||
|
{
|
||||||
|
ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT);
|
||||||
|
|
||||||
|
if(nPane != SPLIT_PANE_LEFT && nPane != SPLIT_PANE_RIGHT)
|
||||||
|
return false;
|
||||||
|
return m_hWndPane[nPane];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetActivePane(int nPane)
|
||||||
|
{
|
||||||
|
ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT);
|
||||||
|
|
||||||
|
if(nPane != SPLIT_PANE_LEFT && nPane != SPLIT_PANE_RIGHT)
|
||||||
|
return false;
|
||||||
|
if(m_nSinglePane != SPLIT_PANE_NONE && nPane != m_nSinglePane)
|
||||||
|
return false;
|
||||||
|
::SetFocus(m_hWndPane[nPane]);
|
||||||
|
m_nDefActivePane = nPane;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetActivePane() const
|
||||||
|
{
|
||||||
|
int nRet = SPLIT_PANE_NONE;
|
||||||
|
HWND hWndFocus = ::GetFocus();
|
||||||
|
if(hWndFocus != NULL)
|
||||||
|
{
|
||||||
|
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||||
|
{
|
||||||
|
if(hWndFocus == m_hWndPane[nPane] || ::IsChild(m_hWndPane[nPane], hWndFocus))
|
||||||
|
{
|
||||||
|
nRet = nPane;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ActivateNextPane(bool bNext = true)
|
||||||
|
{
|
||||||
|
int nPane = m_nSinglePane;
|
||||||
|
if(nPane == SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
switch(GetActivePane())
|
||||||
|
{
|
||||||
|
case SPLIT_PANE_LEFT:
|
||||||
|
nPane = SPLIT_PANE_RIGHT;
|
||||||
|
break;
|
||||||
|
case SPLIT_PANE_RIGHT:
|
||||||
|
nPane = SPLIT_PANE_LEFT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
nPane = bNext ? SPLIT_PANE_LEFT : SPLIT_PANE_RIGHT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SetActivePane(nPane);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetDefaultActivePane(int nPane)
|
||||||
|
{
|
||||||
|
ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT);
|
||||||
|
|
||||||
|
if(nPane != SPLIT_PANE_LEFT && nPane != SPLIT_PANE_RIGHT)
|
||||||
|
return false;
|
||||||
|
m_nDefActivePane = nPane;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SetDefaultActivePane(HWND hWnd)
|
||||||
|
{
|
||||||
|
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||||
|
{
|
||||||
|
if(hWnd == m_hWndPane[nPane])
|
||||||
|
{
|
||||||
|
m_nDefActivePane = nPane;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // not found
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetDefaultActivePane() const
|
||||||
|
{
|
||||||
|
return m_nDefActivePane;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawSplitter(CDCHandle dc)
|
||||||
|
{
|
||||||
|
ATLASSERT(dc.m_hDC != NULL);
|
||||||
|
if(m_nSinglePane == SPLIT_PANE_NONE && m_xySplitterPos == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
if(m_nSinglePane == SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
pT->DrawSplitterBar(dc);
|
||||||
|
|
||||||
|
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||||
|
{
|
||||||
|
if(m_hWndPane[nPane] == NULL)
|
||||||
|
pT->DrawSplitterPane(dc, nPane);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(m_hWndPane[m_nSinglePane] == NULL)
|
||||||
|
pT->DrawSplitterPane(dc, m_nSinglePane);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overrideables
|
||||||
|
void DrawSplitterBar(CDCHandle dc)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
if(GetSplitterBarRect(&rect))
|
||||||
|
{
|
||||||
|
dc.FillRect(&rect, COLOR_3DFACE);
|
||||||
|
// draw 3D edge if needed
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0)
|
||||||
|
dc.DrawEdge(&rect, EDGE_RAISED, t_bVertical ? (BF_LEFT | BF_RIGHT) : (BF_TOP | BF_BOTTOM));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// called only if pane is empty
|
||||||
|
void DrawSplitterPane(CDCHandle dc, int nPane)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
if(GetSplitterPaneRect(nPane, &rect))
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
if((pT->GetExStyle() & WS_EX_CLIENTEDGE) == 0)
|
||||||
|
dc.DrawEdge(&rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
|
||||||
|
dc.FillRect(&rect, COLOR_APPWORKSPACE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message map and handlers
|
||||||
|
BEGIN_MSG_MAP(CSplitterImpl)
|
||||||
|
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||||
|
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
if(IsInteractive())
|
||||||
|
{
|
||||||
|
MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
|
||||||
|
MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
|
||||||
|
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
|
||||||
|
MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
|
||||||
|
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDoubleClick)
|
||||||
|
MESSAGE_HANDLER(WM_CAPTURECHANGED, OnCaptureChanged)
|
||||||
|
}
|
||||||
|
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate)
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
|
||||||
|
END_MSG_MAP()
|
||||||
|
|
||||||
|
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
GetSystemSettings(false);
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
// try setting position if not set
|
||||||
|
if(m_nSinglePane == SPLIT_PANE_NONE && m_xySplitterPos == -1)
|
||||||
|
pT->SetSplitterPos();
|
||||||
|
// do painting
|
||||||
|
CPaintDC dc(pT->m_hWnd);
|
||||||
|
pT->DrawSplitter(dc.m_hDC);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnSetCursor(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
if((HWND)wParam == pT->m_hWnd && LOWORD(lParam) == HTCLIENT)
|
||||||
|
{
|
||||||
|
DWORD dwPos = ::GetMessagePos();
|
||||||
|
POINT ptPos = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
|
||||||
|
pT->ScreenToClient(&ptPos);
|
||||||
|
if(IsOverSplitterBar(ptPos.x, ptPos.y))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
int xPos = GET_X_LPARAM(lParam);
|
||||||
|
int yPos = GET_Y_LPARAM(lParam);
|
||||||
|
if((wParam & MK_LBUTTON) && ::GetCapture() == pT->m_hWnd)
|
||||||
|
{
|
||||||
|
int xyNewSplitPos = 0;
|
||||||
|
if(t_bVertical)
|
||||||
|
xyNewSplitPos = xPos - m_rcSplitter.left - m_cxyDragOffset;
|
||||||
|
else
|
||||||
|
xyNewSplitPos = yPos - m_rcSplitter.top - m_cxyDragOffset;
|
||||||
|
|
||||||
|
if(xyNewSplitPos == -1) // avoid -1, that means middle
|
||||||
|
xyNewSplitPos = -2;
|
||||||
|
|
||||||
|
if(m_xySplitterPos != xyNewSplitPos)
|
||||||
|
{
|
||||||
|
if(m_bFullDrag)
|
||||||
|
{
|
||||||
|
if(pT->SetSplitterPos(xyNewSplitPos, true))
|
||||||
|
pT->UpdateWindow();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DrawGhostBar();
|
||||||
|
pT->SetSplitterPos(xyNewSplitPos, false);
|
||||||
|
DrawGhostBar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // not dragging, just set cursor
|
||||||
|
{
|
||||||
|
if(IsOverSplitterBar(xPos, yPos))
|
||||||
|
::SetCursor(m_hCursor);
|
||||||
|
bHandled = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
int xPos = GET_X_LPARAM(lParam);
|
||||||
|
int yPos = GET_Y_LPARAM(lParam);
|
||||||
|
if(IsOverSplitterBar(xPos, yPos))
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->SetCapture();
|
||||||
|
::SetCursor(m_hCursor);
|
||||||
|
if(!m_bFullDrag)
|
||||||
|
DrawGhostBar();
|
||||||
|
if(t_bVertical)
|
||||||
|
m_cxyDragOffset = xPos - m_rcSplitter.left - m_xySplitterPos;
|
||||||
|
else
|
||||||
|
m_cxyDragOffset = yPos - m_rcSplitter.top - m_xySplitterPos;
|
||||||
|
}
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnLButtonUp(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
::ReleaseCapture();
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnLButtonDoubleClick(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->SetSplitterPos(); // middle
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnCaptureChanged(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
|
{
|
||||||
|
if(!m_bFullDrag)
|
||||||
|
{
|
||||||
|
DrawGhostBar();
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->UpdateWindow();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
if(m_nSinglePane == SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
if(m_nDefActivePane == SPLIT_PANE_LEFT || m_nDefActivePane == SPLIT_PANE_RIGHT)
|
||||||
|
::SetFocus(m_hWndPane[m_nDefActivePane]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
::SetFocus(m_hWndPane[m_nSinglePane]);
|
||||||
|
}
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
LRESULT OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
LRESULT lRet = pT->DefWindowProc(uMsg, wParam, lParam);
|
||||||
|
if(lRet == MA_ACTIVATE || lRet == MA_ACTIVATEANDEAT)
|
||||||
|
{
|
||||||
|
DWORD dwPos = ::GetMessagePos();
|
||||||
|
POINT pt = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
|
||||||
|
pT->ScreenToClient(&pt);
|
||||||
|
RECT rcPane;
|
||||||
|
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||||
|
{
|
||||||
|
if(GetSplitterPaneRect(nPane, &rcPane) && ::PtInRect(&rcPane, pt))
|
||||||
|
{
|
||||||
|
m_nDefActivePane = nPane;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lRet;
|
||||||
|
}
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
|
||||||
|
LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
|
{
|
||||||
|
GetSystemSettings(true);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implementation - internal helpers
|
||||||
|
void UpdateSplitterLayout()
|
||||||
|
{
|
||||||
|
if(m_nSinglePane == SPLIT_PANE_NONE && m_xySplitterPos == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
RECT rect = { 0, 0, 0, 0 };
|
||||||
|
if(m_nSinglePane == SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
if(GetSplitterBarRect(&rect))
|
||||||
|
pT->InvalidateRect(&rect);
|
||||||
|
|
||||||
|
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
|
||||||
|
{
|
||||||
|
if(GetSplitterPaneRect(nPane, &rect))
|
||||||
|
{
|
||||||
|
if(m_hWndPane[nPane] != NULL)
|
||||||
|
::SetWindowPos(m_hWndPane[nPane], NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
|
||||||
|
else
|
||||||
|
pT->InvalidateRect(&rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(GetSplitterPaneRect(m_nSinglePane, &rect))
|
||||||
|
{
|
||||||
|
if(m_hWndPane[m_nSinglePane] != NULL)
|
||||||
|
::SetWindowPos(m_hWndPane[m_nSinglePane], NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
|
||||||
|
else
|
||||||
|
pT->InvalidateRect(&rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GetSplitterBarRect(LPRECT lpRect) const
|
||||||
|
{
|
||||||
|
ATLASSERT(lpRect != NULL);
|
||||||
|
if(m_nSinglePane != SPLIT_PANE_NONE || m_xySplitterPos == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(t_bVertical)
|
||||||
|
{
|
||||||
|
lpRect->left = m_rcSplitter.left + m_xySplitterPos;
|
||||||
|
lpRect->top = m_rcSplitter.top;
|
||||||
|
lpRect->right = m_rcSplitter.left + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
|
||||||
|
lpRect->bottom = m_rcSplitter.bottom;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lpRect->left = m_rcSplitter.left;
|
||||||
|
lpRect->top = m_rcSplitter.top + m_xySplitterPos;
|
||||||
|
lpRect->right = m_rcSplitter.right;
|
||||||
|
lpRect->bottom = m_rcSplitter.top + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GetSplitterPaneRect(int nPane, LPRECT lpRect) const
|
||||||
|
{
|
||||||
|
ATLASSERT(nPane == SPLIT_PANE_LEFT || nPane == SPLIT_PANE_RIGHT);
|
||||||
|
ATLASSERT(lpRect != NULL);
|
||||||
|
bool bRet = true;
|
||||||
|
if(m_nSinglePane != SPLIT_PANE_NONE)
|
||||||
|
{
|
||||||
|
if(nPane == m_nSinglePane)
|
||||||
|
*lpRect = m_rcSplitter;
|
||||||
|
else
|
||||||
|
bRet = false;
|
||||||
|
}
|
||||||
|
else if(nPane == SPLIT_PANE_LEFT)
|
||||||
|
{
|
||||||
|
if(t_bVertical)
|
||||||
|
{
|
||||||
|
lpRect->left = m_rcSplitter.left;
|
||||||
|
lpRect->top = m_rcSplitter.top;
|
||||||
|
lpRect->right = m_rcSplitter.left + m_xySplitterPos;
|
||||||
|
lpRect->bottom = m_rcSplitter.bottom;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lpRect->left = m_rcSplitter.left;
|
||||||
|
lpRect->top = m_rcSplitter.top;
|
||||||
|
lpRect->right = m_rcSplitter.right;
|
||||||
|
lpRect->bottom = m_rcSplitter.top + m_xySplitterPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(nPane == SPLIT_PANE_RIGHT)
|
||||||
|
{
|
||||||
|
if(t_bVertical)
|
||||||
|
{
|
||||||
|
lpRect->left = m_rcSplitter.left + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
|
||||||
|
lpRect->top = m_rcSplitter.top;
|
||||||
|
lpRect->right = m_rcSplitter.right;
|
||||||
|
lpRect->bottom = m_rcSplitter.bottom;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lpRect->left = m_rcSplitter.left;
|
||||||
|
lpRect->top = m_rcSplitter.top + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
|
||||||
|
lpRect->right = m_rcSplitter.right;
|
||||||
|
lpRect->bottom = m_rcSplitter.bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bRet = false;
|
||||||
|
}
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsOverSplitterRect(int x, int y) const
|
||||||
|
{
|
||||||
|
// -1 == don't check
|
||||||
|
return ((x == -1 || (x >= m_rcSplitter.left && x <= m_rcSplitter.right)) &&
|
||||||
|
(y == -1 || (y >= m_rcSplitter.top && y <= m_rcSplitter.bottom)));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsOverSplitterBar(int x, int y) const
|
||||||
|
{
|
||||||
|
if(m_nSinglePane != SPLIT_PANE_NONE)
|
||||||
|
return false;
|
||||||
|
if(m_xySplitterPos == -1 || !IsOverSplitterRect(x, y))
|
||||||
|
return false;
|
||||||
|
int xy = t_bVertical ? x : y;
|
||||||
|
int xyOff = t_bVertical ? m_rcSplitter.left : m_rcSplitter.top;
|
||||||
|
return ((xy >= (xyOff + m_xySplitterPos)) && (xy < xyOff + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawGhostBar()
|
||||||
|
{
|
||||||
|
RECT rect = { 0, 0, 0, 0 };
|
||||||
|
if(GetSplitterBarRect(&rect))
|
||||||
|
{
|
||||||
|
// invert the brush pattern (looks just like frame window sizing)
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
CWindowDC dc(pT->m_hWnd);
|
||||||
|
CBrush brush = CDCHandle::GetHalftoneBrush();
|
||||||
|
if(brush.m_hBrush != NULL)
|
||||||
|
{
|
||||||
|
CBrushHandle brushOld = dc.SelectBrush(brush);
|
||||||
|
dc.PatBlt(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, PATINVERT);
|
||||||
|
dc.SelectBrush(brushOld);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetSystemSettings(bool bUpdate)
|
||||||
|
{
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
m_cxySplitBar = ::GetSystemMetrics(t_bVertical ? SM_CXSIZEFRAME : SM_CYSIZEFRAME);
|
||||||
|
#else // CE specific
|
||||||
|
m_cxySplitBar = 2 * ::GetSystemMetrics(t_bVertical ? SM_CXEDGE : SM_CYEDGE);
|
||||||
|
#endif // _WIN32_WCE
|
||||||
|
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
if((pT->GetExStyle() & WS_EX_CLIENTEDGE))
|
||||||
|
{
|
||||||
|
m_cxyBarEdge = 2 * ::GetSystemMetrics(t_bVertical ? SM_CXEDGE : SM_CYEDGE);
|
||||||
|
m_cxyMin = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_cxyBarEdge = 0;
|
||||||
|
m_cxyMin = 2 * ::GetSystemMetrics(t_bVertical ? SM_CXEDGE : SM_CYEDGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
::SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &m_bFullDrag, 0);
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
|
||||||
|
if(bUpdate)
|
||||||
|
UpdateSplitterLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsProportional() const
|
||||||
|
{
|
||||||
|
return ((m_dwExtendedStyle & SPLIT_PROPORTIONAL) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StoreProportionalPos()
|
||||||
|
{
|
||||||
|
int cxyTotal = t_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
|
||||||
|
if(cxyTotal > 0)
|
||||||
|
m_nProportionalPos = ::MulDiv(m_xySplitterPos, m_nPropMax, cxyTotal);
|
||||||
|
else
|
||||||
|
m_nProportionalPos = 0;
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("CSplitterImpl::StoreProportionalPos - %i\n"), m_nProportionalPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateProportionalPos()
|
||||||
|
{
|
||||||
|
int cxyTotal = t_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
|
||||||
|
if(cxyTotal > 0)
|
||||||
|
{
|
||||||
|
int xyNewPos = ::MulDiv(m_nProportionalPos, cxyTotal, m_nPropMax);
|
||||||
|
m_bUpdateProportionalPos = false;
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->SetSplitterPos(xyNewPos, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsRightAligned() const
|
||||||
|
{
|
||||||
|
return ((m_dwExtendedStyle & SPLIT_RIGHTALIGNED) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StoreRightAlignPos()
|
||||||
|
{
|
||||||
|
int cxyTotal = t_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
|
||||||
|
if(cxyTotal > 0)
|
||||||
|
m_nProportionalPos = cxyTotal - m_xySplitterPos;
|
||||||
|
else
|
||||||
|
m_nProportionalPos = 0;
|
||||||
|
ATLTRACE2(atlTraceUI, 0, _T("CSplitterImpl::StoreRightAlignPos - %i\n"), m_nProportionalPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateRightAlignPos()
|
||||||
|
{
|
||||||
|
int cxyTotal = t_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
|
||||||
|
if(cxyTotal > 0)
|
||||||
|
{
|
||||||
|
m_bUpdateProportionalPos = false;
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
pT->SetSplitterPos(cxyTotal - m_nProportionalPos, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsInteractive() const
|
||||||
|
{
|
||||||
|
return ((m_dwExtendedStyle & SPLIT_NONINTERACTIVE) == 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T, bool t_bVertical> HCURSOR CSplitterImpl< T, t_bVertical>::m_hCursor = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CSplitterWindowImpl - Implements a splitter window
|
||||||
|
|
||||||
|
template <class T, bool t_bVertical = true, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
|
||||||
|
class ATL_NO_VTABLE CSplitterWindowImpl : public ATL::CWindowImpl< T, TBase, TWinTraits >, public CSplitterImpl< T , t_bVertical >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DECLARE_WND_CLASS_EX(NULL, CS_DBLCLKS, COLOR_WINDOW)
|
||||||
|
|
||||||
|
typedef CSplitterImpl< T , t_bVertical > _baseClass;
|
||||||
|
|
||||||
|
BEGIN_MSG_MAP(CSplitterWindowImpl)
|
||||||
|
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
|
||||||
|
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||||
|
CHAIN_MSG_MAP(_baseClass)
|
||||||
|
FORWARD_NOTIFICATIONS()
|
||||||
|
END_MSG_MAP()
|
||||||
|
|
||||||
|
LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
|
{
|
||||||
|
// handled, no background painting needed
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
if(wParam != SIZE_MINIMIZED)
|
||||||
|
SetSplitterRect();
|
||||||
|
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CSplitterWindow - Implements a splitter window to be used as is
|
||||||
|
|
||||||
|
template <bool t_bVertical = true>
|
||||||
|
class CSplitterWindowT : public CSplitterWindowImpl<CSplitterWindowT<t_bVertical>, t_bVertical>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DECLARE_WND_CLASS_EX(_T("WTL_SplitterWindow"), CS_DBLCLKS, COLOR_WINDOW)
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef CSplitterWindowT<true> CSplitterWindow;
|
||||||
|
typedef CSplitterWindowT<false> CHorSplitterWindow;
|
||||||
|
|
||||||
|
}; // namespace WTL
|
||||||
|
|
||||||
|
#endif // __ATLSPLIT_H__
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,529 @@
|
||||||
|
// Windows Template Library - WTL version 8.0
|
||||||
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is a part of the Windows Template Library.
|
||||||
|
// The use and distribution terms for this software are covered by the
|
||||||
|
// Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
|
||||||
|
// which can be found in the file CPL.TXT at the root of this distribution.
|
||||||
|
// By using this software in any fashion, you are agreeing to be bound by
|
||||||
|
// the terms of this license. You must not remove this notice, or
|
||||||
|
// any other, from this software.
|
||||||
|
|
||||||
|
#ifndef __ATLWINX_H__
|
||||||
|
#define __ATLWINX_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ATLAPP_H__
|
||||||
|
#error atlwinx.h requires atlapp.h to be included first
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (_ATL_VER >= 0x0700)
|
||||||
|
#include <atlwin.h>
|
||||||
|
#endif // (_ATL_VER >= 0x0700)
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Classes in this file:
|
||||||
|
//
|
||||||
|
// _U_RECT
|
||||||
|
// _U_MENUorID
|
||||||
|
// _U_STRINGorID
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Command Chaining Macros
|
||||||
|
|
||||||
|
#define CHAIN_COMMANDS(theChainClass) \
|
||||||
|
if(uMsg == WM_COMMAND) \
|
||||||
|
CHAIN_MSG_MAP(theChainClass)
|
||||||
|
|
||||||
|
#define CHAIN_COMMANDS_ALT(theChainClass, msgMapID) \
|
||||||
|
if(uMsg == WM_COMMAND) \
|
||||||
|
CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)
|
||||||
|
|
||||||
|
#define CHAIN_COMMANDS_MEMBER(theChainMember) \
|
||||||
|
if(uMsg == WM_COMMAND) \
|
||||||
|
CHAIN_MSG_MAP_MEMBER(theChainMember)
|
||||||
|
|
||||||
|
#define CHAIN_COMMANDS_ALT_MEMBER(theChainMember, msgMapID) \
|
||||||
|
if(uMsg == WM_COMMAND) \
|
||||||
|
CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Macros for parent message map to selectively reflect control messages
|
||||||
|
|
||||||
|
// NOTE: ReflectNotifications is a member of ATL's CWindowImplRoot
|
||||||
|
// (and overridden in 2 cases - CContainedWindowT and CAxHostWindow)
|
||||||
|
// Since we can't modify ATL, we'll provide the needed additions
|
||||||
|
// in a separate function (that is not a member of CWindowImplRoot)
|
||||||
|
|
||||||
|
namespace WTL
|
||||||
|
{
|
||||||
|
|
||||||
|
inline LRESULT WtlReflectNotificationsFiltered(HWND hWndParent, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled,
|
||||||
|
UINT uMsgFilter = WM_NULL, UINT_PTR idFromFilter = 0, HWND hWndChildFilter = NULL)
|
||||||
|
{
|
||||||
|
if((uMsgFilter != WM_NULL) && (uMsgFilter != uMsg))
|
||||||
|
{
|
||||||
|
// The notification message doesn't match the filter.
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
HWND hWndChild = NULL;
|
||||||
|
UINT_PTR idFrom = 0;
|
||||||
|
|
||||||
|
switch(uMsg)
|
||||||
|
{
|
||||||
|
case WM_COMMAND:
|
||||||
|
if(lParam != NULL) // not from a menu
|
||||||
|
{
|
||||||
|
hWndChild = (HWND)lParam;
|
||||||
|
idFrom = (UINT_PTR)LOWORD(wParam);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_NOTIFY:
|
||||||
|
hWndChild = ((LPNMHDR)lParam)->hwndFrom;
|
||||||
|
idFrom = ((LPNMHDR)lParam)->idFrom;
|
||||||
|
break;
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
case WM_PARENTNOTIFY:
|
||||||
|
switch(LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case WM_CREATE:
|
||||||
|
case WM_DESTROY:
|
||||||
|
hWndChild = (HWND)lParam;
|
||||||
|
idFrom = (UINT_PTR)HIWORD(wParam);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
hWndChild = ::GetDlgItem(hWndParent, HIWORD(wParam));
|
||||||
|
idFrom = (UINT_PTR)::GetDlgCtrlID(hWndChild);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
case WM_DRAWITEM:
|
||||||
|
if(wParam) // not from a menu
|
||||||
|
{
|
||||||
|
hWndChild = ((LPDRAWITEMSTRUCT)lParam)->hwndItem;
|
||||||
|
idFrom = (UINT_PTR)wParam;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_MEASUREITEM:
|
||||||
|
if(wParam) // not from a menu
|
||||||
|
{
|
||||||
|
hWndChild = ::GetDlgItem(hWndParent, ((LPMEASUREITEMSTRUCT)lParam)->CtlID);
|
||||||
|
idFrom = (UINT_PTR)wParam;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_COMPAREITEM:
|
||||||
|
if(wParam) // not from a menu
|
||||||
|
{
|
||||||
|
hWndChild = ((LPCOMPAREITEMSTRUCT)lParam)->hwndItem;
|
||||||
|
idFrom = (UINT_PTR)wParam;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_DELETEITEM:
|
||||||
|
if(wParam) // not from a menu
|
||||||
|
{
|
||||||
|
hWndChild = ((LPDELETEITEMSTRUCT)lParam)->hwndItem;
|
||||||
|
idFrom = (UINT_PTR)wParam;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_VKEYTOITEM:
|
||||||
|
case WM_CHARTOITEM:
|
||||||
|
case WM_HSCROLL:
|
||||||
|
case WM_VSCROLL:
|
||||||
|
hWndChild = (HWND)lParam;
|
||||||
|
idFrom = (UINT_PTR)::GetDlgCtrlID(hWndChild);
|
||||||
|
break;
|
||||||
|
case WM_CTLCOLORBTN:
|
||||||
|
case WM_CTLCOLORDLG:
|
||||||
|
case WM_CTLCOLOREDIT:
|
||||||
|
case WM_CTLCOLORLISTBOX:
|
||||||
|
case WM_CTLCOLORMSGBOX:
|
||||||
|
case WM_CTLCOLORSCROLLBAR:
|
||||||
|
case WM_CTLCOLORSTATIC:
|
||||||
|
hWndChild = (HWND)lParam;
|
||||||
|
idFrom = (UINT_PTR)::GetDlgCtrlID(hWndChild);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((hWndChild == NULL) ||
|
||||||
|
((hWndChildFilter != NULL) && (hWndChildFilter != hWndChild)))
|
||||||
|
{
|
||||||
|
// Either hWndChild isn't valid, or
|
||||||
|
// hWndChild doesn't match the filter.
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((idFromFilter != 0) && (idFromFilter != idFrom))
|
||||||
|
{
|
||||||
|
// The dialog control id doesn't match the filter.
|
||||||
|
bHandled = FALSE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ATLASSERT(::IsWindow(hWndChild));
|
||||||
|
LRESULT lResult = ::SendMessage(hWndChild, OCM__BASE + uMsg, wParam, lParam);
|
||||||
|
if((lResult == 0) && (uMsg >= WM_CTLCOLORMSGBOX) && (uMsg <= WM_CTLCOLORSTATIC))
|
||||||
|
{
|
||||||
|
// Try to prevent problems with WM_CTLCOLOR* messages when
|
||||||
|
// the message wasn't really handled
|
||||||
|
bHandled = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // namespace WTL
|
||||||
|
|
||||||
|
// Try to prevent problems with WM_CTLCOLOR* messages when
|
||||||
|
// the message wasn't really handled
|
||||||
|
#define REFLECT_NOTIFICATIONS_EX() \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if((lResult == 0) && (uMsg >= WM_CTLCOLORMSGBOX) && (uMsg <= WM_CTLCOLORSTATIC)) \
|
||||||
|
bHandled = FALSE; \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFICATIONS_MSG_FILTERED(uMsgFilter) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = WTL::WtlReflectNotificationsFiltered(m_hWnd, uMsg, wParam, lParam, bHandled, uMsgFilter, 0, NULL); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFICATIONS_ID_FILTERED(idFromFilter) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = WTL::WtlReflectNotificationsFiltered(m_hWnd, uMsg, wParam, lParam, bHandled, WM_NULL, idFromFilter, NULL); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFICATIONS_HWND_FILTERED(hWndChildFilter) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = WTL::WtlReflectNotificationsFiltered(m_hWnd, uMsg, wParam, lParam, bHandled, WM_NULL, 0, hWndChildFilter); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFICATIONS_MSG_ID_FILTERED(uMsgFilter, idFromFilter) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = WTL::WtlReflectNotificationsFiltered(m_hWnd, uMsg, wParam, lParam, bHandled, uMsgFilter, idFromFilter, NULL); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFICATIONS_MSG_HWND_FILTERED(uMsgFilter, hWndChildFilter) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = WTL::WtlReflectNotificationsFiltered(m_hWnd, uMsg, wParam, lParam, bHandled, uMsgFilter, 0, hWndChildFilter); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_COMMAND(id, code) \
|
||||||
|
if(uMsg == WM_COMMAND && id == LOWORD(wParam) && code == HIWORD(wParam)) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_COMMAND_ID(id) \
|
||||||
|
if(uMsg == WM_COMMAND && id == LOWORD(wParam)) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_COMMAND_CODE(code) \
|
||||||
|
if(uMsg == WM_COMMAND && code == HIWORD(wParam)) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_COMMAND_RANGE(idFirst, idLast) \
|
||||||
|
if(uMsg == WM_COMMAND && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_COMMAND_RANGE_CODE(idFirst, idLast, code) \
|
||||||
|
if(uMsg == WM_COMMAND && code == HIWORD(wParam) && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFY(id, cd) \
|
||||||
|
if(uMsg == WM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom && cd == ((LPNMHDR)lParam)->code) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFY_ID(id) \
|
||||||
|
if(uMsg == WM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFY_CODE(cd) \
|
||||||
|
if(uMsg == WM_NOTIFY && cd == ((LPNMHDR)lParam)->code) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFY_RANGE(idFirst, idLast) \
|
||||||
|
if(uMsg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECT_NOTIFY_RANGE_CODE(idFirst, idLast, cd) \
|
||||||
|
if(uMsg == WM_NOTIFY && cd == ((LPNMHDR)lParam)->code && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = ReflectNotifications(uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Reflected message handler macros for message maps (for ATL 3.0)
|
||||||
|
|
||||||
|
#if (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
|
#define REFLECTED_COMMAND_HANDLER(id, code, func) \
|
||||||
|
if(uMsg == OCM_COMMAND && id == LOWORD(wParam) && code == HIWORD(wParam)) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_COMMAND_ID_HANDLER(id, func) \
|
||||||
|
if(uMsg == OCM_COMMAND && id == LOWORD(wParam)) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_COMMAND_CODE_HANDLER(code, func) \
|
||||||
|
if(uMsg == OCM_COMMAND && code == HIWORD(wParam)) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_COMMAND_RANGE_HANDLER(idFirst, idLast, func) \
|
||||||
|
if(uMsg == OCM_COMMAND && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func) \
|
||||||
|
if(uMsg == OCM_COMMAND && code == HIWORD(wParam) && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_NOTIFY_HANDLER(id, cd, func) \
|
||||||
|
if(uMsg == OCM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom && cd == ((LPNMHDR)lParam)->code) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_NOTIFY_ID_HANDLER(id, func) \
|
||||||
|
if(uMsg == OCM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_NOTIFY_CODE_HANDLER(cd, func) \
|
||||||
|
if(uMsg == OCM_NOTIFY && cd == ((LPNMHDR)lParam)->code) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_NOTIFY_RANGE_HANDLER(idFirst, idLast, func) \
|
||||||
|
if(uMsg == OCM_NOTIFY && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REFLECTED_NOTIFY_RANGE_CODE_HANDLER(idFirst, idLast, cd, func) \
|
||||||
|
if(uMsg == OCM_NOTIFY && cd == ((LPNMHDR)lParam)->code && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Dual argument helper classes (for ATL 3.0)
|
||||||
|
|
||||||
|
#if (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
|
namespace ATL
|
||||||
|
{
|
||||||
|
|
||||||
|
class _U_RECT
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
_U_RECT(LPRECT lpRect) : m_lpRect(lpRect)
|
||||||
|
{ }
|
||||||
|
_U_RECT(RECT& rc) : m_lpRect(&rc)
|
||||||
|
{ }
|
||||||
|
LPRECT m_lpRect;
|
||||||
|
};
|
||||||
|
|
||||||
|
class _U_MENUorID
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
_U_MENUorID(HMENU hMenu) : m_hMenu(hMenu)
|
||||||
|
{ }
|
||||||
|
_U_MENUorID(UINT nID) : m_hMenu((HMENU)LongToHandle(nID))
|
||||||
|
{ }
|
||||||
|
HMENU m_hMenu;
|
||||||
|
};
|
||||||
|
|
||||||
|
class _U_STRINGorID
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
_U_STRINGorID(LPCTSTR lpString) : m_lpstr(lpString)
|
||||||
|
{ }
|
||||||
|
_U_STRINGorID(UINT nID) : m_lpstr(MAKEINTRESOURCE(nID))
|
||||||
|
{ }
|
||||||
|
LPCTSTR m_lpstr;
|
||||||
|
};
|
||||||
|
|
||||||
|
}; // namespace ATL
|
||||||
|
|
||||||
|
#endif // (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
|
|
||||||
|
namespace WTL
|
||||||
|
{
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Forward notifications support for message maps (for ATL 3.0)
|
||||||
|
|
||||||
|
#if (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
|
// forward notifications support
|
||||||
|
#define FORWARD_NOTIFICATIONS() \
|
||||||
|
{ \
|
||||||
|
bHandled = TRUE; \
|
||||||
|
lResult = WTL::Atl3ForwardNotifications(m_hWnd, uMsg, wParam, lParam, bHandled); \
|
||||||
|
if(bHandled) \
|
||||||
|
return TRUE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
static LRESULT Atl3ForwardNotifications(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
LRESULT lResult = 0;
|
||||||
|
switch(uMsg)
|
||||||
|
{
|
||||||
|
case WM_COMMAND:
|
||||||
|
case WM_NOTIFY:
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
case WM_PARENTNOTIFY:
|
||||||
|
#endif // !_WIN32_WCE
|
||||||
|
case WM_DRAWITEM:
|
||||||
|
case WM_MEASUREITEM:
|
||||||
|
case WM_COMPAREITEM:
|
||||||
|
case WM_DELETEITEM:
|
||||||
|
case WM_VKEYTOITEM:
|
||||||
|
case WM_CHARTOITEM:
|
||||||
|
case WM_HSCROLL:
|
||||||
|
case WM_VSCROLL:
|
||||||
|
case WM_CTLCOLORBTN:
|
||||||
|
case WM_CTLCOLORDLG:
|
||||||
|
case WM_CTLCOLOREDIT:
|
||||||
|
case WM_CTLCOLORLISTBOX:
|
||||||
|
case WM_CTLCOLORMSGBOX:
|
||||||
|
case WM_CTLCOLORSCROLLBAR:
|
||||||
|
case WM_CTLCOLORSTATIC:
|
||||||
|
lResult = ::SendMessage(::GetParent(hWnd), uMsg, wParam, lParam);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
bHandled = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return lResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // (_ATL_VER < 0x0700)
|
||||||
|
|
||||||
|
}; // namespace WTL
|
||||||
|
|
||||||
|
#endif // __ATLWINX_H__
|
|
@ -0,0 +1,24 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *addbookm_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 3 1",
|
||||||
|
". c Black",
|
||||||
|
"X c #00C000",
|
||||||
|
" c None",
|
||||||
|
/* pixels */
|
||||||
|
" ....... ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .. .XXXXX. ",
|
||||||
|
" .. .XXXXX. ",
|
||||||
|
" ...... .XXXXX. ",
|
||||||
|
" ...... .XXXXX. ",
|
||||||
|
" .. .XXXXX. ",
|
||||||
|
" .. .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XX.XX. ",
|
||||||
|
" .X. .X. ",
|
||||||
|
" .. .. "
|
||||||
|
};
|
|
@ -0,0 +1,21 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * back_xpm[] = {
|
||||||
|
"16 15 3 1",
|
||||||
|
" c None",
|
||||||
|
". c Black",
|
||||||
|
"X c Gray100",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . ",
|
||||||
|
" .. ",
|
||||||
|
" .X. ",
|
||||||
|
" .XX........ ",
|
||||||
|
" .XXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXX. ",
|
||||||
|
" .XX........ ",
|
||||||
|
" .X. ",
|
||||||
|
" .. ",
|
||||||
|
" . ",
|
||||||
|
" "};
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *cdrom_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 36 1",
|
||||||
|
"= c #9BACC2",
|
||||||
|
"y c #547B99",
|
||||||
|
"$ c #FFFFFF",
|
||||||
|
"@ c #839CB5",
|
||||||
|
"o c #547897",
|
||||||
|
"4 c #4D7492",
|
||||||
|
"% c #F1F4F7",
|
||||||
|
"X c #5A809C",
|
||||||
|
"< c #8497A5",
|
||||||
|
"0 c #7898AD",
|
||||||
|
"+ c #CAD2DC",
|
||||||
|
"r c #ACAEB2",
|
||||||
|
"2 c #BECAD9",
|
||||||
|
"* c #65839D",
|
||||||
|
"e c #DCE2EA",
|
||||||
|
"- c #ADBED2",
|
||||||
|
"t c #597B9A",
|
||||||
|
" c None",
|
||||||
|
"1 c #467291",
|
||||||
|
"9 c #D6DFE7",
|
||||||
|
"O c #7393AB",
|
||||||
|
"u c #49708B",
|
||||||
|
"5 c #A0BACB",
|
||||||
|
"& c #AABFCD",
|
||||||
|
"8 c #B9CBD5",
|
||||||
|
"; c #B4C4D3",
|
||||||
|
": c #6F90A6",
|
||||||
|
"3 c #A8B6CA",
|
||||||
|
"# c #ADBACE",
|
||||||
|
"w c #E4E9ED",
|
||||||
|
". c #8EA9BC",
|
||||||
|
"> c #B3BFD1",
|
||||||
|
", c #C2CBDB",
|
||||||
|
"6 c #C0D1DC",
|
||||||
|
"7 c #A2B3C5",
|
||||||
|
"q c #5D7C93",
|
||||||
|
/* pixels */
|
||||||
|
" .XooOo+ ",
|
||||||
|
" X@#$$$%o& ",
|
||||||
|
" *=-;$$$$$o+ ",
|
||||||
|
" +O#;-$$$$$$: ",
|
||||||
|
" o=>,-<1<$2-o ",
|
||||||
|
" o3>--1$122-* ",
|
||||||
|
" o=--$<4<22-X ",
|
||||||
|
" o5$$$$$26;7* ",
|
||||||
|
" X%$$$$2;-X8 ",
|
||||||
|
" 90*9$$$-7Xqo ",
|
||||||
|
" wXwe@O44X4<r<o ",
|
||||||
|
" X8628>22222<<*4",
|
||||||
|
" ttyyyoo4441uuuo",
|
||||||
|
" t>$$$$$$$$$$$>o",
|
||||||
|
" XXXtyyyoo44411u"
|
||||||
|
};
|
|
@ -0,0 +1,44 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *copy_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 23 1",
|
||||||
|
"o c #97C4E7",
|
||||||
|
"* c #FFFFFF",
|
||||||
|
"@ c #60A9DA",
|
||||||
|
"= c #D1E5F5",
|
||||||
|
"& c #C3DDF1",
|
||||||
|
". c #7EA6C0",
|
||||||
|
" c None",
|
||||||
|
"X c #2F93CD",
|
||||||
|
"O c #85BBE2",
|
||||||
|
", c #EFF6FC",
|
||||||
|
"; c #DEEDF8",
|
||||||
|
"+ c #72B2DD",
|
||||||
|
"3 c #F7FBFD",
|
||||||
|
"4 c #FAFCFE",
|
||||||
|
": c #DAEAF7",
|
||||||
|
"< c #E9F3FA",
|
||||||
|
"1 c #E2EFF8",
|
||||||
|
"- c #FDFDFE",
|
||||||
|
"% c #B6D5EE",
|
||||||
|
"$ c #A5CCEA",
|
||||||
|
"> c #E5F0F9",
|
||||||
|
"# c #AFD1EC",
|
||||||
|
"2 c #F4F9FD",
|
||||||
|
/* pixels */
|
||||||
|
" .....XX ",
|
||||||
|
" .oO+@X#X ",
|
||||||
|
" .$oO+X##X ",
|
||||||
|
" .%$o........ ",
|
||||||
|
" .&%$.*=&#o.-. ",
|
||||||
|
" .=&%.*;=&#.--. ",
|
||||||
|
" .:=&.*>;=&.... ",
|
||||||
|
" .>:=.*,>;=&#o. ",
|
||||||
|
" .<1:.*2,>:=&#. ",
|
||||||
|
" .2<1.*32,>:=&. ",
|
||||||
|
" .32<.*432,>:=. ",
|
||||||
|
" .32<.*-432,>:. ",
|
||||||
|
" .....**-432,>. ",
|
||||||
|
" .***-432,. ",
|
||||||
|
" .......... "
|
||||||
|
};
|
|
@ -0,0 +1,17 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *cross_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"10 10 2 1",
|
||||||
|
" c Gray0",
|
||||||
|
"# c None",
|
||||||
|
/* pixels */
|
||||||
|
" ######## ",
|
||||||
|
" #### ",
|
||||||
|
"# ## #",
|
||||||
|
"## ##",
|
||||||
|
"### ###",
|
||||||
|
"### ###",
|
||||||
|
"## ##",
|
||||||
|
"# ## #",
|
||||||
|
" #### ",
|
||||||
|
" ###### "};
|
|
@ -0,0 +1,46 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *cut_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 25 1",
|
||||||
|
"6 c #D8BDC0",
|
||||||
|
": c #C3C3C4",
|
||||||
|
"- c #FFFFFF",
|
||||||
|
". c #6C6D70",
|
||||||
|
"2 c #AD3A45",
|
||||||
|
"o c #DBDBDB",
|
||||||
|
"# c #939495",
|
||||||
|
"< c #E42234",
|
||||||
|
"& c #C3C5C8",
|
||||||
|
"; c #C6CCD3",
|
||||||
|
"% c #B7B7B8",
|
||||||
|
" c None",
|
||||||
|
"* c #DFE0E2",
|
||||||
|
"5 c #B69596",
|
||||||
|
"3 c #9C2A35",
|
||||||
|
"1 c #CFCFD0",
|
||||||
|
", c #AB5C64",
|
||||||
|
"+ c #D2D3D4",
|
||||||
|
"$ c #BCBDBE",
|
||||||
|
"@ c #C6C8CA",
|
||||||
|
"> c #CDC0C1",
|
||||||
|
"O c #826F72",
|
||||||
|
"X c #979BA0",
|
||||||
|
"4 c #9B8687",
|
||||||
|
"= c #9FA0A0",
|
||||||
|
/* pixels */
|
||||||
|
" .X .o ",
|
||||||
|
" O.+ @. ",
|
||||||
|
" O. .. ",
|
||||||
|
" O#$ %.& ",
|
||||||
|
" O.*.. ",
|
||||||
|
" #%#.. ",
|
||||||
|
" O=-.. ",
|
||||||
|
" #%#;. ",
|
||||||
|
" OO:=O ",
|
||||||
|
" >,,<, ,<,,1 ",
|
||||||
|
" ><23<1 1<32<1 ",
|
||||||
|
" ,2 4< <5 2, ",
|
||||||
|
" <, ,2 2, ,< ",
|
||||||
|
" 23,<5 5<,32 ",
|
||||||
|
" 6225 522> "
|
||||||
|
};
|
|
@ -0,0 +1,54 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *deffile_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 16 32 1",
|
||||||
|
"= c #97C4E7",
|
||||||
|
": c #72A8D2",
|
||||||
|
"1 c #FFFFFF",
|
||||||
|
"w c #839CB5",
|
||||||
|
"X c #6B98B8",
|
||||||
|
". c #5A89A6",
|
||||||
|
"@ c #3A749C",
|
||||||
|
", c #D1E5F5",
|
||||||
|
"< c #67A1CF",
|
||||||
|
"> c #F1F4F7",
|
||||||
|
"e c #85A7BC",
|
||||||
|
"% c #C3DDF1",
|
||||||
|
"0 c #749BB4",
|
||||||
|
"2 c #7EA6C0",
|
||||||
|
"; c #5F9BC8",
|
||||||
|
" c None",
|
||||||
|
"O c #538DB3",
|
||||||
|
"- c #85BBE2",
|
||||||
|
"$ c #D6DFE7",
|
||||||
|
"9 c #EFF6FC",
|
||||||
|
"o c #6591AE",
|
||||||
|
"4 c #F7FBFD",
|
||||||
|
"8 c #FAFCFE",
|
||||||
|
"6 c #DAEAF7",
|
||||||
|
"7 c #E9F3FA",
|
||||||
|
"q c #FDFDFE",
|
||||||
|
"3 c #E2EFF8",
|
||||||
|
"# c #8EA9BC",
|
||||||
|
"& c #B6D5EE",
|
||||||
|
"* c #A5CCEA",
|
||||||
|
"5 c #F4F9FD",
|
||||||
|
"+ c #4581AA",
|
||||||
|
/* pixels */
|
||||||
|
" ..XooO+@#$ ",
|
||||||
|
" .%%&*=-;:;> ",
|
||||||
|
" .,,%&*=<1=X> ",
|
||||||
|
" #%%%%&*211=X ",
|
||||||
|
" #3-----<oXoO ",
|
||||||
|
" #3456,%&*=-O ",
|
||||||
|
" #3--------=O ",
|
||||||
|
" #355736,%&*o ",
|
||||||
|
" #3--------&o ",
|
||||||
|
" #38459736,%X ",
|
||||||
|
" #3--------,0 ",
|
||||||
|
" #31q84597360 ",
|
||||||
|
" #3--------3w ",
|
||||||
|
" #3111q84597e ",
|
||||||
|
" ##########e# ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,24 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *delbookm_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 3 1",
|
||||||
|
". c Black",
|
||||||
|
" c None",
|
||||||
|
"X c #FF4040",
|
||||||
|
/* pixels */
|
||||||
|
" ....... ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" . . .XXXXX. ",
|
||||||
|
" .. .. .XXXXX. ",
|
||||||
|
" ... .XXXXX. ",
|
||||||
|
" . .XXXXX. ",
|
||||||
|
" ... .XXXXX. ",
|
||||||
|
" .. .. .XXXXX. ",
|
||||||
|
" . . .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .XX.XX. ",
|
||||||
|
" .X. .X. ",
|
||||||
|
" .. .. "
|
||||||
|
};
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *delete_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 21 1",
|
||||||
|
"2 c #A5AEBD",
|
||||||
|
"* c #5478B4",
|
||||||
|
"< c #95A3BB",
|
||||||
|
"O c #9AA7BC",
|
||||||
|
"; c #758EB7",
|
||||||
|
"$ c #6986B6",
|
||||||
|
"# c #4971B2",
|
||||||
|
"& c #8A9CBA",
|
||||||
|
"X c #8598B9",
|
||||||
|
" c None",
|
||||||
|
"o c #ABB2BE",
|
||||||
|
"- c #7F95B9",
|
||||||
|
"= c #4E74B3",
|
||||||
|
"1 c #A0ABBC",
|
||||||
|
"+ c #6F8AB7",
|
||||||
|
". c #B5B9BF",
|
||||||
|
"@ c #3E69B1",
|
||||||
|
", c #90A0BA",
|
||||||
|
": c #6483B5",
|
||||||
|
"> c #5A7BB4",
|
||||||
|
"% c #5F7FB5",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" .Xo OO ",
|
||||||
|
" +@#. $@% ",
|
||||||
|
" &@@X .*@*o ",
|
||||||
|
" =@= .*@*. ",
|
||||||
|
" -@@X*@*. ",
|
||||||
|
" .#@@@$. ",
|
||||||
|
" ;@@: ",
|
||||||
|
" ;@@@+ ",
|
||||||
|
" .>@#%@@. ",
|
||||||
|
" o*@*oO@@, ",
|
||||||
|
" <#@*. .@@= ",
|
||||||
|
"&@@$ :@@1 ",
|
||||||
|
";#& 2#>. ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,52 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *dir_up_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 31 1",
|
||||||
|
"6 c #9BACC2",
|
||||||
|
"o c #9AEA53",
|
||||||
|
"7 c #94A5BD",
|
||||||
|
"8 c #547897",
|
||||||
|
"5 c #839CB5",
|
||||||
|
"@ c #376485",
|
||||||
|
"$ c #5A809C",
|
||||||
|
"# c #7F99B4",
|
||||||
|
": c #D1D9E5",
|
||||||
|
"< c #EAEDF3",
|
||||||
|
"& c #446A8C",
|
||||||
|
"q c #65839D",
|
||||||
|
"> c #DCE2EA",
|
||||||
|
", c #E1E6EE",
|
||||||
|
"2 c #F5F6F7",
|
||||||
|
"O c #8DA0B9",
|
||||||
|
" c None",
|
||||||
|
"% c #467291",
|
||||||
|
". c #305F81",
|
||||||
|
"X c #7393AB",
|
||||||
|
"+ c #6A89A2",
|
||||||
|
"4 c #A8B6CA",
|
||||||
|
"1 c #EEF1F3",
|
||||||
|
"3 c #F8F9FA",
|
||||||
|
"0 c #215579",
|
||||||
|
"9 c #7F97B0",
|
||||||
|
"* c #B3BFD1",
|
||||||
|
"w c #7A90AC",
|
||||||
|
"- c #C2CBDB",
|
||||||
|
"; c #CAD6E1",
|
||||||
|
"= c #BBC4D6",
|
||||||
|
/* pixels */
|
||||||
|
" .. ",
|
||||||
|
" X.o. ",
|
||||||
|
".... X.ooo. ",
|
||||||
|
".OO+....ooooo. ",
|
||||||
|
".OOOOOO@@ooo.. ",
|
||||||
|
".OOOO#OO@ooo.$ ",
|
||||||
|
".OOOOOOO@ooo.$ ",
|
||||||
|
".O%............&",
|
||||||
|
".O&*=-;:>,<1231.",
|
||||||
|
".+.4*=-;:>,<12$.",
|
||||||
|
"..564*=-;:>,<1. ",
|
||||||
|
".@O764*=-;:>,<. ",
|
||||||
|
".89O764*=-;:>$$ ",
|
||||||
|
"0qw9O764*=-;:. ",
|
||||||
|
"0............. "
|
||||||
|
};
|
|
@ -0,0 +1,21 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * down_xpm[] = {
|
||||||
|
"16 15 3 1",
|
||||||
|
" c None",
|
||||||
|
". c Black",
|
||||||
|
"X c Gray100",
|
||||||
|
" ",
|
||||||
|
" ...... ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" ....XXXX.... ",
|
||||||
|
" .XXXXXXXX. ",
|
||||||
|
" .XXXXXX. ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XX. ",
|
||||||
|
" .. ",
|
||||||
|
" "};
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *exefile_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 16 51 1",
|
||||||
|
"% c #E8E8EC",
|
||||||
|
"= c #E8E8ED",
|
||||||
|
"z c #CACAD4",
|
||||||
|
"8 c #D9D9E1",
|
||||||
|
"p c #D2D2DA",
|
||||||
|
"u c #E1E1E7",
|
||||||
|
"a c #D2D2DB",
|
||||||
|
"< c #E9E9ED",
|
||||||
|
"q c #DADAE1",
|
||||||
|
"+ c #F1F1F4",
|
||||||
|
"g c #D3D3DB",
|
||||||
|
"1 c #E2E2E8",
|
||||||
|
"x c #D3D3DC",
|
||||||
|
"5 c #00A5FF",
|
||||||
|
"$ c #EAEAEE",
|
||||||
|
"4 c #DBDBE2",
|
||||||
|
"h c #CCCCD6",
|
||||||
|
"y c #D4D4DC",
|
||||||
|
"r c #E3E3E9",
|
||||||
|
"d c #D4D4DD",
|
||||||
|
"7 c #DCDCE2",
|
||||||
|
": c #EBEBEF",
|
||||||
|
"0 c #DCDCE3",
|
||||||
|
" c None",
|
||||||
|
"O c #F3F3F5",
|
||||||
|
"> c #E4E4E9",
|
||||||
|
"& c #F3F3F6",
|
||||||
|
"j c #D5D5DD",
|
||||||
|
"6 c #E4E4EA",
|
||||||
|
". c #C6C6D5",
|
||||||
|
"# c #ECECF0",
|
||||||
|
"f c #CECED7",
|
||||||
|
"l c #CECED8",
|
||||||
|
"e c #D6D6DE",
|
||||||
|
"; c #EDEDF0",
|
||||||
|
"3 c #DEDEE4",
|
||||||
|
", c #EDEDF1",
|
||||||
|
"c c #CFCFD8",
|
||||||
|
"o c #F5F5F7",
|
||||||
|
"- c #E6E6EB",
|
||||||
|
"w c #D7D7DF",
|
||||||
|
"v c #C8C8D3",
|
||||||
|
"i c #DFDFE5",
|
||||||
|
"@ c #EEEEF2",
|
||||||
|
"s c #D0D0D9",
|
||||||
|
"X c #9494AD",
|
||||||
|
"9 c #D8D8DF",
|
||||||
|
"t c #D8D8E0",
|
||||||
|
"* c #EFEFF2",
|
||||||
|
"2 c #E0E0E6",
|
||||||
|
"k c #D1D1DA",
|
||||||
|
/* pixels */
|
||||||
|
" ........X ",
|
||||||
|
" .oO+@#$%XX ",
|
||||||
|
" .&+*#$=-XXX ",
|
||||||
|
" .+*;:=->XXXX ",
|
||||||
|
" .*,:<->1234X ",
|
||||||
|
" .,5:5612378X ",
|
||||||
|
" 5,5559530qwX ",
|
||||||
|
" 55555550q9eX ",
|
||||||
|
" 5555r5555teyX ",
|
||||||
|
" 55rui559eypX ",
|
||||||
|
" 5555i5555yasX ",
|
||||||
|
" 5555555dasfX ",
|
||||||
|
" 5355595gsfhX ",
|
||||||
|
" .3595jgklhzX ",
|
||||||
|
" .0qwjxkchzvX ",
|
||||||
|
" XXXXXXXXXXXX "
|
||||||
|
};
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *fileopen_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 36 1",
|
||||||
|
"6 c #9BACC2",
|
||||||
|
"< c #9AEA53",
|
||||||
|
"9 c #94A5BD",
|
||||||
|
"5 c #839CB5",
|
||||||
|
"; c #4D7492",
|
||||||
|
". c #376485",
|
||||||
|
"$ c #7F99B4",
|
||||||
|
"r c #D1D9E5",
|
||||||
|
"7 c #EAEDF3",
|
||||||
|
"@ c #CAD2DC",
|
||||||
|
"% c #718BA7",
|
||||||
|
"t c #BECAD9",
|
||||||
|
"& c #65839D",
|
||||||
|
"0 c #DCE2EA",
|
||||||
|
"4 c #F5F6F7",
|
||||||
|
"w c #597B9A",
|
||||||
|
"O c #8DA0B9",
|
||||||
|
" c None",
|
||||||
|
"+ c #467291",
|
||||||
|
"u c #305F81",
|
||||||
|
"= c #B4C4D3",
|
||||||
|
"# c #CAE2AA",
|
||||||
|
"1 c #FAFCFE",
|
||||||
|
"3 c #A8B6CA",
|
||||||
|
"q c #E4E9ED",
|
||||||
|
"8 c #EEF1F3",
|
||||||
|
"X c #215579",
|
||||||
|
"2 c #7F97B0",
|
||||||
|
": c #B3BFD1",
|
||||||
|
"y c #7A90AC",
|
||||||
|
", c #C2CBDB",
|
||||||
|
"- c #ADD668",
|
||||||
|
"* c #B6D791",
|
||||||
|
"e c #CAD6E1",
|
||||||
|
"o c #DFF0D0",
|
||||||
|
"> c #BBC4D6",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" .... ",
|
||||||
|
"XXXXX .oo. ",
|
||||||
|
"XOOOO+@.#o. ",
|
||||||
|
"XOOOO$%&.*oXXX ",
|
||||||
|
"XOOOOOOO.*oX=X ",
|
||||||
|
"XOXXXX...-oXXXX;",
|
||||||
|
"XOX:>,.<<<<<oX1;",
|
||||||
|
"X2X3:>,.<<<oX4=;",
|
||||||
|
"XX563:>>.<oX78; ",
|
||||||
|
"XXO963:>>.X0q7; ",
|
||||||
|
"Xw2O963:>>er0t; ",
|
||||||
|
"X&y2O963:>,er; ",
|
||||||
|
"uXXXXXXXXXXXX; ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *filesave_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 21 1",
|
||||||
|
"O c #FFFFFF",
|
||||||
|
"> c #D5D6D8",
|
||||||
|
"; c #446A8C",
|
||||||
|
"1 c #CAD2DC",
|
||||||
|
": c #C0C7D1",
|
||||||
|
" c #5F666D",
|
||||||
|
"% c #A5B0BA",
|
||||||
|
"o c #65839D",
|
||||||
|
", c #DCE2EA",
|
||||||
|
"< c #C3C5C8",
|
||||||
|
"- c #E1E6EE",
|
||||||
|
"* c #C6CCD3",
|
||||||
|
". c None",
|
||||||
|
"$ c #305F81",
|
||||||
|
"2 c #D6DFE7",
|
||||||
|
"= c #D2D9E0",
|
||||||
|
"& c #B7BFC7",
|
||||||
|
"X c #1B4467",
|
||||||
|
"# c #BCBDBE",
|
||||||
|
"@ c #7A90AC",
|
||||||
|
"+ c #5D7C93",
|
||||||
|
/* pixels */
|
||||||
|
" .",
|
||||||
|
" XoOOOOOOOOO+X .",
|
||||||
|
" @oO#######O+@ .",
|
||||||
|
" @oOOOOOOOOO+@ .",
|
||||||
|
" @oO#######O+@ .",
|
||||||
|
" @oOOOOOOOOO+@ .",
|
||||||
|
" @@+++++++++@@ .",
|
||||||
|
" @@@@@@@@@@@@@ .",
|
||||||
|
" @@@$$$$$$$$@@ .",
|
||||||
|
" @@$%%%&*=-O$@ .",
|
||||||
|
" @@$%X;;*=-O$@ .",
|
||||||
|
" @@$%X;;:>,O$@ .",
|
||||||
|
" @@$%X;;<12O$@ .",
|
||||||
|
" @@$<<2OOOOO$@ .",
|
||||||
|
". .."
|
||||||
|
};
|
|
@ -0,0 +1,44 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *filesaveas_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 23 1",
|
||||||
|
"X c Black",
|
||||||
|
"+ c #FFFFFF",
|
||||||
|
"< c #D5D6D8",
|
||||||
|
"> c #446A8C",
|
||||||
|
"3 c #CAD2DC",
|
||||||
|
", c #C0C7D1",
|
||||||
|
" c #5F666D",
|
||||||
|
"* c #A5B0BA",
|
||||||
|
"O c #65839D",
|
||||||
|
"1 c #DCE2EA",
|
||||||
|
"2 c #C3C5C8",
|
||||||
|
": c #E1E6EE",
|
||||||
|
". c #FFFF00",
|
||||||
|
"- c #C6CCD3",
|
||||||
|
"@ c None",
|
||||||
|
"& c #305F81",
|
||||||
|
"4 c #D6DFE7",
|
||||||
|
"; c #D2D9E0",
|
||||||
|
"= c #B7BFC7",
|
||||||
|
"o c #1B4467",
|
||||||
|
"$ c #BCBDBE",
|
||||||
|
"# c #7A90AC",
|
||||||
|
"% c #5D7C93",
|
||||||
|
/* pixels */
|
||||||
|
" .X .XX.",
|
||||||
|
" oO+++++++.X.X.@",
|
||||||
|
" #O+$$$$$XX...XX",
|
||||||
|
" #O++++++.......",
|
||||||
|
" #O+$$$$$XX...XX",
|
||||||
|
" #O+++++++.X.X.@",
|
||||||
|
" ##%%%%%%.X%.X .",
|
||||||
|
" ############# @",
|
||||||
|
" ###&&&&&&&&## @",
|
||||||
|
" ##&***=-;:+&# @",
|
||||||
|
" ##&*o>>-;:+&# @",
|
||||||
|
" ##&*o>>,<1+&# @",
|
||||||
|
" ##&*o>>234+&# @",
|
||||||
|
" ##&224+++++&# @",
|
||||||
|
"@ @@"
|
||||||
|
};
|
|
@ -0,0 +1,62 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *find_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 41 1",
|
||||||
|
"y c #A06959",
|
||||||
|
"9 c #A7DAF2",
|
||||||
|
"$ c #B5CAD7",
|
||||||
|
"> c #35B4E1",
|
||||||
|
"t c #6B98B8",
|
||||||
|
"w c #B6E0F4",
|
||||||
|
"q c #AEC9D7",
|
||||||
|
"1 c #5A89A6",
|
||||||
|
"+ c #98B3C6",
|
||||||
|
"4 c #EAF6FC",
|
||||||
|
"3 c #DEF1FA",
|
||||||
|
"= c #4CBCE3",
|
||||||
|
"d c #DB916B",
|
||||||
|
"X c #85A7BC",
|
||||||
|
"s c #D8BCA4",
|
||||||
|
"o c #749BB4",
|
||||||
|
"e c #BCD9EF",
|
||||||
|
"* c #62B4DD",
|
||||||
|
"< c #91D2EF",
|
||||||
|
"a c #E6DED2",
|
||||||
|
"0 c #E9F4FB",
|
||||||
|
" c None",
|
||||||
|
"@ c #A0BACB",
|
||||||
|
"O c #AABFCD",
|
||||||
|
"i c #6591AE",
|
||||||
|
": c #B9CBD5",
|
||||||
|
"- c #71C5E7",
|
||||||
|
"5 c #D3ECF8",
|
||||||
|
"% c #81A3B9",
|
||||||
|
"6 c #8AD0EE",
|
||||||
|
"8 c #FDFDFE",
|
||||||
|
"p c #8EA9BC",
|
||||||
|
"r c #B6D5EE",
|
||||||
|
", c #81CCEB",
|
||||||
|
". c #ACC4D3",
|
||||||
|
"; c #AFD1DE",
|
||||||
|
"7 c #EFF8FC",
|
||||||
|
"u c #C2CBDB",
|
||||||
|
"# c #C0D1DC",
|
||||||
|
"2 c #CAD6E1",
|
||||||
|
"& c #8FB0C3",
|
||||||
|
/* pixels */
|
||||||
|
" .XooXO ",
|
||||||
|
" +@###$+% ",
|
||||||
|
" .&#*==-;@@ ",
|
||||||
|
" o:*>,<--:X ",
|
||||||
|
" 12>-345-#% ",
|
||||||
|
" 12>678392% ",
|
||||||
|
" %$*,3059q& ",
|
||||||
|
" @Oq,wwer@@ ",
|
||||||
|
" t@q22q&+ ",
|
||||||
|
" yyui+%o%p ",
|
||||||
|
" yasy ",
|
||||||
|
" yasdy ",
|
||||||
|
" yasdy ",
|
||||||
|
" ysdy ",
|
||||||
|
" yy "
|
||||||
|
};
|
|
@ -0,0 +1,63 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *findrepl_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 42 1",
|
||||||
|
"y c #A06959",
|
||||||
|
"9 c #A7DAF2",
|
||||||
|
"$ c #B5CAD7",
|
||||||
|
"> c #35B4E1",
|
||||||
|
"t c #6B98B8",
|
||||||
|
"w c #B6E0F4",
|
||||||
|
"q c #AEC9D7",
|
||||||
|
"1 c #5A89A6",
|
||||||
|
"+ c #98B3C6",
|
||||||
|
"4 c #EAF6FC",
|
||||||
|
"d c #008000",
|
||||||
|
"3 c #DEF1FA",
|
||||||
|
"= c #4CBCE3",
|
||||||
|
"f c #DB916B",
|
||||||
|
"X c #85A7BC",
|
||||||
|
"s c #D8BCA4",
|
||||||
|
"o c #749BB4",
|
||||||
|
"e c #BCD9EF",
|
||||||
|
"* c #62B4DD",
|
||||||
|
"< c #91D2EF",
|
||||||
|
"a c #E6DED2",
|
||||||
|
"0 c #E9F4FB",
|
||||||
|
" c None",
|
||||||
|
"@ c #A0BACB",
|
||||||
|
"O c #AABFCD",
|
||||||
|
"i c #6591AE",
|
||||||
|
": c #B9CBD5",
|
||||||
|
"- c #71C5E7",
|
||||||
|
"5 c #D3ECF8",
|
||||||
|
"% c #81A3B9",
|
||||||
|
"6 c #8AD0EE",
|
||||||
|
"8 c #FDFDFE",
|
||||||
|
"p c #8EA9BC",
|
||||||
|
"r c #B6D5EE",
|
||||||
|
", c #81CCEB",
|
||||||
|
". c #ACC4D3",
|
||||||
|
"; c #AFD1DE",
|
||||||
|
"7 c #EFF8FC",
|
||||||
|
"u c #C2CBDB",
|
||||||
|
"# c #C0D1DC",
|
||||||
|
"2 c #CAD6E1",
|
||||||
|
"& c #8FB0C3",
|
||||||
|
/* pixels */
|
||||||
|
" .XooXO ",
|
||||||
|
" +@###$+% ",
|
||||||
|
" .&#*==-;@@ ",
|
||||||
|
" o:*>,<--:X ",
|
||||||
|
" 12>-345-#% ",
|
||||||
|
" 12>678392% ",
|
||||||
|
" %$*,3059q& ",
|
||||||
|
" @Oq,wwer@@ ",
|
||||||
|
" t@q22q&+ ",
|
||||||
|
" yyui+%o%p ",
|
||||||
|
" yasy d d ",
|
||||||
|
" yasfy dd dd ",
|
||||||
|
"yasfy ddddddddd",
|
||||||
|
"ysfy dd dd ",
|
||||||
|
" yy d d "
|
||||||
|
};
|
|
@ -0,0 +1,39 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *floppy_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 18 1",
|
||||||
|
"& c #E3E4E6",
|
||||||
|
"+ c #FFFFFF",
|
||||||
|
". c #446A8C",
|
||||||
|
"o c #697787",
|
||||||
|
"> c #5F666D",
|
||||||
|
"* c #B2B3B3",
|
||||||
|
" c None",
|
||||||
|
", c #4B4C4D",
|
||||||
|
"= c #DCDBDA",
|
||||||
|
"$ c #1B4467",
|
||||||
|
": c #E4E9ED",
|
||||||
|
"@ c #979BA0",
|
||||||
|
"X c #203646",
|
||||||
|
"O c #215579",
|
||||||
|
"- c #545B63",
|
||||||
|
"; c #636465",
|
||||||
|
"# c #CAD6E1",
|
||||||
|
"% c #7F8286",
|
||||||
|
/* pixels */
|
||||||
|
" .XoooooooXO ",
|
||||||
|
" .o+++++++.O ",
|
||||||
|
" .o+OOOOO+.O ",
|
||||||
|
" .o+++++++.O ",
|
||||||
|
" .o@@@@@@@.O ",
|
||||||
|
" ..........O ",
|
||||||
|
" ..#+++++#.O ",
|
||||||
|
" ..+$O+++#.O ",
|
||||||
|
" ..+$O+++#.O ",
|
||||||
|
" %&.........*% ",
|
||||||
|
"%=+++++++++++&% ",
|
||||||
|
"--------------; ",
|
||||||
|
"-:::::::::::::- ",
|
||||||
|
"-:X:XXXXXXXXX:> ",
|
||||||
|
"-*************, "
|
||||||
|
};
|
|
@ -0,0 +1,43 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *folder_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 22 1",
|
||||||
|
"> c #9BACC2",
|
||||||
|
". c #547897",
|
||||||
|
"1 c #7F99B4",
|
||||||
|
"X c #D1D9E5",
|
||||||
|
"< c #EAEDF3",
|
||||||
|
"+ c #CAD2DC",
|
||||||
|
"3 c #718BA7",
|
||||||
|
"O c #BECAD9",
|
||||||
|
"$ c #E1E6EE",
|
||||||
|
"* c #F5F6F7",
|
||||||
|
", c #8DA0B9",
|
||||||
|
" c None",
|
||||||
|
"# c #D6DFE7",
|
||||||
|
"@ c #D2D9E0",
|
||||||
|
"- c #FAFCFE",
|
||||||
|
"; c #ADBACE",
|
||||||
|
"& c #EEF1F3",
|
||||||
|
"= c #F8F9FA",
|
||||||
|
"o c #B3BFD1",
|
||||||
|
"2 c #7A90AC",
|
||||||
|
": c #A2B3C5",
|
||||||
|
"% c #E5EAF1",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ..... ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" ............. ",
|
||||||
|
" .oO+@#$%&*=-. ",
|
||||||
|
" .oO+@#$%&*=-. ",
|
||||||
|
" .;oO+X#$%&*=. ",
|
||||||
|
" .:;oO+X#$%&*. ",
|
||||||
|
" .>:;oO+X#$%&. ",
|
||||||
|
" .,>:;oO+X#$<. ",
|
||||||
|
" .1,>:;oO+X#$. ",
|
||||||
|
" .21,>:;oO+X#. ",
|
||||||
|
" .321,>:;oO+X. ",
|
||||||
|
" ............. ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,52 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *folder_open_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 31 1",
|
||||||
|
"6 c #9BACC2",
|
||||||
|
"w c #547B99",
|
||||||
|
"5 c #94A5BD",
|
||||||
|
". c #376485",
|
||||||
|
"; c #F1F4F7",
|
||||||
|
"o c #7F99B4",
|
||||||
|
"2 c #D1D9E5",
|
||||||
|
"- c #EAEDF3",
|
||||||
|
"O c #718BA7",
|
||||||
|
"0 c #65839D",
|
||||||
|
"* c #DCE2EA",
|
||||||
|
": c #F5F6F7",
|
||||||
|
"7 c #597B9A",
|
||||||
|
"X c #8DA0B9",
|
||||||
|
" c None",
|
||||||
|
"+ c #467291",
|
||||||
|
"q c #305F81",
|
||||||
|
"& c #D6DFE7",
|
||||||
|
"3 c #6A89A2",
|
||||||
|
"1 c #A8B6CA",
|
||||||
|
"= c #E4E9ED",
|
||||||
|
"> c #F8F9FA",
|
||||||
|
", c #FDFDFE",
|
||||||
|
"9 c #215579",
|
||||||
|
"8 c #7F97B0",
|
||||||
|
"@ c #B3BFD1",
|
||||||
|
"< c #7A90AC",
|
||||||
|
"$ c #C2CBDB",
|
||||||
|
"4 c #A2B3C5",
|
||||||
|
"% c #CAD6E1",
|
||||||
|
"# c #BBC4D6",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
"..... ",
|
||||||
|
".XXXo. ",
|
||||||
|
".XXXXO........ ",
|
||||||
|
".XXXXXXXXXXXX. ",
|
||||||
|
".XXXXXXXXXXXX. ",
|
||||||
|
".X++++++++++++++",
|
||||||
|
".X+@#$%&*=-;:>,+",
|
||||||
|
".<.1@#$%2*=-;:23",
|
||||||
|
"..X41@#$%2*=-;3 ",
|
||||||
|
"..X561@#$%2*=-3 ",
|
||||||
|
".78X561@#$%2*%3 ",
|
||||||
|
"90<8X561@#$%23 ",
|
||||||
|
"q++++++++++++w ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,21 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * forward_xpm[] = {
|
||||||
|
"16 15 3 1",
|
||||||
|
" c None",
|
||||||
|
". c Black",
|
||||||
|
"X c Gray100",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . ",
|
||||||
|
" .. ",
|
||||||
|
" .X. ",
|
||||||
|
" ........XX. ",
|
||||||
|
" .XXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXX. ",
|
||||||
|
" ........XX. ",
|
||||||
|
" .X. ",
|
||||||
|
" .. ",
|
||||||
|
" . ",
|
||||||
|
" "};
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *error_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 4 1",
|
||||||
|
" c None",
|
||||||
|
"X c #242424",
|
||||||
|
"o c #DCDF00",
|
||||||
|
". c #C00000",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ..... ",
|
||||||
|
" ............. ",
|
||||||
|
" ................. ",
|
||||||
|
" ................... ",
|
||||||
|
" ....................... ",
|
||||||
|
" ......................... ",
|
||||||
|
" ........................... ",
|
||||||
|
" ...........................X ",
|
||||||
|
" .............................X ",
|
||||||
|
" ............................... ",
|
||||||
|
" ...............................X ",
|
||||||
|
" .................................X ",
|
||||||
|
" .................................X ",
|
||||||
|
" .................................XX ",
|
||||||
|
" ...ooooooooooooooooooooooooooo...XX ",
|
||||||
|
" ....ooooooooooooooooooooooooooo....X ",
|
||||||
|
" ....ooooooooooooooooooooooooooo....X ",
|
||||||
|
" ....ooooooooooooooooooooooooooo....XX ",
|
||||||
|
" ....ooooooooooooooooooooooooooo....XX ",
|
||||||
|
" ....ooooooooooooooooooooooooooo....XX ",
|
||||||
|
" ...ooooooooooooooooooooooooooo...XXX ",
|
||||||
|
" ...ooooooooooooooooooooooooooo...XXX ",
|
||||||
|
" .................................XX ",
|
||||||
|
" .................................XX ",
|
||||||
|
" ...............................XXX ",
|
||||||
|
" ...............................XXX ",
|
||||||
|
" .............................XXX ",
|
||||||
|
" ...........................XXXX ",
|
||||||
|
" ...........................XXX ",
|
||||||
|
" .........................XXX ",
|
||||||
|
" .......................XXXX ",
|
||||||
|
" X...................XXXXX ",
|
||||||
|
" X.................XXXXX ",
|
||||||
|
" X.............XXXXX ",
|
||||||
|
" XXXX.....XXXXXXXX ",
|
||||||
|
" XXXXXXXXXXXXX ",
|
||||||
|
" XXXXX ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,63 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *info_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 9 1",
|
||||||
|
"$ c Black",
|
||||||
|
"O c #FFFFFF",
|
||||||
|
"@ c #808080",
|
||||||
|
"+ c #000080",
|
||||||
|
"o c #E8EB01",
|
||||||
|
" c None",
|
||||||
|
"X c #FFFF40",
|
||||||
|
"# c #C0C0C0",
|
||||||
|
". c #ABAD01",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ..... ",
|
||||||
|
" ..XXXXX.. ",
|
||||||
|
" ..XXXXXXXXo.. ",
|
||||||
|
" .XXXOXXXXXXXoo. ",
|
||||||
|
" .XOOXXX+XXXXXo. ",
|
||||||
|
" .XOOOXX+++XXXXoo. ",
|
||||||
|
" .XOOXXX+++XXXXXo. ",
|
||||||
|
" .XOOOXXX+++XXXXXXo. ",
|
||||||
|
" .XOOXXXX+++XXXXXXo. ",
|
||||||
|
" .XXXXXXX+++XXXXXXX. ",
|
||||||
|
" .XXXXXXX+++XXXXXXo. ",
|
||||||
|
" .XXXXXXX+++XXXXXoo. ",
|
||||||
|
" .XXXXXX+++XXXXXo. ",
|
||||||
|
" .XXXXXXX+XXXXXXo. ",
|
||||||
|
" .XXXXXXXXXXXXo. ",
|
||||||
|
" .XXXXX+++XXXoo. ",
|
||||||
|
" .XXXX+++XXoo. ",
|
||||||
|
" .XXXXXXXXo. ",
|
||||||
|
" ..XXXXXXo.. ",
|
||||||
|
" .XXXXXo.. ",
|
||||||
|
" @#######@ ",
|
||||||
|
" @@@@@@@@@ ",
|
||||||
|
" @#######@ ",
|
||||||
|
" @@@@@@@@@ ",
|
||||||
|
" @#######@ ",
|
||||||
|
" @@@@@@@ ",
|
||||||
|
" ### ",
|
||||||
|
" $$$ ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,75 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *question_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 21 1",
|
||||||
|
". c Black",
|
||||||
|
"> c #696969",
|
||||||
|
"O c #1F1F00",
|
||||||
|
"+ c #181818",
|
||||||
|
"o c #F6F900",
|
||||||
|
"; c #3F3F00",
|
||||||
|
"$ c #111111",
|
||||||
|
" c None",
|
||||||
|
"& c #202020",
|
||||||
|
"X c #AAAA00",
|
||||||
|
"@ c #949400",
|
||||||
|
": c #303030",
|
||||||
|
"1 c #383838",
|
||||||
|
"% c #2A2A00",
|
||||||
|
", c #404040",
|
||||||
|
"= c #B4B400",
|
||||||
|
"- c #484848",
|
||||||
|
"# c #151500",
|
||||||
|
"< c #9F9F00",
|
||||||
|
"2 c #6A6A00",
|
||||||
|
"* c #353500",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ......... ",
|
||||||
|
" ...XXXXXXX.. ",
|
||||||
|
" ..XXXXoooooXXXO+ ",
|
||||||
|
" ..XXooooooooooooX@.. ",
|
||||||
|
" ..XoooooooooooooooXX#. ",
|
||||||
|
" $%XoooooooooooooooooXX#. ",
|
||||||
|
" &.XoooooooXXXXXXooooooXX.. ",
|
||||||
|
" .XooooooXX.$...$XXoooooX*. ",
|
||||||
|
" $.XoooooX%.$ .*oooooo=.. ",
|
||||||
|
" .XooooooX.. -.XoooooX.. ",
|
||||||
|
" .XoooooX..+ .XoooooX;. ",
|
||||||
|
" ...XXXX..: .XoooooX;. ",
|
||||||
|
" ........ >.XoooooX;. ",
|
||||||
|
" +.XoooooX.. ",
|
||||||
|
" ,.Xoooooo<.. ",
|
||||||
|
" 1#XooooooXO.. ",
|
||||||
|
" &#XooooooX2.. ",
|
||||||
|
" $%XooooooXX.. ",
|
||||||
|
" $%XooooooXX.. ",
|
||||||
|
" $%XooooooXX.. ",
|
||||||
|
" &.XooooooXX.. ",
|
||||||
|
" .XooooooXX.. ",
|
||||||
|
" &.XoooooXX.. ",
|
||||||
|
" ..XooooXX.. ",
|
||||||
|
" ..XooooX... ",
|
||||||
|
" ..XXooXX..& ",
|
||||||
|
" ...XXXXX.. ",
|
||||||
|
" ........ ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ....... ",
|
||||||
|
" ..XXXXX.. ",
|
||||||
|
" ..XXoooXX.. ",
|
||||||
|
" ..XoooooX.. ",
|
||||||
|
" ..XoooooX.. ",
|
||||||
|
" ..XXoooXX.. ",
|
||||||
|
" ..XXXXX.. ",
|
||||||
|
" ....... ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,63 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *warning_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 9 1",
|
||||||
|
"@ c Black",
|
||||||
|
"o c #A6A800",
|
||||||
|
"+ c #8A8C00",
|
||||||
|
"$ c #B8BA00",
|
||||||
|
" c None",
|
||||||
|
"O c #6E7000",
|
||||||
|
"X c #DCDF00",
|
||||||
|
". c #C00000",
|
||||||
|
"# c #373800",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . ",
|
||||||
|
" ... ",
|
||||||
|
" ... ",
|
||||||
|
" ..... ",
|
||||||
|
" ...X.. ",
|
||||||
|
" ..XXX.. ",
|
||||||
|
" ...XXX... ",
|
||||||
|
" ..XXXXX.. ",
|
||||||
|
" ..XXXXXX... ",
|
||||||
|
" ...XXoO+XX.. ",
|
||||||
|
" ..XXXO@#XXX.. ",
|
||||||
|
" ..XXXXO@#XXX... ",
|
||||||
|
" ...XXXXO@#XXXX.. ",
|
||||||
|
" ..XXXXXO@#XXXX... ",
|
||||||
|
" ...XXXXXo@OXXXXX.. ",
|
||||||
|
" ...XXXXXXo@OXXXXXX.. ",
|
||||||
|
" ..XXXXXXX$@OXXXXXX... ",
|
||||||
|
" ...XXXXXXXX@XXXXXXXX.. ",
|
||||||
|
" ...XXXXXXXXXXXXXXXXXX... ",
|
||||||
|
" ..XXXXXXXXXXOXXXXXXXXX.. ",
|
||||||
|
" ...XXXXXXXXXO@#XXXXXXXXX.. ",
|
||||||
|
" ..XXXXXXXXXXX#XXXXXXXXXX... ",
|
||||||
|
" ...XXXXXXXXXXXXXXXXXXXXXXX.. ",
|
||||||
|
" ...XXXXXXXXXXXXXXXXXXXXXXXX... ",
|
||||||
|
" .............................. ",
|
||||||
|
" .............................. ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,60 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *harddisk_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 39 1",
|
||||||
|
"7 c #E3E4E6",
|
||||||
|
"4 c #FFFFFF",
|
||||||
|
"5 c #839CB5",
|
||||||
|
". c #547897",
|
||||||
|
"1 c #4D7492",
|
||||||
|
"@ c #376485",
|
||||||
|
"o c #7A92A3",
|
||||||
|
"u c #D1D9E5",
|
||||||
|
"y c #446A8C",
|
||||||
|
"i c #51B03D",
|
||||||
|
"> c #CAD2DC",
|
||||||
|
"O c #718BA7",
|
||||||
|
"2 c #65839D",
|
||||||
|
"6 c #DCE2EA",
|
||||||
|
"0 c #C3C5C8",
|
||||||
|
"9 c #F5F6F7",
|
||||||
|
": c #EBEBEC",
|
||||||
|
"< c #597B9A",
|
||||||
|
"t c #C6CCD3",
|
||||||
|
" c None",
|
||||||
|
"* c #DFE0E2",
|
||||||
|
"e c #467291",
|
||||||
|
"a c #526E8B",
|
||||||
|
", c #7393AB",
|
||||||
|
"p c #130A0B",
|
||||||
|
"# c #AABFCD",
|
||||||
|
"r c #B4C4D3",
|
||||||
|
"; c #CFCFD0",
|
||||||
|
"X c #6F90A6",
|
||||||
|
"+ c #6A89A2",
|
||||||
|
"- c #D2D3D4",
|
||||||
|
"= c #DCDBDA",
|
||||||
|
"w c #E4E9ED",
|
||||||
|
"q c #C6C8CA",
|
||||||
|
"% c #215579",
|
||||||
|
"$ c #E7E7E7",
|
||||||
|
"3 c #7F97B0",
|
||||||
|
"8 c #C0D1DC",
|
||||||
|
"& c #5D7C93",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" .XoooXO+@ ",
|
||||||
|
" #$$%%%%$$$X ",
|
||||||
|
" &$*==-;$$$& ",
|
||||||
|
" &:>+,<1234o5 ",
|
||||||
|
" ###+67;;78242 ",
|
||||||
|
" &4,49*0q*9we4. ",
|
||||||
|
" &4+49*,,*9wo4. ",
|
||||||
|
"&4%r,67;;782t%4.",
|
||||||
|
"&44468rrrr84444,",
|
||||||
|
"y11111111111111e",
|
||||||
|
"1uu1:::::::::::1",
|
||||||
|
"1uu1::::::::ip:1",
|
||||||
|
"auu&:::::::::::1",
|
||||||
|
"1111111111111111"
|
||||||
|
};
|
|
@ -0,0 +1,44 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *helpicon_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"32 32 6 1",
|
||||||
|
" c Gray0",
|
||||||
|
". c Blue",
|
||||||
|
"X c #808080808080",
|
||||||
|
"o c #c0c0c0c0c0c0",
|
||||||
|
"O c Gray100",
|
||||||
|
"+ c None",
|
||||||
|
/* pixels */
|
||||||
|
"+++++++++++XXXXXXXX+++++++++++++",
|
||||||
|
"++++++++XXXoOOOOOOoXXX++++++++++",
|
||||||
|
"++++++XXoOOOOOOOOOOOOoXX++++++++",
|
||||||
|
"+++++XoOOOOOOOOOOOOOOOOoX+++++++",
|
||||||
|
"++++XOOOOOOOOOOOOOOOOOOOO ++++++",
|
||||||
|
"+++XOOOOOOOo......oOOOOOOO +++++",
|
||||||
|
"++XOOOOOOOo.oOO....oOOOOOOO ++++",
|
||||||
|
"+XoOOOOOOO..OOOO....OOOOOOOo +++",
|
||||||
|
"+XOOOOOOOO....OO....OOOOOOOO X++",
|
||||||
|
"XoOOOOOOOO....Oo....OOOOOOOOo X+",
|
||||||
|
"XOOOOOOOOOo..oO....OOOOOOOOOO X+",
|
||||||
|
"XOOOOOOOOOOOOOo...OOOOOOOOOOO XX",
|
||||||
|
"XOOOOOOOOOOOOO...OOOOOOOOOOOO XX",
|
||||||
|
"XOOOOOOOOOOOOO..oOOOOOOOOOOOO XX",
|
||||||
|
"XOOOOOOOOOOOOO..OOOOOOOOOOOOO XX",
|
||||||
|
"XoOOOOOOOOOOOOOOOOOOOOOOOOOOo XX",
|
||||||
|
"+XOOOOOOOOOOOo..oOOOOOOOOOOO XXX",
|
||||||
|
"+XoOOOOOOOOOO....OOOOOOOOOOo XXX",
|
||||||
|
"++XOOOOOOOOOO....OOOOOOOOOO XXX+",
|
||||||
|
"+++ OOOOOOOOOo..oOOOOOOOOO XXXX+",
|
||||||
|
"++++ OOOOOOOOOOOOOOOOOOOO XXXX++",
|
||||||
|
"+++++ oOOOOOOOOOOOOOOOOo XXXX+++",
|
||||||
|
"++++++ oOOOOOOOOOOOOo XXXX++++",
|
||||||
|
"+++++++X oOOOOOOo XXXXX+++++",
|
||||||
|
"++++++++XXX oOOO XXXXXXX++++++",
|
||||||
|
"++++++++++XXXX OOO XXXXX++++++++",
|
||||||
|
"+++++++++++++X OOO XX+++++++++++",
|
||||||
|
"+++++++++++++++ OO XX+++++++++++",
|
||||||
|
"++++++++++++++++ O XX+++++++++++",
|
||||||
|
"+++++++++++++++++ XX+++++++++++",
|
||||||
|
"++++++++++++++++++XXX+++++++++++",
|
||||||
|
"+++++++++++++++++++XX+++++++++++"
|
||||||
|
};
|
|
@ -0,0 +1,24 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *home_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 3 1",
|
||||||
|
". c Black",
|
||||||
|
"X c #FFFFFF",
|
||||||
|
" c None",
|
||||||
|
/* pixels */
|
||||||
|
" .... ",
|
||||||
|
" .XXXX. ",
|
||||||
|
" .XXXXXX. ",
|
||||||
|
" .XXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXX. ",
|
||||||
|
" .............. ",
|
||||||
|
" .XXXXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXXXX. ",
|
||||||
|
" .XXXXXXXXXXXX. ",
|
||||||
|
" .X.....X....X. ",
|
||||||
|
" .X. .X. .X. ",
|
||||||
|
" .X. .X. .X. ",
|
||||||
|
" .X.....X. .X. ",
|
||||||
|
" .XXXXXXX. .X. ",
|
||||||
|
" ......... ... "
|
||||||
|
};
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * htmbook_xpm[] = {
|
||||||
|
"16 16 6 1",
|
||||||
|
" c None",
|
||||||
|
". c Black",
|
||||||
|
"X c #000080",
|
||||||
|
"o c #c0c0c0",
|
||||||
|
"O c #808080",
|
||||||
|
"+ c Gray100",
|
||||||
|
" ",
|
||||||
|
" .. ",
|
||||||
|
" ..XX. ",
|
||||||
|
" ..XXXXX. ",
|
||||||
|
" ..XXXXXXXX. ",
|
||||||
|
".oXXXXXXXXXX. ",
|
||||||
|
".XoXXXXXXXXXX. ",
|
||||||
|
".XXoXXXXXXXXXX. ",
|
||||||
|
".XXXoXXXXXXXXX..",
|
||||||
|
".XXXXoXXXXXX..O ",
|
||||||
|
" .XXXXoXXX..O+O ",
|
||||||
|
" .XXXXo..O++o..",
|
||||||
|
" .XXX.O+++o.. ",
|
||||||
|
" .XX.o+o.. ",
|
||||||
|
" .X.o.. ",
|
||||||
|
" ... "};
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * htmfoldr_xpm[] = {
|
||||||
|
"16 16 6 1",
|
||||||
|
" c None",
|
||||||
|
". c Black",
|
||||||
|
"X c #000080",
|
||||||
|
"o c #c0c0c0",
|
||||||
|
"O c #808080",
|
||||||
|
"+ c Gray100",
|
||||||
|
" ",
|
||||||
|
" .. ",
|
||||||
|
" ..XX. ",
|
||||||
|
" ..XXXXX. ",
|
||||||
|
" ..XXXXXXXX. ",
|
||||||
|
".oXXXXXXXXXX. ",
|
||||||
|
".XoXXXXXXXXXX. ",
|
||||||
|
".XXoXXXXXXXXXX. ",
|
||||||
|
".XXXoXXXXXXXXX..",
|
||||||
|
".XXXXoXXXXXX..O ",
|
||||||
|
" .XXXXoXXX..O+O ",
|
||||||
|
" .XXXXo..O++o..",
|
||||||
|
" .XXX.O+++o.. ",
|
||||||
|
" .XX.o+o.. ",
|
||||||
|
" .X.o.. ",
|
||||||
|
" ... "};
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * htmoptns_xpm[] = {
|
||||||
|
"16 15 2 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
" ",
|
||||||
|
" .. ",
|
||||||
|
" ... ",
|
||||||
|
" .... ",
|
||||||
|
" . ... ",
|
||||||
|
" .. ... ",
|
||||||
|
" . .. ",
|
||||||
|
" .. ... ",
|
||||||
|
" . .. ",
|
||||||
|
" ......... ",
|
||||||
|
" .. ... ",
|
||||||
|
" . ... ",
|
||||||
|
" .. ... ",
|
||||||
|
" .... ....... ",
|
||||||
|
" "};
|
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * htmpage_xpm[] = {
|
||||||
|
"16 16 4 1",
|
||||||
|
" c None",
|
||||||
|
". c #808080",
|
||||||
|
"X c Gray100",
|
||||||
|
"o c Black",
|
||||||
|
" ",
|
||||||
|
" .......... ",
|
||||||
|
" .XXXXXXXX.. ",
|
||||||
|
" .XXXXXXXXooo ",
|
||||||
|
" .X......XXXo ",
|
||||||
|
" .XXXXXXXXXXo ",
|
||||||
|
" .X........Xo ",
|
||||||
|
" .XXXXXXXXXXo ",
|
||||||
|
" .X........Xo ",
|
||||||
|
" .XXXXXXXXXXo ",
|
||||||
|
" .X........Xo ",
|
||||||
|
" .XXXXXXXXXXo ",
|
||||||
|
" .X........Xo ",
|
||||||
|
" .XXXXXXXXXXo ",
|
||||||
|
" .XXXXXXXXXXo ",
|
||||||
|
" oooooooooooo "};
|
|
@ -0,0 +1,27 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *htmsidep_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 6 1",
|
||||||
|
". c Black",
|
||||||
|
"X c #FFFFFF",
|
||||||
|
"+ c #808080",
|
||||||
|
" c None",
|
||||||
|
"O c #0000C0",
|
||||||
|
"o c #C0C0C0",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" .............. ",
|
||||||
|
" .XXXX.ooooooo. ",
|
||||||
|
" .XOXX.oo...oo. ",
|
||||||
|
" .XXOX.ooooooo. ",
|
||||||
|
" .OOOO.o...+.o. ",
|
||||||
|
" .XXOX.ooooooo. ",
|
||||||
|
" .XOXX.ooooooo. ",
|
||||||
|
" .XXXX.o..+ooo. ",
|
||||||
|
" .XXOX.ooooooo. ",
|
||||||
|
" .XOXX.o...+.o. ",
|
||||||
|
" .OOOO.ooooooo. ",
|
||||||
|
" .XOXX.o.+...o. ",
|
||||||
|
" .XXOX.ooooooo. ",
|
||||||
|
" .............. "
|
||||||
|
};
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *listview_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 15 4 1",
|
||||||
|
" c Black",
|
||||||
|
". c #FFFFFF",
|
||||||
|
"X c #000084",
|
||||||
|
"o c #848484",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" .............. ",
|
||||||
|
" .XXX.......... ",
|
||||||
|
" .XXX. o o . ",
|
||||||
|
" .XXX.......... ",
|
||||||
|
" .............. ",
|
||||||
|
" .XXX.......... ",
|
||||||
|
" .XXX. o . ",
|
||||||
|
" .XXX.......... ",
|
||||||
|
" .............. ",
|
||||||
|
" .XXX.......... ",
|
||||||
|
" .XXX. o o . ",
|
||||||
|
" .XXX.......... ",
|
||||||
|
" .............. ",
|
||||||
|
" "
|
||||||
|
};
|
|
@ -0,0 +1,43 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *missimg_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"32 32 5 1",
|
||||||
|
"X c Black",
|
||||||
|
"o c #FFFFFF",
|
||||||
|
" c None",
|
||||||
|
". c #C0C0C0",
|
||||||
|
"O c #E0E0E0",
|
||||||
|
/* pixels */
|
||||||
|
" .............................X ",
|
||||||
|
" .ooooooooooooooooooooooooooooX ",
|
||||||
|
" .ooooooooooooooooooooooooooooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOXOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" XXXOOOOOXX XOOOOOOOOOOOOOOOooX ",
|
||||||
|
" XXXXX XOOOOOOOOOOOOOOooX ",
|
||||||
|
" XOOOXXXOOOOOOOooX ",
|
||||||
|
" XXX XXOOOOOooX ",
|
||||||
|
" XOOOOooX ",
|
||||||
|
" . XOOOooX ",
|
||||||
|
" .. XXOooX ",
|
||||||
|
" .o.. XooX ",
|
||||||
|
" .ooO... XXX ",
|
||||||
|
" .ooOOOO.......... ",
|
||||||
|
" .ooOOOOOOOOOOOOOO.. ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOO.. ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOO......... ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooOOOOOOOOOOOOOOOOOOOOOOOOooX ",
|
||||||
|
" .ooooooooooooooooooooooooooooX ",
|
||||||
|
" .ooooooooooooooooooooooooooooX ",
|
||||||
|
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "
|
||||||
|
};
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue