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

  1. /*  See if there is a match to a public_url *** */
  2. sref_public_urls:
  3. parse arg sel,host_nickname,enmadd,ddir,home_dir,verbose,specific_mime,check_rec
  4.  
  5.  tsel=strip(translate(sel))
  6.   if length(tsel)>1 then
  7.        if abbrev(tsel,'/')=1 | abbrev(tsel,'\')=1 then tsel=substr(tsel,2)
  8.  
  9.   gotit=0 ; doexact=0 ;asterat=0 ; afteraster=0
  10.   call get_public_urls(host_nickname)
  11.  
  12. /* look for matching public_Urls -- check for exact or best match */
  13.   do m=1 to public_urls.0
  14.     if public_urls.m=' ' then iterate  
  15.     parse var public_urls.m  purl  isliteral aname0
  16.     purl=strip(purl) 
  17.     ares=sref_wildcard(tsel,purl||' '||aname0,doexact)
  18.     parse var ares astat "," aurl ;  astat=strip(astat)
  19.  
  20.     if astat=0 then iterate   /* no match */
  21.  
  22.     if astat=1 then  do
  23.          gotit=m
  24.          usesel=sel ;
  25.          useliteral=strip(upper(isliteral))
  26.          exact_name=' ' ; ispurl=purl
  27.          exact_name=strip(aname0)
  28.          leave           /*first exact match rules */
  29.     end
  30.  
  31. /* astat=2;; non exact: see if it's a "better match" (more chars before/after *) */
  32.     foo1=pos('*',purl)
  33.     if foo1 >= asterat then do
  34.        tmp1=length(purl)-foo1
  35.        if foo1>asterat | tmp1>afteraster then  do
  36.           asterat=foo1 ; afteraster=tmp1
  37.           usesel=sel ;
  38.           useliteral=strip(upper(isliteral));
  39.           exact_name=' ' ; ispurl=purl
  40.           exact_name=strip(aname0)
  41.           gotit=m
  42.        end              /* either condition */
  43.     end                 /* ge asterat */
  44.  
  45.   end                   /* do public urls */
  46.  
  47.  
  48. /* special case: check for NORECORD option on the public url */
  49.   if check_rec=1 then do
  50.      if gotit=0 then return 0
  51.      isnorec=pos('NORECORD',useliteral)+pos('NOPOST',useliteral)
  52.      if isnorec=0 then return 0
  53.      return 1
  54.   end
  55.  
  56.   if gotit=0 then return ' 0 , no match '
  57.  
  58. /* got a match, process it */
  59.  
  60. /* if it's a literal public file, minimal processing is required */
  61.   islit=pos('LITERAL',useliteral)
  62.   isnorec=pos('NORECORD',useliteral)+pos('NOPOST',useliteral)
  63.   if isnorec>0 then isnorec=1
  64.  
  65.   if islit>0 then do
  66.        if verbose>1 then call pmprintf_sref(" Literal public_url: " usesel)
  67.        if exact_name<>"" then do
  68.            if pos('*',exact_name)=0 then
  69.                afile=exact_name
  70.            else do
  71.               afile=sref_wildcard(tsel,ispurl||' '||exact_name,0)
  72.               parse var afile . ',' afile; afile=strip(afile)
  73.          end
  74.        end
  75.        else do                  /* see if in data direcotyr */
  76.            parse var usesel asel '?' .
  77.            afile=ddir||asel
  78.            if pos('~',afile)>0 then do
  79.               afile=sref_home_dir(afile,home_dir)
  80.            end
  81.            afile=translate(afile,'\','/')
  82.        end
  83.        ii=stream(afile,'c','query exists')      /* check for existence of file*/
  84.        if ii="" then do
  85.           call pmprintf_sref(' Warning: literal public_url to a non-existent file: ' sel ',' afile)
  86.        end
  87.        else do          /* ship the file (and maybe record it */
  88.           if specific_mime<>0 & specific_mime<>' ' then do
  89.               aa=translate(specific_mime,' ','_')
  90.               m1=strip(word(aa,1)); m2=strip(word(aa,2))
  91.               atype=m1||'/'||m2
  92.           end
  93.           else do
  94.               atype=sref_mediatype(afile)
  95.           end
  96.           'FILE TYPE ' atype ' NAME ' afile
  97.           return ' 1 1 ' isnorec ', Literal public file returned:' ||afile  /* else, do post filtering */
  98.         end             /* no such file */
  99.    end        /* literal */
  100.  
  101. /* if here, non-literal public_url, or literal public_url that failed to 
  102.    connect to a file (but which might match if aliases are checked for */
  103.              
  104.    if verbose>1 then call pmprintf_sref(" public_url. " gotit " being used for: " sel)
  105.    return  ' 1 0 ' isnorec ' ,  non-literal match '
  106.  
  107.  
  108. /* ------------ */
  109. /*  get public urls for this host
  110.     If host, then get host specific ones
  111.      else, get non-host specific ones
  112.  Note that "first" best match always rules, or first exact.
  113. */
  114. /*----------------*/
  115. get_public_urls:procedure expose public_urls. enmadd 
  116. parse arg hname
  117. os2e='os2environment'
  118.  
  119. nin=0 
  120. a1='public_urls.'
  121. addit=''
  122. if hname<>' ' then addit='.'||strip(hname)
  123. do mm=1 to 1000000
  124.       tt=0
  125.       moe=enmadd||a1||mm||addit ; moe=strip(moe)
  126.       tt=strip(value(moe,,os2e))
  127.       if tt="" | tt=0 then leave
  128.       nin=nin+1
  129.       public_urls.nin=tt
  130. end
  131. public_Urls.0=nin
  132. return nin
  133.  
  134.  
  135.  
  136.