domingo 20 de septiembre de 2009

Contador de Bits

Este codigo cuenta los bits prendido (en uno) de un entero, programado en Assembler, Sintaxys AT&T.
.data
s: .string "%d \n"
l: .long -1
.text

.global main
main:
movl $0,%ebx #ebx es nuestro contador
movl $0,%ecx #ecx es nuestro contador de ciclos
movl l,%eax #carga el long en memoria
rotador:
inc %ecx # i++
ror %eax # rota el eax
adc $0, %ebx # suma el carry
cmp $32,%ecx
jnz rotador
#jmp rotador
return:
pushl %ebx
pushl $s
call printf
addl $8, %esp
movl $0, %eax
ret

Podemos cambiar las siguientas lineas:
return:
pushl %ebx
pushl $s
call printf
por: movl %ebx, %eax y podemos usar esta linea como una funcion

Assembler - Hello World

He aqui el programa con el que todo programador empieza. "Hello World". Esta vez hecho en assembler, sintaxys de AT&T. Para un microprocesador I386

#Hello world
.data
s: .string "Hellow Word\n"
l: .long 555
.text
.global main
main:
pushl l
pushl $s
call printf
addl $8, %esp
movl $0, %eax
ret

Funcion que cortar un string segun caracter en C#

El funcionamiento de esta funcion es el siguiente, le mandamos una cadena la cual se va a cortar y lo que hace, corta el principio o el final de la cadena, segun indica el bool, hasta que encuentre el primer o la ultima existencia del caracter ingresado.

Veamos un ejemplo

Si cadena = " H:\Programacion\SystemChek\SystemCheck\programa.exe"

cortarporcaracter ( cadena, '\\' , true)

me va a devolver cadena = "H:\Programacion\SystemChek\"

y

cortarporcaracter ( cadena, '\\' , false)

me va a devolver

cadena = "programa.exe"

Aca el codigo de la función


private string cortarporcaracter(string cadena,char caracter, bool principio)

{
   int ubicacion = 0;
   if (principio)
   {
         for (int i = 0; i <= cadena.Length - 1; i++)
        {
              if (cadena[i] == caracter)
                       {
                             ubicacion = i;
                             break;
                       }

         }
         cadena = cadena.Substring(0,ubicacion+1);


    }
    else
    {
           for (int i = cadena.Length - 1; i >= 0; i--)
                 {
                       if (cadena[i] == caracter)
                            {
                              ubicacion = i;
                              break;
                             }

                }
          cadena = cadena.Substring(ubicacion + 1, cadena.Length - ubicacion - 1);
   }

   return cadena;

}


domingo 21 de septiembre de 2008

Manejo de Archivos en Smalltalk V y Express

1 - Para crear un archivo de salida:
  File newFile: nombreArchivo

  Ejemplo: 
  | archi |
  archi := File newFile: ' c:\ pruebas.txt'.  

   
2- Para cerrar un archivo de salida:
  NombreArchivo close

  Ejemplo:
  | archi |
  archi := File newFile: ' c:\ pruebas2.txt'.
  archi close  



3- Para guardar datos en un archivo:
  nombreArchivo nextPutAll: dato

  Ejemplo: 
  | archi |
  archi := File newFile: ' c:\ pruebas2.txt'.
  archi nextPutAll:'Esta es una prueba'; cr.  
  archi close  


4- Para guardar datos en un archivo, desde una colección:
nombreArchivo nextPutAll: coleccion

Ejemplo:

| archi col col2|
archi := File newFile:'c:\prueba.dat'.
archi nextPutAll:'Este es mi archivo de prueba';cr.
col := #( 1 2 3 4 5).
col do:[ :k | archi nextPutAll: k printString ;cr].
col2 := #( $A $B $C).
archi nextPutAll: col2.
archi close.



5- Para leer un archivo:
File pathName: nombreArchivo

Ejemplo:

| archi col |
archi := File pathName:'c:\prueba.dat'.
col := archi contents.
archi close.
^col


SOLO EN SMALLTALK EXPRESS

1 - Para determinar si un archivo ya existe :
File exists: nombreArchivo
Ejemplo:

File exists: 'c:\personal.dat'
File exists:'c:\prueba.dat'



2 - Para guardar los datos de una colección en un archivo:

ObjectFiler dumpAll: coleccion newFile: nombreArchivo

Ejemplo:
| col |
col := #( 1 2 3 4 5).
ObjectFiler dumpAll:col newFile: 'c:\datos.dat'.




3- Para cargar datos en una colección desde un archivo:
ObjectFiler loadAllFromPathName: nombreArchivo

Ejemplo:
| coldat |
coldat := ObjectFiler loadAllFromPathName: 'c:\datos.dat'.
^coldat

miércoles 3 de septiembre de 2008

Calcular edad en C#

class Persona
  {

  public string nya;

  public DateTime fechanac;

  public int dameEdad()

  {
  TimeSpan z = DateTime.Now.Subtract(fechanac);
  return (z.Days/365);
  }

  }

/* Esta es una implementación de un metodo que ingresada la fecha de nacimiento devuelve la edad de la persona   */

 static void main () 
{
 Persona pers1 = new Persona();
 Console.WriteLine("Dime tu nombre:");
 pers1.nya = Console.ReadLine();
 Console.WriteLine("dime tu fecha nac (dd/mm/aaaa):");
 pers1.fechanac = Convert.ToDateTime(Console.ReadLine());
 int edad = pers1.dameEdad();
 Console.WriteLine("{0} tiene {1} años", pers1.nya, edad);
 Console.ReadKey();
}

Muestra de lo que sale en consola:



miércoles 12 de marzo de 2008

Ocultar y mostrar el puntero del ratón

Crear un nuevo proyecto e insertar dos ButtonClick y un Módulo:

Pegue el siguiente código en el formulario:

Private Sub Command1_Click()
result = ShowCursor(False)
End Sub

Private Sub Command2_Click()
result = ShowCursor(True)
End Sub


Peguar el siguiente código en el módulo:

Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long

martes 11 de marzo de 2008

Calcular la etiqueta o label de un disco duro:

Hallar la etiqueta o label del mismo disco duro en Visual Basic 6.0:

Escribir el siguiente código:
Private Declare Function GetVolumeInformation& Lib "kernel32" Alias
"GetVolumeInformationA" (ByVal lpRootPathName As String,
ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String,
ByVal nFileSystemNameSize As Long)

Private Sub Form_Load()
Dim cad1 As String * 256
Dim cad2 As String * 256
Dim numSerie As Long
Dim longitud As Long
Dim flag As Long
unidad = "D:\"
Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud,
flag, cad2, 256)
MsgBox "Label de la unidad " & unidad & " = " & cad1
End Sub