NIKZZZZ
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору :: CONV2BAT.BAT - this batch converts HLL source or an :: existing file (<40K) into equivalent batch code. :: Required components... (assumed to be on the path) :: for ASIC (asi): ASICC :: for BASM (bas): BASM ASM FREELINK :: for Moonrock (moo): MRC (plus asm/link in mrc.cfg) :: for Tokiwa (tok): TBC :: Compresses com with PKLITE, uses Dos6+ FC and FIND to :: determine if compressed for comments. Disable below. :: The temp variable must point to a writable directory. :: This batch is designed to operate by drag-drop, from :: Windows' right-click menus, or from a dos prompt. :: Usage: CONV2BAT [path\]filename.ext :: If extension is asi bas moo or tok then produces :: filename.bat containing batch-encoded binary with :: attached source, in addition to compiler output. :: If ext not supported then encodes binary to batch. :: Tested in Win95, should be dos and NT-tolerent except :: for compression test (see comments) but maybe more. :: This is free software and comes with no guarantee, :: test thoroughly before distributing the output code. :: Last major mod 12/08/01, last mod 1/03/02 :: (C) Copyright 2002 Terry Newton :: EncBin encoder, DecBin decoder and Basm helpers :: are public domain, use as you wish. @echo off if .%1==.Shell goto %1 if not .%1==. if exist %1 goto fileexists echo Compiles HLL source and converts to batch echo Usage: CONV2BAT [path\]filename.ext echo Compiles .asi .bas .moo and .tok files echo encodes other types directly to batch goto end :fileexists :: shell with lots of environment space %comspec% /e:30000 /c %0 Shell %1 goto end :Shell ::**** options, edit as needed... :: usepklite=yes to compress with pklite set usepklite=yes :: usetempdir=yes to use temp dir in output code set usetempdir=no :: decname=filename used for decoder set decname=_d.com :: tempname=filename used for temp file set tempname=_t.tmp :: extension to output batch code to set outputext=bat :: callconv2cfg=yes to put variables in conv2cfg.bat set callconv2cfg=no :: temp filenames... set dec=%temp%.\_decbin.com set enc=%temp%.\_encbin.com set file2bat=%temp%.\_2bat.com set cmntsrc=%temp%.\_cmntsrc.com set sepname=%temp%.\_sepname.com set replace=%temp%.\_replace.com set tf=%temp%.\_tf.tmp set tf1=%temp%.\_tf1.tmp set tf2=%temp%.\_tf2.tmp :: override variables if configured... if .%callconv2cfg%==.yes call conv2cfg.bat :: double check... set xyz=0123456789012345678901234567890123456789 if not .%xyz%==.0123456789012345678901234567890123456789 goto end set xyz= echo. echo **** CONV2BAT **** 12/8/01 WTN echo Checking file support... ::----------------------- :: CM3-encoded DecBin decoder... ECHO:`h}aXP5y`P]4nP_XW(F4(F6(F=(FF)FH(FL(Fe(FR0FTs*}`A?+,>%dec% ECHO:fkOU):G*@Crv,*t$HU[rlf~#IubfRfXf(V#fj}fX4{PY$@fPfZsZ$:NvN$>>%dec% ECHO:9AyroNB-)dOKwK0rRkfTbi)ws_~[[q9wE'sqlu1sY*Bsfe=@ziNS1a)88e>>%dec% ECHO:f9RTL)9Z{3INBD?o6@MDLO{Zz4Q23E-'09NX9@Vz(42A7c8zMS:u$w6k5Q>>%dec% ECHO:N,h:le)~gF?tutTyxoe5UiIdtn';0rJ1q:{7;lAl']y:yTjZBbOo?QRIdN>>%dec% ECHO:$Bp@P/nAp_r0*4f'XcF4q3o?$_t5lx$Q-OxSfUNQ__Gd~$Q-Oxgkx=LGHU>>%dec% ECHO:S)$C6P8#>>%dec% ::---- EncBin-encoded binary ---- :: sepname.com made with BASM ASM FREELINK ECHO:AEPPr64U2y00tD61O0AAj7CDXn28A5S5D7JeRkl5Ll00xG47uvgmv5gl[5>%tf% ECHO:gGC0v]U[2uY7213301EBu1Je13dnJDrX5OIZO5QZO5ibr1Vbj3AxS5Ayv6>>%tf% ECHO:Zb02ibf3Axv6Rbf2RbC2Ayv6Jbf3abb3Axv62yK6ebr12rK6ZbC2ib42Ay>>%tf% ECHO:v6ab[3Axv6Eyj5Rb42Dn3e0J]xN53b8l3b6l3bB\2jG0gC7DB7n6j50037>>%tf% ECHO:v6j5000mF0cdr5ilW6tfC106Ld2ZNH37C6n5003yC6n5EXn5Ou3Hr5S3Fe>>%tf% ECHO:IGebC3Axv6EXn56u00qbC3ybb1EyG7qb83ExG7Myn5ebb1Dn3e07]XNJ2Z>>%tf% ECHO:ND2xT32yNN3b6M1nf3r76GeJC5eFf5thpXj5Ou3Fv5S3Ve2GR73F0500Rb>>%tf% ECHO:r2]xn5Iy[7Vb81ebn2Axv6Myr7ib41ubj2hxn5QyC8yb01t3FF451yf3s6>>%tf% ECHO:EGF0O33FK53yFyeTW5tfv2vpNT1bRl3b933b4Z2yV\3bAX0mF006NH0ev6>>%tf% ECHO:j5pZn5abW2RyFTW5RlW6rrW2r0v1fpW8sxC2WxND01Dy3e1I]XND2ZNT3b>>%tf% ECHO:9Z3ynpn59bv6ebv1ebn0Iy[7ZbK20mlZLd2xV\3b2N03b6O5pZn50mj3n6>>%tf% ECHO:n5Oe3DC5eTW5rhv2vpNT1bV\3b7T3b2\2yV\3b8Z1bNV3b8s1bUK3b8m1b>>%tf% ECHO:LR3b8g1bNd3b8a1bV\3b8X1bLR3b8R1bNo3b8L1bWp3b8F1bLR3b892n9C>>%tf% ECHO:F07DAn83Fy3D4me0Z23xlZLI2Au6y0IZK5i3WMLI3x7AcKb5Zjuxlnn2jG>>%tf% ECHO:m3xfdd30coy3PHLNtBvla0iymyylUhyHg9Z1sVLP73LNPMLNXUuXiyZOXU>>%tf% ECHO:uRiyZ8s1LVf3yvRmA[DPlxPG2yNy3byRy3TGLMmvdhHo0AN0VrwULOi3Zr>>%tf% ECHO:6sK0ivZqlfD1Pl0vwQS20ftdBYy3ebaygGZ8]3v0gxEBOUK5IXK5tBDIr5>>%tf% ECHO:46w8I33y1yC2Fy2tK0Bqr37rqa2r2j2ElnnFjGSv1nW5f0trZ0Jvb]p857>>%tf% ECHO:ZYv7WVK186K5y3hXW6s3uyhXW6ryr0gGv6hXW6rnuyhXW6r1C0lyQX3bva>>%tf% ECHO:xxQX2yPG3bvUxxPG3bvWxyPG2BF83rpA603u9yCBF0M819DFZsn0Vhy3hX>>%tf% ECHO:W6uruxhXC6F9l0CWTo16D1ZsLHVn6sK02yK6Fvv]E[m786K5013yG6K5t3>>%tf% ECHO:DKb55ov4vELK2tLO2nn9jXtB5Ib5ZJexlBGUK5EAyxFEFRAn3DCGkLlBtB>>%tf% ECHO:Hp2yPG2BPE3vRmA[0ml8n5N2041LlBt3Bf0ma0X6ixXpW4t8ix9606I9s6>>%tf% ECHO:vw001wW6f1[0X6yxgGO6j5f0Xpv4gGC61puxIs1H0esEyvRmA[0ml8f5Z\>>%tf% ECHO:9Tj4v0iyC5F0M933xxv5mbFxF3LGmbuyyvgGW6K3ujHPRmA[N600N3MBif>>%tf% ECHO:XpW4r\ixZ86u00QBK42nJDnXN202014000070DGA8D0A07000000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:00000000whOW5jPl1g0000000000j0K00h000000001mH\SW1]TXXnOwC0>>%tf% ECHO:T\1n9]5YPmo\C0LmPnOWP\HrSwn0}>>%tf% :: BASM source... :: rem separate specified name into fpath,fbase,fext :: rem outputs sets to stdout :: $com :: a$=command$:a$=trim$(a$):a$=lcase$(a$) :: if a$="" then :: print "no parm":end :: endif :: rem loop through string, mark last \ and . :: slash=0:dot=0:ilen=len(a$) :: for i=1 to ilen :: c$=mid$(a$,i,1):if c$="\" then slash=i :: if c$="." then dot=i :: next i :: rem not an extension if \ after . :: if slash>dot then dot=0 :: fpath$="":fbase$=a$:fext$="" :: if dot>1 then :: d=dot-1:fbase$=left$(a$,d) :: d=ilen-dot:fext$=right$(a$,d) :: endif :: if slash>1 then :: rem includes trailing \ :: d=slash:fpath$=left$(a$,d) :: d=len(fbase$):d=d-slash :: fbase$=right$(fbase$,d) :: endif :: output "set fpath=";fpath$ :: output "set fbase=";fbase$ :: output "set fext=";fext$ ::------------------------------- :: decode and use _sepname.com to parse input (in %2) %dec% < %tf% > %sepname% if errorlevel 1 goto binerror %sepname% %2 > %temp%.\_sep_tmp.bat call %temp%.\_sep_tmp.bat del %temp%.\_sep_tmp.bat if .%fpath%==. goto incurrent :: change to source directory %fpath% cd %fpath% :incurrent if exist %fbase%.%fext% goto curdirok echo Could not change to directory goto cleanup :curdirok :: ******* :: ******* compiler support, edit as needed :: ******* if .%fext%==.asi goto asifile if .%fext%==.bas goto basfile if .%fext%==.moo goto moofile if .%fext%==.tok goto tokfile echo Unknown filetype, encoding as-is set compname= set madewith=???? set binfile=%fbase%.%fext% goto conv2batch :asifile set compname=ASIC set madewith=ASICC if exist %fbase%.com del %fbase%.com call asicc %fbase%.asi C goto checkcom :basfile set compname=BASM set madewith=BASM ASM FREELINK if exist %fbase%.com del %fbase%.com call basm %fbase%.bas if exist %fbase%.asm call asm %fbase%.asm ; if exist %fbase%.obj call freelink /c %fbase%.obj goto checkcom :moofile set compname=Moonrock set madewith=MRC ASM MRLINK if exist %fbase%.com del %fbase%.com call mrc %fbase%.moo goto checkcom :tokfile set compname=Tokiwa set madewith=TBC if exist %fbase%.com del %fbase%.com call tbc /c %fbase%.tok goto checkcom :: ******* end compiler commands :checkcom set binfile=%fbase%.com if exist %binfile% goto comexists echo. echo ======================================= echo Compile failed, debug and try again echo ======================================= echo. goto cleanup :comexists if exist %fbase%.obj del %fbase%.obj :: try to pklite it (if option enabled) if not .%usepklite%==.yes goto conv2batch copy %binfile% %tf1% >nul call pklite %binfile% fc /b %binfile% %tf1% > %tf2% find "00" < %tf2% > nul ::reset var for docs if not changed by pklite... ::note--not NT compatible here, PkLite status won't ::be properly indicated in the output batch comments if errorlevel 1 set usepklite=no del %tf1% del %tf2% :conv2batch echo. echo Converting to batch code... ::--------------------- :: the EncBin encoder, encodes stdin to stdout, encoded by itself... ECHO:AALIxnCmeRf0\Uf0pWjXYBlxr0MyG02u022nc1Z5Z0r4G2ldMAj[8F34dd>%tf% ECHO:Z1Z0r4G2ld6Aj[8F34Ed3EmbG02lJpNl0jjjCt9v0407ZvjtS3I0j7rvLv>>%tf% ECHO:G203l0wUDv20F42eD3ZujTS6fmprbD2e4uwp39gwYdfDfAdng0f1f0ZF2t>>%tf% ECHO:04bemDCXj0C0LHtA2701ZsG0SFdfW]6630Jf36S6W1f0rJ2fMfQYW1YAoO>>%tf% ECHO:EAt0y[36S6W1[8LRi3}>>%tf% ::--------------------- :: decode encoder... %dec% < %tf% > %enc% if errorlevel 1 goto binerror ::---- EncBin-encoded binary ---- :: 2bat.com made with BASM ASM FREELINK ECHO:AFDJr64U2y00tD61O0AAj7CDXn28p5j5D7JeRkl5ND00xG47uviEv5iD[5>%tf% ECHO:gGC0v]U[2ues213301EBu1Je13dnJDrX5OhZf5pZf5JbC2qb04pxj56yb8>>%tf% ECHO:ybC27b046xb8ubv2qbO26yb8ebv3ybr36xb8qbf2ibK26yb8Zbr36xb8ty>>%tf% ECHO:46RbK2Do3c7j0mF0e5v5hXr8fYW6sQC206N52ZO[23Gx86v0S37cn13bf3>>%tf% ECHO:RyC[W6QXW8s7W3rOv2fPW9t\W3tQr3fPW9sbW2r6v2fPW9tJC3F0MZj56x>>%tf% ECHO:b8Fbj1O335C5b]C6F0O30]f686O[2ZO]3bDc3yOp865bb8Zb437bn16y[9>>%tf% ECHO:ubK30mlZN52y]H2xOY3b7U03K6j5IZ86t3C[061y[3sLW1rnv3vpO[1b]H>>%tf% ECHO:3bBB3b6S2yb93bCc3bCU2xb93b7f3b6A2yb93bCN0mF0e5r5hHW9s7C106>>%tf% ECHO:N52ZO]0mF006O]0eG686QZ86qbr2RyC]W6QHW9tSW2sLv1hHW9uYb2fPf9>>%tf% ECHO:fbW6ubC2WxMs00Dn3c3\2tb92rOd3bB]23[xf5G0S3Bcn0R70f0600ibb2>>%tf% ECHO:tx866yWAqbn0t3Cf061n[3tYO0j6YX006GbbW6tkr1fsv6hXW8tx40e3C5>>%tf% ECHO:bfC6WxOf00Dn3e1u]xOj3b2j2B78bdf6ZO2tC62nJDWXuer0hXW8tPf0Z8>>%tf% ECHO:dX86YBptYX2no0jXJbn06xWABbW0YBlXOd2BeOh1GAg07DBb2w2x]H3b1e>>%tf% ECHO:2B78bdf6ZO6t[92nJDWXt]40bdf6ZOAs00xtb52nJDWXtKW0r2r2fpv6h1>>%tf% ECHO:WArnf0r4hGr4]GsEiyWUOd3b7r2BWU867bv1lnGlq0jXEn0lqyjG0mlAu2>>%tf% ECHO:y0]Zb5QAmxF0deC5mvdfbAN0Vt73LMgNZx0llsyyyvuleqaHIBy1LUDPkH>>%tf% ECHO:PNLMsNNbyXxBuONbyRxB78HUDV3uFvv]][N36xf7]yC7ibqy33LNkMxfMh>>%tf% ECHO:S40AkourLVDOkmC3dsW5y3XLtciyZOgMZq7bey2BoUtBsBVvMBmodBBAxh>>%tf% ECHO:ko6BiHZBRmcnCB3sfevuVJVaee2GfexBi7Keq3N30mkRDTlyWc3bwXxxWc>>%tf% ECHO:2yUk3bwOxxUk3bwQxyUk2BF83rpA603u9yCBF0M819DFZsn0Vhy3fcW8rl>>%tf% ECHO:uyfcC8F9l0CWTo16D1ZsLrVnYsS06yf7Fvv]E[kWYBps3y2tOs2nnyjXol>>%tf% ECHO:KBJ0TPDGLI8ULV2BpxMi2u022BihJvMBxfdBmlMhSQ6BpBFBx]gn03isBu>>%tf% ECHO:Cuoqiar8hGBuXFye02asxBq6070VgQLOXl63B70eVtKeV7yOhPZ867pr81>>%tf% ECHO:JDWXNe0Fabuuy7C6j5012BRQj740R3gLZfQBS46yf7tBG6Fvv]E[F0M81T>>%tf% ECHO:J200gLZfl3r20ml9s6xBHp3bssveP610Q9Jx0w00Pw2r0129s6xyUk3605>>%tf% ECHO:2BHp2yUk03spwEYsS0reJxFvv]E[F0M82Bq\N2042ySs0ma0W5u3fsW7rg>>%tf% ECHO:FxlnnxjXabVxF3KmF0e3G5fw7DBbsewRU9331IKma9WEN32nnvjXZbNx\R>>%tf% ECHO:W7YBpnnxjXmbJx1Qf1pnFDWXs2Fxj14000070DGA8D0A07000000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:00000000000000000W000000000000000x15X3HF0t0x0x0g}>>%tf% :: BASM source... :: '2bat infile outfile tmpfile :: 'reads infile, surrounds each line with :: '"ECHO:" and ">>tmpfile" (one > 1st line) :: 'and outputs results to outfile :: $com :: $string 120 :: a$=command$:a$=ltrim$(a$):a$=rtrim$(a$) :: if a$<>"" then :: b=instr(a$," ") :: if b>0 then :: infile$=left$(a$,b) :: infile$=rtrim$(infile$) :: c=len(a$):c=c-b :: tmpfile$=right$(a$,c) :: b=instr(tmpfile$," ") :: if b>0 then :: outfile$=left$(tmpfile$,b) :: outfile$=rtrim$(outfile$) :: c=len(tmpfile$):c=c-b :: tmpfile$=right$(tmpfile$,c) :: open infile$ for input as 1 :: if err=0 then :: open outfile$ for output as 2 :: if err=0 then :: done=0:b$=">" :: while done=0 :: line input #1,a$:done=eof :: if done=0 then :: print #2,"ECHO:",a$,b$,tmpfile$ :: b$=">>" :: end if :: wend :: close 2 :: close 1 :: end if :: end if :: end if :: end if :: end if ::------------------------------- :: decode 2bat utility... %dec% < %tf% > %file2bat% if errorlevel 1 goto binerror ::---- EncBin-encoded binary ---- :: cmntsrc.com made with BASM ASM FREELINK ECHO:ADLNr64U2y00tD61O0AAj7CDXn28h5G4D7JeRkl5HB00xG47uvgCv4gB[4>%tf% ECHO:gGC0v]U[2uS1213301EBu1Je13dnJDrX5O]ZC4hZC4ybb0Zb[2hxG42yf6>>%tf% ECHO:mbj0mbW22xf6ebO1ebv02yf6NbW22xf6ly[4Nbv0Dn3e0J]xIU3b413b2H>>%tf% ECHO:3b8j2jG0gC7DAtQj2uI]3b9e2XGq2ZIb23Wxb4v0S3Fe6Gdxb4Rbn0RbO0>>%tf% ECHO:Nb022j2noCjXR62j062GQXb4VbS1pxf42yf6ebK06XG4YZb4t3Eb041nf3>>%tf% ECHO:rLYGQsW4riW2QjW6rcW2OjW4rZf2u7tB6]W4r1G2gC0lmDGXf3vlyDCGF0>>%tf% ECHO:AAmxF0bab4Z63xlZGc33QB4ar4yA]X842AyxJEf23D73mvdd0AkoFtkHTM>>%tf% ECHO:MBBxF0xsyyBvxh7qo96BkV\UN3THLMTMLU7buyYBoUibqyYBk1wUK3muym>>%tf% ECHO:G]cPu3fEv6hwW5uRFykGPNNvtfcob430XowUXVN3Dm2ZGq3rZ3td3yMBF8>>%tf% ECHO:Zsr0SutB4e44bcf4WxGa0UW6HFx3v09y0meygGS0yYW3yHZaf0tjZ0xn3D>>%tf% ECHO:jGC7Ln2rW0hEm0x[W]WT97urv75OO10aC4lyPV3bwJxxPV3b0y2xOE2yPV>>%tf% ECHO:3bw4xxPV3b0133xyK6VbFyxxK6ty06ubBytx063bFyty06YBj3erWTh0vW>>%tf% ECHO:gy0mZ0W5w9I33s1wFhlyPV3bv8xxPV0m39WvKWS756I37sLoangHv0fEj6>>%tf% ECHO:ymG]e3gWZOxsv0ptf4xnFD8XTT0Bkn1PLJsI5IgVZGpx84Au00tBsBivZo>>%tf% ECHO:hfZAulcofQZHhBmmI]SB[3veiuFJTque08[eyuJrBe2GisZVV600bVLR9O>>%tf% ECHO:SOU3j2bewNSemqaO]BV8ZH6r127D9Oye2G7bqxR7114400dBq6071XV3j6>>%tf% ECHO:Ga01v0v6Gc23[x84KQS4uy0cb4fgG4f97DABSU84EAqxiAWUGc2AumyEfm>>%tf% ECHO:pnn2jGy3hwC5F0M933pxf5ybBxJ3fx7DBbsuy3DJF06ZG4pnFDWXsgixM9>>%tf% ECHO:C7kLlBtBHp3brKxBi8f1f0XMG4g07D9TB2000101S000bD0[bD00070000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:000000000000000000001h1i9j9XTg0000001]kcP\rWPi1n9]LiTh1[0t>>%tf% ECHO:0t80jt}>>%tf% :: BASM source... :: rem open file specified on command line and write :: rem to stdout with ":: " prefixed to each line :: $com :: a$=command$:a$=trim$(a$) :: if a$="" then :: print "no parm":end :: endif :: open a$ for input as 1:e=err :: if e>0 then :: print "file not found":end :: endif :: fileloop: :: line input #1,a$:e=eof :: if e=0 then :: output ":: ";a$:goto fileloop: :: endif :: close 1 ::------------------------------- :: decode cmntsrc utility... %dec% < %tf% > %cmntsrc% if errorlevel 1 goto binerror ::---- EncBin-encoded binary ---- :: replace.com made with BASM ASM FREELINK ECHO:AGINr64U2y00tD61O0AAj7CDXn28Q587D7JeRkl5S]00xG47uvfav7f][7>%tf% ECHO:gGC0v]U[2uMDA13301EBu1Je13dnJDrX5OYZ47dZ47Fbv2ibO5pyW9dr00>>%tf% ECHO:M90maRXTW1s3v3hDWJs[W5sIv5hDW9fD[0W5fmp95T3bCd2yMD7bLB3bKs>>%tf% ECHO:2y]D2r0Y29C5FRp9K17b43pyWNBbC53b85Qx87pyWPNbj2Jb45pxWPabK4>>%tf% ECHO:Fbv2pyWPJb45Bb05pxWPZb447br2pyWPBb053bv45d1b]D7bI93bBD2yhD>>%tf% ECHO:7bJh2xhD6yUD7bB81of3r4]Gr7C2F0tZ47pxWPabS2O30UC7cqv7vETq3b>>%tf% ECHO:Io3ySpS7obWPJbO43b[2pyWP7bf40mlZSU2y]D6xUD7bC]03r647]ZS7t3>>%tf% ECHO:Ds871vf3r1xGvETs3bHv3y[pS7obWPFb44VbK2pyWTZbS4Q31s870mF0bU>>%tf% ECHO:r7hDWPrFC206SU2ZTq0mF006Tq0e[6S7hZS7BbG4RyDuW7QDWPukW3rTv2>>%tf% ECHO:hDWVrxW4rfr4hDWVskW3rBv2hDWVrfW4rQb4O1obWVFbf3Vbv1pyWRZb44>>%tf% ECHO:pxWRpyWNBbv1Do3e04ac4k3bFo1dW1QDWVt]W3uIv1hDWRumr3hDvRhDWN>>%tf% ECHO:uDK1S3Je2Gmc010mlZSU2xxD7b5x03r647UZS7t3Dq871vf3r4]GugC0Wx>>%tf% ECHO:Tq02Dy3e0raySES7Fbb3RyDqW7QDWVsIW3sxv1hDWVtVv3vETq3bE93ySp>>%tf% ECHO:S7obWV3b83JbO1pyWVNbW3qe2G3bS3pxS7pyWVNb41JbO3xxS7pyWXab01>>%tf% ECHO:R7210700BbK3ubS3JbC1pyWZNbK3pxWZEyW7yb81Dn3e04ae1S]xEDAyMD>>%tf% ECHO:7b4U1nf3r3hGuGpxWZpyWJub01Dn3e0Oab1V3bCH2xU52y6DBb2p3746W7>>%tf% ECHO:003e6eWxU100j2S3ee6GBbv2pxWXJbv2pxWZubr2pyWXybr2Ry21f7t5t3>>%tf% ECHO:E1071yf3r4YGrO00f0lnJDrXh7W7tHW1sQW0rc02f0lnJDrXhDvThDWBsQ>>%tf% ECHO:r0hDvVhDWDsHr0hDvXhDWFs8W0tPr0hDv7hDWXrvW0QDWXtUW2OFW7tOC2>>%tf% ECHO:ln9CF07DAn83Fy3D4me0Z23xlZS62Au6y0YZ07i3WMS63x7Ab8b7Zjuxln>>%tf% ECHO:n2jGm3xfdd30coy3PHLNtBvla0iymyylUhyHg9Z1sVLP73LNPMLNXUuXiy>>%tf% ECHO:ZOXUuRiyZ8s1LVf3yvRmA[DPlx]D2yUD3byRy3TGLMmvdhHo0AN0VrwULO>>%tf% ECHO:N3MBFfZfv6hDOHj5v0hDO7j5r0hDWFtSayX6uxhDWBtJayX6FvF0Q9JtRy>>%tf% ECHO:JtQBJtOuJxXyMxxD2y]D03cpwEtBJvFvv]E[F0M82x]D2y6D7bwQxx6D6y>>%tf% ECHO:hD3bxLworLhDvDhDW7s[iyX67v16ytwEitrPtGhDvFhDC91putIs013vRm>>%tf% ECHO:A[0ml8W5sSiytTMBsTN3NbvWxBROMBZqrOiyZGgUZhkBwNMBxfdBmlMhSS>>%tf% ECHO:6BpBFBx]gn03isBuCuoqiarAhGBuUBkRCekTF3F0oRN3FbuxgGZ8]3v0gx>>%tf% ECHO:EBbU07YX07tBC6r746w8I33y1yC2Fy2tK0Bqr37rqa2r2j2ElnnFjGSv1n>>%tf% ECHO:W5f0trZ0Jvb]p857ZYv7WVK1O607y3hDWBtCuxhDvBhDW9t3uxhDW9t5yx>>%tf% ECHO:hDf9Z8W3xA0TZuvWSB0ml8[5HF]3v0swu3pyWBqbNxpxWB[ml00v9oO8H1>>%tf% ECHO:]1v0K2Vm2s02pyW9Fvv]E[m7O607013yW607t3C8b75ov4vES82tSC2nn9>>%tf% ECHO:jXtB46b7ZJexlBWU07EAyxFEFRAn3DCGkLlBtBHp2y]D2BPE3vRmA[0ml8>>%tf% ECHO:n5N2041LlBt3Bf0ma0X6ixXpW4ufiw9606I9s6vw001wW6f1[0X6yxhDO9>>%tf% ECHO:j5f0Xpv4hDC91puxIs800esEyvRmA[0ml8f5Z\9Tj4v0hDC7F0M933pyW7>>%tf% ECHO:ubiwu3hDW7tPFwkLlBtBHp3bpNxBi8f1f0XMG4g07D9TB200gLZfR62D09>>%tf% ECHO:2GQn2lqyjX\n2Y]D36r6W900]Bq\N30101S000bD0[bD00070000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:0000000000000000000000000000000000000000000000000000000000>>%tf% ECHO:00000000000000000000000000009\Tl9iS08j}>>%tf% :: BASM source... :: 'typical usage: type file | _replace "abc" "def" > newfile :: 'replace all occurences of string "abc" with string "def" :: 'read from standard input, write to standard output :: $com :: $string 512 'max line len :: chr10$=chr$(10) :: chr13$=chr$(13) :: quote$=chr$(34) :: 'parse command line... :: c$=command$ :: c$=ltrim$(c$) 'get rid of surrounding spaces :: c$=rtrim$(c$) :: d$=left$(c$,1) :: if d$<>quote$ then goto clerror :: clen=len(c$) :: clen=clen-1 :: c$=right$(c$,clen) 'remove 1st quote :: qpos=instr(c$,quote$) 'get position of 2nd quote :: if qpos<2 goto clerror 'must be at least 1 char :: qpos=qpos-1 :: str1$=left$(c$,qpos) 'slice off match string :: qpos=qpos+2 :: clen=len(c$) :: rlen=clen-qpos :: str2$=right$(c$,rlen) 'raw second half :: str2$=ltrim$(str2$) 'no extra spaces :: d$=left$(str2$,1) 'check for quotes :: if d$<>quote$ then goto clerror :: d$=right$(str2$,1) :: if d$<>quote$ then goto clerror :: clen=len(str2$) 'make sure valid string :: if clen<2 then goto clerror 'too short :: if clen>2 then 'at least 1 char :: clen=clen-1 :: str2$=right$(str2$,clen) 'remove quotes :: clen=clen-1 :: str2$=left$(str2$,clen) :: else :: str2$="" 'otherwise empty replace :: end if :: oneline$="" 'initialise main processing loop :: linelen=0 'count chars to avoid overrun :: mainloop: 'loop until no more... :: a$=stdin$ 'get one character :: if a$="" then goto nomore 'done with input :: if a$=chr13$ then goto mainloop 'skip cr :: if a$=chr10$ then 'if lf process line :: gosub process 'replace and output :: oneline$="" 'reset string :: linelen=0 :: goto mainloop 'and loop for more :: end if 'if not lf :: if linelen<512 then 'if not overflow :: oneline$=oneline$+a$ 'add to line :: linelen=linelen+1 'bump length count :: end if :: goto mainloop :: nomore: :: if linelen>0 then 'if extra chars w/ no crlf :: gosub process 'process as one line :: endif :: end 'exit to dos :: clerror: 'command line error :: print "error" :: end :: process: 'subroutine... :: replace str1$ with str2$ in oneline$ 'nice :: output oneline$ 'write to stdout+crlf :: return ::------------------------------- :: decode replace helper... %dec% < %tf% > %replace% if errorlevel 1 goto binerror :: everything is in place to convert com into batch code... :: %dec% - the decoder program :: %enc% - encodes binary to text, stdin to stdout :: %file2bat% infile outfile tmpfile - turns into echo code :: %cmntsrc% file - outputs stdout with commented file :: %replace% "search" "replace" - stdin to stdout :: %compname% = the compiler name :: %madewith% = utilities used to compile :: %usetempdir% = yes if tempdir to be used :: %decname% = decoder filename to use :: %tempname% = temp filename to use :: %fbase%.%outputext% = output filename :: determine temp names... set t= if .%usetempdir%==.yes set t=%%temp%%.\ :: create output file... set outfile=%fbase%.%outputext% echo @echo off>%outfile% echo>>%outfile% ::---- Generated by CONV2BAT ---- :: attach decoder... echo>>%outfile% :: CM3-encoded DecBin decoder... %file2bat% %dec% %tf1% %t%%decname% type>>%outfile% %tf1% :: attach encoded com file... echo>>%outfile% ::---- EncBin-encoded binary ---- echo>>%outfile% :: %binfile% made with %madewith% %enc% < %binfile% > %tf% %file2bat% %tf% %tf1% %t%%tempname% type>>%outfile% %tf1% :: attach source code... if not .%compname%==. echo>>%outfile% :: %compname% source... if not .%compname%==. %cmntsrc% %fbase%.%fext% >>%outfile% echo>>%outfile% ::------------------------------- :: attach decode/run/delete lines... echo>>%outfile% :: decode/run/delete, modify as needed... echo>%tf1% %t%%decname% {{.lt{{ %t%%tempname% }}.gt}} %t%%binfile% %replace% "{{.lt{{" "<" < %tf1% > %tf2% %replace% "}}.gt}}" ">" < %tf2% >>%outfile% if not .%compname%==. echo>>%outfile% %t%%binfile% %%1 %%2 %%3 if not .%compname%==. echo>>%outfile% del %t%%binfile% if .%compname%==. echo>>%outfile% :: use %t%%binfile% as needed echo>>%outfile% del %t%%tempname% echo>>%outfile% del %t%%decname% echo. echo =========================================================== echo Done! %binfile% is the raw binary if exist %fbase%.asm echo intermediate assembly is in %fbase%.asm echo %outfile% batch code recreates %binfile% when run echo =========================================================== echo. goto cleanup :binerror echo Error in encoded binary :cleanup if exist %tf% del %tf% if exist %tf1% del %tf1% if exist %tf2% del %tf2% if exist %enc% del %enc% if exist %dec% del %dec% if exist %replace% del %replace% if exist %sepname% del %sepname% if exist %cmntsrc% del %cmntsrc% if exist %file2bat% del %file2bat% :end |