fileview.c-Dateireferenz

#include <ansi.h>
#include <player/base.h>
#include <wizlevels.h>
#include <shells.h>
#include <daemon/mand.h>
#include <udp.h>
#include <magier.h>
#include <thing/properties.h>
#include <player.h>
Include-Abhängigkeitsdiagramm für fileview.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define NEED_PROTOTYPES

Funktionen

mixed * _query_localcmds ()
private string _get_color (string color)
private void SetColorstrings ()
private string _ls_output_short (mixed filedata, int maxlen, int counter, int maxcount)
private int _ls_maxlen (mixed filedata, int flags, int maxlen)
private string _ls_output_long (mixed filedata, int flags, closure valid_read, closure valid_write, closure creator_file)
static int _ls (string cmdline)
private void _more_file (string *arg)
private mixed _size_filter (mixed *arg)
static int _more (string cmdline)
static int _cat (string cmdline)
static int _man (string cmdline)
static int _rman (string str)
static int _showprops (string str)
private int _grep_filter (string filename)
private int grep_file (mixed filedata, string rexpr, int flags)
static int _grep (string cmdline)

Variablen

static private mapping colorstrings
static private mapping oldman_result

Makro-Dokumentation

#define NEED_PROTOTYPES

Definiert in Zeile 18 der Datei fileview.c.


Dokumentation der Funktionen

static int _cat ( string  cmdline  )  [static]

Definiert in Zeile 361 der Datei fileview.c.

