\ Forth Internet Scripter

S" INCLUDE\FACIL.F" INCLUDED

WINAPI: GetEnvironmentVariableA KERNEL32.DLL
( LPCTSTR  lpName,  // address of environment variable name 
  LPTSTR  lpBuffer, // address of buffer for variable value 
  DWORD  nSize 	    // size of buffer, in characters 
)
: HTML
  ." Content-Type: text/html" 10 EMIT CR
  ." <html><body>" CR
;
: HTML
  ." <p><font SIZE=-2><a href=" [CHAR] " EMIT
  ." mailto:andrey@cherezov.koenig.su" [CHAR] " EMIT
  ." > Forth Internet Scripter 1.1</a></font></p>" CR
  ." </body></html>" CR
;
: 
  ." <p>"
;
: 
   ." : "
  ." fis.exe?script='__'&[_=_&] "
  ."        'action='  'form'  HTML: "
  ."          fis.exe"
  ."    . Fis.exe    "
  ."     ,     "
  ." -   ,     . "
  ." -         . "
;
: 
  1000 HERE S" QUERY_STRING" DROP GetEnvironmentVariableA
  ?DUP IF
         DUP #TIB ! ALLOCATE THROW TO TIB >IN 0!
         HERE TIB #TIB @ MOVE TRUE
       ELSE FALSE THEN
;
: S, ( addr u -- )
  HERE SWAP DUP ALLOT MOVE
;
: +>BL ( addr u -- )
  0 ?DO DUP C@ [CHAR] + = IF BL OVER C! THEN 1+ LOOP DROP
;
: % ( addr u -- addr2 u2 )
  2DUP +>BL HEX
  TIB >R #TIB @ >R >IN @ >R
  #TIB ! TO TIB >IN 0!
  HERE

  BEGIN
    [CHAR] % PARSE DUP 0= IF 2DROP [CHAR] % PARSE THEN
    2 OVER - 0 MIN DUP >IN +! +
    DUP
  WHILE
    OVER 1- C@ [CHAR] % =
    IF 0 0 2SWAP >NUMBER 2SWAP D>S C, THEN
    S,
  REPEAT 2DROP

  HERE OVER - OVER DP !
  R> >IN ! R> #TIB ! R> TO TIB
  DECIMAL
  DUP >R
  DUP ALLOCATE THROW DUP >R SWAP MOVE
  R> R>
;
: 
  BEGIN
    [CHAR] ? SKIP
    [CHAR] = PARSE
    FORTH-WORDLIST SEARCH-WORDLIST
  WHILE
    [CHAR] & PARSE % ROT EXECUTE
  REPEAT
;
: 
  ['] NOOP TO <PRE>
  HTML
  
  IF  ELSE  THEN
  HTML
  BYE
;
: script
  2DUP + 0! INCLUDED
;
\ FALSE TO ?CONSOLE
 '  TO <MAIN> S" fis.exe" SAVE BYE