World: r3wp
[Core] Discuss core issues
older newer | first last |
Tomc 10-Jan-2005 [101] | a > b -> 1 a = b -> 0 a < b -> -1 |
Pekr 10-Jan-2005 [102x2] | so return false was not enough :-) |
may I switch on logical values? switch true [true "print true"] ... does not work ... | |
Tomc 10-Jan-2005 [104] | with only two states for logic 'either makes more sense |
Pekr 10-Jan-2005 [105x2] | your above function will not work imo ... |
there can be several states - non existant 'a, non existant 'b, both not existant, a < b, a = b, a > b :-) | |
Tomc 10-Jan-2005 [107] | in your case you seem to want null have a value that sorts before any known value which is fine for you. but in general, the three cases where a b or both are null are equalivanrt in that no comparison can be made and so are "vacuously true" because they cannot be proved false. |
Vincent 10-Jan-2005 [108] | Pekr: switch true reduce [true "print true"] does work. 'true in your block is the word 'true, not the value true. |
Gabriele 11-Jan-2005 [109] | ...or switch true [#[true] [print "true"]] |
Pekr 11-Jan-2005 [110] | what version of Core will that work from? Will it work in IOS? |
Anton 11-Jan-2005 [111] | From at least View 1.2.5.3.1 it works. (not sure about Core) |
Vincent 11-Jan-2005 [112] | #[true] works from /Core 2.5.1 (but not in 2.5.0) |
Sunanda 12-Jan-2005 [113] | It's easy to do case sensitive or case insensitive tests for equality: >> "abc" = "ABC" == true >> "abc" == "ABC" == false (Or use equal? and strict-equal?) Anyone know a similar shorthand way to do the same for greater/less than comparisons? >> "abc" < "ABC" == false >> "abc" > "ABC" == false Right now, I'm using to-binary to get the right result: >> (to-binary "abc") < (to-binary "ABC") == false >> (to-binary "abc") > (to-binary "ABC") == true |
Geomol 12-Jan-2005 [114x3] | No, there doesn't seem to be a strict-greater? action, but you can make such a function to get more readable code: strict-greater?: func [value1 value2] [(to-binary value1) > (to-binary value2)] Which makes me remember, that it's not possible to make new in-fix actions in REBOL!? |
Functions are pre-fix (name of function followed by arguments), actions are in-fix (argument1 action! argument2), and there are no post-fix words in REBOL. I'm not too familar with the language theory, REBOL is based on, but should it be possible to make new in-fix words? And what about post-fix? Or is that just too confusing? | |
(Well, arguments could be said to be post-fix words... hmm) | |
eFishAnt 12-Jan-2005 [117] | you can build your own parsing, and your own dialects as well...depending on your application |
Geomol 12-Jan-2005 [118] | True. I also actually meant op! types (operators), not action! And the operators in REBOL are pretty basic, so no need for new ones, I guess. |
Sunanda 13-Jan-2005 [119x2] | There's no way as fas a as I know of making new in-fix words. There should be -- the currrent ones work both ways, so the mechanism must be there somewhere: >> 6 < 5 == false >> < 6 5 == false |
Thanks for the strict-greater? idea. I was hoping there was a built-in ability somewhere. One tiny tweak to the function -- you need to restrict the two values to series or you can get strange results: >> strict-greater? make object! [1] make object! [0] == false >> greater? make object! [1] make object! [0] ** Script Error: Cannot use greater? on object! value So: strict-greater?: func [value1 [series!] value2 [series!]] [(to-binary value1) > (to- binary value2)] | |
Ladislav 13-Jan-2005 [121x2] | Infix words are "hard-wired" from the Rebol programmer POV currently |
postfix operators aren't reasonable to have, the prefix versus infix issues are complicated enough | |
Geomol 13-Jan-2005 [123] | The infix operators in REBOL can be seen with: >> ? op! It's a special corner of REBOL, as I see it. And I don't feel a big need to be able to make my own infix operators. There is a funny thing with the and, or and xor operators. They have twin and~, or~ and xor~ actions. The actions is used like: <action> <value1> <value2>, but operators can be used the same way, so the action counterparts seem to be irrelevant. Examples: >> 3 and 9 >> and 3 9 >> and~ 3 9 Why do we have and~, or~ and xor~ made? |
Anton 13-Jan-2005 [124] | I suspect that originally, the infix operators weren't also able to be used prefix. |
Vincent 13-Jan-2005 [125] | One can overload 'and~ 'xor~ 'or~ but should not overload 'and 'xor 'or. With form~ we know they are only used in <action> <value1> <value2>, and are safe to change. |
Ladislav 13-Jan-2005 [126] | I think, that it is an *unsafe* and confusing practice to use infix operators as prefix |
shadwolf 13-Jan-2005 [127x5] | I have one little thing to ask for my personal knowledge and I hope for people to thinks together on a good way to exploit it in REBOL to enhance it's capability to interface with DLL or exploit files containing memory struct dump: |
the thing is how to load or convert a C structure like this and use it in REBOL in a approachant way of C (I hope we could find even a better way to do it with rebol than in C) | |
//------------------------------------------------------------- //- SMD2Header //- Header for all Md2 files, struct SMD2Header { int m_iMagicNum; //Always IDP2 (844121161) int m_iVersion; //8 int m_iSkinWidthPx; int m_iSkinHeightPx; int m_iFrameSize; int m_iNumSkins; int m_iNumVertices; int m_iNumTexCoords; int m_iNumTriangles; int m_iNumGLCommands; int m_iNumFrames; int m_iOffsetSkins; int m_iOffsetTexCoords; int m_iOffsetTriangles; int m_iOffsetFrames; int m_iOffsetGlCommands; int m_iFileSize; }; //------------------------------------------------------------- //- SMD2Vert //- Vertex structure for MD2 struct SMD2Vert { float m_fVert[3]; unsigned char m_ucReserved; }; //------------------------------------------------------------- //- SMD2Frame //- Frame information for the model file struct SMD2Frame { float m_fScale[3]; float m_fTrans[3]; char m_caName[16]; SMD2Vert * m_pVerts; //Cleans up after itself SMD2Frame() { m_pVerts = 0; } ~SMD2Frame() { if(m_pVerts) delete [] m_pVerts; } }; //------------------------------------------------------------- //- SMD2Tri //- Triangle information for the MD2 struct SMD2Tri { unsigned short m_sVertIndices[3]; unsigned short m_sTexIndices[3]; }; //------------------------------------------------------------- //- SMD2TexCoord //- Texture coord information for the MD2 struct SMD2TexCoord { float m_fTex[2]; }; //------------------------------------------------------------- //- SMD2Skin //- Name of a single skin in the md2 file struct SMD2Skin { char m_caSkin[64];//filename CImage m_Image;//Image file ready for texturing }; //------------------------------------------------------------- // CTIMER - // author: Evan Pipho ([evan-:-codershq-:-com]) - // date : Jul 10, 2002 - //------------------------------------------------------------- class CMd2 : public CModel { public: //Set skin to one of the files specified in the md2 files itself void SetSkin(unsigned int uiSkin); //Set skin to a different image void SetSkin(CImage& skin); //Load the file bool Load(const char * szFilename); //Render file at the initial position void Render(); //Render the file at a certain frame void Render(unsigned int uiFrame); //Animate the md2 model (start and end frames of 0 and 0 will loop through the WHOLE model void Animate(float fSpeed = 30.0f, unsigned int uiStartFrame = 0, unsigned int uiEndFrame = 0, bool bLoop = true); //constructors/destructo CMd2(); CMd2(const char * szFile); ~CMd2(); private: CTimer m_Timer; //file header information SMD2Header m_Head; //Frame information SMD2Frame * m_pFrames; //Triangles SMD2Tri * m_pTriangles; //Texure coords SMD2TexCoord * m_pTexCoords; //Skin files SMD2Skin * m_pSkins; //Interpolated vertices SMD2Vert * m_pVerts; //Current skin unsigned int m_uiSkin; //Using a custom skin? bool m_bIsCustomSkin; //The custom skin CImage * m_pCustSkin; }; | |
What I would like to achieve is in REBOL: 1) Declaring in REBOL the struct schemes identically as a in the C way 2) read the file containing the datas to fill the declared struct 3) attribute to struct the rode data from the file 4)can interact freely with REBOL common fonctions | |
the main problem I think with this kind of hierarchical and dynamical size struct is to be anought performant and close to the original to save code writing time and tu enhance the loading performances in such tasks. Actually you need to parse and readapt each data from the binary dump file to rebol based things. And that's an heavy task This can be usefull for all langages that allow binary dump file read/wirte like C, VB and many others. | |
eFishAnt 13-Jan-2005 [132x3] | if that is the struct of the data stored in a file, it should not be too hard to parse the file to get the information...looks like a 3-D rendering file or ? |
my REBOL coding is nearly as good as my C coding...but my C codding had a 22 year head start...;-) | |
coding = codding ... a slip of the fish | |
Geomol 14-Jan-2005 [135] | shadwolf, it seems, you need some kind of binary format, so external data can be loaded directly in to a REBOL structure. Maybe REBin? http://www.rebol.net/blogs/0044.html |
shadwolf 14-Jan-2005 [136x2] | this structure is the one for MD2 File format it contents vertex point position, texture, texture coordinates, frames of animation. In MD2 format each animation move is the difference beetwin 2 frame content . |
the goal is to provide to REBOL the capability to do such a load in the simpliest and fastest way I think the posibility of using a vectorial data like float myvar[3]; | |
eFishAnt 14-Jan-2005 [138] | is there a site with files I could look at? (just seems there would be a very simple way to do this without much problem) sorry I am not familiar with md2 (guess the enterprise work distracts me too much...;-( |
shadwolf 14-Jan-2005 [139] | you can find an example files in MD2 format here-> http://shadwolf.free.fr/hellpig.md2 |
eFishAnt 14-Jan-2005 [140] | what could I use to view it so I see what it looks like? |
shadwolf 14-Jan-2005 [141] | In fact the actual need to support MD2 file format is not requiered but We can use such a complicated hierarchical structure to simplify in REBOL/Core the C library branchement witch will in reallity very important if we want to have the true capabilité to exploite C library that use vectorial dat or vectorial structure based API |
eFishAnt 14-Jan-2005 [142x2] | understood. |
parsing binary is a bit different than parsing ASCII...and I have done a bit for mp4...but I think your point of making it simple is a good thing. | |
shadwolf 14-Jan-2005 [144x4] | To see it you can use the MD2 model viewer http://www.swissquake.ch/chumbalum-soft/md2v/ |
you need to download too the texture skin image http://shadwolf.free.fr/hellpig.bmp | |
you open in the modelviewer the hellpig.md2 file and tada you can playback the animation | |
an other way could be to use the MD2 importer script into blender but it's not anymore online for the moment (I have a copy of it on my local harddrive if you want to test it....) | |
eFishAnt 14-Jan-2005 [148x2] | ok...I see what it does...cool. |
when Josh appears, we will scratch each others heads and see if we can determine a way to parse this...he has done some work like this for his NASA project...and he is working on some crazy computer science parsing algorithms...I think he has been chatting with Ladislav too long ... ;-) | |
Ladislav 14-Jan-2005 [150] | SMD2Header: make struct! [ m_iMagicNum [int] ; Always IDP2 (844121161) m_iVersion [int] ; 8 m_iSkinWidthPx [int] m_iSkinHeightPx [int] m_iFrameSize [int] m_iNumSkins [int] m_iNumVertices [int] m_iNumTexCoords [int] m_iNumTriangles [int] m_iNumGLCommands [int] m_iNumFrames [int] m_iOffsetSkins [int] m_iOffsetTexCoords [int] m_iOffsetTriangles [int] m_iOffsetFrames [int] m_iOffsetGlCommands [int] m_iFileSize [int] ] none |
older newer | first last |