Página 1 de 1

Usando C y ASM

Publicado: Mar Jun 20, 2006 5:24 am
por zeasoftware
Estoy queriendo pasar ua funcion que encontre entre mis cosas, la cual me sirve para leer la etqueta y la serie de un disco duro, pero, ya me atore por mucho rato.
Alguien podria ayudarme a corregirlo y ponerlo de nuevo en el foro, a mucho sppodria servirnos.
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
#include "winsock2.h"
// #include "extend.api"
#define AX_GETSERIAL 2150 //h0866
#define AX_SETSERIAL 2118 //h0846
#define UPPER ('a' - 'A')
#define islower(p) ( 'a' <= (p) && (p) <= 'z' )
#define toupper(p) ( islower(p) ? ((p) - UPPER) : ((p)) )
XA_FUNC( ZVOLUME )
{
WSADATA wsa;
char *name = (char *) hb_xgrab( 25 );
unsigned int iDrive = ISNUM(1) ? hb_parni(1) : 0 ;
int iCX = AX_GETSERIAL;
int iReturn = 0;
int iFree = 0;
if ISCHAR(1)
iDrive = toupper(hb_parc(1)[0]) - 64 ;
if (ISCHAR(2) && (hb_parclen(2) == 25) )
{
iCX = AX_SETSERIAL ;
name = hb_parc(2);
}
else
{
iFree = 1;
name = hb_xalloc(25) ;
}
//en lo que sigue marca error
_asm
{ push ds
push dx
push cx
lds dx, [name] ; load name address in DS:DX
mov AX,440Dh
mov BX,iDrive
mov CX,iCX
int 21h
JNC noerror
mov iReturn, AX
noerror:
pop cx
op dx
pop ds
}
hb_retc("");
if ( iReturn == 0 )
hb_retclen(name,25);
if (iFree)
{
WSACleanup();
hb_xfree(name);
}
}
#pragma ENDDUMP
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--

Usando C y ASM

Publicado: Mar Jun 20, 2006 9:22 am
por zeasoftware
marca esto a pesar que ya grabe el tasm32.exe en bcc55bin
Compilando zBIOSPC.prg...
Warning W8002 zBIOSPC.prg 109: Restarting compile using assembly in function HB_FUN_ZVOLUME
Error E2133: Unable to execute command 'tasm32.exe'
1 Warnings, 1 Errors
Alguna sugerencia?
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/
--

Usando C y ASM

Publicado: Mar Jun 20, 2006 12:35 pm
por jfgimenez
Ramón,
esa función es para 16 bits, y en 32 bits no te va a funcionar. Es más, no
creo ni siquiera que consigas compilarla, ya que está llamando a la int 21h,
que era el punto de entrada al API de MS-DOS, y que como puedes imaginar, en
Win32 no existe.
--
Un saludo,
José F. Giménez
http://www.xailer.com

Usando C y ASM

Publicado: Mar Jun 20, 2006 7:28 pm
por zeasoftware
Gracias, JFG.
Alguien tiene su equivalente o puede pasarlo a 32 bits?
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/