;
;	Command & Conquer Red Alert(tm)
;	Copyright 2025 Electronic Arts Inc.
;
;	This program is free software: you can redistribute it and/or modify
;	it under the terms of the GNU General Public License as published by
;	the Free Software Foundation, either version 3 of the License, or
;	(at your option) any later version.
;
;	This program is distributed in the hope that it will be useful,
;	but WITHOUT ANY WARRANTY; without even the implied warranty of
;	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;	GNU General Public License for more details.
;
;	You should have received a copy of the GNU General Public License
;	along with this program.  If not, see <http://www.gnu.org/licenses/>.
;

; $Header: g:/library/wwlib32/misc/rcs/reverse.asm 1.3 1994/04/25 12:22:45 scott_bowen Exp $
;***************************************************************************
;**   C O N F I D E N T I A L --- W E S T W O O D   A S S O C I A T E S   **
;***************************************************************************
;*                                                                         *
;*                 Project Name : LIBRARY                                  *
;*                                                                         *
;*                    File Name : REVERSE.ASM                              *
;*                                                                         *
;*                   Programmer : Christopher Yates                        *
;*                                                                         *
;*                  Last Update : April 20, 1994   [SKB]                   *
;*                                                                         *
;*-------------------------------------------------------------------------*
;* Functions:                                                              *
;*                                                                         *
; LONG Reverse_LONG(LONG number);                                          *
; WORD Reverse_WORD(WORD number);					   *
; LONG Swap_LONG(LONG number);
;*                                                                         *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *

IDEAL
P386
MODEL USE32 FLAT

GLOBAL	 Reverse_WORD	:NEAR
GLOBAL	 Swap_LONG	:NEAR
GLOBAL	 Reverse_LONG	:NEAR

CODESEG


; ----------------------------------------------------------------
;
; Here are prototypes for the routines defined within this module:
;
; LONG Reverse_LONG(LONG number);
; WORD Reverse_WORD(WORD number);
; LONG Swap_LONG(LONG number);
;
; ----------------------------------------------------------------

;-----------------------------------------------------------------
;
; REVERSE_LONG
;
; LONG Reverse_LONG(LONG number);
;
;*
	PROC	Reverse_LONG C near
	ARG	number:DWORD

IF 1
	mov	eax,[DWORD PTR number]
	xchg	al,ah
	ror	eax,16
	xchg	al,ah
ELSE

	; This is old 16 bit code.
	mov	ax,[WORD PTR number]
	mov	dx,[WORD PTR number+2]
	xchg	ah,dl
	xchg	al,dh
ENDIF

	ret

	ENDP	Reverse_LONG

;-----------------------------------------------------------------

;-----------------------------------------------------------------
;
; REVERSE_WORD
;
; WORD Reverse_WORD(WORD number);
;
;*
	PROC	Reverse_WORD C near
	ARG	number:WORD

	mov	ax,[number]
	xchg	ah,al
	ret

	ENDP	Reverse_WORD

;-----------------------------------------------------------------


;-----------------------------------------------------------------
;
; SWAP_LONG
;
; LONG Swap_LONG(LONG number);
;
;*
	PROC	Swap_LONG C near
	ARG	number:DWORD

IF 1
	; 32 bit code.
    	mov	eax,[DWORD PTR number]
	ror	eax,16
ELSE
	; 16 bit code.
	mov	ax,[WORD PTR number+2]
	mov	dx,[WORD PTR number]
ENDIF

	ret


	ENDP	Swap_LONG

;-----------------------------------------------------------------

	END

