home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / SREFPRC1 / AUTODESC.SRF < prev    next >
Text File  |  1997-01-01  |  5KB  |  190 lines

  1. /* Construct a description of a file.
  2.   Requires the unzipapi.dll 
  3.   Note that a maximum of about 1000 characters (or 15 lines)
  4.   is returned in a string:
  5.  
  6.  header_string=sref_auto_describe(filename.ext,candozip)
  7.  
  8. Candozip is optional: if 1, then UNZIPAPI.DLL is available
  9. If 0, it's not (so .ZIP files will NOT be auto-described).
  10. If missing, SREF_AUTO_DESCRIBE will look for it).
  11.  
  12. Note: if a badly formatted html file is investigated (no
  13. <HEAD>, or no <TITLE>, then it will be treated as a plain
  14. text file.
  15.  
  16. ----------- */
  17. SREF_AUTO_DESCRIBE:
  18. /* construct a description from html, text, or .zip files */
  19. auto_describe:
  20. crlf='0d0a'x
  21. parse arg thefile,candozip
  22.  
  23. if candozip="" then do  /* check for unzipapi.dll */
  24.   foo=rxfuncquery('UZLoadFuncs')
  25.   if foo=1 then do
  26.      call RxFuncAdd 'UZLoadFuncs', 'UNZIPAPI', 'UZLoadFuncs'
  27.      call UZLoadFuncs
  28.   end
  29.   foo=rxfuncquery('UZLoadFuncs')
  30.   candozip=1
  31.   if foo=1 then candozip=0
  32. end
  33.  
  34.  
  35. thefile=strip(thefile)
  36.  
  37. /* is it a .zip file? */
  38. if right(upper(thefile),4)='.ZIP'   then do
  39.    if candozip=0 then return ' '  /* no dll -- give up */
  40.  
  41.     zipcmts.0=0     /* try using a file_id.diz file */
  42.    rc=uzfiletree(thefile,getem)
  43.    do km=1 to getem.0
  44.       if upper(getem.km)='FILE_ID.DIZ' then do
  45.          rc=uzunziptovar(thefile,getem.km,zipcmts)
  46.          if rc<>0 then zipcmts.0=0
  47.          leave
  48.       end
  49.    end
  50.    if zipcmts.0>0 then do   /* use first 15 lines of file_id.diz */
  51.       oof=zipcmts.1
  52.       do te=2 to min(15,zipcmts.0)
  53.          oof=oof||' '||zipcmts.te
  54.       end /* do */
  55.       return oof
  56.    end
  57.  
  58.   zipcmts.0=0              /* no .diz, then get -z comments */
  59.    rc=uzunzip(' -z '||thefile,'zipcmts.')
  60.    if rc<>0 then zipcmts.0=0
  61.    if zipcmts.0>1 then do   /* use -z comments if available, skip generic line */
  62.       oof=zipcmts.2
  63.       do te=3 to zipcmts.0
  64.          oof=oof||' '||zipcmts.te
  65.       end /* do */
  66.       return oof
  67.    end
  68.  
  69.  
  70.  
  71.    return ' '           /* no -z, and no file_id.diz */
  72. end  /* .ZIP file */
  73.  
  74. atype=upper(sref_mediatype(thefile))
  75. if atype='TEXT/PLAIN' then do  /*grab first 15 lines */
  76.     oof=""
  77.     if lines(thefile)=1 then 
  78.           oof=linein(tempfile)
  79.     do mm=1 to 14   /* read first 15 lines */
  80.         if lines(thefile)=0 then leave
  81.         tt=linein(thefile)
  82.         oof=oof||' '||tt
  83.     end
  84.     foo=stream(thefile,'c','close')
  85.     return oof
  86. end  /* Do */
  87.  
  88. if atype='TEXT/HTML' then do  /* parse html, look for title or description */
  89.    oof=get_html_descript(thefile)
  90.    if oof="" then do  /* must be badly formatted, treat as text file */
  91.     oof=""
  92.     aa=stream(thefile,'c','close')
  93.     if lines(thefile)=1 then 
  94.           oof=linein(tempfile)
  95.     do mm=1 to 14   /* read first 15 lines */
  96.         if lines(thefile)=0 then leave
  97.         tt=linein(thefile)
  98.         oof=oof||' '||tt
  99.     end
  100.     foo=stream(thefile,'c','close')
  101.    end
  102.    return oof
  103. end
  104.  
  105. return ' '   /* other type, give up */
  106.  
  107.  
  108. /**************************************/
  109. /* Extract description from text/html file */
  110. get_html_descript:procedure
  111. parse arg filename
  112.  
  113. crlf='0d0a'x
  114. alen=min(chars(filename),2000)
  115. stuff=charin(filename,1,alen)
  116.  
  117. stuff=space(translate(stuff,' ','00090a0d1a1b'x))
  118.  
  119. wow=look_header(filename)
  120. astring=""
  121. if url_title<>' ' then
  122.    astring=strip(strip(url_title),'t','.')||'.  '
  123. if url_content<>' ' then
  124.    astring=astring||url_content
  125. return astring
  126.  
  127.  
  128.  
  129.  
  130. /* ----------------------------------------------------------------------- */
  131. /* Look for "desc" field in header     */
  132. /* ----------------------------------------------------------------------- */
  133.  
  134. look_header: procedure expose stuff url_title url_content
  135. parse arg afile
  136.  
  137. url_title=""
  138. url_content=""
  139. dowrite=0
  140.  
  141. do until stuff=""
  142.  
  143.     parse var stuff  p1 '<' tag '>' stuff
  144.     if  translate(word(tag,1))="HEAD" then do   /* now in head !*/
  145.             dowrite=1
  146.             iterate
  147.     end
  148.     if dowrite=0 then iterate    /* wait till we get into head .. */
  149.  
  150.     if  translate(word(tag,1))="/HEAD" then  /* out of head, all done ! */
  151.         leave
  152.  
  153. /* IT IS A TITLE TAG?  */
  154.      if translate(word(tag,1))="TITLE" then do
  155.         parse var stuff url_title '<' footag '>' stuff
  156.         if url_content<>' ' then return 0
  157.      end
  158.  
  159. /* is it a  META HTTP-EQUIV or a META NAME ? */
  160.     if translate(word(tag,1))="META" then do
  161.         parse var tag ameta atype '=' rest
  162.         tatype=translate(atype)
  163.         if tatype="HTTP-EQUIV" | tatype="NAME" then do
  164.            parse var rest aval1 rest
  165.            REST=STRIP(REST)
  166.  
  167.            aval1=strip(aval1) ;
  168.            aval1=strip(aval1,,'"')
  169.            if abbrev(translate(aval1),'DESC')<>1 then iterate
  170.  
  171.            aval2=" "
  172.            foo1=ABBREV(translate(rest),'CONTENT')
  173.            if foo1>0 then do
  174.                 PARSE VAR REST FOO '=' AVAL2
  175.                 aval2=strip(aval2)
  176.                 aval2=strip(aval2,'b','"')
  177.                 url_content=LEFT(AVAL2,1000)
  178.                 if url_title<>' ' then return 0
  179.                 iterate
  180.            end
  181.         end             /* name or http-equiv */
  182.     end         /* meta */
  183. end             /* stuff */
  184.  
  185.  
  186. return 0
  187.  
  188.  
  189.  
  190.