00362 {
00363   mixed *args;
00364   int flags;
00365   cmdline=_unparsed_args();
00366   args=parseargs(cmdline,&flags,"",1);
00367   if(flags==-1||!sizeof(args))
00368     return USAGE(query_verb()+" <dateiname> [<datei2>..]");
00369   args=file_list(args,MODE_CAT,0,"/");
00370   if (!sizeof(args))
00371     return printf("%s: %s: Keine passende Datei gefunden.\n",query_verb(),
00372                 cmdline),1;
00373   args=map(args,#'_size_filter)-({0});
00374   if (!sizeof(args)) return 1;
00375   while(sizeof(args))
00376   {
00377     switch(query_verb())
00378     {
00379       case "cat":
00380         if (!cat(args[0]))
00381           printf("cat: %s konnte nicht angezeigt werden.\n",args[0]);
00382         break;
00383       case "head":
00384         if (!cat(args[0],0,10))
00385           printf("head: %s konnte nicht angezeigt werden.\n",args[0]);
00386         break;
00387       case "tail": tail(args[0]); break;
00388     }
00389     args=args[1..];
00390   }
00391   return 1;
00392 }

private string _get_color ( string  color  ) 

Definiert in Zeile 58 der Datei fileview.c.

Benutzt COLORS.

Wird benutzt von SetColorstrings().

00059 {
00060   return COLORS[lower_case(color)];
00061 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static int _grep ( string  cmdline  )  [static]

Definiert in Zeile 681 der Datei fileview.c.

00682 {
00683   string rexpr,mask;
00684   mixed *args;
00685   int flags;
00686   cmdline=_unparsed_args();
00687   args=parseargs(cmdline,&flags,GREP_OPTS,0);
00688   if ((flags==-1)||!sizeof(args))
00689     return USAGE("grep [-" GREP_OPTS
00690           "] <regexp> <datei/verz> [<datei2> ... ] [<maske>]");
00691   rexpr=args[0];
00692   if (catch(regexp(({""}),rexpr))||!regexp(({""}),rexpr))
00693     return printf("grep: Ungueltiger Suchausdruck: %s\n",rexpr) ,1;
00694   args=args[1..];
00695   if (flags&GREP_M)
00696   {
00697     mask=args[<1];
00698     args=args[0..<2];
00699   }
00700   if (!sizeof(args))
00701       return USAGE("grep [-" GREP_OPTS
00702           "] <regexp> <datei/verz> [<datei2> ... ] [<maske>]");
00703   args=map(args,#'to_filename)-({0});
00704   /*
00705 #if __VERSION__ < "3.2.9"
00706   args=filter(args,#'_grep_filter);
00707 #else
00708   args=filter(args,(: return (valid_write($1,
00709             getuid(this_object()),"write_file",this_object())!=0):));
00710 #endif
00711   */
00712   args=file_list(args,MODE_GREP,(flags&GREP_R?1:0),"/",mask);
00713   if (!sizeof(args))
00714     return printf("Keine passenden Dateien gefunden.\n"),1;
00715   if (flags&GREP_I) rexpr=lower_case(rexpr);
00716   if (flags&GREP_F)
00717   {
00718     if (file_size("/players/"+getuid()+"/grep.out")==-2||
00719                   !MAY_WRITE("/players/"+getuid()+"/grep.out"))
00720       return printf("grep: Datei /players/%s/grep.out kann nicht "
00721                                       "geschrieben werden.\n",getuid()),1;
00722     else
00723       write_file("/players/"+getuid()+"/grep.out",
00724                  "Ausgabe von \"grep " + _unparsed_args() + "\":\n"); 
00725   }
00726   asynchron(args,#'grep_file,rexpr,flags,0);
00727   return 1;
00728 }

private int _grep_filter ( string  filename  ) 

Definiert in Zeile 572 der Datei fileview.c.

00573 {
00574   return (call_other("valid_write",filename,getuid(this_object()),
00575                       "write_file",this_object())!=0);
00576 }

static int _ls ( string  cmdline  )  [static]

Definiert in Zeile 220 der Datei fileview.c.

00221 {
00222   int flags,cmp,i,arg_size,size;
00223   int maxlen,counter,maxcount;
00224   string *args,output;
00225   mixed *tmp;
00226   closure output_fun,v_read,v_write,creator,sort_fun;
00227   
00228   cmdline=_unparsed_args()||"";
00229   args=parseargs(cmdline,&flags,LS_OPTS,1);
00230   if (flags==-1)
00231     return USAGE("ls [-" LS_OPTS "] [<Verzeichnis>] [<Verzeichnis2> ..]");
00232   SetColorstrings();
00233   output="";
00234   if (!sizeof(args)) args=({ QueryProp(P_CURRENTDIR) });
00235   if (!sizeof(args=file_list(args,MODE_LSA,0,"/")))
00236     return notify_fail("ls: Keine passenden Verzeichnisse gefunden.\n"), 0;
00237 // Files sortieren die erste
00238   if (flags&LS_T) cmp=FILEDATE;
00239   else if (flags&LS_S) cmp=FILESIZE;
00240   else cmp=BASENAME; // =0 :-)
00241   sort_fun=lambda(({ 'a,'b }),({
00242     ((!cmp&&!(flags&LS_R))||(cmp&&(flags&LS_R))?#'>:#'<),
00243     ({#'[,'a,cmp}),({#'[,'b,cmp})}));
00244   args=sort_array(args,sort_fun);
00245 // Ausgabeformat bestimmen
00246   if (flags&LS_L)
00247   {
00248     v_read=VALID_READ_CL;
00249     v_write=VALID_WRITE_CL;
00250     creator=CREATOR_CL;
00251   }
00252   arg_size=sizeof(args);
00253   if (arg_size>1||(arg_size&&args[0][FILESIZE]>=0))
00254   {
00255     if (flags&LS_L)
00256       tmp=map(args,#'_ls_output_long,flags,v_read,
00257                     v_write,creator)-({0});
00258     else
00259     {
00260       counter=0;maxlen=0;
00261       tmp=filter(args,#'_ls_maxlen,flags,&maxlen);
00262       if (maxlen>76) maxlen=76;
00263       maxcount=(78/(maxlen+2))-1;
00264       tmp=map(tmp,#'_ls_output_short,maxlen,&counter,maxcount);
00265     }
00266     output=sprintf("\n%d Dateien/Unterverzeichnisse:\n%s\n",
00267                    sizeof(tmp),implode(tmp,""));
00268   }
00269   for(i=0;i<arg_size;i++)
00270   {
00271     tmp=({});
00272     size=args[i][FILESIZE];
00273     if (size==-2)
00274     {
00275       tmp=file_list(({args[i][FULLNAME]+"/*"}),MODE_LSB,0,"/");
00276       tmp=sort_array(tmp,sort_fun);
00277       if (flags&LS_L)
00278         tmp=map(tmp,#'_ls_output_long,flags,v_read,
00279                       v_write,creator)-({0});
00280       else
00281       {
00282         counter=0;maxlen=0;
00283         tmp=filter(tmp,#'_ls_maxlen,flags,&maxlen);
00284         maxcount=(78/(maxlen+2));
00285         if (maxcount) maxcount--;
00286         tmp=map(tmp,#'_ls_output_short,maxlen,&counter,maxcount);
00287       }
00288       if (sizeof(tmp))
00289       {
00290         output+=sprintf("\n%s: Verzeichnis, %d Dateien/Unterverzeichnisse:\n",
00291                       args[i][FULLNAME],sizeof(tmp));
00292         output+=(implode(tmp,"")+((string)(tmp[<1][<1..<1])=="\n"?"":"\n"));
00293       }
00294       else
00295       {
00296         output+=sprintf("\n%s: Leeres Verzeichnis.\n",args[i][FULLNAME]);
00297       }
00298     }
00299   }
00300   More(output);
00301   return 1;
00302 }

private int _ls_maxlen ( mixed  filedata,
int  flags,
int  maxlen 
)

Definiert in Zeile 131 der Datei fileview.c.

00132 {
00133   string base;
00134   int size;
00135   base=filedata[BASENAME];
00136   if (!(flags&LS_A)&&(base[0]=='.')) return 0;
00137 #if __VERSION__ < "3.2.9"
00138   if (strlen(base)>maxlen) maxlen=strlen(base);
00139 #else
00140   maxlen=max(maxlen,strlen(base));
00141 #endif
00142   return 1;
00143 }

private string _ls_output_long ( mixed  filedata,
int  flags,
closure  valid_read,
closure  valid_write,
closure  creator_file 
)

Definiert in Zeile 145 der Datei fileview.c.

00147 {
00148   string *tmp,full,base,path,date,creator,group;
00149   int size,dir,ftime;
00150   object ob;
00151   
00152   base=filedata[BASENAME];
00153   if (!(strlen(base))||((!(flags&LS_A))&&(base[0]=='.')))
00154     return 0;
00155   size=filedata[FILESIZE];
00156   path=filedata[PATHNAME];
00157   tmp=(string *)call_other(master(),"full_path_array",
00158                  filedata[FULLNAME],getuid());
00159   full=sprintf("/%s",implode(tmp,"/"));
00160   dir=(size==-2);
00161   ob=find_object(full);
00162   ftime=filedata[FILEDATE];
00163   date=dtime(ftime);
00164   date=sprintf("%s %s %s",date[9..11],date[5..6],
00165                ((time()-ftime)<31536000?date[19..23]:(" "+date[13..16])));
00166   creator="";
00167   group="";
00168   if (flags&LS_U)
00169   {
00170     creator=(string)call_other(master(),"creator_file",full);
00171     switch(creator)
00172     {
00173       case ROOTID: creator="root"; break;
00174       case BACKBONEID: creator="daemon"; break;
00175       default: if(!creator) creator="none"; break;
00176     }
00177   }
00178   if (flags&LS_G)
00179   {
00180     if (sizeof(tmp))
00181     {
00182       switch(tmp[0])
00183       {
00184       case WIZARDDIR: group="magier"; break;
00185       case "news": group="news"; break;
00186       case "mail": group="mail"; break;
00187       case "open": group="public"; break;
00188       case "p": group="project"; break;
00189       case DOMAINDIR: if (sizeof(tmp)>1) { group=tmp[1]; break; }
00190       default: group="mud"; break;
00191       }
00192     }
00193     else group="mud";
00194   }
00195   if (dir) base=sprintf(colorstrings[DIR],base);
00196   else
00197   {
00198     if (ob)
00199     {
00200       if (size==-1)
00201         base=sprintf(colorstrings[VC],base);
00202       else
00203         base=sprintf(colorstrings[OBJ],base);
00204     }
00205   }
00206   return sprintf(("%c%c%c%c %3d"+((flags&LS_U)?" %-24.24s":"%-0.1s")+
00207                  ((flags&LS_G)?" %-8.8s":"%0.1s")+" %8s %s %s\n"),
00208                  (dir?'d':'-'),
00209                  (!funcall(valid_read,full,getuid(),
00210                            "read_file",this_object())?'-':'r'),
00211                  (!funcall(valid_write,full,getuid(),
00212                            "write_file",this_object())?'-':'w'),
00213                  (ob?'x':'-'),
00214                  (dir?(sizeof((get_dir(full+"/*")||({}))-({".",".."}))):0),
00215                  creator,group,(dir?"-":size==-1?"<vc>":to_string(size)),
00216                                     date,base);
00217 }

private string _ls_output_short ( mixed  filedata,
int  maxlen,
int  counter,
int  maxcount 
)

Definiert in Zeile 108 der Datei fileview.c.

00110 {
00111   string tmp;
00112   tmp=filedata[BASENAME];
00113   maxlen-=strlen(tmp);
00114   switch(filedata[FILESIZE])
00115   {
00116     case -2: tmp=sprintf(colorstrings[DIR],tmp);
00117              maxlen-=colorstrings[DIR,1]; break;
00118     case -1: tmp=sprintf(colorstrings[VC],tmp);
00119              maxlen-=colorstrings[VC,1]; break;
00120     default: if (find_object(filedata[FULLNAME]))
00121              {
00122                maxlen-=colorstrings[OBJ,1];
00123                tmp=sprintf(colorstrings[OBJ],tmp); break;
00124              }
00125   }
00126   if (!maxcount) return tmp+"\n";
00127   return sprintf("%-*s%s",(maxlen+strlen(tmp)),tmp,
00128                 ((counter++)==maxcount?(counter=0,"\n"):"  "));
00129 }

static int _man ( string  cmdline  )  [static]

Definiert in Zeile 398 der Datei fileview.c.

Benutzt _unparsed_args(), break_string(), flags, i, MAN_M, MAN_OPTS, MAN_R, MAND, MAND_DOCDIR, More(), oldman_result, parseargs() und USAGE.

00399 {
00400   mixed *args;
00401   int i, flags;
00402   string *tmp, *tmp2;
00403 
00404   cmdline=_unparsed_args();
00405   args=parseargs(cmdline,&flags,MAN_OPTS,0);
00406   
00407   if (flags==-1 ||
00408       (sizeof(args)!=1 &&
00409        (sizeof(args)<2 || strlen(args[1])>1 || !(i=to_int(args[1])))))
00410     return USAGE("man [-" MAN_OPTS "] <hilfeseite>");
00411   tmp=explode(args[0],"/");
00412 
00413   if (oldman_result && sizeof(tmp)==1 && sizeof(args)==1 &&
00414       strlen(tmp[0])==1 && (i=to_int(tmp[0])) && member(oldman_result,i)) {
00415    tmp=({oldman_result[i,0],oldman_result[i,1]});
00416    i=0;
00417   }
00418   else if (!(flags&(MAN_M|MAN_R))&&sizeof(tmp)>1)
00419   {
00420     if (file_size(MAND_DOCDIR+args[0])>=0)
00421       tmp=({tmp[<1],args[0]});
00422     else
00423       tmp=({});
00424   }
00425   else
00426   {
00427     if (flags&MAN_R)
00428     {
00429       flags&=(~MAN_M);
00430       if (catch(regexp(({""}),args[0]))||
00431           !regexp(({""}),args[0]))
00432         return printf("man: Ungueltiger Ausdruck in Maske.\n"),1;
00433     }
00434     tmp=(string *)call_other(MAND,"locate",args[0],flags&(MAN_M|MAN_R));
00435   }
00436 
00437   oldman_result=(mapping)0;
00438   if(i && sizeof(tmp)>2 && sizeof(tmp)>=(i<<1))
00439     tmp=tmp[((i<<1)-2)..((i<<1)-1)];
00440   switch(sizeof(tmp))
00441   {
00442     case 0:
00443       printf("Keine Hilfeseite gefunden fuer '%s'.\n",args[0]);
00444       break;
00445     case 2:
00446        /*
00447          if (flags&MAN_I)
00448          {
00449          // BRANCH TO MANUALD
00450          return 1;
00451          }
00452        */
00453       printf("Folgende Hilfeseite wurde gefunden: %s\n",tmp[1]);
00454       More(MAND_DOCDIR+tmp[1],1);
00455       return 1;
00456     default:
00457       i=sizeof(tmp)>>1;
00458       tmp2=allocate(i);
00459       oldman_result=m_allocate(i,2);
00460       while(i)
00461       {
00462         tmp2[(i-1)]=sprintf("%d: ",i)+tmp[(i<<1)-2];
00463                 oldman_result[i,0]=tmp[(i<<1)-2];
00464                 oldman_result[i,1]=tmp[(i<<1)-1];
00465         i--;
00466       }
00467       printf("Es wurden folgende potentiell passenden Seiten gefunden:\n"
00468              "%'-'78.78s\n%s%'-'78.78s\n","",
00469              break_string(implode(tmp2," "),78),"");
00470       break;
00471   }
00472   return 1;
00473 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

static int _more ( string  cmdline  )  [static]

Definiert in Zeile 342 der Datei fileview.c.

Benutzt _unparsed_args(), file_list(), flags, MODE_MORE, parseargs() und USAGE.

00343 {
00344   mixed *args;
00345   int flags;
00346   cmdline=_unparsed_args();
00347   args=parseargs(cmdline,&flags,"",1);
00348   if (flags==-1||!sizeof(args)) return USAGE("more <datei> [<datei2>..]");
00349   args=file_list(args,MODE_MORE,0,"/");
00350   if (!sizeof(args))
00351     return printf("more: %s: Keine passende Datei gefunden.\n",cmdline),1;
00352   args=map(args,#'_size_filter)-({0});
00353   if (sizeof(args)) _more_file(args);
00354   return 1;
00355 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

private void _more_file ( string *  arg  ) 

Definiert in Zeile 311 der Datei fileview.c.

00312 {
00313   if (!sizeof(arg)) return;
00314   printf("more: Naechste Datei: %s\n",arg[0]);
00315   More(arg[0],1,#'_more_file,({ arg[1..]}));
00316   return;
00317 }

mixed* _query_localcmds (  ) 

Definiert in Zeile 30 der Datei fileview.c.

Benutzt LEARNER_LVL und WIZARD_LVL.

00031 {
00032   return ({({"ls","_ls",0,LEARNER_LVL}),
00033            ({"more","_more",0,LEARNER_LVL}),
00034            ({"cat","_cat",0,LEARNER_LVL}),
00035            ({"head","_cat",0,LEARNER_LVL}),
00036            ({"tail","_cat",0,LEARNER_LVL}),
00037            ({"man","_man",0,LEARNER_LVL}),
00038            ({"rman","_rman",0,LEARNER_LVL}),
00039            ({"showprops","_showprops",0,WIZARD_LVL}),
00040            ({"grep","_grep",0,LEARNER_LVL})});
00041 }

static int _rman ( string  str  )  [static]

Definiert in Zeile 479 der Datei fileview.c.

Benutzt _unparsed_args(), flags, parseargs(), UDP_CMD_DIR und USAGE.

00480 {
00481   int flags;
00482   string *args;
00483   
00484   str=_unparsed_args();
00485   args=parseargs(str,&flags,"",0);
00486   if (flags==-1||sizeof(args)!=2)
00487     return USAGE("rman <hilfeseite> <mudname>");
00488   write("man: " +
00489         (string)call_other(UDP_CMD_DIR+"man","send_request",args[1],args[0]));
00490   return 1;
00491 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

static int _showprops ( string  str  )  [static]

Definiert in Zeile 502 der Datei fileview.c.

Benutzt extract(), i, list, More(), notify_fail(), old_explode() und x.

00503 {
00504    int i;
00505    string *list, ausgabe;
00506 
00507    if (str) {
00508       if (str[0]!='/') str="/"+str;
00509       if (str[0..4]!="/std/")
00510       {
00511          printf("showprops: Es koennen nur Properties von Objekten "
00512                 "aus /std/ angezeigt werden.\n");
00513          return 1;
00514       }
00515       if (str[<1]=='.') str+="c";
00516       if (str[<2..<1]!=".c") str+=".c";
00517       if (file_size(str)<0)
00518       {
00519         printf("showprops: %s: Es gibt kein Objekt diesen Namens.\n",str[0..<3]);
00520         return 1;
00521       }
00522       if (catch(call_other(str[0..<3], "???")))
00523       {
00524         printf("showprops: %s: Datei konnte nicht geladen werden.\n",str);
00525         return 1;
00526       }
00527    }
00528    if (!str || !find_object(str)) {
00529       notify_fail("Welche Properties moechtest Du sehen?"
00530                   " Bsp.: <showprops /std/npc>\n");
00531       return 0;
00532    }
00533    list=inherit_list(find_object(str));
00534 #if __VERSION__ < "3.2.9"
00535    list=map(list,lambda(({'x}),({#'extract,'x,4,-2})));
00536    list+=map(list,lambda(({'x}),({#'[<,({#'old_explode,'x,"/"}),1})));
00537    list=map(m_indices(mkmapping(list)),lambda(({'x}),({#'+,({#'+,"/sys/",'x}),"h"})));
00538    list=filter(list,lambda(({'x}),({#'>,({#'file_size,'x}),0})) );
00539 #else
00540    list=map(list,(: return $1[5..<2]+"h"; :));
00541    list+=map(list,(: return explode($1,"/")[<1]; :));
00542    list=map(m_indices(mkmapping(list)),(: return "/sys/"+$1; :));
00543    list=filter(list,(: return file_size($1)>0; :));
00544 #endif
00545    list=sort_array(list, #'<);
00546    ausgabe="";
00547    for (i=sizeof(list);i--;)
00548    {
00549 #if __VERSION__ < "3.2.9"
00550      str=implode(filter(old_explode(read_file(list[i]), "\n"),
00551         lambda( ({ 'x }), ({#'==, ({#'extract, 'x, 0, 9}), "#define P_"}) ))
00552                  , "\n");
00553 #else
00554      str=implode(filter(explode(read_file(list[i]),"\n"),
00555                               (: return $1[0..9]=="#define P_";:)),"\n");
00556 #endif
00557      if (str!="") ausgabe+=sprintf("%s\n%s\n\n", list[i], str);
00558    }
00559    if (ausgabe!="")
00560      More(ausgabe);
00561    else
00562      printf("Keine Property-Definitionen zu diesem Objekt gefunden!\n");
00563    return 1;
00564 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

private mixed _size_filter ( mixed *  arg  ) 

Definiert in Zeile 320 der Datei fileview.c.

Benutzt FILESIZE und FULLNAME.

00321 {
00322   if (arg[FILESIZE]>0) return arg[FULLNAME];
00323   if (arg[FILESIZE]==0)
00324   {
00325     printf("%s: %s: Leere Datei.\n",query_verb()||"more",arg[FULLNAME]);
00326     return 0;
00327   }
00328   if (arg[FILESIZE]==-2)
00329     printf("%s: %s ist ein Verzeichnis.\n",query_verb()||"more",arg[FULLNAME]);
00330   else
00331     printf("%s: %s: Datei existiert nicht.\n", query_verb()||"more",
00332            arg[FULLNAME]);
00333   return 0;
00334 }

private int grep_file ( mixed  filedata,
string  rexpr,
int  flags 
)

Definiert in Zeile 586 der Datei fileview.c.

Benutzt count, data, DOESNT_EXIST, ERROR, FILESIZE, FULLNAME, GREP_F, GREP_I, lines, MAXLEN, MAY_READ, NO_READ, result() und RET_FAIL.

00587 {
00588   string fullname,data,carry,*lines,*lines_orig,*tmp,*result;
00589   int ptr,count,i,nol,match,index;
00590   fullname=filedata[FULLNAME];
00591   if ((flags&GREP_F)&&fullname=="/players/"+getuid()+"/grep.out")
00592   {              
00593                 write_file("/players/"+getuid()+"/grep.out",
00594                    "Uebergehe grep.out ...\n");
00595                 return RET_FAIL;
00596   }
00597   switch(filedata[FILESIZE])
00598   {
00599     case -2: return RET_FAIL;
00600     case -1: return ERROR(DOESNT_EXIST,fullname,RET_FAIL);
00601     case 0:  return RET_FAIL;
00602     default: break;
00603   }
00604   if (!MAY_READ(fullname)) return ERROR(NO_READ,fullname,RET_FAIL);
00605   carry=""; result=({});
00606   if (flags&GREP_I)
00607     rexpr=lower_case(rexpr);
00608   do
00609   {
00610     data=read_bytes(fullname,ptr,MAXLEN)||"";
00611     ptr+=MAXLEN;
00612     lines=explode(carry+data,"\n");
00613     switch(sizeof(lines))
00614     {
00615       case 0: continue;
00616       case 1:
00617         carry="";
00618         break;
00619       default:
00620         carry=lines[<1];
00621         lines=lines[0..<2];
00622         break;
00623     }
00624     lines_orig=lines;
00625     if (flags&GREP_I)
00626       lines=map(lines,#'lower_case);
00627     nol=sizeof(lines);
00628     for (i=0;i<nol;i++)
00629     {
00630       match=sizeof(regexp(lines[i..i],rexpr));
00631       if (flags&GREP_V) match=!match;
00632       if (match)
00633       {
00634         if (!(flags&GREP_C))
00635         {
00636           if (flags&GREP_N)
00637             result+=({ sprintf("%4d %s",index+i+1,lines_orig[i])});
00638           else
00639             result+=lines_orig[i..i];
00640         }
00641         count++;
00642       }
00643     }
00644     index+=nol;
00645   }
00646   while(strlen(data)==MAXLEN);
00647   if (carry!="")
00648   {
00649     if (flags&GREP_I) carry=lower_case(carry);
00650     match=sizeof(regexp(({ carry }),rexpr));
00651     if (flags&GREP_V) match=!match;
00652     if (match)
00653     {
00654       if(!(flags&GREP_C))
00655       {
00656         if(flags&GREP_N)
00657            result+=({ sprintf("%4d %s",index+1,carry) });
00658         else
00659            result+=({carry});
00660       }
00661       count++;
00662     }
00663   }
00664   carry="";
00665   if (count)
00666   {
00667     if (flags&GREP_L) carry=sprintf("%s\n",fullname);
00668     else if (flags&GREP_H) data="";
00669     else data=sprintf(" %s:",fullname);
00670     if (flags&GREP_C) carry=sprintf("%s %d passende Zeile%s.\n",data,count,
00671                              (count==1?"":"n"));
00672     else
00673       carry=(data+"\n"+implode(result,"\n")+"\n");
00674   }
00675   if (flags&GREP_F)
00676     return write_file("/players/"+getuid()+"/grep.out",carry);
00677   write(carry);
00678   return RET_OK;
00679 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

private void SetColorstrings (  ) 

Definiert in Zeile 64 der Datei fileview.c.

Benutzt _get_color(), ANSI_INVERS, ANSI_NORMAL, ANSI_RED, colorstrings, OBJ, P_TTY, P_VARIABLES, QueryProp(), term und vars().

00065 {
00066   string tmp,term;
00067   mapping vars;
00068   vars=QueryProp(P_VARIABLES);
00069   colorstrings=m_allocate(0,2);
00070   switch(term=QueryProp(P_TTY))
00071   {
00072     case "vt100":
00073     case "ansi":
00074       if(stringp(vars["LS_DIR"]))
00075         tmp=implode(map(explode(vars["LS_DIR"],"+"),#'_get_color),
00076                     "");
00077       else
00078         tmp = (term == "ansi") ? ANSI_BLUE+ANSI_BOLD: ANSI_BOLD;
00079       colorstrings[DIR] = tmp+"%s"+(term == "vt100"?"/":"")+ANSI_NORMAL;
00080       if(term == "vt100") colorstrings[DIR, 1] = 1;
00081       if(stringp(vars["LS_OBJ"]))
00082         tmp=implode(map(explode(vars["LS_OBJ"],"+"),#'_get_color),
00083                     "");
00084       else
00085         tmp = (term == "ansi") ? ANSI_RED : ANSI_INVERS;
00086       colorstrings[OBJ] = tmp+"%s"+ANSI_NORMAL;
00087       if(stringp(vars["LS_VC"]))
00088         tmp=implode(map(explode(vars["LS_VC"],"+"),#'_get_color),
00089                     "");
00090       else
00091         tmp = (term == "ansi") ? ANSI_PURPLE : ANSI_INVERS;
00092       colorstrings[VC] = tmp+"%s"+ANSI_NORMAL;
00093       break;
00094     case "dumb":
00095       colorstrings[DIR] = "%s/"; colorstrings[DIR, 1] = 1;
00096       colorstrings[OBJ] = "%s*"; colorstrings[OBJ, 1] = 1;
00097       colorstrings[VC]  = "%s*"; colorstrings[VC , 1] = 1;
00098       break;
00099     default:
00100       colorstrings[DIR] = "%s";
00101       colorstrings[OBJ] = "%s";
00102       colorstrings[VC]  = "%s";
00103   }
00104   return;
00105 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:


Variablen-Dokumentation

private mapping colorstrings [static]

Definiert in Zeile 23 der Datei fileview.c.

Wird benutzt von SetColorstrings().

private mapping oldman_result [static]

Definiert in Zeile 24 der Datei fileview.c.

Wird benutzt von _man().

Erzeugt am Thu Jun 3 14:43:13 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3