From 637165a9ad1ccaa20b827d0f25433a7f16f38152 Mon Sep 17 00:00:00 2001 From: jdg Date: Wed, 8 Sep 2021 21:39:44 +0200 Subject: [PATCH] First commit 28/06/1997 --- README.md | 9 ++ SMOUSE.CPP | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++ SMOUSE.EXE | Bin 0 -> 37068 bytes SMOUSE.OBJ | Bin 0 -> 5757 bytes SVGA256.BGI | Bin 0 -> 6335 bytes 5 files changed, 348 insertions(+) create mode 100644 README.md create mode 100644 SMOUSE.CPP create mode 100644 SMOUSE.EXE create mode 100644 SMOUSE.OBJ create mode 100644 SVGA256.BGI diff --git a/README.md b/README.md new file mode 100644 index 0000000..64c9bf8 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#SMOUSE + + +*28/06/1997* + +ToDo: wwtcf? + + +![screenshot](/SMOUSE.png "Screenshot") diff --git a/SMOUSE.CPP b/SMOUSE.CPP new file mode 100644 index 0000000..e36ea1a --- /dev/null +++ b/SMOUSE.CPP @@ -0,0 +1,339 @@ +// Demostraci¢n del uso del RATON en SVGA +// Jos‚ David Guill‚n +// +// ßßßßßßßßßßßßßßß +// ßFuTuReßViSiOnß +// ßßßßßßßßßßßßßßß +// ßßÜÜÜÜÜßÜÜÜßßßß +// ßß ÛßÛ ßÜßß +// ßßÜ ÛßÛ Ûßß +// ßßßÜÜÜßßÛÜÜß ßß +// +// +// +// Como este fuente esta entero lleno de COMENTARIOS en el SM2.CPP, he +// metido solo el c¢digo, si comentarios. + +// Una de las ventajas de tener de este modo de usar el raton +// es que nuestro puntero tiene las dimensiones que nosotros +// deseemos, y no estamos limitados a 16x16. + +// Crearse un puntero de raton es algo un poco pesado. +// Lo mejor es mediante un programa de dibujo crearse el puntero +// y luego cogerlo del dibujo directamente. ( Yo lo hago con .PCX's ) + +// Un truquito para dibujar el Puntero del RATON: +// 1§ Lo dibujas con caracteres Semi-Gr ficos +// 2§ Lo englobas en una matriz de caracteres ( punto, por ejemplos ); +// 3§ Reemplazas cada caracter por el n§ de color que deseas que adopte. +// ......Û.....................1 +// .....Û±Û....................2 . 0 ( Color Invisible ) +// ....Û±±±Û...................3 Û C1 +// ...Û²±±±±Û..................4 ± C2 +// ..Û²²±±±±±Û.................5 ² C3 +// .Û²²±±±±±±±Û................6 +// .ÛÛÛÛ±±±ÛÛÛÛ.....ÛÛÛÛÛÛÛÛ...7 +// ....Û²±±Û.......Û±±±±±±±±Û..8 +// ....Û²±±Û......Û±±±ÛÛÛÛ±±±Û.9 +// ....Û²±±Û.....Û±±±Û....Û±±±Û- +// ....Û²±±Û......Û±±Û....Û±±Û.1 +// ...Û²±±±±Û......ÛÛ....Û±±Û..2 +// ..Û²±±Û±±±Û..........Û±±Û...3 +// .Û²±±Û.Û±±±Û........Û±±Û....4 +// Û²±±Û...Û±±±Û......Û±±Û.....5 +// ...................Û±±Û.....6 +// ....................ÛÛ......7 +// ............................8 +// ....................ÛÛ......9 +// ...................Û±±Û.....- +// ....................ÛÛ......1 +// 123456789-123456789-12345678 +#include +#include +#include +#include +#include + +void InicializaSVGA(void); +void PreparaCuadricula256col(void); +extern int far _Cdecl Svga256_fdriver[]; +int huge DetectVGA256(){ return 2; } + +#define T 255 +#define C1 31 +#define C2 4 +#define C3 12 + + +#define Ancho_Pantalla 640 +#define Largo_Pantalla 640 + +unsigned char Puntero [ /* 21 * 28 */ ] = { + T, T, T, T, T, T, C1, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, T, T, T, T, C1, C2, C1, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, T, T, T, C1, C2, C2, C2, C1, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, T, T, C1, C3, C2, C2, C2, C2, C1, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, T, C1, C3, C3, C2, C2, C2, C2, C2, C1, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, C1, C3, C3, C2, C2, C2, C2, C2, C2, C2, C1, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, C1, C1, C1, C1, C2, C2, C2, C1, C1, C1, C1, T, T, T, T, T, C1, C1, C1, C1, C1, C1, C1, C1, T, T, T + , T, T, T, T, C1, C3, C2, C2, C1, T, T, T, T, T, T, T, C1, C2, C2, C2, C2, C2, C2, C2, C2, C1, T, T + , T, T, T, T, C1, C3, C2, C2, C1, T, T, T, T, T, T, C1, C2, C2, C2, C1, C1, C1, C1, C2, C2, C2, C1, T + , T, T, T, T, C1, C3, C2, C2, C1, T, T, T, T, T, C1, C2, C2, C2, C1, T, T, T, T, C1, C2, C2, C2, C1 + , T, T, T, T, C1, C3, C2, C2, C1, T, T, T, T, T, T, C1, C2, C2, C1, T, T, T, T, C1, C2, C2, C1, T + , T, T, T, C1, C3, C2, C2, C2, C2, C1, T, T, T, T, T, T, C1, C1, T, T, T, T, C1, C2, C2, C1, T, T + , T, T, C1, C3, C2, C2, C1, C2, C2, C2, C1, T, T, T, T, T, T, T, T, T, T, C1, C2, C2, C1, T, T, T + , T, C1, C3, C2, C2, C1, T, C1, C2, C2, C2, C1, T, T, T, T, T, T, T, T, C1, C2, C2, C1, T, T, T, T + , C1, C3, C2, C2, C1, T, T, T, C1, C2, C2, C2, C1, T, T, T, T, T, T, C1, C2, C2, C1, T, T, T, T, T + , T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, C1, C2, C2, C1, T, T, T, T, T + , T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, C1, C1, T, T, T, T, T, T + , T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T + , T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, C1, C1, T, T, T, T, T, T + , T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, C1, C2, C2, C1, T, T, T, T, T + , T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, C1, C1, T, T, T, T, T, T + }; + +char raton = 0; // Indica si hay raton conectado + +unsigned char *Fondo_Raton;// En esta variable hemos de guardar lo que hab¡a al fondo + // antes de pintar el rat¢n para conservarlo cuando lo movamos + + int X_Mouse, Y_Mouse; // Estas variables se cargan tras + // regresar de Anclar_Raton, si + // devuelven -1, no se puls¢ el RATON + +void Inicializa_Raton(int x1, int y1, int x2, int y2); +int Anclar_Raton(void); +unsigned char Pon_Pixel( unsigned long y, unsigned long x, unsigned char color ); + +void far *image; +void far *Puntero_en_este_momento; + +void main( void ) + { + char Resultado; + + image = (void far *)farmalloc( 50*50 + 10 ); + Puntero_en_este_momento = (void far *)farmalloc( 50*50 + 10 ); + + // Inicializamos el modo SVGA 640*480 256 c. ( VESA ) + InicializaSVGA(); + + getimage( 100, 100, 150, 150, Puntero_en_este_momento ); + + PreparaCuadricula256col(); + + Inicializa_Raton( 10, 10, 630, 470); + + if ( !raton ) + { + closegraph(); + cprintf( " Para este ejemplo se precisa Raton \n\r " ); + return; + } + + Resultado = Anclar_Raton(); + + // Regresamos al modo texto + restorecrtmode(); + + if ( Resultado ) + { + if ( X_Mouse == Y_Mouse && Y_Mouse == -1 ) + cprintf( " Se pulso una tecla, 1§Scan Code: % 3d \n\r", getch() ); + else + cprintf( " Se pulso un Boton en X: % 3d -- Y: % 3d \n\r", X_Mouse, Y_Mouse ); + } + else + cprintf( " Error Interno de asignacion de memoria \n\r" ); + + + + farfree(image); + } + + +// los par metros son las cotas para el raton +void Inicializa_Raton(int x1, int y1, int x2, int y2) +{ + +// Por defecto el raton aparecer  en las coordenadas ( 50, 50 ) +int px = 50, py = 50; + +// Pero si Y_ y X_ tienen unas coordenadas el raton se posiciona alli. +if ( Y_Mouse != -1 && X_Mouse != -1 ) + { + px = X_Mouse; py = Y_Mouse; + } + + union REGS ent, sal; + long dir; + + ent.x.ax = 0; + int86(0x33, &ent, &sal); /* averigua si hay rat¢n conectado */ + + raton = sal.x.ax; /* indica a la variable global el estado + del raton */ + + if(raton!=0) { + + ent.x.ax = 15; + ent.x.cx = 5; + ent.x.dx = 11; + int86(0x33, &ent, &sal); /* fija la raz¢n mickey/pixel */ + + ent.x.ax = 7; + ent.x.cx = x1; + ent.x.dx = x2; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. horizontal */ + + ent.x.ax = 8; + ent.x.cx = y1; + ent.x.dx = y2; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. vertical */ + + ent.x.ax = 4; + ent.x.cx = px; + ent.x.dx = py; + int86(0x33, &ent, &sal); /* fija la posici¢n del rat¢n */ + + ent.x.ax = 2; // Como sabes hacer esto, no sirve para nada + int86(0x33, &ent, &ent); // por que el raton no se puede mostrar y por + // deducion, tan poco ocultar. + // Pero " Por si el modo no es SVGA ", lo ocultamos + + } +} + + +// Dado que aun no sabes como modificar una interrupci¢n creo que esta +// rutina te dar  una idea mucho mas sencilla de como se gestiona el +// raton en SVGA. +// De esta funci¢n solo se regresa cuando se pulse una tecla o un Boton. +// Devuelve 1 si todo va bien, o 0 si hay un error interno de gesti¢n. +int Anclar_Raton(void) + { + char i=0,j=0; + union REGS io; + io.x.ax = 3; + + static int Old_X_Mouse = X_Mouse, Old_Y_Mouse = Y_Mouse; + char ok = 0, Draw = 1; + + + if ( ( Fondo_Raton = (char *)malloc( 28*21 ) ) == NULL ) + return 0; + + do{ + if( Draw ) + { + + // Antes de dibujar el puntero capturamos lo que hay en ese trozo + // de pantalla. + // Luego Dibujamos el puntero; +/* + for( i = 0; i < 21; i++) + for( j = 0; j < 28; j++ ) + { + Fondo_Raton[ i*28 + j ] = getpixel( (j + X_Mouse), (i + Y_Mouse) ); + if( Puntero[ i*28 + j ] != 255 ) + putpixel( (j + X_Mouse), (i + Y_Mouse), Puntero[ i*28 + j ] ); + } +*/ + getimage( (X_Mouse), (Y_Mouse), (X_Mouse)+50, (Y_Mouse)+50, image ); + putimage( (X_Mouse), (Y_Mouse), Puntero_en_este_momento, COPY_PUT ); + } + + Draw = 0; + + // Esperamos a que se mueva el raton / pulse un boton o una tecla + do{ + // Gestionamos las teclas + if ( kbhit() ) + { + X_Mouse = Y_Mouse = -1; + ok = 1; + break; + // Si no hay teclas, los par metros del RATON habr n cambiado + } else { + int86(0x33, &io, &io); // lee posici¢n y estados del bot¢n + X_Mouse = io.x.cx; + Y_Mouse = io.x.dx; + // ¨ Se Puls¢ Un BOTON ? + // B.Izquierdo B. Derecho + if ( (io.x.bx & 1) != 0 || ( (io.x.bx >> 1) & 1 ) != 0 ) + { + ok = 1; + break; + } else + /* ¨ Se movi¢ el Puntero ? */ + if ( X_Mouse != Old_X_Mouse || Y_Mouse != Old_Y_Mouse ) + { + + // Restauramos el contenido de la pantalla +/* + for( i = 0; i < 21; i++) + for( j = 0; j < 28; j++ ) + putpixel( ( j + Old_X_Mouse), (i + Old_Y_Mouse), Fondo_Raton[ i*28 + j ] ); +*/ +putimage( (Old_X_Mouse), (Old_Y_Mouse), image, COPY_PUT ); + + Old_X_Mouse = X_Mouse; + Old_Y_Mouse = Y_Mouse; + Draw = 1; + break; + } + } + }while( 1 ); + + }while(!ok); + + // Restauramos el contenido de la pantalla + for( i = 0; i < 21; i++) + for( j = 0; j < 28; j++ ) + putpixel( ( j + Old_X_Mouse), (i + Old_Y_Mouse), Fondo_Raton[ i*28 + j ] ); + + free( Fondo_Raton ); + return 1; + + } + + + + +void InicializaSVGA(void) { + + int Gd = DETECT, Gm; + int Drv, errorcode; + + installuserdriver("Svga256",DetectVGA256); +// registerfarbgidriver(Svga256_fdriver); + + initgraph(&Gd,&Gm,""); + + /* read result of initialization */ + errorcode = graphresult(); + +if (errorcode != grOk) /* an error occurred */ +{ + cprintf("Graphics error: %s\n", grapherrormsg(errorcode)); + cprintf("Presione una tecla para finalizar:"); + getch(); + exit(1); /* return with error code */ +} + +} + +void PreparaCuadricula256col(void) + { + int x, y, color = 0; + + for( y = 0; y < 16; y++ ) + for( x = 0; x < 16; x++ ) + { + setcolor(color); + setfillstyle( SOLID_FILL, color ); + bar( 40*x, 30*y, 40+40*x+40, 30+30*y); + color++; + } + + } diff --git a/SMOUSE.EXE b/SMOUSE.EXE new file mode 100644 index 0000000000000000000000000000000000000000..586ab2c47848f45492484bf3751ec514c65e733c GIT binary patch literal 37068 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 literal 0 HcmV?d00001 diff --git a/SMOUSE.OBJ b/SMOUSE.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..a3c838242920335e58cbc7d6b75639ad1aef023e GIT binary patch literal 5757 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 M1>Y5zfn-?xUxy>zeE