[fasm-help] help convert MASM macros in FASM macros
Brought to you by:
privalov
From: Andrey Ch <so...@ma...> - 2002-12-30 08:03:02
|
hi, fasm-help. I'm working on transfer OpenGL headers for FASM and there are some problems, I can'd adapt macros masm for macros fasm help me! ====================================================================== gl_movf MACRO dest,numb mov dest,12345678h ORG $-4 real4 numb ENDM ;====> Better close your eyes... ADULTS ONLY! gl_fpush MACRO numb LOCAL prmstr,prmlen,x,n prmstr EQU <numb> prmlen SIZESTR prmstr IF (prmlen LE 7) ;; constant or varname x SUBSTR prmstr,prmlen,1 IFIDNI x,<f> x SUBSTR prmstr,1,prmlen-1 push 12345678h ORG $-4 real4 &x ELSE push GLfloat ptr prmstr ENDIF ELSE x SUBSTR prmstr,1,7 IFIDNI x,<(float)> x SUBSTR prmstr,8 n=&x x TEXTEQU %n x CATSTR x,<.0> push 12345678h ORG $-4 real4 &x ELSE x SUBSTR prmstr,prmlen,1 IFIDNI x,<f> x SUBSTR prmstr,1,prmlen-1 push 12345678h ORG $-4 real4 &x ELSE push GLfloat ptr prmstr ENDIF ENDIF ENDIF ENDM ; version without auto-convertion _gl_fpush MACRO numb LOCAL prmstr,prmlen,x prmstr EQU <numb> prmlen SIZESTR prmstr x SUBSTR prmstr,prmlen,1 IFIDNI x,<f> x SUBSTR prmstr,1,prmlen-1 push 12345678h ORG $-4 real4 &x ELSE push GLfloat ptr prmstr ENDIF ENDM ; ugly, ugly, ugly... but yet works (from time to time) IF 0 ; this version is more stable, but generated code much more close to insane gl_dpush MACRO numb LOCAL loc1,dat,prmstr,prmlen,x prmstr EQU <numb> prmlen SIZESTR prmstr x SUBSTR prmstr,prmlen,1 IFIDNI x,<f> x SUBSTR prmstr,1,prmlen-1 jmp loc1 ALIGN DWORD dat real8 &x loc1: push dword ptr dat[4] push dword ptr dat ELSE x CATSTR prmstr,<[4]> push dword ptr x push dword ptr prmstr ENDIF ENDM _glFrustum MACRO l,r,b,t,zNear,zFar gl_dpush zFar gl_dpush zNear gl_dpush t gl_dpush b gl_dpush r gl_dpush l call glFrustum ENDM ELSE gl_dpush MACRO numb LOCAL prmstr,prmlen,x prmstr EQU <numb> prmlen SIZESTR prmstr x SUBSTR prmstr,prmlen,1 IFIDNI x,<f> x SUBSTR prmstr,1,prmlen-1 real8 &x db 68h real8 &x ORG $-8-1-8 db 8Dh,40h,0 ; lea eax,[eax+0] db 68h ORG $+4+1+4 ELSE x CATSTR prmstr,<[4]> mov eax,eax mov ebx,ebx push dword ptr x push dword ptr prmstr ENDIF ENDM _glFrustum MACRO l,r,b,t,zNear,zFar gl_dpush zFar gl_dpush zNear gl_dpush t gl_dpush b gl_dpush r gl_dpush l mov eax,eax mov ebx,ebx call glFrustum ENDM _glOrtho MACRO l,r,b,t,zNear,zFar gl_dpush zFar gl_dpush zNear gl_dpush t gl_dpush b gl_dpush r gl_dpush l mov eax,eax mov ebx,ebx call glOrtho ENDM _glDepthRange MACRO zNear,zFar gl_dpush zFar gl_dpush zNear mov eax,eax mov ebx,ebx call glDepthRange ENDM ENDIF _glTranslatef MACRO x,y,z gl_fpush z gl_fpush y gl_fpush x call glTranslatef ENDM _glRotatef MACRO angle,x,y,z gl_fpush z gl_fpush y gl_fpush x gl_fpush angle call glRotatef ENDM _glNormal3f MACRO nx,ny,nz gl_fpush nz gl_fpush ny gl_fpush nx call glNormal3f ENDM _glVertex3f MACRO x,y,z gl_fpush z gl_fpush y gl_fpush x call glVertex3f ENDM _glVertex2f MACRO x,y gl_fpush y gl_fpush x call glVertex2f ENDM _glColor3f MACRO R,G,B gl_fpush B gl_fpush G gl_fpush R call glColor3f ENDM _glTexCoord2f MACRO u,v gl_fpush v gl_fpush u call glTexCoord2f ENDM _glTexEnvfv MACRO target,pname,lpparam invoke glTexEnvfv,target,pname,lpparam ENDM _glTexEnvf MACRO target,pname,param gl_fpush param push pname push target call glTexEnvf ENDM _glTexEnvi MACRO target,pname,param push param push pname push target call glTexEnvf ENDM _glTexParameterf MACRO target,pname,param gl_fpush param push pname push target call glTexParameterf ENDM _glTexParameteri MACRO target,pname,param push param push pname push target call glTexParameteri ENDM _glBegin MACRO mode invoke glBegin,mode ENDM _glEnd MACRO invoke glEnd ENDM _glEnable MACRO cap invoke glEnable,cap ENDM _glDisable MACRO cap invoke glDisable,cap ENDM _glFogf MACRO a,b gl_fpush b push a call glFogf ENDM _glBindTexture MACRO target,texture push texture push target call glBindTexture ENDM _glMatrixMode MACRO mode invoke glMatrixMode,mode ENDM _glShadeModel MACRO mode invoke glShadeModel,mode ENDM _glLoadIdentity MACRO invoke glLoadIdentity ENDM _glFrontFace MACRO mode invoke glFrontFace,mode ENDM _glViewport MACRO x,y,w,h push h push w push y push x call glViewport ENDM ;######################################################################### ;# FPC - Floating Point Constant # ;# Macro by BitRake # ;######################################################################### fpc MACRO val:REQ LOCAL w,x,y,z,zz,ww ;; split type and value, defaulting to REAL4 z INSTR 1,<&val>,<! > IF z EQ 0 y TEXTEQU <REAL4> x TEXTEQU <&val> ELSE y TEXTEQU @SubStr(<&val>,1,z-1) ;; Type x TEXTEQU @SubStr(<&val>,z+1,) ;; Value ENDIF ;; replace . with _ z INSTR 1,x,<!.> IF z EQ 0 w TEXTEQU x x CATSTR x,<.0> ;; prevent error message ELSE w CATSTR @SubStr(%x,1,z-1),<_>,@SubStr(%x,z+1,) ENDIF ;; replace - with _ zz INSTR 1,w,<!-> IF zz EQ 0 ww TEXTEQU w ELSE ww CATSTR @SubStr(%w,1,zz-1),<_>,@SubStr(%w,zz+1,) ENDIF ;; figure out global name for constant z SIZESTR y ;; use last char for size distiction ww CATSTR <__>,ww,<r>,@SubStr(%y,z,1) IF (OPATTR(ww)) EQ 0 ;; not defined CONST SEGMENT ww y x CONST ENDS ENDIF EXITM ww ENDM ====================================================================== --- Origin: music Andrey mailto:so...@ma... Sources pascal http://pascal.vov.ru/ |