| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- ;
- ; 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/>.
- ;
- ;***************************************************************************
- ;** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
- ;***************************************************************************
- ;* *
- ;* Project Name : First First *
- ;* *
- ;* File Name : FFIRST.ASM *
- ;* *
- ;* Programmer : Jeff Wilson *
- ;* *
- ;* Start Date : March 28, 1994 *
- ;* *
- ;* Last Update : April 15, 1994 [] *
- ;* *
- ;*-------------------------------------------------------------------------*
- ;* Functions: *
- ;* Find_First -- Find a file spec *
- ;* Find_Next -- Find next file in sreach params *
- ;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
- IDEAL
- P386
- MODEL USE32 FLAT
- LOCALS ??
- GLOBAL Find_First :NEAR
- GLOBAL Find_Next :NEAR
-
- ;============================================================================
- CODESEG
- ;***************************************************************************
- ;* FIND_FIRST -- Find a file spec *
- ;* *
- ;* *
- ;* *
- ;* INPUT: *
- ;* file_name File spec to find. Maybe a wildcard name *
- ;* mode File type *
- ;* ffblk file data block ptr to write info into *
- ;* *
- ;* *
- ;* OUTPUT: *
- ;* *
- ;* WARNINGS: *
- ;* *
- ;* HISTORY: *
- ;* 04/15/1994 jaw: Created. *
- ;*=========================================================================*
- PROC Find_First C near
- USES ebx,ecx,edx,esi,edi,es,ds
- ARG file_name:DWORD,mode:WORD,ffblk:DWORD
-
- mov edx,[file_name]
- mov cx,[mode]
-
- mov eax,4e00h ;first firstg function
-
- int 21h
- ;Find it?
- jnc ??found_it ;=>yes
-
- ; ax holds the error code
- ;insure high word of eax is clear
- or eax,0ffffffffh
- jmp ??exit
-
- ??found_it:
- ; found something
- ;copy the DTA into the user block
- mov eax,2f00h ;get DTA address
- int 21h
-
- mov ax,es ;switch selectors
- mov dx,ds
- mov ds,ax
- mov es,dx
-
- mov esi,ebx
- mov edi,[ffblk]
-
- add esi,21 ;SKIP RESERVED
- add edi,4 ;SKIP RESERVED
-
- sub eax,eax
- mov al,[esi] ;get attrib byte
- mov [es:edi+4],eax
- inc esi
-
- ;get time
- mov ax,[esi]
- add esi,2
- mov [es:edi+8],ax
-
- ;get date
- mov ax,[esi]
- add esi,2
- mov [es:edi+10],ax
-
- ;get file size
- mov eax,[esi]
- add esi,4
- mov [es:edi],eax
-
- add edi,12
-
- mov ecx,13
-
- rep movsb ;copy the DTA name
-
- mov ax,es
- mov ds,ax
-
- xor eax,eax
- ??exit:
- ret
- ;====================
- ENDP Find_First
- ;***************************************************************************
- ;* FIND_NEXT -- Find next file in sreach params *
- ;* *
- ;* *
- ;* *
- ;* INPUT: *
- ;* NONE *
- ;* OUTPUT: *
- ;* *
- ;* WARNINGS: *
- ;* *
- ;* HISTORY: *
- ;* 04/15/1994 jaw: Created. *
- ;*=========================================================================*
-
- PROC Find_Next C near
- USES ebx,ecx,edx,esi,edi,ds,es
-
- ARG ffblk:DWORD
-
- mov eax,04f00h ;Find Next function
-
- int 21h
- ;Find anything?
- jnc ??found_it ;=>no
-
- ; ax holds the error code
- ;insure high word of eax is clear
- or eax,0ffffffffh
- jmp ??exit
-
- ??found_it:
- ; found something
- ;copy the DTA into the user block
- mov eax,2f00h ;get DTA address
- int 21h
-
- mov ax,es ;switch selectors
- mov dx,ds
- mov ds,ax
- mov es,dx
-
- mov esi,ebx
- mov edi,[ffblk]
-
- add esi,21 ;SKIP RESERVED
- add edi,4 ;SKIP RESERVED
-
- sub eax,eax
- mov al,[esi] ;get attrib byte
- mov [es:edi+4],eax
- inc esi
-
- ;get time
- mov ax,[esi]
- add esi,2
- mov [es:edi+8],ax
-
- ;get date
- mov ax,[esi]
- add esi,2
- mov [es:edi+10],ax
-
- ;get file size
- mov eax,[esi]
- add esi,4
- mov [es:edi],eax
-
- add edi,12
-
- mov ecx,13
-
- rep movsb ;copy the DTA name
-
- mov ax,es
- mov ds,ax
-
- xor eax,eax
- ??exit:
- ret
-
- ENDP Find_Next
- END
|