1#ifndef __CGI_CHH__ 2#define __CGI_CHH__ 3#include files.chh 4\ 5%define(translateCRLF,str, 6 %sgsub([%schr(13)][%schr(10)],%str,%'\n') 7)\ 8\ 9%define(cgiGetParameters, 10%locals(result,lst,contype,conparm,line,regs,value,name,qstring, 11 %<result=%hash()>\ 12 %if(%hcontains(%env,CONTENT_TYPE), 13 %<lst=%ssplit(%'[ \n\t]*;[ \n\t]*',%env{CONTENT_TYPE})>\ 14 %<contype=%lst[0]>\ 15 %ldelete(%&lst,0)\ 16 %<conparm=%hash()>\ 17 %foreach(str,%lst, 18 %<lst=%ssplit(=,%str)>\ 19 %if(%[%llength(%lst)==2], 20 %<conparm{%lst[0]}=%lst[1]> 21 ) 22 ) 23 , 24 %<contype=application/x-www-form-urlencoded> 25 )\ 26 %case(%contype, 27 %list(application/x-www-form-urlencoded), 28 %if(%[%slength(%env{QUERY_STRING}) > 0], 29 %<qstring=%env{QUERY_STRING}> 30 , 31 %<qstring=%frest(%stdin)> 32 )\ 33 %foreach(str,%ssplit(&,%qstring), 34 %<lst=%ssplit(=,%str)>\ 35 %if(%[%llength(%lst)==2], 36 %<result{%lst[0]}=%w3urldecode(%lst[1])> 37 ) 38 ), 39 %list(multipart/form-data), 40 %<regs=%list()>\ 41 %<line=%translateCRLF(%fgets(%stdin))>\ 42 %while(%and(%not(%feof(%stdin)),%equal(%line,--%conparm{boundary}%'\n')), 43 %<line=%translateCRLF(%fgets(%stdin))>\ 44 %if(%[%smatch(%'^Content-Disposition: form-data; name=\"([^\"]+)\"(; filename=\"([^\"]+)\")?',%line,%®s) != -1], 45 %<name=%regs[1]>\ 46 %if(%slength(%regs[2]), 47 %<value=%hash(filename,%regs[3])>\ 48 %<line=%translateCRLF(%fgets(%stdin))>\ 49 %if(%not(%smatch(%'^Content-Type: (.+)',%line,%®s)), 50 %<value{type}=%regs[1]>\ 51 %<line=%fgets(%stdin)> 52 )\ 53 %<line=%translateCRLF(%fgets(%stdin))>\ 54 %<value{content}=%while(%smatch(^--%conparm{boundary},%line),%line%<line=%translateCRLF(%fgets(%stdin))>)>\ 55 %<value{content}=%ssub(%value{content},0,%[%slength(%value{content})-1])> 56 , 57 %<line=%fgets(%stdin)>\ 58 %<line=%translateCRLF(%fgets(%stdin))>\ 59 %<value=%while(%smatch(^--%conparm{boundary},%line),%line%<line=%translateCRLF(%fgets(%stdin))>)>\ 60 %<value=%ssub(%value,0,%[%slength(%value)-1])> 61 )\ 62 %<result{%name}=%&value> 63 ) 64 ) 65 )\ 66 %&result 67))\ 68#endif 69