How to do things
AI Noob vs. Pro

List biggest files
List newest files
Show subdir sizes
Search in files
Replace word in files
List dir differences
Send files in LAN

Free Open Source:

Swiss File Knife

a command line
multi function tool.

remove tabs
list dir sizes
find text
filter lines
find in path
collect text
instant ftp or
http server
file transfer
send text
patch text
patch binary
run own cmd
convert crlf
dup file find
md5 lists
fromto clip
hexdump
split files
list latest
compare dirs
save typing
trace http
echo colors
head & tail
dep. listing
find classes
speed shell
zip search
zip dir list

Depeche View
Source Research
First Steps

windows GUI
automation

command line
file encryption

free external tools,
zero install effort,
usb stick compliant:

zip and unzip
diff and merge
reformat xml
reformat source

cpp sources

log tracing
mem tracing
hexdump
using printf

articles

embedded
stat. c array
stat. java array
var. c array
var. java array
view all text
as you type
surf over text
find by click
quick copy
multi view
find nearby
fullscreen
bookmarks
find by path
expressions
location jump
skip accents
clip match
filter lines
edit text
highlight
load filter
hotkey list
receive text
send in C++
send in Java
smooth scroll
touch scroll
fly wxWidgets
fly over Qt
search Java

Supersonic Text File Search - Free Download

Get instant Hello World example scripts, batch files and source code for the Windows CMD.EXE shell, Linux bash, HTML code, or a simple Java/C++/PHP program as a starting point for your own editing, with the free sfk samp command for Windows, Mac OS X and Linux.
  • Download the free Swiss File Knife Base from Sourceforge.
  • Open the Windows CMD command line, Mac OS X Terminal or Linux shell.
  • OS X : type mv sfk-mac-64.exe sfk and chmod +x sfk then ./sfk
  • Linux: type mv sfk-linux-64.exe sfk and chmod +x sfk then ./sfk. OS X and Linux syntax may differ, check the help within the tool.
sfk sample java|cpp|... [outfile.java|.cpp|...]

print a short example code in a programming language.

supported parameters
   sfk          create a simple sfk script
   sfkbat       sfk script embedded in a .bat or .cmd
   sfkbash      sfk script embedded in a bash script
   http         automated http access example script
   http -bat    ... as a windows .bat file
   http -bash   ... as a linux .sh file
   httpdata     create a .zip file with webdemo files
                for local use with sfk httpserv

   cmd          create generic windows .cmd or .bat file
   bash         create generic linux bash script
   html         simple html page with css and javascript
   java         create a java class doing text  file I/O
   javaimg      create a java class doing image file I/O
   javahex      create a hexdump of binary data in java
   javagui      create a simple java gui application
   c            create a simple c source code template
   cpp          same as the c source code template
   cppnetlog    how to send UDP network text in C++
   javanetlog   how to send UDP network text in Java
   php          create command line php code for text I/O
   phpimg       create php example for image processing

options
   -force    if output file exists already, overwrite it.

command shortcut
   sfk batch myscript.bat
      does the same as "sfk samp sfkbat myscript.bat"

web reference
   http://stahlworks.com/sfk-sample

more in the SFK Book
   the SFK Book contains a 60 page tutorial, including
   long sfk script examples with input, output and
   detail explanations. type "sfk book" for more.

examples
   sfk batch foo.bat
      creates batch file foo.bat with embedded sfk script.
      type "foo.bat" to run the created script. note that
      foo.bat must be created in a directory of your PATH,
      or in the current directory.

   sfk batch foo.bat -force
      the same as above, and overwrites an existing file.

   sfk batch foo.sh
      create a bash script file, with lf only line endings.
      can also be used under windows for mingw environments.

   sfk samp java foo.java
      create a java class foo. if the java JDK is available,
      type "javac foo.java" and then "java foo" to run it.

   sfk samp phpimg doimg.php
      create image processing script that can be run by:
      php doimg.php
      if php.exe is in your PATH (read remarks in the script).

   sfk samp javahex +toclip
      copy example for java hexdump creation to the clipboard.

   sfk samp http tmp.bat
      create an example script for automated web/http access.

   sfk samp http -bash tmp.sh
      the same, but using bash in a Windows Cygwin environment.

   sfk samp c tmp.c
      create an instant c program with some helper functions
      for quick and easy writing of a small c project.
      compile by: gcc tmp.c or g++ tmp.c or cl tmp.c

   sfk samp cpp tmp.cpp
      same as the 'c' code example.

 

