Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 5
Aller à la page: 1, 2, 3, 4, 5  >
[Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher
Auteur Message
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Salut à tous et à toutes!

Je viens vous présenter une nouvelle commande externe de ma conception, BatBox. Cette commande permet d'interagir de manière plus importante avec la console en batch. Elle permet notamment de modifier localement la couleur de la console, de déplacer le curseur, de gérer l'appui sur des touches, de gérer des clics de souris et de produire des sprites sur la console.

Je publie aussi par la même occasion la commande SpriteBox, qui permet de convertir des fichiers texte contenant un Ascii-art en lignes de commandes de la commande externe BatBox, ce qui facilite beaucoup le travail pour les graphismes batch.


  • version 1.0 : support des commandes de base '/k', '/a', '/d', '/g', '/c', '/m'
  • version 1.1 : poids fortement diminué
    changement des noms de commandes
    suppression de la commande '/v'
  • version 1.2 : poids fortement diminué
    changement de comportement de la commande '/k'
    ajout des commandes '/k_' et '/w'
  • version 2.0 : poids fortement diminué
  • version 2.1 : ajout de la commande '/f'
  • version 2.2 : changement des valeurs de retour de la commande '/m'
    ajout de la commande '/s'
  • version 2.3 : ajout de la commande '/o'
    suppression de la commande '/s'
    ajout de l'utilitaire 'SpriteBox'
  • version 2.4 : Ajout des commandes '/s' (nouvelle version), '/p' et '/h'
    Support de l'utf-8 à la fois pour batbox et spritebox
  • version 3.0 : Suppression de la commande '/s' et de la commande '/f'. Ajout de la commande '/n'. Ajout de la sauvegarde de l'offset dans le fichier '.bb'
  • version 3.1 : Ajout de la commande '/x'. Création de différentes versions (simple - pas de fichier '.bb' ni de commande '/x' / défaut - fichier '.bb' mais pas de commande '/x' / complète - la totale). Création d'un système de configuration.


Téléchargements
Pack incluant la source, la doc et les exécutables et tout pour compiler vous même batbox :
https://app.box.com/s/vj2hs7ljqqawnwsutbh40afk35118wuh
Les exécutables des 3 versions :



Les toutes les archives des version précédentes sont disponibles dans le dossier suivant :
https://app.box.com/s/425wmab6sgvvi8wi080i


Vous pouvez consulter la documentation sur le site web de Dos9 :
http://dos9.org/doc/fr/html/batbox.html
http://dos9.org/doc/fr/html/spritebox.html

Code de génération (pour la version défaut) :
Code:
:: BatBox - copyright (c) 2011 - 2014 Romain Garbi (Darkbatcher)
:: copyright (c) 2014 Taz8
:: This is licensed under BSD 3-clause license.
for %%b in (
4D534346000000005A040000000000002C000000000000000301010001000000
000000004700000001000100000800000000000000006546F2B1200062617462
6F782E65786500D7E54E4C0B040008434BB5555F685B55183F499BA06D4DB235
295311EFA4151C23E04A7C2854B2759D8EA51A92B88A14BAFCB9C9BD697A6FB8
B9B19DF32123093223F8361FF6B212F0C597227B98A26C359382B46FC38789FB
F7306E9C6011FF14D15E7FDFB9376D26854DD093FCCE39DFEFFBCE777EE7BBE7
26536F55988331D6CB7CCC34190B938116660F6F15C0F3ECE71E76E9F1F5FD97
1D91F5FD09492E09454DCD69C979219D5414551752A2A09515415684A3AFC785
793523069FE81BEEE4884E32167138D8DBAB9B890E779B791DFD0EC731E686E1
B6495F17481D8D4EC66CB9D06F37C1E2477E66ACA77BDD76A46DDAEDC341C6E6
9C8F70D8FFB805B385A48EF190DB16E4B67477B753548AFFB9497D436196B706
692B80EE0F74662083BE7ACD9FFFD50C44FC61D67453D86FB6E1A4E00A0A2A39
CFA27B6F9056E87CC54075D3F4D6AEE224CD202DF1492F913744861978D78A31
62F04FBC3F58F94678D1CC7E36C0C63E3A83286F6D14FC2BB9BB1BED1BA6691A
7B6045CD909B2F4D60E3760B74E58C63D65BF740BB1928205FFDAAB7F6097833
700AD63855CC5BEFE76E225CB8D4ACD940FAF62F506C7C81AEC745A29A2FA3CB
363D486F7CCCD931628F70D6479B863CBCB704BC49028E90AED3085E751D1BB4
DE91264D24DEBDC00B31835DDB4F52E01C02E35D6CF5DA636D468E35ACFBDDF5
1CF2FE05D35BBF8F7EE9A921EB303729E24744B4AF6F61761133E37B32BF26F3
4F7A69703452738988FBA481CE63DCA1199DA17D010EE9F92EF112C28D15F21F
A067D7EDCA50A63C655A82FFDC2AAA0A661A7B0C90270A8FE9A2A22CEDD46B69
A748ED6F1190DF67869C3C5B146BAC3BE590F6F25D2C7E067C759C1C78CCEB48
99AD8E93DFE9AD5F81D56A8C0FC13AB7B5F293EFEC3DFA21EAE1E5894E9F940E
76D5CFD73286A0328F4FDC0C14ADEBD43287BF3C81A0AA8B2E706FE3191A1A4F
D7BFF3D6E8A56FE5B7EF5FCD7A08FFB8958B569A8E59E166AF196AF08D25CB1C
29B191CC18FFF6EDFE2A7DEA0BB30D60744F985DC03883B10CAC00CBC00DA07F
2F8A877104E35C2E99CECCAB0B52F1B4124CA5788E83819D7CB7F0D334037BD8
BFC3FD002E02BBB78BDB0437E0DF5DD354FCE4442C113C1A89B01393B1D72623
A387B8C1DE884FC63A73BFBDD8BF9D242EA90BD3B2925117C8D2C1D780F3C032
B006DC060C8A87C07DB6E8478DC33B2EEA713DF36A52C91444BE9FA84FA84A49
2D8853F87F789049888BFA615DD7E45459171FF04C94B592AA45D592ACCBAA42
AB626232633B8F2BC5B27E98E20BA258DC65DD7125ABDA5A1EC2772AF101F49F
072E02CBC065E02B600DB80EDC04EE011BF639FF6D3C63454D56F42CCD6673A2
9E96F88CA6F34959496AB9126C7151D6393F9792AC5949D774B5C039B5285221
66173499178BCD6A28098DE9825AB298B45492DF11EDBFBCBF01           
) Do >>t.dat (Echo.For b=1 To len^("%%b"^) Step 2
ECHO WScript.StdOut.Write Chr^(Clng^("&H"^&Mid^("%%b",b,2^)^)^) : Next)
Cscript /b /e:vbs t.dat>batbox.ex_
Del /f /q /a t.dat >nul 2>&1
Expand -r batbox.ex_ >nul 2>&1
Del /f /q /a batbox.ex_ >nul 2>&1



-sprites :
Code:
@ECHO OFF

:: Exemple de batch utilisant les sprites de batbox
:: Ceci est un logiciel libre, vous pouver le distribuer selon
:: les termes de la licence GNU GPL


TITLE Exemple de sprite avec batbox

COLOR 0A

set offsetX=0
set offsetY=0


:Loop

CLS

batbox /o %offsetX% %offsetY% /g 2 0 /a 219 /g 8 0 /a 219 /g 3 1 /a 219 /g 7 1 /a 219 /g 2 2 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /g 1 3 /a 219 /a 219 /g 4 3 /a 219 /a 219 /a 219 /g 8 3 /a 219 /a 219 /g 0 4 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /g 0 5 /a 219 /g 2 5 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /a 219 /g 10 5 /a 219 /g 0 6 /a 219 /g 2 6 /a 219 /g 8 6 /a 219 /g 10 6 /a 219 /g 3 7 /a 219 /a 219 /g 6 7 /a 219 /a 219 /g 0 9 /d "Teleporte Moi"
Call :Mouse_ offsetX OffsetY type

GOTO :Loop


:: Mouse ptrX ptrY ptrType
:: ptrX : pointeur sur la variable qui recevra la colone
:: ptrY : pointeur sur la variable qui recevra la ligne
:: ptrType : pointeur sur la variable qui recevra le Type
:Mouse_
FOR /F "tokens=1,2,3 delims=:" %%A in ('BatBox /m') DO (
   SET %3=%%C
   SET %2=%%B
   SET %1=%%A
)
GOTO:EOF


- Nuancier:
Code:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO  Liste des code couleurs utilisables avec BatBox
ECHO.
set x=0
set yBckp=1
FOR %%A IN (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO (
FOR %%B IN (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO (
set /a y=!y!+1
BATBOX /g !x! !y! /c 0x%%A%%B /d "couleur : 0x%%A%%B"
ECHO.
)
set /a x=!x!+14
if !x! GTR 69 (
set x=0
set /a yBckp=!yBckp!+16
)
set /a y=!yBckp!
)
PAUSE>NUL



-Menu :
Code:

@ECHO OFF
MODE CON cols=22 lines=10
:DEBUT
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³      Fichier      ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³      Edition      ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³    Assistants     ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
FOR /F "tokens=1,2 delims=:" %%A in ('BatBox /m') DO (
SET Y=%%B
SET X=%%A
)
IF %Y% LSS 3 GOTO :FICHIER
IF %Y% LSS 6 GOTO :EDITION
IF %Y% LSS 9 GOTO :ASSISTANT
GOT0 :DEBUT
:FICHIER
CLS
ECHO vous avez choisis fichier !
PAUSE>NUL
GOTO:EOF
:EDITION
CLS
ECHO vous avez choisis edition !
PAUSE>NUL
GOTO:EOF
:ASSISTANT
CLS
ECHO vous avez choisis assistant
PAUSE>NUL
GOTO:EOF


- coloration syntaxique :
Code:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
echo                   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                   º                            º
echo                   ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
BATBOX /g 21 1 /c 0x10 /d "DB's " /C 0x50 /d "syntactic " /c 0x20 /d "highlitgh" /g 0 4 /C 0xC0
ECHO faites glisser-d‚poser le fichier dans la fenˆtre pour l'ouvir
SET /p chemin=^>
::SET chemin=%chemin:"=%
CALL :GetPath %chemin%
ECHO %fichier% :: %chemin2%
cd /d %chemin2%
ECHO.
ECHO.
for /f "tokens=1,* delims= " %%A in (%fichier%) DO (
set colorF=0
set chaine=%%A
set chaine=!chaine:~0,1!
if /i "!chaine!"==":" SET colorF=A
if /i "%%A"=="ECHO" SET colorF=1
if /i "%%A"=="@ECHO" SET colorF=1
if /i "%%A"=="ECHO." SET colorF=1
if /i "%%A"=="if" SET colorF=9
if /i "%%A"=="for" SET colorF=9
if /i "%%A"==")" SET colorF=9
if /i "%%A"=="SET" SET colorF=B
if /i "%%A"=="REM" (
SET colorF=8
BATBOX /c 0x!colorf!C /d "%%A %%B"
ECHO.
) ELSE (
BATBOX /c 0x!colorf!C /d "%%A " /Color 0xF0
ECHO. %%B
)
REM coloration synthaxique
)
PAUSE>NUL

:GetPath
set fichier=%~nx1
set chemin2="%~dp1"
GOTO:EOF


J'ai failli oublier : le code source (en asm 80x86 pour Fasm ^^). Vous avez le droit de le modifier à votre gré (vous y tenz vraiment Mort de Rire ):
batbox.asm
Code:
[lang=asm]; Batbox v3.1 - A graphical command for Windows batch
; Copyright (c) 2011, 2012, 2013, 2014, 2015 Romain GARBI (Darkbatcher)
; Copyright (c) 2014 Taz8
;
; All rights reserved.
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; * Redistributions of source code must retain the above copyright
;   notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
;   notice, this list of conditions and the following disclaimer in the
;   documentation and/or other materials provided with the distribution.
; * Neither the name of the name of Romain Garbi (Darkbatcher) nor the
;   names of its contributors may be used to endorse or promote products
;   derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY ROMAIN GARBI AND CONTRIBUTORS ``AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; Get support at :
; http://batch.xoo.it/http://batch.xoo.it/t2243-Commande-Externe-Batbox-v1-0.htm
;
; Report Bugs at :  darkbatcher at dos9 dot org
;
; USAGE:
; ------
;
;       BatBox [/d text] [/g X Y] [/m] [/k[_]] [/a char] [/w delay] [/f state]
;              [/o OffsetX OffsetY] [/h mode] [/p mode] [/y] [/n] [/x file]
;
;       Tool for enhancing batch graphics.
;
;       - /d text :     Display text at the console.
;       - /g X Y  :     Place console cursor's position at the coordinates
;                       (X,Y).
;       - /m      :     Get mouse user input. Blocking.
;       - /y      :     Get mouse user input. Non-blocking.
;       - /k      :     Get keyboard user input. Blocking.
;       - /k_     :     Get keyboard user input. Non-blocking.
;       - /w delay:     Wait for 'delay' milliseconds.
;       - /a char :     Display character associated to code char.
;       - /o X Y  :     Place console offset at coordinates (X,Y).
;       - /h mode :     Display or hide the console cursor.
;       - /p mode :     Changes console mode.
;       - /f state:     Changes to windowed or fullscreen mode. This mode is
;                       mode does nothing because, fullscreen mode is no more
;                       supported since Windows XP.
;       - /n      :     Produce a new line. In fact, it places the console
;                       cursor on line below the coordinates that were given
;                       the very last time '/g' was used.
;
;   - /x file :   Prints a sprite file produced with editor.exe from
;         BG (by Carlos Montiers <http://consolesoft.com/>). This
;         function is optional, that is, the build tool can be
;         configured to have this function included in the
;         binary.
;
;       The offset is managed through the file '.bb', thus, you can have
;       serveral instances of batbox writing at a special position without
;       needing to get set the offset back.
;
;       This is also true for the '/n' command. It uses the last coordinates
;       given to '/g' command (optionnally saved previously in the '.bb' file)
;       to compute the new cursor position.
;
;       It may be interesting to empty the informations stored on the '.bb'
;       file to avoid surprising results. This can be done either by removing
;       the '.bb' file (through 'del' or such), or by running the following
;       command:
;
;               batbox /o 0 0 /g 00
;
;   Note that the use of .bb file slow down the program, thus the build
;   tool enables the .bb file to be disabled.
;   
; CHANGE LOG :
; ------------
;
;       * 1.0 (October) : First version published. Include support of '/d',
;         '/a', '/g', '/c', '/v' , '/k', '/m' . Written in C.
;       * 1.1 : Lightened command. Changed the command name. '/v' command
;         suppression.
;       * 1.2 : Lightened command. Changed behaviour of '/k'. Added '/k_' and
;         '/w' commands.
;       * 2.0 : Recoded the whole command in assembly, enable command to be
;         even lighter.
;       * 2.1 : Added '/f' command.
;       * 2.2 : Changed return value of for command '/m'. Added '/s' command.
;       * 2.3 : Added '/o' command. Deleted '/s' command. Added the 'spritebox'
;         tool.
;       * 2.4 : Added '/s' (new version), '/p' and '/h' commands. Added
;         support of utf-8 for the '/c' command.
;       * 3.0 : Removed '/s' and '/f'. Added '/n' command. Added parameter
;         saving system through the '.bb' file. Definitively changed to a BSD-3
;         clause license to choice.
;   * 3.1 : Added command '/x'. Solved major bug of the 3.0 version.
;     Features a new build tool to enable build configuration (disabling or
;     enabling features).
;
;
format PE CONSOLE 4.0

include 'win32a.inc'
include './batbox.inc'
include './config.inc'

; Code start
    cinvoke    __getmainargs,\ ; get an array of command argument
          argc,\
          argv,\
          bin,\
          0,\
          bin

    invoke    GetStdHandle,\ ; get handle on console output
         STD_OUTPUT_HANDLE

    mov      [hOut],eax

    invoke    GetStdHandle,\ ; get handle on console input
         STD_INPUT_HANDLE

    mov      [hIn],eax

match =yes, USE_BB_FILE {
    cinvoke      open,\
            filename,\
            O_RDWR+O_CREAT+O_BINARY,\
            S_IWRITE+S_IREAD

    cmp         eax,-1
    jz    near EndCommand_quick_

    mov         [fd],eax

    cinvoke      read,\
            [fd],\
            dwXOffset,\
            16
    }

    argsLoop_:
      call near GetNextArg_
      inc     ebx ; Assume there is a slash here

      mov  byte dl,[ebx] ; approximate algorithm for getting
      or     dl,$20   ; uppercase value

      xor     edi,edi ; Setup registers before looping to
      mov     cx,jumpChar.size ; find the right case

      LabelLoop_:
         cmp   byte dl,[jumpChar+edi] ; loop to get the
         je    near ChooseJump_        ; associated label
         inc      edi
         loopw      LabelLoop_
         jmp   near argsLoop_

            Color_:
                   call    near GetNextNumber_

                   invoke       SetConsoleTextAttribute,\ ; set the console attributes
                      [hOut],\
                      eax

                   jmp     near argsLoop_

            Key_:
                   cmp     byte [ebx+1],'_'
                   jnz     near KeyNext_

                      cinvoke       _kbhit  ; if we use non - blocking version of /k
                      test       eax,eax
                      jz      near argsLoop_

                   KeyNext_:
                   cinvoke       getch   ; get the key that was hit
                   cmp       eax,224
                   jnz     near KeyEnd_

                     cinvoke       getch ; get extended key
                     add      eax,255

                   KeyEnd_:
                   mov       [status],eax
                   jmp       EndCommand_

            Goto_:
               call   near GetNextNumber_  ; Add offsets
               add        eax,[dwXOffset]
               mov        [dwXLast],eax
               mov        [p.X],ax

               call   near GetNextNumber_  ; Add offsets
               add        eax,[dwYOffset]
               mov        [dwYLast],eax
               mov        [p.Y],ax

            Goto_simple_:
               invoke        SetConsoleCursorPosition,\ ; set cursor position
                       [hOut],\
                       dword [p]

               jmp   near argsLoop_

            Char_:
               call   near GetNextNumber_
               mov    dword [pBuf],0
               mov    dword [pBuf],eax

               invoke        printf,strMask,pBuf ; print a character

               jmp   near argsLoop_

            Disp_:
               call   near GetNextArg_
               cinvoke      printf,strMask,ebx
               jmp   near argsLoop_

            Mouse_:
               call   near GetMouseInput_ ; get input informations

               test        [input.dwEventFlags],EVENT_CLICK_MASK
               jnz   near Mouse_
               mov        eax,[input.dwButtonState]
               test        eax,eax
               jz   near Mouse_
               call   near PrintMouseCoord_

               jmp   near argsLoop_

            Position_:
               call   near GetMouseInput_ ; get input informations

               call   near PrintMouseCoord_

               jmp   near argsLoop_


            Wait_:
               call   near GetNextNumber_
               invoke        Sleep,eax
               jmp   near argsLoop_

            Offset_:
               call   near GetNextNumber_
               mov        [dwXOffset], eax
               call   near GetNextNumber_
               mov        [dwYOffset], eax
               jmp   near argsLoop_

            Hide_:
               invoke        GetConsoleCursorInfo,[hOut],cursorInfo
               call   near GetNextNumber_
               mov        [cursorInfo.bVisible],eax
               invoke        SetConsoleCursorInfo,[hOut],cursorInfo
               jmp   near argsLoop_

            HideConsole_:
               call   near GetNextNumber_
               mov        edi,eax
               invoke        GetConsoleWindow
               invoke        ShowWindow,\
                       eax,\
                       edi
               jmp   near argsLoop_

            NewLine_:
               inc        [dwYLast]
               mov        eax,[dwXLast]
               mov        [p.X],ax
               mov        eax,[dwYLast]
               mov        [p.Y],ax
               jmp   near Goto_simple_


            Sprite_:
match =yes, USE_X_OPTION {
               call   near GetNextArg_

               cinvoke      open,\ ; open the file containing
                       ebx,\  ; the sprite
                       O_RDONLY+O_BINARY,\
                       0

               cmp        eax,-1
               jz   near argsLoop_

               mov        [fd2],eax

               call   near GetNextNumber_
               mov        [p.X],ax

               call   near GetNextNumber_
               mov        [p.Y],ax

               ; read the dimensions of the actual file
               cinvoke      read,\
                       [fd2],\
                       dim,\
                       4

               mov        ax,[dim.X]
               mov        cx,[dim.Y]
               mul        cx ; compute the size of the actual buffer (X*Y)

               mov        si,dx
               shl        esi,16
               mov        si,ax ; put the result of mul (DX:AX) in ecx.

               cmp        esi,$2fffffff ; Check wether we wil overflow
               ; when ecx will be multiplied by 4 to get the bytes to malloc
               jg   near Sprite_Close_ ; fool, we'll overflow !

                  shl        esi,2


                  cinvoke      malloc,\
                          esi

                  test        eax,eax ; exit if we can't malloc buffer
                  jz   near Sprite_Close_

                  mov        [bin],eax

                  cinvoke      read,\ ; read bytes in the file
                          [fd2],\
                          [bin],\
                          esi

                  cmp        esi,eax ;check if we read the right
                  jnz   near Sprite_Skip_Render_ ; number of bytes

                     ; initialize the small_rect structure

                     mov     eax,[p]
                     mov     [rect],eax
                     add     eax,[dim] ; this is faulty yeah !
                     ; What if either  either X or Y overflow ?
                     ; however, i keep this because tests have proven
                     ; it does not affect anything.
                     mov     [rect+4],eax



                     invoke WriteConsoleOutput,\
                            [hOut],\
                            [bin],\ ; character buffer !
                            [dim],\ ; dimension of buffer !
                            0,\   ; position of buffer !
                            rect

                  Sprite_Skip_Render_:

                  cinvoke      free,\
                          [bin]

               Sprite_Close_:

               cinvoke       close,\
                       [fd2]

               jmp   near argsLoop_
}

GetMouseInput_:
   invoke        SetConsoleMode,\ ;set the console mode
           [hIn],\
           0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT

   invoke        ReadConsoleInput,\ ; get console input
           [hIn],\
           input,\
           1,\      ; number of input to read
           bin

   cmp        [bin],0
   jz   near GetMouseInput_
   cmp        [input.EventType],EVENT_TYPE_MOUSE
   jne   near GetMouseInput_
   ret

PrintMouseCoord_:
   mov        edi,[input.dwMousePosition]
   mov        esi,edi
   shr        edi,16
   and        esi,COORD_MASK
   add        eax,[input.dwEventFlags]

   cinvoke      printf,\
           mouseMask,\
           esi,\
           edi,\
           eax
   ret

GetNextNumber_:
   ; Get a number for the command line
   call    near GetNextArg_
   cinvoke       strtol,\
            ebx,\
            0,\
            0
   ret

ChooseJump_:
   ; jump to the appriorate
   jmp   near [jumpTable+edi*4]

GetNextArg_:
   add        [argv],4
   mov        ebx,[argv]
   mov        ebx,[ebx]
   test        ebx,ebx
   jz   near EndCommand_
   ret

EndCommand_:
match =yes, USE_BB_FILE {
   cinvoke       chsize,\
            [fd],\
            0

   cinvoke       write,\
            [fd],\
            dwXOffset,\
            16

   cinvoke       close,\
            [fd]
   }

EndCommand_quick_:
   cinvoke       exit,[status]

strMask      db '%s',0
mouseMask    db '%d:%d:%d',$0A,0

dwXOffset    dd 0
dwYOffset    dd 0
dwXLast      dd 0
dwYLast      dd 0
pBuf        db 0,0,0,0,0

match =yes, USE_X_OPTION {
jumpTable    dd Key_,Goto_,Char_,Color_,Disp_,Mouse_,Offset_,Wait_,Hide_,HideConsole_,Position_,NewLine_,Sprite_
jumpChar     db 'kgacdmowhpynx'
}
match =no, USE_X_OPTION {
jumpTable    dd Key_,Goto_,Char_,Color_,Disp_,Mouse_,Offset_,Wait_,Hide_,HideConsole_,Position_,NewLine_
jumpChar     db 'kgacdmowhpyn'
}

filename     db '.bb',0
status        dd 0

data import
 library msvcrt,'MSVCRT.DLL',\
    kernel,'KERNEL32.DLL',\
    user,'USER32.DLL'

 import user,\
   ShowWindow,'ShowWindow'

match =yes, USE_X_OPTION {
   import kernel,\
   GetStdHandle,'GetStdHandle',\
   SetConsoleMode,'SetConsoleMode',\
   SetConsoleTextAttribute,'SetConsoleTextAttribute',\
   SetConsoleCursorPosition,'SetConsoleCursorPosition',\
   ReadConsoleInput,'ReadConsoleInputA',\
   Sleep,'Sleep',\
   SetConsoleCursorInfo,'SetConsoleCursorInfo',\
   GetConsoleCursorInfo,'GetConsoleCursorInfo',\
   GetConsoleWindow,'GetConsoleWindow',\
   WriteConsoleOutput,'WriteConsoleOutputW'
}

match =no, USE_X_OPTION {
   import kernel,\
   GetStdHandle,'GetStdHandle',\
   SetConsoleMode,'SetConsoleMode',\
   SetConsoleTextAttribute,'SetConsoleTextAttribute',\
   SetConsoleCursorPosition,'SetConsoleCursorPosition',\
   ReadConsoleInput,'ReadConsoleInputA',\
   Sleep,'Sleep',\
   SetConsoleCursorInfo,'SetConsoleCursorInfo',\
   GetConsoleCursorInfo,'GetConsoleCursorInfo',\
   GetConsoleWindow,'GetConsoleWindow'
}

match =yes, USE_BB_FILE {

 import msvcrt,\
   printf, 'printf',\
   getch,'_getch',\
   __getmainargs,'__getmainargs',\
   exit,'exit',\
   _kbhit,'_kbhit',\
   strtol,'strtol',\
   open,'_open',\
   write,'_write',\
   read,'_read',\
   close,'_close',\
   chsize,'_chsize',\
   malloc,'malloc',\
   free,'free'

}

match =no, USE_BB_FILE {
 import msvcrt,\
   printf, 'printf',\
   getch,'_getch',\
   __getmainargs,'__getmainargs',\
   exit,'exit',\
   _kbhit,'_kbhit',\
   strtol,'strtol'
}

end data

argc       dd     ?
argv       dd     ?
hIn       dd     ?
hOut       dd     ?
bin       dd     ?
p       COORD ?
input       INPUT_RECORD ?
cursorInfo  CONSOLE_CURSOR_INFO ?

match =yes, USE_BB_FILE {
fd       dd ?
}

match =yes, USE_X_OPTION {
fd2       dd ?
dim       COORD  ?
rect       SMALL_RECT ?
}

batbox.inc
Code:
; Copyright (c) 2014, Romain GARBI (Darkbatcher)
; All rights reserved.
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; * Redistributions of source code must retain the above copyright
;   notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
;   notice, this list of conditions and the following disclaimer in the
;   documentation and/or other materials provided with the distribution.
; * Neither the name of the name of Romain Garbi (Darkbatcher) nor the
;   names of its contributors may be used to endorse or promote products
;   derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;


; some structure used by winapi calls
struct COORD
     X dw ?
     Y dw ?
ends

struct INPUT_RECORD
     EventType dw ?
     nul dw ?
     dwMousePosition COORD ?
     dwButtonState dd ?
     dwControlKeyState dd ?
     dwEventFlags dd ?
ends

struct CONSOLE_CURSOR_INFO
     dwSize dd ?
     bVisible dd ?
ends

;some defs needed by winapi calls
SND_NODEFAULT=2
SND_FILENAME=$20000
SND_ASYNC=1

EVENT_TYPE_MOUSE=2
COORD_MASK=$0000FFFF

EVENT_CLICK_MASK=$FFFFFFFD ; ~MOUSE_DOUBLE_CLICK

ERROR_PIPE_CONNECTED=535

;redefine db to get the size constant
struc db [data]
{
        common
        . db data
        .size = $ - .
}


L'exemple d'un jeu de snake est disponible ici : http://batch.xoo.it/t2583-Snake-Game.htm

Si vous désirez une commande compatible mais supportant davantage de possibilités, voir http://batch.xoo.it/t2645-TINYBG-v1-0.htm

Bon voilà. Si vous avez des corrections à donner sur le code ou des bug à signaler, n'hésitez pas Very Happy

@+



Dernière édition par Darkbatcher le Mar 2 Fév 2016 - 13:14; édité 32 fois

______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Hello
Okay Okay
Bonne continuation
@+



Dernière édition par Batchapp le Jeu 12 Avr 2012 - 19:14; édité 1 fois
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Très intéressant merci Very Happy




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Hello !

De retour avec une nouvelle version Razz
J'ai supprimé quelques fonctions et raccourci les nom des commutateurs pour ruéssir l'exploit de diminuer par 4 le poids de l'éxécutable (qui fait maintenant 7 ko) je sais gcc est responsable d'une moitié mais bon Mort de Rire
Sinon j'ai changé le support des couleurs que vous pouvez voir avec color.bat

Pour finir désolé pour le code et les couleurs dégueulasses, j'ai pas eu le temps de les mettre à jour et pour les unions... j'était obligé Mr. Green

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Hello !

Nouvelle mise à jour de BatBox

Deux nouvelles fonctions sont disponibles, /k_, qui vérifie si une touche est appuyée et /w qui permet de spécifier un temps d'attente en millisecondes.
de plus, la valeur de retour de /k et /k_ sont passées par %ERRORLEVEL% ce qui cause l'arêt de la command à la fin de la fonction

J'ai aussi procédé à une nouvelle optimisation du code (grâce aux précieux conseils de carlos Mr. Green) et BatBox atteint maintenant 3 Kio et le code de génration de la commande (là encore, merci à carlos) 2 893 octets.

Je vais bientôt poster de nouveaux examples.

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Hello !

Re-re Mise à jour de BatBox Mort de Rire

Cette fois pas de nouvelles options, mais un recodage complet de la commande en assembleur

Et contrairement à ce que certains disent, c'est payant car l'exécutable vient encore de perdre la moitié de son poids et pèse maintenant 1.5 Kio ^^
eh oui, je dis bien 1.5 Kio, c'est a dire que batbox a perdu les 2/3 de son poids depuis la version 2.0 et 20/21 de son poids depuis la version 1.0 Mort de Rire

Par contre, je crois que j'ai atteint une limite de non-retour, car je ne réussis plus à obtenir un code de génération plus petit que la commande ^^

Donc, pour le code de génération, il fait maintenant 1881 octets, soit un octet de moins que la commandes txtcolor.exe plus légère, alors que batbox fais autent de chose que les commandes plus volumineuses comme bg.exe de carlos, qui est plus volumineuse de 1245 octets.

Je crois que je viens de pulvériser un record là Mr. Green

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Very good. But attention. Test your executable in virustotal.
Please, you can post the old c code? (I lost it). I want try do a version more small than with asm code.
Note: bg have regular expressions.



Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
carlos a écrit:
Very good. But attention. Test your executable in virustotal.

Why ? is it detected as malicious soft by your pc protection ?

Citation:
Please, you can post the old c code? (I lost it). I want try do a version more small than with asm code.

No problem. I wil post the code as soon as possible.
Do you really think it could be possible?
I don't think so, as long as i've tryed tu reduce binary, c semmed not to be an efficient way to get small executables, indeed you're arent master of binary output. For example, you can't avoid compilers intialisation routines, such as initialisation of standart streams when you use stdio.h, which has to be included for a lot of function. And i'm not sure that dll entryes that aren't use aren't linked with binary output.
To end with, i've never heard that it could be possible to make a flat binary, without sections, using any c compiler.
So i can just wish you to have a good luck Mort de Rire

EDIT: you can download old c code here : http://dos9.franceserv.com/downloads/batch/batbox/_Old_BatBox.c

Citation:
Note: bg have regular expressions.

I know, but it dosn't really mater, what can be done with bg this way:
Code:
bg printcolor 129 "\0 hello world"

could be done as well using batbox:
Code:
batbox /c 129 /a 0 /d " Hello world"

because i choose a more easily parsable way, because batbox doesn't need more parsing than getting argc and argv Mr. Green

I think the most important difference between our two commands is the fact that batbox doesn't support functions like 'hidecursor' or 'showcursor'

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Salut,

juste pour dire que ta commande est vraiment sympa mais je trouve qu'elle manque un peu de réactivité. (je sais je suis exigeant^^)

Bon boulot en tout cas Okay




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Merci Cautex !

Pour répondre à tes remarques je poste la version 2.1,
plus réactive au niveau des delais et qui supporte le mode fullscreen de la console

tout en était toujour aussi légère (1.5 kio) par contre, la code pour générer dynamiquement an un peu grossi à cause des aléas de la compression et fait maintenant 1995 octets.

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Darkbatcher merci vraiment pour cette commande Okay




______________________________________________________


Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
hello !

Je vous annonce quel le téléchargement et de nouveau disponible, j'avais bloqué l'exploration des fichiers en attendant de mettre en place mon index personalisé.

Sinon comme j'ai vu qu'il y a des personnes qui on des difficultés a utiliser BatBox pour la souris, voici un petit exemple.
Code:
@ECHO OFF
CALL :BBMouse_ posX posY
::Attente d'un clic
ECHO vous avez cliqué au corndonnes : (%posX%,%posY%)
PAUSE>NUL


::Si vous voulez utiliser la souris dans votre programme, copiez cela :
GOTO:EOF
:BBMouse_
FOR /F "tokens=1,2 delims=:" %%A in ('BatBox /m') DO (
SET %2=%%B
SET %1=%%A
)
GOTO:EOF


Voilà, la fonction est aussi disponible dans les exemples sur le dossier en lien...

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Salut Mr. Green

Super commande, tout me parait facile à réaliser maintenant Laughing

Bien joué Okay


Ps: dsl du retard pour le com's Razz




______________________________________________________
│Øδ@π.
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Batbox me fait pensez quand je fais de l'assembleur ^^
Sinon grâce à Logan, j'utilise mieux batbox ^^
Super commande Okay




______________________________________________________
Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Désoler du flood,
Ceux qui disent que batbox est difficile, penser le contraire et prenait l'exemple qui est long ^^




______________________________________________________
Skype
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 5
Aller à la page: 1, 2, 3, 4, 5  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch