|
|
(35 intermediate revisions by the same user not shown) |
Line 14: |
Line 14: |
|
| |
|
| {{PageDescription}} | | {{PageDescription}} |
| To use this skeleton click on the '''Edit''' tab above the page, then copy the raw text of this page and paste it into your new page. Change/remove sections as needed. Use ''this'' for italic and '''this''' for bold text style. To color your writings use the {{Text|Text template|red}}. It takes either a color name or a #RRGGBB 32bit color, if the color part is omitted it will default to {{Text|gray}}. | | To use this skeleton click on the '''View source''' tab above the page, then copy the raw text of this page and paste it into your new page. Change/remove sections as needed. Use ''this'' for italic and '''this''' for bold text style. To color your writings use the {{Text|Text template|red}}. It takes either a color name or a #RRGGBB 32bit color, if the color part is omitted it will default to {{Text|gray}}. |
|
| |
|
| You can inline simple code one liners like {{InlineCode}}w = {{Cl|_WIDTH}}{{InlineCodeEnd}} | | You can inline simple code one liners like {{InlineCode}}w = {{Cl|_WIDTH}}{{InlineCodeEnd}} |
|
| |
|
| * an askerisk marks a list point | | * an askerisk marks a list point |
| ** two askerisks will indent the list | | ** two askerisks will do a sub-list, avoid deeper nesting than this |
| *** three askerisks will indent even more
| |
|
| |
|
| ; This is a definition list : The first description can follow right after a colon | | ; This is a definition list : The first description can follow right after a colon |
Line 68: |
Line 67: |
| </gallery> | | </gallery> |
| <!-- additional availability notes go below here --> | | <!-- additional availability notes go below here --> |
| * The capability to load from ''memory'' was introduced in '''QB64-PE''' ''v3.5.0''. | | * The capability to load from ''memory'' was introduced in '''QB64-PE v3.5.0'''. |
|
| |
|
|
| |
|
Line 81: |
Line 80: |
| {{CodeEnd}} | | {{CodeEnd}} |
| {{Small|This template allows for a short author credit.}} | | {{Small|This template allows for a short author credit.}} |
| | {{PreStart}} |
| | '''Note:''' To avoid the annoying task of manually inserting the templates |
| | in your code examples, since v3.7.0 you may simply write your example |
| | in the IDE and later use the menu "File > Export As > Wiki example" to |
| | export a completely prepared code block, which you can paste "as is" |
| | into the Wiki page. |
|
| |
|
| | Oh, and by the way, this ''preformatted text block'' is also new. Generally |
| | it's the same as a ''fixed text block'' shown above, but it uses horizontal |
| | scrollers instead of stretching the text box and it has a more plain |
| | appearance. If you want avoid the horizontal scroller, then restrict |
| | yourself to a line length of max. 72 characters. |
| | {{PreEnd}} |
|
| |
|
| : The output block is available for the SCREEN 0 background colors 0-7 | | : The output block is available for the SCREEN 0 background colors 0-7 |
Line 91: |
Line 102: |
|
| |
|
| {{PageSeeAlso}} | | {{PageSeeAlso}} |
| | * [https://qb64phoenix.com/forum/showthread.php?tid=1066 Featured in our "Keyword of the Day" series] |
| * [[Keyword Reference - Alphabetical]] | | * [[Keyword Reference - Alphabetical]] |
| * [[Keyword Reference - By usage]] | | * [[Keyword Reference - By usage]] |
Line 96: |
Line 108: |
|
| |
|
| {{PageNavigation}} | | {{PageNavigation}} |
|
| |
| {{CodeStart}}
| |
| {{Text|<nowiki>'+---------------+---------------------------------------------------+</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ###### ###### | .--. . .-. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ## ## ## # | | )| ( ) o |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ## ## ## | |--' |--. .-. `-. . .-...--.--. .-. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ###### ## | | \ | |( )( ) | ( || | |( ) |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ## ## | ' `' `-`-' `-'-' `-`-`|' ' `-`-'`- |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ## ## # | ._.' |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| ## ###### | Sources & Documents placed in the Public Domain. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'+---------------+---------------------------------------------------+</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| === MakeCARR.bas === |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == Create a C/C++ array out of the given file, so you can embed |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == it in your program and write it back when needed. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == Two files are created, the .h file, which contains the array(s)|</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == and some functions, and a respective .bm file which needs to |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == be $INCLUDEd with your program and does provide the FUNCTION |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == to write back the array(s) into any file. All used functions |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == are standard library calls, no API calls are involved, so the |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == writeback should work on all QB64 supported platforms. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == Make sure to adjust the path for the .h file for your personal |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == needs in the created .bm files (DECLARE LIBRARY), if required. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == You may specify default paths right below this header. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == This program needs the 'lzwpacker.bm' file available from the |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == Libraries Collection here: |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == http://qb64phoenix.com/forum/forumdisplay.php?fid=23 |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == as it will try to pack the given file to keep the array(s) as |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == small as possible. If compression is successful, then your |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == program also must $INCLUDE 'lzwpacker.bm' to be able to unpack |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == the file data again for write back. MakeCARR.bas is printing |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| == a reminder message in such a case. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'+-------------------------------------------------------------------+</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| Done by RhoSigma, R.Heyder, provided AS IS, use at your own risk. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| Find me in the QB64 Forum or mail to support@rhosigma-cw.net for |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'| any questions or suggestions. Thanx for your interest in my work. |</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'+-------------------------------------------------------------------+</nowiki>|#AAAAAA}}
| |
|
| |
| {{Text|<nowiki>'--- if you wish, set any default paths, end with a backslash ---</nowiki>|#AAAAAA}}
| |
| srcPath$ = {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|<nowiki>'source path</nowiki>|#AAAAAA}}
| |
| tarPath$ = {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|<nowiki>'target path</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'-----</nowiki>|#AAAAAA}}
| |
| {{Text|IF|#4593D8}} srcPath$ <> {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|THEN|#4593D8}}
| |
| {{Text|COLOR|#4593D8}} {{Text|15|#F580B1}}: {{Text|PRINT|#4593D8}} {{Text|<nowiki>"Default source path: "</nowiki>|#FFB100}}: {{Text|COLOR|#4593D8}} {{Text|7|#F580B1}}: {{Text|PRINT|#4593D8}} srcPath$: {{Text|PRINT|#4593D8}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|IF|#4593D8}} tarPath$ <> {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|THEN|#4593D8}}
| |
| {{Text|COLOR|#4593D8}} {{Text|15|#F580B1}}: {{Text|PRINT|#4593D8}} {{Text|<nowiki>"Default target path: "</nowiki>|#FFB100}}: {{Text|COLOR|#4593D8}} {{Text|7|#F580B1}}: {{Text|PRINT|#4593D8}} tarPath$: {{Text|PRINT|#4593D8}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
|
| |
| {{Text|<nowiki>'--- collect inputs (relative paths allowed, based on default paths) ---</nowiki>|#AAAAAA}}
| |
| source:
| |
| {{Text|LINE|#4593D8}} {{Text|INPUT|#4593D8}} {{Text|<nowiki>"Source Filename: "</nowiki>|#FFB100}}; src$ {{Text|<nowiki>'any file you want to put into a C/C++ array</nowiki>|#AAAAAA}}
| |
| {{Text|IF|#4593D8}} src$ = {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|GOTO|#4593D8}} source
| |
| target:
| |
| {{Text|LINE|#4593D8}} {{Text|INPUT|#4593D8}} {{Text|<nowiki>"Target Basename: "</nowiki>|#FFB100}}; tar$ {{Text|<nowiki>'write stuff into this file(s) (.h/.bm is added)</nowiki>|#AAAAAA}}
| |
| {{Text|IF|#4593D8}} tar$ = {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|GOTO|#4593D8}} target
| |
| {{Text|<nowiki>'-----</nowiki>|#AAAAAA}}
| |
| {{Text|ON|#4593D8}} {{Text|ERROR|#4593D8}} {{Text|GOTO|#4593D8}} abort
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"I"</nowiki>|#FFB100}}, #1, srcPath$ + src$: {{Text|CLOSE|#4593D8}} #1 {{Text|<nowiki>'file exist check</nowiki>|#AAAAAA}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"O"</nowiki>|#FFB100}}, #2, tarPath$ + tar$ + {{Text|<nowiki>".bm"</nowiki>|#FFB100}}: {{Text|CLOSE|#4593D8}} #2 {{Text|<nowiki>'path exist check</nowiki>|#AAAAAA}}
| |
| {{Text|ON|#4593D8}} {{Text|ERROR|#4593D8}} {{Text|GOTO|#4593D8}} {{Text|0|#F580B1}}
| |
|
| |
| {{Text|<nowiki>'--- separate source filename part ---</nowiki>|#AAAAAA}}
| |
| {{Text|FOR|#4593D8}} po% = {{Text|LEN|#4593D8}}(src$) {{Text|TO|#4593D8}} {{Text|1|#F580B1}} {{Text|STEP|#4593D8}} {{Text|-1|#F580B1}}
| |
| {{Text|IF|#4593D8}} {{Text|MID$|#4593D8}}(src$, po%, {{Text|1|#F580B1}}) = {{Text|<nowiki>"\"</nowiki>|#FFB100}} {{Text|OR|#4593D8}} {{Text|MID$|#4593D8}}(src$, po%, {{Text|1|#F580B1}}) = {{Text|<nowiki>"/"</nowiki>|#FFB100}} {{Text|THEN|#4593D8}}
| |
| srcName$ = {{Text|MID$|#4593D8}}(src$, po% + {{Text|1|#F580B1}})
| |
| {{Text|EXIT|#4593D8}} {{Text|FOR|#4593D8}}
| |
| {{Text|ELSEIF|#4593D8}} po% = {{Text|1|#F580B1}} {{Text|THEN|#4593D8}}
| |
| srcName$ = src$
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|NEXT|#4593D8}} po%
| |
| {{Text|<nowiki>'--- separate target filename part ---</nowiki>|#AAAAAA}}
| |
| {{Text|FOR|#4593D8}} po% = {{Text|LEN|#4593D8}}(tar$) {{Text|TO|#4593D8}} {{Text|1|#F580B1}} {{Text|STEP|#4593D8}} {{Text|-1|#F580B1}}
| |
| {{Text|IF|#4593D8}} {{Text|MID$|#4593D8}}(tar$, po%, {{Text|1|#F580B1}}) = {{Text|<nowiki>"\"</nowiki>|#FFB100}} {{Text|OR|#4593D8}} {{Text|MID$|#4593D8}}(tar$, po%, {{Text|1|#F580B1}}) = {{Text|<nowiki>"/"</nowiki>|#FFB100}} {{Text|THEN|#4593D8}}
| |
| tarName$ = {{Text|MID$|#4593D8}}(tar$, po% + {{Text|1|#F580B1}})
| |
| {{Text|EXIT|#4593D8}} {{Text|FOR|#4593D8}}
| |
| {{Text|ELSEIF|#4593D8}} po% = {{Text|1|#F580B1}} {{Text|THEN|#4593D8}}
| |
| tarName$ = tar$
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|NEXT|#4593D8}} po%
| |
| {{Text|MID$|#4593D8}}(tarName$, {{Text|1|#F580B1}}, {{Text|1|#F580B1}}) = {{Text|UCASE$|#4593D8}}({{Text|MID$|#4593D8}}(tarName$, {{Text|1|#F580B1}}, {{Text|1|#F580B1}})) {{Text|<nowiki>'capitalize 1st letter</nowiki>|#AAAAAA}}
| |
|
| |
| {{Text|<nowiki>'---------------------------------------------------------------------</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>' Depending on the source file's size, one or more array(s) are</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>' created. This is because some C/C++ compilers seem to have problems</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>' with arrays with more than 65535 elements. This does not affect the</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>' write back, as the write function will take this behavior into account.</nowiki>|#AAAAAA}}
| |
| {{Text|<nowiki>'---------------------------------------------------------------------</nowiki>|#AAAAAA}}
| |
|
| |
| {{Text|<nowiki>'--- init ---</nowiki>|#AAAAAA}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"B"</nowiki>|#FFB100}}, #1, srcPath$ + src$
| |
| filedata$ = {{Text|SPACE$|#4593D8}}({{Text|LOF|#4593D8}}({{Text|1|#F580B1}}))
| |
| {{Text|GET|#4593D8}} #1, , filedata$
| |
| {{Text|CLOSE|#4593D8}} #1
| |
| rawdata$ = LzwPack$(filedata$, {{Text|20|#F580B1}})
| |
| {{Text|IF|#4593D8}} rawdata$ <> {{Text|<nowiki>""</nowiki>|#FFB100}} {{Text|THEN|#4593D8}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"O"</nowiki>|#FFB100}}, #1, tarPath$ + tar$ + {{Text|<nowiki>".lzw"</nowiki>|#FFB100}}
| |
| {{Text|CLOSE|#4593D8}} #1
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"B"</nowiki>|#FFB100}}, #1, tarPath$ + tar$ + {{Text|<nowiki>".lzw"</nowiki>|#FFB100}}
| |
| {{Text|PUT|#4593D8}} #1, , rawdata$
| |
| {{Text|CLOSE|#4593D8}} #1
| |
| packed% = {{Text|-1|#F580B1}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"B"</nowiki>|#FFB100}}, #1, tarPath$ + tar$ + {{Text|<nowiki>".lzw"</nowiki>|#FFB100}}
| |
| {{Text|ELSE|#4593D8}}
| |
| packed% = {{Text|0|#F580B1}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"B"</nowiki>|#FFB100}}, #1, srcPath$ + src$
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| fl& = {{Text|LOF|#4593D8}}({{Text|1|#F580B1}})
| |
| cntL& = {{Text|INT|#4593D8}}(fl& / {{Text|32|#F580B1}})
| |
| cntV& = {{Text|INT|#4593D8}}(cntL& / {{Text|8180|#F580B1}})
| |
| cntB& = (fl& - (cntL& * {{Text|32|#F580B1}}))
| |
|
| |
| {{Text|<nowiki>'--- .h include file ---</nowiki>|#AAAAAA}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"O"</nowiki>|#FFB100}}, #2, tarPath$ + tar$ + {{Text|<nowiki>".h"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// ============================================================"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// === This file was created with MakeCARR.bas by RhoSigma, ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// === use it in conjunction with its respective .bm file. ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// ============================================================"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- Array(s) representing the contents of file "</nowiki>|#FFB100}}; srcName$
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// ---------------------------------------------------------------------"</nowiki>|#FFB100}}
| |
| {{Text|<nowiki>'--- read LONGs ---</nowiki>|#AAAAAA}}
| |
| tmpI$ = {{Text|SPACE$|#4593D8}}({{Text|32|#F580B1}})
| |
| {{Text|FOR|#4593D8}} vc& = {{Text|0|#F580B1}} {{Text|TO|#4593D8}} cntV&
| |
| {{Text|IF|#4593D8}} vc& = cntV& {{Text|THEN|#4593D8}} numL& = (cntL& {{Text|MOD|#4593D8}} {{Text|8180|#F580B1}}): {{Text|ELSE|#4593D8}} numL& = {{Text|8180|#F580B1}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"static const uint32_t "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"L"</nowiki>|#FFB100}}; {{Text|LTRIM$|#4593D8}}({{Text|STR$|#4593D8}}(vc&)); {{Text|<nowiki>"[] = {"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" "</nowiki>|#FFB100}}; {{Text|LTRIM$|#4593D8}}({{Text|STR$|#4593D8}}(numL& * {{Text|8|#F580B1}})); {{Text|<nowiki>","</nowiki>|#FFB100}}
| |
| {{Text|FOR|#4593D8}} z& = {{Text|1|#F580B1}} {{Text|TO|#4593D8}} numL&
| |
| {{Text|GET|#4593D8}} #1, , tmpI$: offI% = {{Text|1|#F580B1}}
| |
| tmpO$ = {{Text|<nowiki>" "</nowiki>|#FFB100}} + {{Text|STRING$|#4593D8}}({{Text|88|#F580B1}}, {{Text|<nowiki>","</nowiki>|#FFB100}}): offO% = {{Text|5|#F580B1}}
| |
| {{Text|DO|#4593D8}}
| |
| tmpL& = {{Text|CVL|#4593D8}}({{Text|MID$|#4593D8}}(tmpI$, offI%, {{Text|4|#F580B1}})): offI% = offI% + {{Text|4|#F580B1}}
| |
| {{Text|MID$|#4593D8}}(tmpO$, offO%, {{Text|10|#F580B1}}) = {{Text|<nowiki>"0x"</nowiki>|#FFB100}} + {{Text|RIGHT$|#4593D8}}({{Text|<nowiki>"00000000"</nowiki>|#FFB100}} + {{Text|HEX$|#4593D8}}(tmpL&), {{Text|8|#F580B1}})
| |
| offO% = offO% + {{Text|11|#F580B1}}
| |
| {{Text|LOOP|#4593D8}} {{Text|UNTIL|#4593D8}} offO% > {{Text|92|#F580B1}}
| |
| {{Text|IF|#4593D8}} z& < numL& {{Text|THEN|#4593D8}} {{Text|PRINT|#4593D8}} #2, tmpO$: {{Text|ELSE|#4593D8}} {{Text|PRINT|#4593D8}} #2, {{Text|LEFT$|#4593D8}}(tmpO$, {{Text|91|#F580B1}})
| |
| {{Text|NEXT|#4593D8}} z&
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"};"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|NEXT|#4593D8}} vc&
| |
| {{Text|<nowiki>'--- read remaining BYTEs ---</nowiki>|#AAAAAA}}
| |
| {{Text|IF|#4593D8}} cntB& > {{Text|0|#F580B1}} {{Text|THEN|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"static const uint8_t "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"B[] = {"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" "</nowiki>|#FFB100}}; {{Text|LTRIM$|#4593D8}}({{Text|STR$|#4593D8}}(cntB&)); {{Text|<nowiki>","</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" "</nowiki>|#FFB100}};
| |
| {{Text|FOR|#4593D8}} x% = {{Text|1|#F580B1}} {{Text|TO|#4593D8}} cntB&
| |
| {{Text|GET|#4593D8}} #1, , tmpB%%
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"0x"</nowiki>|#FFB100}} + {{Text|RIGHT$|#4593D8}}({{Text|<nowiki>"00"</nowiki>|#FFB100}} + {{Text|HEX$|#4593D8}}(tmpB%%), {{Text|2|#F580B1}});
| |
| {{Text|IF|#4593D8}} x% <> {{Text|16|#F580B1}} {{Text|THEN|#4593D8}}
| |
| {{Text|IF|#4593D8}} x% <> cntB& {{Text|THEN|#4593D8}} {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>","</nowiki>|#FFB100}};
| |
| {{Text|ELSE|#4593D8}}
| |
| {{Text|IF|#4593D8}} x% <> cntB& {{Text|THEN|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>","</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" "</nowiki>|#FFB100}};
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|NEXT|#4593D8}} x%
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"};"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|<nowiki>'--- some functions ---</nowiki>|#AAAAAA}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- Saved full qualified output path and filename, so we've no troubles"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- when cleaning up, even if the current working folder was changed"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- during program runtime."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// ---------------------------------------------------------------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"char "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Name[8192]; // it's a safe size for any current OS"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- Cleanup function to delete the written file, called by the atexit()"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- handler at program termination time, if requested by user."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// ---------------------------------------------------------------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"void Kill"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Data(void)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"{"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" remove("</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Name);"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"}"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- Function to write the array(s) back into a file, will return the"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- full qualified output path and filename on success, otherwise an"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// --- empty string is returned (access/write errors, file truncated)."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"// ---------------------------------------------------------------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"const char *Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Data(const char *FileName, int16_t AutoClean)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"{"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" FILE *han = NULL; // file handle"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" int32_t num = NULL; // written elements"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" #ifdef QB64_WINDOWS"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" if (!_fullpath("</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Name, FileName, 8192)) return "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>";"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" #else"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" if (!realpath(FileName, "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Name)) return "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>";"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" #endif"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" if (!(han = fopen("</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Name, "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>"wb"</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>"))) return "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>";"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" if (AutoClean) atexit(Kill"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Data);"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|FOR|#4593D8}} vc& = {{Text|0|#F580B1}} {{Text|TO|#4593D8}} cntV&
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" num = fwrite(&"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"L"</nowiki>|#FFB100}}; {{Text|LTRIM$|#4593D8}}({{Text|STR$|#4593D8}}(vc&)); {{Text|<nowiki>"[1], 4, "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"L"</nowiki>|#FFB100}}; {{Text|LTRIM$|#4593D8}}({{Text|STR$|#4593D8}}(vc&)); {{Text|<nowiki>"[0], han);"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" if (num != "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"L"</nowiki>|#FFB100}}; {{Text|LTRIM$|#4593D8}}({{Text|STR$|#4593D8}}(vc&)); {{Text|<nowiki>"[0]) {fclose(han); return "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>";}"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|NEXT|#4593D8}} vc&
| |
| {{Text|IF|#4593D8}} cntB& > {{Text|0|#F580B1}} {{Text|THEN|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" num = fwrite(&"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"B[1], 1, "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"B[0], han);"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" if (num != "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"B[0]) {fclose(han); return "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>";}"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" fclose(han);"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" return "</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Name;"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"}"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|<nowiki>'--- ending ---</nowiki>|#AAAAAA}}
| |
| {{Text|CLOSE|#4593D8}} #2
| |
| {{Text|CLOSE|#4593D8}} #1
| |
|
| |
| {{Text|<nowiki>'--- .bm include file ---</nowiki>|#AAAAAA}}
| |
| {{Text|OPEN|#4593D8}} {{Text|<nowiki>"O"</nowiki>|#FFB100}}, #2, tarPath$ + tar$ + {{Text|<nowiki>".bm"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'============================================================"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== This file was created with MakeCARR.bas by RhoSigma, ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== you must $INCLUDE this at the end of your program. ==="</nowiki>|#FFB100}}
| |
| {{Text|IF|#4593D8}} packed% {{Text|THEN|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== ---------------------------------------------------- ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== If your program is NOT a GuiTools based application, ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== then it must also $INCLUDE: 'lzwpacker.bm' available ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== from the Libraries Collection here: ==="</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'=== http://qb64phoenix.com/forum/forumdisplay.php?fid=23 ==="</nowiki>|#FFB100}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'============================================================"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'-----------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- Important ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'-----------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' If you need to move around this .bm file and its respective .h file"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' to fit in your project, then make sure the path in the DECLARE LIBRARY"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' statement below does match the actual .h file location. It's best to"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' specify a relative path assuming your QB64 installation folder as root."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'---------------------------------------------------------------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|<nowiki>'--- writeback function ---</nowiki>|#AAAAAA}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'"</nowiki>|#FFB100}}; {{Text|STRING$|#4593D8}}({{Text|LEN|#4593D8}}(tarName$) + {{Text|19|#F580B1}}, {{Text|<nowiki>"-"</nowiki>|#FFB100}})
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Array$ ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'"</nowiki>|#FFB100}}; {{Text|STRING$|#4593D8}}({{Text|LEN|#4593D8}}(tarName$) + {{Text|19|#F580B1}}, {{Text|<nowiki>"-"</nowiki>|#FFB100}})
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' This function will write the array(s) you've created with MakeCARR.bas"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' back to disk and so it rebuilds the original file."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' After the writeback call, only use the returned realFile$ to access the"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' written file. It's the full qualified absolute path and filename, which"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' is made by expanding your maybe given relative path and an maybe altered"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' filename (number added) in order to avoid the overwriting of an already"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' existing file with the same name in the given location. By this means"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' you'll always have safe access to the file, no matter how your current"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' working folder changes during runtime."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' If you wish, the written file can automatically be deleted for you when"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' your program will end, so you don't need to do the cleanup yourself."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'----------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' SYNTAX:"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' realFile$ = Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Array$ (wantFile$, autoDel%)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'----------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' INPUTS:"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' --- wantFile$ ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' The filename you would like to write the array(s) to, can contain"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' a full or relative path."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' --- autoDel% ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' Shows whether you want the auto cleanup (see description above) at"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' the program end or not (-1 = delete file, 0 = don't delete file)."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'----------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' RESULT:"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' --- realFile$ ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' - On success this is the full qualified path and filename finally"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' used after all applied checks, use only this returned filename"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' to access the written file."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' - On failure (write/access) this will be an empty string, so you"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"' should check for this before trying to access/open the file."</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'---------------------------------------------------------------------"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"FUNCTION Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Array$ (file$, clean%)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- declare C/C++ function ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"DECLARE LIBRARY "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); tarPath$; tar$; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" 'Do not add .h here !!"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" FUNCTION Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Data$ (FileName$, BYVAL AutoClean%)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"END DECLARE"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- option _explicit requirements ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"DIM po%, body$, ext$, num%"</nowiki>|#FFB100}};
| |
| {{Text|IF|#4593D8}} packed% {{Text|THEN|#4593D8}} {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>", real$, ff%, rawdata$, filedata$"</nowiki>|#FFB100}}: {{Text|ELSE|#4593D8}} {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- separate filename body & extension ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"FOR po% = LEN(file$) TO 1 STEP -1"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" IF MID$(file$, po%, 1) = "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>"."</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" THEN"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" body$ = LEFT$(file$, po% - 1)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" ext$ = MID$(file$, po%)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" EXIT FOR"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" ELSEIF MID$(file$, po%, 1) = "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>"\"</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" OR MID$(file$, po%, 1) = "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>"/"</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" OR po% = 1 THEN"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" body$ = file$"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" ext$ = "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}})
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" EXIT FOR"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" END IF"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"NEXT po%"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- avoid overwriting of existing files ---"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"num% = 1"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"WHILE _FILEEXISTS(file$)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" file$ = body$ + "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>"("</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" + LTRIM$(STR$(num%)) + "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>")"</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" + ext$"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" num% = num% + 1"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"WEND"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"'--- write array & set result ---"</nowiki>|#FFB100}}
| |
| {{Text|IF|#4593D8}} {{Text|NOT|#4593D8}} packed% {{Text|THEN|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Array$ = Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Data$(file$ + CHR$(0), clean%)"</nowiki>|#FFB100}}
| |
| {{Text|ELSE|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"real$ = Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Data$(file$ + CHR$(0), clean%)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"IF real$ <> "</nowiki>|#FFB100}}; {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|CHR$|#4593D8}}({{Text|34|#F580B1}}); {{Text|<nowiki>" THEN"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" ff% = FREEFILE"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" OPEN real$ FOR BINARY AS ff%"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" rawdata$ = SPACE$(LOF(ff%))"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" GET #ff%, , rawdata$"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" filedata$ = LzwUnpack$(rawdata$)"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" PUT #ff%, 1, filedata$"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>" CLOSE ff%"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"END IF"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Array$ = real$"</nowiki>|#FFB100}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>"END FUNCTION"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} #2, {{Text|<nowiki>""</nowiki>|#FFB100}}
| |
| {{Text|<nowiki>'--- ending ---</nowiki>|#AAAAAA}}
| |
| {{Text|CLOSE|#4593D8}} #2
| |
|
| |
| {{Text|<nowiki>'--- finish message ---</nowiki>|#AAAAAA}}
| |
| {{Text|COLOR|#4593D8}} {{Text|10|#F580B1}}: {{Text|PRINT|#4593D8}}: {{Text|PRINT|#4593D8}} {{Text|<nowiki>"file successfully processed..."</nowiki>|#FFB100}}
| |
| {{Text|COLOR|#4593D8}} {{Text|9|#F580B1}}: {{Text|PRINT|#4593D8}}: {{Text|PRINT|#4593D8}} {{Text|<nowiki>"You must $INCLUDE the created file (target name + .bm extension) at"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} {{Text|<nowiki>"the end of your program and call the function 'Write"</nowiki>|#FFB100}}; tarName$; {{Text|<nowiki>"Array$(...)'"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} {{Text|<nowiki>"in an appropriate place to write the file back to disk."</nowiki>|#FFB100}}
| |
| {{Text|IF|#4593D8}} packed% {{Text|THEN|#4593D8}}
| |
| {{Text|COLOR|#4593D8}} {{Text|12|#F580B1}}: {{Text|PRINT|#4593D8}}: {{Text|PRINT|#4593D8}} {{Text|<nowiki>"Your program must also $INCLUDE 'lzwpacker.bm' available from"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} {{Text|<nowiki>"the Libraries Collection here:"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} {{Text|<nowiki>" http://qb64phoenix.com/forum/forumdisplay.php?fid=23"</nowiki>|#FFB100}}
| |
| {{Text|PRINT|#4593D8}} {{Text|<nowiki>"to be able to write back the just processed file."</nowiki>|#FFB100}}
| |
| {{Text|KILL|#4593D8}} tarPath$ + tar$ + {{Text|<nowiki>".lzw"</nowiki>|#FFB100}}
| |
| {{Text|END|#4593D8}} {{Text|IF|#4593D8}}
| |
| done:
| |
| {{Text|COLOR|#4593D8}} {{Text|7|#F580B1}}
| |
| {{Text|END|#4593D8}}
| |
| {{Text|<nowiki>'--- error handler ---</nowiki>|#AAAAAA}}
| |
| abort:
| |
| {{Text|COLOR|#4593D8}} {{Text|12|#F580B1}}: {{Text|PRINT|#4593D8}}: {{Text|PRINT|#4593D8}} {{Text|<nowiki>"something is wrong with path/file access, check your inputs and try again..."</nowiki>|#FFB100}}
| |
| {{Text|RESUME|#4593D8}} done
| |
|
| |
| {{Text|<nowiki>'</nowiki>|#AAAAAA}}{{Text|$INCLUDE:|#55FF55}} {{Text|<nowiki>'QB64Library\LZW-Compress\lzwpacker.bm'</nowiki>|#AAAAAA}}
| |
|
| |
| {{CodeEnd}}
| |