the samples produced are:

sfk samp sfk
sfk select testfiles .txt .hpp .cpp // find words supplied by user. // note that %1 is the same as $1. +find %1 %2 %3 $4 $5 $6 // process files containing hits +run -quiet "sfk echo \"Found hit in: [green]$file[def]\"" -yes // run the script by: // sfk script "thisfile" pattern1 [pattern2 ...]
sfk samp sfkbat
@echo off sfk script "%~f0" -from begin %* rem %~f0 is the absolute batch file name. GOTO xend sfk label begin -var // default batch, with some variable support. // for a full file backup example use: // sfk batch -full myfile.bat +if "%1 = " begin +tell "[green]usage:[def]" +tell " #(sys.ownscript.name) copy [-yes]" +stop -all +endif +setvar cmd="%1" +setvar yes="%2" +if "#(cmd) = copy" begin +call docopy +stop +endif +tell "unknown command: #(cmd)" +end sfk label docopy +copy -checkdirs mydir mydir2 -dir core doc db -subdir !\tmp !\save -file !.tmp #(yes) +end :xend
sfk samp sfkbash
#!/bin/bash sfk script "$0" -from begin $@ exit function skip_block { sfk label begin -var -upat2 // default batch, with unified windows/linux syntax (-upat2). // for a full file backup example use: // sfk batch -full myfile.sh +if "%1 = " begin +tell "[green]usage:[def]" +tell " #(sys.ownscript.name) copy [-yes]" +stop -all +endif +setvar cmd="%1" +setvar yes="%2" +if "#(cmd) = copy" begin +call docopy +stop +endif +tell "unknown command: #(cmd)" +end sfk label docopy +copy -checkdirs mydir mydir2 -dir core doc db -subdir :\tmp :\save -file :.tmp #(yes) +end }
sfk samp http
@echo off sfk script "%~f0" -from begin %* rem "%~f0" is the absolute batch file name. GOTO xend sfk label begin -var // the -var above enables variables everywhere. +setvar "baseurl=http://stahlworks.com/webdemo" +web "#(baseurl)/contents.xml" +xex "_<category>**<id>*</id>**<name>*< _[part4] [part8]\n_" +perline "call listCategory #text" -yes +end sfk label listCategory +echo "[green]=== List of %2: ===[def]" +echo -spat "[yellow]Name Price[def]" +then web "#(baseurl)/product_list_%1.xml" // +xmlform +stop -all +xex "=<row>**<name>*<**<price>*< =[part4]\t[part8] \x24\n=" +filter -upat -stabform "#(-12col1) #col2" +end rem a longer example with input, output and detail rem explanations is available in the SFK Book. :xend
sfk samp java
import java.io.*; public class fileio { static void log(String s) { System.out.println("main: "+s); } public static void main(String args[]) throws Throwable { if (args.length < 2) { log("supply in- and output filename."); return; } // copy or convert text file BufferedReader rin = new BufferedReader( new InputStreamReader( new FileInputStream(args[0]), "ISO-8859-1" // or US-ASCII,UTF-8,UTF-16BE,UTF-16LE,UTF-16 )); PrintWriter pout = new PrintWriter( new OutputStreamWriter( new FileOutputStream(args[1]), "ISO-8859-1" )); while (true) { String sline = rin.readLine(); if (sline == null) break; // EOD log("copying line: "+sline); pout.println(sline); } pout.close(); rin.close(); } };
sfk samp cpp
// simple c source template 1.0 for instant coding, free for any use. // beware that the simplified semantics may not fit into larger projects. #ifdef _WIN32 #include <windows.h> #endif #include <stdio.h> #include <string.h> #include <stdarg.h> #include <stdlib.h> #include <ctype.h> #include <stdint.h> #include <sys/stat.h> #ifndef _WIN32 #include <unistd.h> #include <sys/time.h> #endif // sfk quick types typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef const char cchar; #ifndef __cplusplus typedef unsigned char bool; #endif #ifdef _WIN32 typedef __int64 num; typedef unsigned __int64 unum; #else typedef long long num; typedef unsigned long long unum; #endif // print error message with variable parameters. int perr(const char *pszFormat, ...) { va_list argList; va_start(argList, pszFormat); char szBuf[1024]; vsprintf(szBuf, pszFormat, argList); fprintf(stderr, "error: %s", szBuf); return 0; } int merr(const char *pszWhere) { fprintf(stderr, "out of memory at %s", pszWhere); return 0; } char *myvtext(const char *pszFormat, ...) { static char szBuf[4096]; va_list argList; va_start(argList, pszFormat); vsnprintf(szBuf, sizeof(szBuf)-10, pszFormat, argList); szBuf[sizeof(szBuf)-10] = '\0'; return szBuf; } char *numtoa(num n) { static char szBuf[100]; #ifdef _WIN32 sprintf(szBuf, "%I64d", n); #else sprintf(szBuf, "%lld", n); #endif return szBuf; } num atonum(char *psz) { #ifdef _WIN32 return _atoi64(psz); #else return atoll(psz); #endif } num currentTime() { #ifdef _WIN32 return (num)GetTickCount(); #else struct timeval tv; gettimeofday(&tv, NULL); return ((num)tv.tv_sec) * 1000 + ((num)tv.tv_usec) / 1000; #endif } void doSleep(int nmsec) { #ifdef _WIN32 Sleep(nmsec); #else // sleep(1); // const timespec ts = { nmsec / 1000, nmsec % 1000 * 1000000 }; // nanosleep(&ts, NULL); usleep(nmsec*1000); #endif } int mystricmp(char *psz1, cchar *psz2) { while (*psz1 && *psz2 && tolower(*psz1) == tolower(*psz2)) { psz1++; psz2++; } return tolower(*psz1) - tolower(*psz2); } int mystrnicmp(char *psz1, cchar *psz2, int nLen) { int i=0; for (i=0; i<nLen && psz1[i] && psz2[i]; i++) if (tolower(psz1[i]) != tolower(psz2[i])) return tolower(psz1[i]) - tolower(psz2[i]); if (i >= nLen) return 0; return tolower(psz1[i]) - tolower(psz2[i]); } bool strBegins(char *pszStr, cchar *pszPat) { return strncmp(pszStr, pszPat, strlen(pszPat)) ? 0 : 1; } bool striBegins(char *pszStr, cchar *pszPat) { return mystrnicmp(pszStr, pszPat, strlen(pszPat)) ? 0 : 1; } bool strEnds(char *pszStr, cchar *pszPat) { int nhay = strlen(pszStr); int npat = strlen(pszPat); if (nhay < npat) return 0; return strcmp(pszStr+nhay-npat, pszPat) ? 0 : 1; } bool striEnds(char *pszStr, cchar *pszPat) { int nhay = strlen(pszStr); int npat = strlen(pszPat); if (nhay < npat) return 0; return mystricmp(pszStr+nhay-npat, pszPat) ? 0 : 1; } char *mystrstri(char *phay, cchar *ppat) { int i=0,j=0,ncmp=0,ndiff=0; int llen = (int)strlen(phay); int slen = (int)strlen(ppat); ncmp = (llen-slen)+1; if (ncmp < 0) return 0; for (j=0; j<ncmp; ++j) { ndiff = 0; for (i=0; (i<slen) && !ndiff; ++i) ndiff = tolower(phay[j+i]) - tolower(ppat[i]); if (!ndiff) return (char *)phay+j; } return 0; } uchar *memFind(uchar *pNeedle, num nNeedleSize, uchar *pHayStack, num nHaySize) { uchar *pCur = pHayStack; uchar *pMax = pHayStack + nHaySize - nNeedleSize; // inclusive uchar c1 = *pNeedle; while (pCur <= pMax) { uchar *p1 = pCur; p1 = (uchar*)memchr(p1, c1, pMax - p1 + 1); // +1: pMax is inclusive if (!p1 || (p1 > pMax)) return 0; if ((p1 <= pMax) && !memcmp(p1, pNeedle, nNeedleSize)) return p1; // hit pCur = p1+1; } return 0; } // may fail with file sizes > 2 gb in 32 bit builds num getFileSize(char *pszName) { struct stat buf; if (stat(pszName, &buf)) return -1; return buf.st_size; } // loads text and binary char *loadFile(char *pszFile) { num nFileSize=0, nTolerance=10; char *pOut; FILE *fin; if ((nFileSize = getFileSize(pszFile)) < 0) { perr("file not found: %s", pszFile); return 0; } if (!(pOut = (char*)malloc(nFileSize+nTolerance+4))) { perr("out of memory: %s\n", pszFile); return 0; } memset(pOut+nFileSize, 0, nTolerance); // added safety if (!(fin = fopen(pszFile, "rb"))) { perr("cannot read: %s\n", pszFile); free(pOut); return 0; } int nRead = fread(pOut, 1, nFileSize, fin); fclose(fin); if (nRead != nFileSize) { perr("cannot read: %s (%d %d)\n", pszFile, nRead, nFileSize); free(pOut); return 0; } // loadFile guarantees zero termination after buffer: pOut[nFileSize] = '\0'; return pOut; } int saveFile(char *pszName, uchar *pData, int iSize, const char *pszMode) { FILE *fout; if (!(fout = fopen(pszName, pszMode))) return 9+perr("cannot write: %s\n", pszName); if (fwrite(pData, 1, iSize, fout) != iSize) { fclose(fout); return 10+perr("cannot fully write (disk full?): %s\n", pszName); } fclose(fout); return 0; } int existsFile(char *pszName, bool bOrDir) { struct stat buf; if (stat(pszName, &buf)) return 0; if (!bOrDir && (buf.st_mode & 0040000)) // _S_IFDIR return 0; // is a dir, not a file return 1; } char *dataAsHex(void *pAnyData, int iDataSize) { static char szBuf[300]; uchar *pSrcCur = (uchar *)pAnyData; uchar *pSrcMax = pSrcCur + iDataSize; char *pszDstCur = szBuf; char *pszDstMax = szBuf+sizeof(szBuf)-30; while (pSrcCur < pSrcMax && pszDstCur < pszDstMax) { uchar uc = *pSrcCur++; sprintf(pszDstCur, "%02X", uc); pszDstCur += 2; } *pszDstCur = '\0'; return szBuf; } char *dataAsTrace(void *pAnyData, int iDataSize) { static char szBuf[300]; if (iDataSize == -1) iDataSize = strlen((char*)pAnyData); uchar *pSrcCur = (uchar *)pAnyData; uchar *pSrcMax = pSrcCur + iDataSize; char *pszDstCur = szBuf; char *pszDstMax = szBuf+sizeof(szBuf)-30; while (pSrcCur < pSrcMax && pszDstCur < pszDstMax) { uchar uc = *pSrcCur++; if (isprint((char)uc)) { *pszDstCur++ = (char)uc; continue; } sprintf(pszDstCur, "{%02X}", uc); pszDstCur += 4; } *pszDstCur = '\0'; return szBuf; } // copy text lines from one file into another. int main(int argc, char *argv[]) { char *pszInFile=0,*pszOutFile=0; int iarg = 1; for (;iarg<argc;iarg++) { char *parg = argv[iarg]; if (!strcmp(parg,"-?") || !strcmp(parg,"-h") || !strcmp(parg,"-help")) { printf("usage: %s infile outfile\n", argv[0]); return 0; } if (!pszInFile) { pszInFile = parg; continue; } if (!pszOutFile) { pszOutFile = parg; continue; } return 9+perr("unexpected: %s\n", parg); } if (!pszOutFile) return 9+perr("specify input and output filename.\n"); FILE *fin = fopen(pszInFile , "rb"); if (!fin ) return 9+perr("cannot read %s\n" , pszInFile); FILE *fout = fopen(pszOutFile, "wb"); if (!fout) return 9+perr("cannot write %s\n", pszOutFile); char szBuf[1024]; memset(szBuf, 0, sizeof(szBuf)); while (fgets(szBuf, sizeof(szBuf)-10, fin)) { char *psz = strchr(szBuf, '\r'); if (psz) *psz = '\0'; // strip cr psz = strchr(szBuf, '\n'); if (psz) *psz = '\0'; // strip lf printf("line: \"%s\"\n", szBuf); strcat(szBuf, "\n"); int nlen = strlen(szBuf); if (fwrite(szBuf, 1, nlen, fout) != nlen) return 9+perr("failed to fully write %s\n", pszOutFile); } fclose(fout); fclose(fin); return 0; }
sfk samp cmd
@rem windows command shell batch example @echo off IF "%1"=="" GOTO xerr01 echo "parameter is %1" GOTO xdone :xerr01 echo "please supply a parameter." echo "example: mybat parm123" GOTO xdone :xdone
sfk samp bash
#!/bin/bash function pmsg { # uses a local variable mystr local mystr="info: $1" echo $mystr } myparm1="$1 and $2" # no blanks around "=" if [ "$2" = "" ]; then # requires all blanks pmsg "please supply two parameters." else pmsg "you supplied \"$myparm1\"." # < -lt > -gt <= -le >= -ge == -eq != -ne i=1 while [ $i -le 5 ]; do # not "$i < 5" echo counting: $i # quotes are optional let i+=1 # not "i += 1" or "$i+=1" done fi
sfk sample java|cpp|... [outfile.java|.cpp|
   ...]

print a short example code in a programming 
language.

supported parameters
   sfk          create a simple sfk script
   sfkbat       sfk script embedded in a 
                .bat or .cmd
   sfkbash      sfk script embedded in a 
                bash script
   http         automated http access 
                example script
   http -bat    ... as a windows .bat file
   http -bash   ... as a linux .sh file
   httpdata     create a .zip file with 
                webdemo files for local use
                with sfk httpserv

   cmd          create generic windows .cmd 
                or .bat file
   bash         create generic linux bash 
                script
   html         simple html page with css 
                and javascript
   java         create a java class doing 
                text file I/O
   javaimg      create a java class doing 
                image file I/O
   javahex      create a hexdump of binary 
                data in java
   javagui      create a simple java gui 
                application
   c            create a simple c source 
                code template
   cpp          same as the c source code 
                template
   cppnetlog    how to send UDP network 
                text in C++
   javanetlog   how to send UDP network 
                text in Java
   php          create command line php 
                code for text I/O
   phpimg       create php example for 
                image processing

options
   -force    if output file exists already, 
             overwrite it.

command shortcut
   sfk batch myscript.bat
      does the same as "sfk samp sfkbat 
      myscript.bat"

web reference
   http://stahlworks.com/sfk-sample

more in the SFK Book
   the SFK Book contains a 60 page 
 tutorial, including
   long sfk script examples with input, 
   output and detail explanations. type
   "sfk book" for more.

examples sfk batch foo.bat creates batch file foo.bat with embedded sfk script. type "foo.bat" to run the created script. note that foo.bat must be created in a directory of your PATH, or in the current directory. sfk batch foo.bat -force the same as above, and overwrites an existing file. sfk batch foo.sh create a bash script file, with lf only line endings. can also be used under windows for mingw environments. sfk samp java foo.java create a java class foo. if the java JDK is available, type "javac foo. java" and then "java foo" to run it. sfk samp phpimg doimg.php create image processing script that can be run by: php doimg.php if php. exe is in your PATH (read remarks in the script). sfk samp javahex +toclip copy example for java hexdump creation to the clipboard. sfk samp http tmp.bat create an example script for automated web/http access. sfk samp http -bash tmp.sh the same, but using bash in a Windows Cygwin environment. sfk samp c tmp.c create an instant c program with some helper functions for quick and easy writing of a small c project. compile by: gcc tmp.c or g++ tmp.c or cl tmp.c sfk samp cpp tmp.cpp same as the 'c' code example.
the samples produced are:

sfk samp sfk
sfk select testfiles .txt .hpp .cpp // find words supplied by user. // note that %1 is the same as $1. +find %1 %2 %3 $4 $5 $6 // process files containing hits +run -quiet "sfk echo \"Found hit in: [green]$file[def]\"" -yes // run the script by: // sfk script "thisfile" pattern1 [pattern2 ...]
sfk samp sfkbat
@echo off sfk script "%~f0" -from begin %* rem %~f0 is the absolute batch file name. GOTO xend sfk label begin -var // default batch, with some variable support. // for a full file backup example use: // sfk batch -full myfile.bat +if "%1 = " begin +tell "[green]usage:[def]" +tell " #(sys.ownscript.name) copy [-yes]" +stop -all +endif +setvar cmd="%1" +setvar yes="%2" +if "#(cmd) = copy" begin +call docopy +stop +endif +tell "unknown command: #(cmd)" +end sfk label docopy +copy -checkdirs mydir mydir2 -dir core doc db -subdir !\tmp !\save -file !.tmp #(yes) +end :xend
sfk samp sfkbash
#!/bin/bash sfk script "$0" -from begin $@ exit function skip_block { sfk label begin -var -upat2 // default batch, with unified windows/linux syntax (-upat2). // for a full file backup example use: // sfk batch -full myfile.sh +if "%1 = " begin +tell "[green]usage:[def]" +tell " #(sys.ownscript.name) copy [-yes]" +stop -all +endif +setvar cmd="%1" +setvar yes="%2" +if "#(cmd) = copy" begin +call docopy +stop +endif +tell "unknown command: #(cmd)" +end sfk label docopy +copy -checkdirs mydir mydir2 -dir core doc db -subdir :\tmp :\save -file :.tmp #(yes) +end }
sfk samp http
@echo off sfk script "%~f0" -from begin %* rem "%~f0" is the absolute batch file name. GOTO xend sfk label begin -var // the -var above enables variables everywhere. +setvar "baseurl=http://stahlworks.com/webdemo" +web "#(baseurl)/contents.xml" +xex "_<category>**<id>*</ id>**<name>*< _[part4] [part8]\n_" +perline "call listCategory #text" -yes +end sfk label listCategory +echo "[green]=== List of %2: ===[def]" +echo -spat "[yellow]Name Price[def]" +then web "#(baseurl)/product_list_%1.xml" // +xmlform +stop -all +xex "=<row>**<nam e>*<**<price>*< =[part4]\t[part8] \x24\n=" +filter -upat -stabform "#(-12col1) #col2" +end rem a longer example with input, output and detail rem explanations is available in the SFK Book. :xend
sfk samp java
import java.io.*; public class fileio { static void log(String s) { System.out.println("main: "+s); } public static void main(String args[]) throws Throwable { if (args.length < 2) { log("supply in- and output filename."); return; } // copy or convert text file BufferedReader rin = new BufferedReader( new InputStreamReader( new FileInputStream(args[0]), "ISO-8859-1" // or US-ASCII,UTF-8, UTF-16BE,UTF-16LE,UTF-16 )); PrintWriter pout = new PrintWriter( new OutputStreamWriter( new FileOutputStream(args[1]), "ISO-8859-1" )); while (true) { String sline = rin.readLine(); if (sline == null) break; // EOD log("copying line: "+sline); pout.println(sline); } pout.close(); rin.close(); } };
sfk samp cpp
// simple c source template 1.0 for instant coding, free for any use. // beware that the simplified semantics may not fit into larger projects. #ifdef _WIN32 #include <windows.h> #endif #include <stdio.h> #include <string.h> #include <stdarg.h> #include <stdlib.h> #include <ctype.h> #include <stdint.h> #include <sys/stat.h> #ifndef _WIN32 #include <unistd.h> #include <sys/time.h> #endif // sfk quick types typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef const char cchar; #ifndef __cplusplus typedef unsigned char bool; #endif #ifdef _WIN32 typedef __int64 num; typedef unsigned __int64 unum; #else typedef long long num; typedef unsigned long long unum; #endif // print error message with variable parameters. int perr(const char *pszFormat, ...) { va_list argList; va_start(argList, pszFormat); char szBuf[1024]; vsprintf(szBuf, pszFormat, argList); fprintf(stderr, "error: %s", szBuf); return 0; } int merr(const char *pszWhere) { fprintf(stderr, "out of memory at %s", pszWhere); return 0; } char *myvtext(const char *pszFormat, ...) { static char szBuf[4096]; va_list argList; va_start(argList, pszFormat); vsnprintf(szBuf, sizeof(szBuf)-10, pszFormat, argList); szBuf[sizeof(szBuf)-10] = '\0'; return szBuf; } char *numtoa(num n) { static char szBuf[100]; #ifdef _WIN32 sprintf(szBuf, "%I64d", n); #else sprintf(szBuf, "%lld", n); #endif return szBuf; } num atonum(char *psz) { #ifdef _WIN32 return _atoi64(psz); #else return atoll(psz); #endif } num currentTime() { #ifdef _WIN32 return (num)GetTickCount(); #else struct timeval tv; gettimeofday(&tv, NULL); return ((num)tv.tv_sec) * 1000 + ((num)tv.tv_usec) / 1000; #endif } void doSleep(int nmsec) { #ifdef _WIN32 Sleep(nmsec); #else // sleep(1); // const timespec ts = { nmsec / 1000, nmsec % 1000 * 1000000 }; // nanosleep(&ts, NULL); usleep(nmsec*1000); #endif } int mystricmp(char *psz1, cchar *psz2) { while (*psz1 && *psz2 && tolower(*psz1) == tolower(*psz2)) { psz1++; psz2++; } return tolower(*psz1) - tolower(*psz2); } int mystrnicmp(char *psz1, cchar *psz2, int nLen) { int i=0; for (i=0; i<nLen && psz1[i] && psz2[i]; i++) if (tolower(psz1[i]) != tolower(psz2[i])) return tolower(psz1[i]) - tolower(psz2[i]); if (i >= nLen) return 0; return tolower(psz1[i]) - tolower(psz2[i]); } bool strBegins(char *pszStr, cchar *pszPat) { return strncmp(pszStr, pszPat, strlen(pszPat)) ? 0 : 1; } bool striBegins(char *pszStr, cchar *pszPat) { return mystrnicmp(pszStr, pszPat, strlen(pszPat)) ? 0 : 1; } bool strEnds(char *pszStr, cchar *pszPat) { int nhay = strlen(pszStr); int npat = strlen(pszPat); if (nhay < npat) return 0; return strcmp(pszStr+nhay-npat, pszPat) ? 0 : 1; } bool striEnds(char *pszStr, cchar *pszPat) { int nhay = strlen(pszStr); int npat = strlen(pszPat); if (nhay < npat) return 0; return mystricmp(pszStr+nhay-npat, pszPat) ? 0 : 1; } char *mystrstri(char *phay, cchar *ppat) { int i=0,j=0,ncmp=0,ndiff=0; int llen = (int)strlen(phay); int slen = (int)strlen(ppat); ncmp = (llen-slen)+1; if (ncmp < 0) return 0; for (j=0; j<ncmp; ++j) { ndiff = 0; for (i=0; (i<slen) && !ndiff; ++i) ndiff = tolower(phay[j+i]) - tolower(ppat[i]); if (!ndiff) return (char *)phay+j; } return 0; } uchar *memFind(uchar *pNeedle, num nNeedleSize, uchar *pHayStack, num nHaySize) { uchar *pCur = pHayStack; uchar *pMax = pHayStack + nHaySize - nNeedleSize; // inclusive uchar c1 = *pNeedle; while (pCur <= pMax) { uchar *p1 = pCur; p1 = (uchar*)memchr(p1, c1, pMax - p1 + 1); // +1: pMax is inclusive if (!p1 || (p1 > pMax)) return 0; if ((p1 <= pMax) && !memcmp(p1, pNeedle, nNeedleSize)) return p1; // hit pCur = p1+1; } return 0; } // may fail with file sizes > 2 gb in 32 bit builds num getFileSize(char *pszName) { struct stat buf; if (stat(pszName, &buf)) return -1; return buf.st_size; } // loads text and binary char *loadFile(char *pszFile) { num nFileSize=0, nTolerance=10; char *pOut; FILE *fin; if ((nFileSize = getFileSize(pszFile)) < 0) { perr("file not found: %s", pszFile); return 0; } if (!(pOut = (char*)malloc(nFileSize+nTolerance+4))) { perr("out of memory: %s\n", pszFile); return 0; } memset(pOut+nFileSize, 0, nTolerance); // added safety if (!(fin = fopen(pszFile, "rb"))) { perr("cannot read: %s\n", pszFile); free(pOut); return 0; } int nRead = fread(pOut, 1, nFileSize, fin); fclose(fin); if (nRead != nFileSize) { perr("cannot read: %s (%d %d)\n", pszFile, nRead, nFileSize); free(pOut); return 0; } // loadFile guarantees zero termination after buffer: pOut[nFileSize] = '\0'; return pOut; } int saveFile(char *pszName, uchar *pData, int iSize, const char *pszMode) { FILE *fout; if (!(fout = fopen(pszName, pszMode))) return 9+perr("cannot write: %s\n", pszName); if (fwrite(pData, 1, iSize, fout) != iSize) { fclose(fout); return 10+perr("cannot fully write (disk full?): %s\n", pszName); } fclose(fout); return 0; } int existsFile(char *pszName, bool bOrDir) { struct stat buf; if (stat(pszName, &buf)) return 0; if (!bOrDir && (buf.st_mode & 0040000)) // _S_IFDIR return 0; // is a dir, not a file return 1; } char *dataAsHex(void *pAnyData, int iDataSize) { static char szBuf[300]; uchar *pSrcCur = (uchar *)pAnyData; uchar *pSrcMax = pSrcCur + iDataSize; char *pszDstCur = szBuf; char *pszDstMax = szBuf+sizeof(szBuf)- 30; while (pSrcCur < pSrcMax && pszDstCur < pszDstMax) { uchar uc = *pSrcCur++; sprintf(pszDstCur, "%02X", uc); pszDstCur += 2; } *pszDstCur = '\0'; return szBuf; } char *dataAsTrace(void *pAnyData, int iDataSize) { static char szBuf[300]; if (iDataSize == -1) iDataSize = strlen((char*)pAnyData); uchar *pSrcCur = (uchar *)pAnyData; uchar *pSrcMax = pSrcCur + iDataSize; char *pszDstCur = szBuf; char *pszDstMax = szBuf+sizeof(szBuf)-30 ; while (pSrcCur < pSrcMax && pszDstCur < pszDstMax) { uchar uc = *pSrcCur++; if (isprint((char)uc)) { *pszDstCur++ = (char)uc; continue; } sprintf(pszDstCur, "{%02X}", uc); pszDstCur += 4; } *pszDstCur = '\0'; return szBuf; } // copy text lines from one file into another. int main(int argc, char *argv[]) { char *pszInFile=0,*pszOutFile=0; int iarg = 1; for (;iarg<argc;iarg++) { char *parg = argv[iarg]; if (!strcmp(parg,"-?") || !strcmp(parg,"-h") || !strcmp(parg,"-help")) { printf("usage: %s infile outfile\ n", argv[0]); return 0; } if (!pszInFile) { pszInFile = parg; continue; } if (!pszOutFile) { pszOutFile = parg; continue; } return 9+perr("unexpected: %s\n", parg); } if (!pszOutFile) return 9+perr("specify input and output filename.\n"); FILE *fin = fopen(pszInFile , "rb"); if (!fin ) return 9+perr("cannot read %s\n" , pszInFile); FILE *fout = fopen(pszOutFile, "wb"); if (!fout) return 9+perr("cannot write %s\n", pszOutFile); char szBuf[1024]; memset(szBuf, 0, sizeof(szBuf)); while (fgets(szBuf, sizeof(szBuf)-10, fin)) { char *psz = strchr(szBuf, '\r'); if (psz) *psz = '\0'; // strip cr psz = strchr(szBuf, '\n'); if (psz) *psz = '\0'; // strip lf printf("line: \"%s\"\n", szBuf); strcat(szBuf, "\n"); int nlen = strlen(szBuf); if (fwrite(szBuf, 1, nlen, fout) != nlen) return 9+perr("failed to fully write %s\n", pszOutFile); } fclose(fout); fclose(fin); return 0; }
sfk samp cmd
@rem windows command shell batch example @echo off IF "%1"=="" GOTO xerr01 echo "parameter is %1" GOTO xdone :xerr01 echo "please supply a parameter." echo "example: mybat parm123" GOTO xdone :xdone
sfk samp bash
#!/bin/bash function pmsg { # uses a local variable mystr local mystr="info: $1" echo $mystr } myparm1="$1 and $2" # no blanks around "=" if [ "$2" = "" ]; then # requires all blanks pmsg "please supply two parameters." else pmsg "you supplied \ "$myparm1\"." # < -lt > -gt <= -le >= -ge == -eq != -ne i=1 while [ $i -le 5 ]; do # not "$i < 5" echo counting: $i # quotes are optional let i+=1 # not "i += 1" or "$i+=1" done fi

you are viewing this page in mobile portrait mode with a limited layout. turn your device right, use a desktop browser or buy the sfk e-book for improved reading.

 
sfk is a free open-source tool, running instantly without installation efforts. no DLL's, no registry changes - just get sfk.exe from the zip package and use it (binaries for windows, linux and mac are included).

 

the Endless Image 🍣 Sushi