home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / public / cgi-bin / mkgiftxt.cmd < prev    next >
Encoding:
Text File  |  1998-12-12  |  7.7 KB  |  266 lines

  1. /*  08 Jan 1998:
  2.  
  3.  A front end to the GIF_TEXT addon -- this will take a request generated
  4. by MKGIFTXT.HTM, and return a link to GIF_TEXT. 
  5.  
  6. Note that this will work either as a cgi-bin script (for a generic, os/2
  7. cgi-bin-compatabile server,or as an addon for SRE-http (note that
  8. SRE-http is the new name as of 11/97 for SRE-Filter). It will
  9. detect how it's being called, and respond accordingly.
  10.  
  11. Note that when used as cgi-bin, many servers have "request options"
  12. limit of 256 characters (that is, it will only recognize the first 256
  13. characters after the ?).  Since MKGIFTXT uses an IMG= link to display results,
  14. which is always interpreted as a GET request, this limitation is likely to
  15. arise when you've selected a lot of options in mkgiftxt.htm.  This is a problem,
  16. but there is no obvious work-around other then NOT specifying unneeded 
  17. options (which means mkgiftxt.htm should be edited, with unnecessary
  18. options removed).
  19.  
  20. There is 1 user changable parameter: the "style" directory. This is used
  21. to store and retrieve "styles", which allow one to use prior message 
  22. specifications (with a new message).
  23.  
  24. */
  25.  
  26. /*  ---------------- Begin User Changable Parameters ------------*/
  27.  
  28. /* "Styles" directory. Should be a fully qualified directory (typically, you
  29.     should use the GIF_DIR_ROOT directory you specified in GIF_TEXT.CMD
  30.     Set to '' if you don't want to support these styles */
  31. STYLES_DIR='\os2httpd\alphabyt'
  32.  
  33.  
  34. /*  ---------------- End User Changable Parameters ------------*/
  35.  
  36.  
  37. parse arg  ddir, tempfile, reqstrg,list,verb ,uri,user, ,
  38.           basedir ,workdir,privset,enmadd,transaction,verbose, ,
  39.          servername,host_nickname,homedir
  40.  
  41. signal on syntax name err1
  42. signal on error name err1
  43.  
  44. styles_dir=strip(styles_dir,'t','\')
  45.  
  46. /* check for CGI-BIN call */
  47. is_cgi=0
  48. if verb="" then do    /* is it cgi-bin? */
  49.    verb = value("REQUEST_METHOD",,'os2environment')
  50.    if verb="" then do
  51.         say " Sorry, this is a web server utility. "
  52.         exit
  53.    end /* do */
  54.    is_cgi=1
  55.    if verb="GET" then do
  56.      list=value("QUERY_STRING",,'os2environment') 
  57.    end
  58.    else  do
  59.      len=value('CONTENT_LENGTH',,'os2environment')
  60.      list=charin(,,len)
  61.    end
  62. end
  63. else do
  64.    if verb='GET' then parse var uri . '?' list
  65. end
  66.  
  67. /* look for "style" option, and use/save the appropriate "style" (if available) */
  68. l0=list
  69. lnew=''
  70. newtext=''; styfile='' ;is_style=0
  71. do until l0=''
  72.     parse var l0 a1 '&' l0
  73.     parse var a1 a1a '=' a1b ; a1a=translate(a1a)
  74.     select
  75.     when a1a="MESSAGE" | a1a="TEXT" then do
  76.          newtext=a1b
  77.     end
  78.     when a1a='STYLE' then do
  79.         if styles_dir='' | styles_dir=0 then iterate /* suppress styles */
  80.         if a1b<>'' & a1b<>0 then do
  81.           styfile=a1b
  82.           if pos('.',a1b)=0 & a1b<>'' & a1b<>0 then styfile=styfile'.STY'
  83.           styfile=strip(translate(styfile,'\','/'),'l','\')
  84.           is_style=1
  85.         end
  86.     end /* do */
  87.     when a1a='SAVE_STYLE' | a1a='STYLE_SAVE' then do  /* otherwise, interpret as "use style" */
  88.         if styles_dir='' | styles_dir=0 then iterate /* suppress styles */
  89.         if a1b=1 then is_style=2
  90.     end /* do */
  91.     otherwise do
  92.        if lnew='' then 
  93.           lnew=a1
  94.        else
  95.           lnew=lnew||'&'||a1
  96.     end
  97.     end
  98. end /* do */
  99.  
  100. /* Read results from style file? */
  101. if is_style>0 then do
  102.    if styfile='' | styfile=0 then styfile='DEFAULT.STY'
  103.    oof=styles_dir'\'styfile
  104.  
  105.  
  106.    if is_style=2 then do                /* save list, minus text, in a style file */
  107.      foo=stream(oof,'c','open write')
  108.      if abbrev(translate(foo),'READY')=1 then do  /* writeable ... */
  109.         l2=charout(oof,lnew,1) 
  110.         foo=stream(oof,'c','close')
  111.      end
  112.      else do
  113.         styfile='Unable to write to 'styfile
  114.      end /* do */
  115.    end /* do */
  116.    else do                      /* read from style file */
  117.      goo=stream(oof,'c','query exists')
  118.      if goo<>'' then do
  119.        foo=stream(oof,'c','open read')
  120.        l2=charin(oof,1,chars(oof)) 
  121.        foo=stream(oof,'c','close')
  122.        list='TEXT='||newtext||'&'l2
  123.      end
  124.      else
  125.        styfile='Unable to read from ' styfile
  126.    end
  127. end /* do */
  128.  
  129. list=list||'&MESSAGE.GIF'
  130. crlf='0d0a'x
  131.  
  132. errm1=""
  133. uj=length(list)
  134. if is_cgi=0 then do
  135.    img0='<IMG src="/GIF_TEXT.CMD?'||list||'">'
  136. end
  137. else do
  138.   if uj > 245 then do          /* long request; drop null = options */
  139.        olist=""
  140.        do until list=""
  141.              parse var list av '&' list
  142.              parse var av v1 '=' v2
  143.              if v2<>'' then olist=olist||av||'&'
  144.         end 
  145.         olist=strip(olist,'t','&')
  146.         errm1="<p><B>Caution:</b> A long request was shortened by removing empty-valued options. In some cases this will effect the final results.<p>"
  147.         list=olist
  148.   end /* do */
  149.   if length(list)>245 then do
  150.       errm1="<p><B>Warning:</b> This server may not be able to handle this long ("||length(list)" characters) CGI-BIN IMG request </b><p> "
  151.   end
  152.   img0='<IMG src="/cgi-bin/GIF_TEXT.CMD?'||list||'">'
  153. end             /* is cgi */
  154.  
  155. iv=translate(img0)
  156. parse var iv . 'SLIDE=' goon '&' .
  157. if goon<>'' then 
  158.    extramess='<b>Note...</b> images created with <em>color slides</eM> may take require a few minutes to be generated '
  159. else
  160.   extramess=""
  161.  
  162. img=img0
  163. fimg2="" ; tmp=""
  164.  do until img=""
  165.       parse var img a1 '&' img
  166.         if tmp="" then
  167.            tmp=a1
  168.         else
  169.           tmp=tmp'&'a1
  170.         if length(tmp)>80 then do
  171.             if img<>""  then tmp=tmp'&'
  172.             fimg2=fimg2'<br>'||fixit(tmp)
  173.             tmp=""
  174.         end
  175. end /* do */
  176. if tmp<>"" then fimg2=fimg2'<br>'||fixit(tmp)
  177. fimg=fimg2
  178.  
  179. retmess=' Return to <a href="mkgiftxt.htm">GIF_TEXT input form </a> <p>'
  180.  
  181. foo1='<HTML><head><TITLE>Generating A Graphical Message</title></head>'crlf
  182. foo1=foo1||'<body><h2>Generating a graphical message </h2> ' crlf||extramess||'<p>'
  183. foo1=foo1||' This image is generated from:<br><code>'||fimg||'<p>'crlf
  184. foo1=foo1||img0||'<p>'errm1'<hr>'||retmess
  185. if is_style=1 then do
  186.    foo1=foo1||'<hr> Note. <b>using</b> specifications stored in style file: 'styfile
  187. end /* do */
  188. else do
  189.    foo1=foo1||'<hr> Note. <b>storing</b> specifications in style file: 'styfile
  190. end /* do */
  191. foo1=foo1||'</body></html>'
  192.  
  193. if is_cgi=1 then do
  194.   Say "Content-type: text/html"
  195.   Say
  196.   call charout,foo1
  197.   return
  198. end
  199.  
  200. exp=value(enmadd||'FIX_EXPIRE',,'os2environment')
  201. foo=value('SREF_PREFIX',,'os2environment')
  202. if foo='' &  exp>0 then
  203.    a=sref_expire_response(0.1,length(foo1),'text/html')
  204.  
  205. 'var type text/html name foo1 '
  206.  
  207.  
  208. return 0
  209.  
  210. fixit:procedure
  211. parse arg adesc
  212.  
  213. adesc=a_replacestrg(adesc,'&','&','ALL')
  214. adesc=a_replacestrg(adesc,'<','<','ALL')
  215. adesc=a_replacestrg(adesc,'>','>','ALL')
  216. adesc=a_replacestrg(adesc,'"','"','ALL')
  217. return adesc
  218.  
  219.  
  220. a_replacestrg:
  221.  
  222. exactmatch=0
  223. backward=0 ; doall=0
  224.  
  225. parse arg astring ,  target   , putme , type , exactmatch
  226.  
  227. type = translate(type)
  228. if type="BACKWARD" then backward="YES"
  229. if type="ALL" then doall="YES"
  230.  
  231. iat=1
  232. joelen=length(target)
  233. joelen2=length(putme)
  234.  
  235. doagain:                /* here if doall=yes */
  236.  if exactmatch="YES" then do
  237.     if   backward="YES" then
  238.         joe= lastpos(target,astring)
  239.     else
  240.         joe= pos(target,astring,iat)
  241.  end
  242.  else do
  243.    if   backward="YES" then
  244.         joe= lastpos(translate(target),translate(astring))
  245.     else
  246.         joe= pos(translate(target),translate(astring),iat)
  247.  end
  248.  if joe=0 then
  249.          return astring
  250.  
  251.  astring=delstr(astring,joe,joelen)
  252.  if putme<>' ' then
  253.     astring=insert(putme,astring,joe-1)
  254.  
  255.  if doall="YES" then do
  256.      iat=joe+joelen2
  257.      signal doagain
  258.  end
  259. /* else, all done */
  260.  return astring
  261.  
  262.  
  263.  
  264. err1:
  265. say " error in mkgiftxt at " sigl '( ' rc
  266.