testmailer.c-Dateireferenz

#include "post.h"
#include <properties.h>
#include <language.h>
#include <config.h>
#include <mail.h>
#include <wizlevels.h>
#include <moving.h>
Include-Abhängigkeitsdiagramm für testmailer.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define TRUSTED(o)
#define MAILFILE(name)   ("/"+MAILPATH+name[0..0]+"/"+name)
#define MAILFILEO(name)   (MAILFILE(name)+".o")
#define IS_NUMBER(n)   (stringp(n)&&n[0]>='0'&&n[0]<='9')
#define DEBUGVAR(x)

Funktionen

static varargs SendMail (text, flag)
 create ()
 init ()
 reset ()
 postneustart ()
 SetOfficeName (string n)
static varargs write_mail (mixed str, std_subject, text)
static varargs get_subject (string str, string pretext)
static get_carbon_copy (str)
static varargs send_mail (mixed back)
varargs do_mail (mixed str, string titel, string text)
static MediumHelpPage ()
static varargs int GetFolders (int nocondflag)
static varargs update (directflag, nocondflag)
static varargs ListContent ()
static ChangeFolder (mixed x)
static ListFolders ()
static MakeFolder (string s)
static RemoveFolder (string x)
static varargs DeleteMessage (int *nrs)
static MoveMessage (mixed msg, mixed fol)
static varargs Reply (int nr, int group)
static varargs Forward (mixed to, mixed nr, int appendflag)
static ForwardArea (mixed to, int *nrs)
static ReadMessage (int nr)
static string Message2string (int nr)
static LagWarning ()
static varargs SaveMessage (int *nrs)
static ListAliases ()
static mail_cmds (str)
static prompt ()
static input ()
static mixed GetAlias (mixed a)
static mixed process_names (mixed s)
static mapping Read_mailrc (string file)
string * unify_array (string *a)
string GetReTitle (string s)
int * GetNumbers (mixed s)
string GetFolderName (mixed fol)
 query_prevent_shadow ()

Variablen

inherit std thing
inherit NEDIT
static string subject
static string message
static string receiver
static string sender
static string * carbon
static string name
static string office_name
static int done
static int akt_folder
static int i
static int akt_nr
static int directflag
static int folder_size
static int folder_date
static mapping aliases
mixed * folders

Makro-Dokumentation

#define DEBUGVAR ( x   ) 

Definiert in Zeile 85 der Datei testmailer.c.

#define IS_NUMBER (  )     (stringp(n)&&n[0]>='0'&&n[0]<='9')

Definiert in Zeile 80 der Datei testmailer.c.

#define MAILFILE ( name   )     ("/"+MAILPATH+name[0..0]+"/"+name)

Definiert in Zeile 76 der Datei testmailer.c.

#define MAILFILEO ( name   )     (MAILFILE(name)+".o")

Definiert in Zeile 77 der Datei testmailer.c.

#define TRUSTED (  ) 
Wert:
(objectp(o)&& \
                                    (geteuid(o)=="p:service"|| \
                                     geteuid(o)==geteuid(this_interactive())))

Definiert in Zeile 72 der Datei testmailer.c.


Dokumentation der Funktionen

static ChangeFolder ( mixed  x  )  [static]

Definiert in Zeile 610 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, folders, GetFolderName() und ListContent().

Wird benutzt von mail_cmds().

00610                              {  
00611   if (!(x=GetFolderName(x))) return;
00612   akt_folder=member(folders[0],x);
00613   write("Du oeffnest den Ordner '"+x+"'.\n");
00614   if (akt_nr<=0) akt_nr=1;
00615   if (akt_nr>=sizeof(folders[1][akt_folder])) 
00616     akt_nr=sizeof(folders[1][akt_folder]);
00617   ListContent();
00618 }

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

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

create (  ) 

Definiert in Zeile 105 der Datei testmailer.c.

Benutzt akt_folder, create(), folder_date, folder_size, office_name, P_IDS, P_NAME, P_NODROP, P_SHORT und SetProp().

00105          {
00106   (::create());
00107   seteuid(getuid());
00108   SetProp(P_IDS,({"mailer"}));
00109   SetProp(P_NAME,"mailer");
00110   office_name="Morgengrauens Post";
00111   akt_folder=-1;
00112   folder_size=folder_date=-42;
00113   SetProp(P_NODROP,1);
00114   SetProp(P_SHORT,0);
00115 } 

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

static varargs DeleteMessage ( int *  nrs  )  [static]

Definiert in Zeile 666 der Datei testmailer.c.

Benutzt akt_folder, LagWarning(), MAILDEMON, name, update() und x.

Wird benutzt von mail_cmds().

00666                                        {
00667   int ret,x;
00668   mixed m;
00669   if ( sizeof(nrs) > 15 ) LagWarning();
00670 
00671   for (x=sizeof(nrs)-1;x>=0;x--) {
00672     write("Loesche Brief "+(nrs[x]+1)+": ");
00673     ret=MAILDEMON->RemoveMsg(nrs[x], akt_folder, name);
00674     switch(ret) {
00675     case 1: write("Ok.\n"); break;
00676     case 0: write("Kein solcher Brief im aktuellen Ordner.\n"); break;
00677     case -1:write("Kein aktueller Ordner.\n"); update(); return ret;
00678     default: write("MAILDEMON: Interner Fehler Nummer "+ret+"!\n"); break;
00679     }
00680   }
00681   
00682   return ret;
00683 }

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

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

varargs do_mail ( mixed  str,
string  titel,
string  text 
)

Definiert in Zeile 357 der Datei testmailer.c.

Benutzt aliases, ALIASFILE, break_string(), directflag, folders, FWSERV, input, ListContent(), MAILFILEO, move(), name, Read_mailrc(), SYSALIAS, TRUSTED, update() und write_mail().

00357                                                     {
00358   // text und titel angegeben: versende Text, keine weiteren Taetigkeiten.
00359 
00360   mixed i;
00361   if (name) return; /* security flag :-) */
00362   if (!this_interactive()) return;
00363   if (!text) {
00364     name=geteuid(this_interactive());
00365     move(this_interactive());
00366     if (!name) remove();
00367   }
00368   aliases=Read_mailrc(ALIASFILE(geteuid(this_interactive())))+
00369                   Read_mailrc(SYSALIAS);
00370 //  akt_folder=member_array("newmail",folders[0]);
00371 //  if (akt_folder==-1) akt_folder=0;
00372   if (str) {
00373     str=lower_case(str);
00374     directflag=1;
00375     if (text) {
00376       if (this_interactive()!=this_player()) return 0;
00377       if (!TRUSTED(previous_object())) return
00378                 write(break_string("WARNUNG!!! Objekt "+object_name(previous_object())+
00379                                                    " versucht, Mail mit Deinem Absender zu versenden! "
00380                            "Bitte Erzmagier oder Loco verstaendigen.",78)+
00381                            "\n"),1;
00382       directflag=2;
00383       return write_mail(str,titel,text);
00384     }
00385     directflag=1;
00386     return write_mail(str);
00387   }
00388   update(0,1);
00389   if (!pointerp(folders) || sizeof(folders)!=2 || sizeof(folders[0])==0) {
00390     write("Du hast im Moment keine Post !\n");
00391     folders=({({}),({})});
00392   }
00393   write("Du hast "+sizeof(folders[0])+" Ordner, Liste mit 'i'.\n");
00394 
00395   ListContent();
00396 
00397   write("Gesamtgroesse Deines Postfachs: "+
00398                 (i=(file_size(MAILFILEO(name))+512)/1024)+" KB.\n");
00399 
00400   if (i>500) // Extra-Warnung fuer Catweazle
00401              // man koennte natuerlich auch eine Channel-Meldung ausspucken
00402              // mit dem Hinweis, wer das aktuelle Lag verursacht... vielleicht
00403              // ab 800 KB? ;-)
00404     write("*****************************************************************\n"
00405                   "* Dein Postfach hat eine absolut unakzeptable Groesse erreicht. *\n"
00406                   "* Uebergrosse Postfaecher verursachen unnoetiges Lag fuer alle! *\n"
00407                   "* Bitte raeume es dringend auf, d.h. loesche alle Briefe, die   *\n"
00408                   "* Du nicht _unbedingt_ benoetigst, oder lager sie aus und       *\n"
00409                   "* loesche sie anschliessend. Hauptsache, weg damit.             *\n"
00410                   "*****************************************************************\n");
00411   else if (i>300) // Warnung fuer bestimmte Magier und Seher ab 300 KB
00412     write("WARNUNG! Dein Postfach hat eine bedenkliche Groesse erreicht.\n"
00413                   "Beachte, dass uebergrosse Postfaecher nicht nur unnoetig Speicher, sondern\n"
00414                   "insbesondere auch Rechenzeit verbrauchen und damit groesseres Lag verursachen\n"
00415                   "koennen. Du solltest also dringend aufraeumen und alle nicht unbedingt\n"
00416                   "notwendigen Briefe loeschen (evtl. natuerlich vorher auslagern.\n");
00417   else if (i>200) // Hinweis fuer andere.
00418     write("Der Postbeamte macht dich darauf aufmerksam, dass Dein Postfach bereits\n"
00419                   "ziemlich voll ist und Du dringend einmal aufraeumen solltest.\n");
00420   else if (i>100) // Hinweis fuer andere.
00421     write("Der Postbeamte macht dich darauf aufmerksam, dass Dein Postfach\n"
00422                   "relativ voll ist.\n");
00423   
00424 
00425   if ((i=FWSERV->QueryForward(name))!=name)
00426     write("Du hast einen Nachsendeauftrag gestellt, Deine Post wird an\n"
00427                   +i+" weitergeleitet.\n");
00428   return input();
00429 }

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

static varargs Forward ( mixed  to,
mixed  nr,
int  appendflag 
) [static]

Definiert in Zeile 747 der Datei testmailer.c.

Benutzt akt_folder, carbon, folders, get_carbon_copy(), get_subject(), message, msg(), MSG_BODY, MSG_FROM, MSG_SUBJECT, process_names(), receiver und subject.

Wird benutzt von ForwardArea() und mail_cmds().

00747                                                          {
00748   mixed msg;
00749   if (!pointerp(folders)||!pointerp(folders[0])||
00750       sizeof(folders[0])<=akt_folder) {
00751     write("Seltsamer Fehler: Kein aktueller Ordner!\n");
00752     return 0;
00753   }
00754   if (nr<0 || !pointerp(folders[1][akt_folder]) ||
00755       sizeof(folders[1][akt_folder])<=nr){
00756     write("Nicht so viele Briefe in diesem Ordner!\n");
00757     return 0;
00758   }
00759   to=process_names(to);
00760   receiver=to[0];
00761   carbon=to[1..];
00762   subject="Fw: "+folders[1][akt_folder][nr][MSG_SUBJECT];
00763   message="Weitergesendeter Brief, urspruenglich von: "+
00764        folders[1][akt_folder][nr][MSG_FROM]+"\n\
00765 -----------------------------\n\
00766 "+folders[1][akt_folder][nr][MSG_BODY]+"\
00767 -----------------------------\n";
00768   if (!appendflag) return get_carbon_copy(),1;
00769   else {
00770     write("Text kann angehaengt werden\n");
00771     get_subject(subject,message);
00772   }
00773   return 1;
00774 }

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

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

static ForwardArea ( mixed  to,
int *  nrs 
) [static]

Definiert in Zeile 778 der Datei testmailer.c.

Benutzt carbon, dtime(), Forward(), get_carbon_copy(), LagWarning(), message, Message2string(), msg(), process_names(), receiver und subject.

Wird benutzt von mail_cmds().

00778                                        {
00779   mixed msg;
00780 
00781   if (!sizeof(nrs)) return 0;
00782   if (sizeof(nrs)==1) return Forward(to,nrs[0]);
00783   if (sizeof(nrs)>15) LagWarning();
00784 
00785   to=process_names(to);
00786   receiver=to[0];
00787   carbon=to[1..];
00788   subject="Fw: Gesammelte Briefe ("+dtime(time())[5..23]+")";
00789   message="";
00790   for (i=0;i<sizeof(nrs);i++) {
00791     write("Brief "+(nrs[i]+1)+": ");
00792     message+=Message2string(nrs[i])+
00793     "----------------------------------------------------------------------\n";
00794     write("Angehaengt.\n");
00795   }
00796 /*
00797   if (!appendflag) {
00798 */
00799     return get_carbon_copy(),1;
00800 /*  }
00801   else {
00802     write("Text kann angehaengt werden\n");
00803     get_subject(subject,message);
00804   }
00805   return 1;
00806 */
00807 }

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

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

static get_carbon_copy ( str   )  [static]

Definiert in Zeile 222 der Datei testmailer.c.

Benutzt blindcarbon, carbon, directflag, h, i, input, message, p, process_names(), receiver, send_mail(), SendMail(), slice_array(), subject und x.

Wird benutzt von Forward(), ForwardArea() und SendMail().

00222                             {   // Aufruf mit 0, wenn keine cc gewuenscht.
00223   int i,j;
00224   object p;
00225   string *oldcarbons,h,*receivers;
00226   mapping orignames;
00227   
00228   oldcarbons=carbon;
00229   if (str=="~q") return SendMail(0); // Abbruch, entspricht Abbruch im Editor
00230   if (!str || str=="") carbon=0;
00231   else carbon=process_names(str);
00232   carbon=(oldcarbons ? oldcarbons : ({}))+(carbon ? carbon : ({}));
00233 /*  if (!sizeof(carbon)) carbon=0; */
00234 
00235 #ifdef MAIL_SUPPORT_BCC
00236   blindcarbon=filter(carbon,lambda(({'x}),({#'==,'-',({#'[,'x,0})})));
00237   carbon-=blindcarbon;
00238   blindcarbon=map(blindcarbon,lambda(({'x}),({#'slice_array,'x,1,1000})));
00239 #endif
00240 
00241 #ifdef MAIL_SUPPORT_BCC
00242   oldcarbons=({receiver})+carbon+blindcarbon; // speichere alle Originaladressen
00243 #else
00244   oldcarbons=({receiver})+carbon;         
00245 #endif
00246 
00247   /* Forwards auswerten, dabei werden auch ungueltige Adressen gefiltert */
00248   /* orignames speichert die Zuordnung Zieladressen -> Originaladressen  */
00249 
00250   orignames=([]);
00251   h=old_explode(FWSERV->QueryForward(receiver),",");
00252 
00253   DEBUGVAR(h);
00254   for (j=sizeof(h)-1;j>=0;j--)
00255     orignames[(h[j][0]=='\\'?h[j][1..]:h[j])]=({receiver[0]=='\\'?receiver[1..]:receiver});
00256   receiver=h[0];
00257   receivers=h[1..]; // Missbrauch dieser Variable!
00258 
00259   DEBUGVAR(orignames);
00260 
00261   for (i=sizeof(carbon)-1;i>=0;i--) {
00262     h=old_explode(FWSERV->QueryForward(carbon[i]),",");
00263     for (j=sizeof(h)-1;j>=0;j--) {
00264       h[j]=(h[j][0]=='\\'?h[j][1..]:h[j]);
00265       orignames[h[j]]=(orignames[h[j]]||({}))+({carbon[i][0]=='\\'?carbon[i][1..]:carbon[i]});
00266       receivers+=h;
00267     }
00268   }
00269   carbon=receivers;
00270 
00271 #ifdef MAIL_SUPPORT_BCC
00272   receivers=({});
00273   for (i=sizeof(blindcarbon)-1;i>=0;i--) {
00274     h=old_explode(FWSERV->QueryForward(blindcarbon[i]),",");
00275     for (j=sizeof(h)-1;j>=0;j--) {
00276       h=(h[j][0]=='\\'?h[j][1..]:h[j]);
00277       orignames[h[j]]=(orignames[h[j]]||({}))+({blindcarbon[i][0]=='\\'?blindcarbon[i][1..]:blindcarbon[i]});
00278       receivers+=h;
00279     }
00280   }
00281   blindcarbon=receivers;
00282 #endif
00283 
00284   carbon=send_mail();
00285   receivers=({});
00286 
00287   if (!pointerp(carbon) || !sizeof(carbon)){
00288     write("Brief NICHT verschickt, da keine Empfaenger gefunden!\n");
00289   } else { 
00290     string *a; 
00291     DEBUGVAR(orignames);
00292     for (i=0;i<sizeof(carbon);i++){
00293       DEBUGVAR(carbon[i]);
00294       /* evtl. abfragen nach query_editing und/oder query_input_to */
00295       /* Benachrichtige Spieler, die ein forward gesetzt haben */
00296       for (j=sizeof(a=orignames[carbon[i]]-({carbon[i]}))-1;j>=0;j--) 
00297         if (p=find_player(a[j])) 
00298                   tell_object(p,"Ein Postreiter ruft Dir aus einiger Entfernung zu, dass Du neue Post hast!\nDer Brief wurde wunschgemaess weitergeleitet.\n");
00299 
00300       /* Benachrichtige Empfaenger */
00301 #ifndef MAILDEMON0297
00302       if (p=find_player(carbon[i])) 
00303         tell_object(p,"Ein Postreiter ruft Dir aus einiger Entfernung zu, dass Du neue Post hast!\n");
00304 #endif
00305       receivers+=orignames[carbon[i]]||orignames["\\"+carbon[i]];
00306     }
00307     DEBUGVAR(carbon);
00308     write("Abgesandt an: "+implode(unify_array(map(receivers,#'capitalize)),", ")+"\n");//')));
00309   }
00310   for (i=sizeof(oldcarbons)-1;i>=0;i--)
00311     if (oldcarbons[i][0]=='\\')
00312       oldcarbons[i]=oldcarbons[i][1..];
00313   oldcarbons=oldcarbons-receivers;
00314   if (sizeof(oldcarbons)) {
00315     write("Empfaenger unbekannt: "+implode(map(oldcarbons,#'capitalize),", ")+"\nIrgendjemand wirft Dir den zurueckgekommenen Brief zu.\n");//')))
00316     send_mail(oldcarbons);
00317   }
00318 
00319   message=receiver=carbon=subject=0;
00320   if (directflag) {
00321     if (directflag==1) remove(); // 1: Direktmodus, 2: non-interactive
00322     return 1;
00323   }
00324   return input();
00325 }

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

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

static varargs get_subject ( string  str,
string  pretext 
) [static]

Definiert in Zeile 190 der Datei testmailer.c.

Benutzt DEBUGVAR, input_to(), nedit(), SendMail() und subject.

Wird benutzt von Forward().

00190                                                       {
00191   DEBUGVAR(str);
00192   DEBUGVAR(subject);
00193   if ((!str||str=="") && !subject) {
00194     write("Titel (Abbrechen mit ~q): ");
00195     return input_to("get_subject");
00196   }
00197   if (str=="~q"||str=="~Q") return SendMail(0); // entspricht Abbruch im Editor.
00198   if (str && str!="") subject=str;
00199   write("Bitte gib jetzt Deine Nachricht an:\n\
00200 ** oder . wenn fertig, ~q fuer Abbruch, ~h fuer eine Hilfsseite\n");
00201   nedit("SendMail",pretext);
00202 //  return 1;
00203 }

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

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

static mixed GetAlias ( mixed  a  )  [static]

Definiert in Zeile 1157 der Datei testmailer.c.

Benutzt aliases und process_names().

01157 { return process_names(aliases[a]); }

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

string GetFolderName ( mixed  fol  ) 

Definiert in Zeile 1242 der Datei testmailer.c.

Benutzt akt_folder, folders und IS_NUMBER.

01242                                 {  // int oder string. alles andere -> Fehler!
01243   mixed h;
01244 
01245   if (fol=="+") fol=akt_folder+1;
01246   if (fol=="-") fol=akt_folder-1;
01247   if ((!fol)||(intp(fol))||(IS_NUMBER(fol))) {
01248     if (!intp(fol)) fol=to_int(fol)-1;
01249     if (fol<0||fol>=sizeof(folders[0])) 
01250       return write("Einen Ordner mit Nummer "+(fol+1)+" gibt es nicht.\n"),0;
01251     return folders[0][fol];
01252   }
01253   fol=lower_case(fol);
01254   if (sizeof(h=regexp(folders[0],"^"+fol))==1) return h[0];
01255   if (member(folders[0],fol)==-1)
01256     return write("Einen Ordner mit Namen "+fol+" hast Du nicht.\n"),0;
01257   return fol;
01258 }

static varargs int GetFolders ( int  nocondflag  )  [static]

Definiert in Zeile 463 der Datei testmailer.c.

Benutzt file_time(), folder_date, folder_size, folders, MAILFILE, MAILFILEO, name und restore_object().

Wird benutzt von update().

00463                                               {
00464 // nocondflag: no condition, unbedingt neuladen
00465 
00466 // Cache-Verwaltung endlich funktionsfaehig [251196]
00467 // IDEE: Uhrzeit & Groesse untersuchen, ausserdem nach Verschieben neuladen.
00468 //       Auch nach automatischem Verschieben (unread -> newmail)!
00469 
00470 
00471 //  write("DEBUG: GetFolders called, old date "+folder_date+", old size "+folder_size+", nocondflag="+nocondflag+"\n");
00472   if (!nocondflag && 
00473       file_time(MAILFILEO(name))==folder_date &&
00474       file_size(MAILFILEO(name))==folder_size) return 0;
00475 
00476   if (!restore_object(MAILFILE(name))) folders=({({}),({})});
00477   folder_date=file_time(MAILFILEO(name));
00478   folder_size=file_size(MAILFILEO(name));
00479   if (!pointerp(folders) || sizeof(folders)!=2) folders=({({}),({})});
00480 //  write("DEBUG: GetFolders finished, new date "+folder_date+", new size "+folder_size+"\n");
00481   return 1;
00482 }

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

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

int* GetNumbers ( mixed  s  ) 

Definiert in Zeile 1200 der Datei testmailer.c.

Benutzt akt_folder, DEBUGVAR und folders.

01200                           {
01201   int i,h1,h2;
01202   mixed ret;
01203   
01204   if (intp(s)) return ({s-1});
01205   if (stringp(s)) s=({s-1});
01206   if (!pointerp(s)) return 0;
01207 
01208   ret=({});
01209 
01210   for (i=sizeof(s)-1;i>=0;i--) {
01211     if (sscanf(s[i],"%d-%d",h1,h2)==2) {
01212       if (h2-h1>100) {
01213                 write("Nicht so viele auf einmal, bitte.\n");
01214                 return ({});
01215       }
01216       for (h1--;h1<h2;h1++) ret=ret-({h1})+({h1});
01217     }
01218     else
01219       ret=ret-({h1=to_int(s[i])-1})+({h1});
01220   }
01221   ret=sort_array(ret,#'>); //')
01222   DEBUGVAR(ret);
01223   if (ret[0]<0) {
01224     write("Illegale Nummer: "+(ret[0]+1)+", nichts unter 1 bitte!\n");
01225     return ({});
01226   }
01227   if (ret[<1]>=sizeof(folders[1][akt_folder])) {
01228     write("Illegale Nummer: "+(ret[<1]+1)+", so gross ist dieser Ordner nicht!\n");
01229     return ({});
01230   }
01231   return ret;
01232 }

string GetReTitle ( string  s  ) 

Definiert in Zeile 1190 der Datei testmailer.c.

01190                             {
01191   int nr,s2;
01192 
01193   if (s[0..7]=="Re: Re: ") return "Re^3: "+s[8..];
01194   else if (sscanf(s,"Re^%d: %s",nr,s2))
01195     return "Re^"+(nr+1)+": "+s2;
01196   else return "Re: "+s;
01197 }

init (  ) 

Definiert in Zeile 118 der Datei testmailer.c.

Benutzt init() und init_rescue().

00118        {
00119   (::init());
00120   init_rescue();
00121   add_action("postneustart","post");
00122   add_action("postneustart","mail");
00123 }

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

static input (  )  [static]

Definiert in Zeile 1112 der Datei testmailer.c.

Benutzt input_to() und prompt().

01112                {
01113   prompt();
01114   input_to("mail_cmds");
01115   return 1;
01116 }

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

static LagWarning (  )  [static]

Definiert in Zeile 856 der Datei testmailer.c.

Wird benutzt von DeleteMessage(), ForwardArea() und SaveMessage().

00856                     {
00857   write("\
00858 WARNUNG!!! Diese Aktion kann sehr lange benoetigen. Bitte sparsam verwenden,\n\
00859   um das Lag fuer alle ertraeglich zu halten. Falls die Aktion mit einem\n\
00860   Fehler abbricht, waren es wahrscheinlich zu viele Briefe auf einmal.\n\
00861   Dann kannst Du mit \"mail\" wieder in das Mailmenu einsteigen und solltest\n\
00862   es mit weniger Briefen versuchen.\n");
00863 }

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

static ListAliases (  )  [static]

Definiert in Zeile 901 der Datei testmailer.c.

Benutzt aliases und P_MAILADDR.

Wird benutzt von mail_cmds().

00901                      {
00902   mixed a;
00903   int i;
00904   string s;
00905   a=sort_array(m_indices(aliases),#'>); // ');
00906   s=( "Definierte Aliase:\n"
00907       "d.xyz        = Alle Mitarbeiter der Domain xyz\n"
00908       "freunde      = Deine Freunde (entsprechend Freundschaftsband)\n"
00909       "me           = "+(this_player()->QueryProp(P_MAILADDR))+"\n");
00910   for (i=0;i<sizeof(a);i++) 
00911     s+=sprintf("%-12s = %s\n",a[i],aliases[a[i]]);
00912   write(s);
00913 }

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

static varargs ListContent (  )  [static]

Definiert in Zeile 581 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, DEBUGVAR, folders, MSG_DATE, MSG_FROM, MSG_SUBJECT und update().

Wird benutzt von ChangeFolder(), do_mail() und mail_cmds().

00581                              {
00582   int i;
00583   update();
00584 //  DEBUGVAR(folders[0]);
00585 //  DEBUGVAR(folders[1]);
00586   DEBUGVAR(akt_folder);
00587   if (!pointerp(folders)||sizeof(folders)!=2||
00588       !pointerp(folders[0])||!sizeof(folders[0])) {
00589     write("Du hast keinen einzigen Ordner!\n");
00590     return;
00591   }
00592   write("Ordner "+folders[0][akt_folder]+": ");
00593   if (!pointerp(folders[1]) || akt_folder>=sizeof(folders[1]) || 
00594       !pointerp(folders[1][akt_folder])) {
00595     write("Dieser Ordner ist leer.\n");
00596     return;
00597   }
00598   write(sizeof(folders[1][akt_folder])+" Brief"+
00599                 ((sizeof(folders[1][akt_folder])!=1)?"e\n":"\n"));
00600   for (i=0;i<sizeof(folders[1][akt_folder]);i++){
00601     write(((i+1==akt_nr) ? "->" : "  ")+
00602                   sprintf("%3d: (%12s, %s) ",i+1,capitalize(folders[1][akt_folder][i][MSG_FROM]),
00603                                   folders[1][akt_folder][i][MSG_DATE][5..11])+
00604                   folders[1][akt_folder][i][MSG_SUBJECT]+"\n");
00605   }
00606   return;
00607 }

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

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

static ListFolders (  )  [static]

Definiert in Zeile 621 der Datei testmailer.c.

Benutzt akt_folder, folders, MAILFILEO, name und update().

Wird benutzt von mail_cmds().

00621                      {
00622   int i;
00623   update();
00624   write("Du hast "+sizeof(folders[0])+" Ordner:\n");
00625   for (i=0;i<sizeof(folders[0]);i++)
00626     write(sprintf("%2s%3d: %-20s(%3d Briefe)\n",
00627                                   ((i==akt_folder)?"->":"  "),
00628                                   i+1,folders[0][i],sizeof(folders[1][i])));
00629   write("Gesamtgroesse Deines Postfachs: "+
00630                 ((file_size(MAILFILEO(name))+512)/1024)+" KB.\n");
00631 }

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

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

static mail_cmds ( str   )  [static]

Definiert in Zeile 920 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, ChangeFolder(), DEBUGVAR, DeleteMessage(), folders, Forward(), ForwardArea(), GetFolderName(), GetNumbers(), input, IS_NUMBER, ListAliases(), ListContent(), ListFolders(), MakeFolder(), MediumHelpPage(), MoveMessage(), old_explode(), ReadMessage(), RemoveFolder(), Reply(), SaveMessage(), update() und write_mail().

00920                       {
00921 
00922   string *strargs;
00923   int i,nrargs;
00924   
00925   update();
00926 
00927   if (!str || str=="" || !(nrargs=sizeof(strargs=old_explode(str[0..0]+lower_case(str[1..])," ")))) {
00928     ListContent();
00929     return input();
00930   }
00931   strargs[0]=strargs[0][0..3];
00932   if (IS_NUMBER(strargs[0])) {
00933     strargs=({"lies",strargs[0]});
00934     nrargs=2;
00935   }
00936   DEBUGVAR(strargs);
00937   switch (strargs[0]) {
00938   case "q":                    // quit
00939   case "quit": 
00940     remove(); return 1;
00941   case "?":                    // Hilfeseite
00942   case "hilf":
00943   case "h":
00944     MediumHelpPage();
00945     return;
00946   case "oeff":                 // change folder
00947   case "c": 
00948     if (nrargs<2) {
00949       write("Welchen Ordner willst Du oeffnen (Name, Nummer, +, -)?\n");
00950       break;
00951     }
00952     ChangeFolder(strargs[1]);
00953     break;
00954   case "ordn":                 // list folders
00955   case "i": 
00956     ListFolders();
00957     break;
00958   case "anze":                 // list content
00959   case "l":
00960     ListContent();
00961     break;
00962   case "alia":                 // list aliases
00963   case "a":
00964     ListAliases();
00965     break;
00966   case "erze":                 // make new folder
00967   case "n": 
00968     if (nrargs<2) {
00969       write("Bitte als Argument einen Namen fuer den neuen Ordner angeben!\n");
00970       break;
00971     }
00972     MakeFolder(lower_case(strargs[1]));
00973     break;
00974   case "entf":                 // delete folder
00975   case "e": 
00976     if (nrargs<2) {
00977       write("Bitte als Argument Name oder Nummer des zu loeschenden Ordners angeben.\n");
00978       break;
00979     }
00980     RemoveFolder(GetFolderName(strargs[1]));
00981     break;
00982   case "loes":                 // delete message
00983   case "d":
00984     if (nrargs==1) DeleteMessage(({akt_nr-1}));
00985     else DeleteMessage(GetNumbers(strargs[1..]));
00986     break;
00987   case "schr":                 // write mail
00988   case "m": 
00989     if (nrargs<2) {
00990       write("Bitte Empfaenger als Argument angeben!\n");
00991       break;
00992     }
00993     write_mail(strargs[1..]);
00994     return 1;
00995   case "vers":                 // move message to other folder
00996   case "verl":
00997   case "v":
00998     if (nrargs<2 || (nrargs>2 && !IS_NUMBER(strargs[1]))) {
00999       write("Syntax: v [nr|nr-nr [nr|nr-nr ...]] <ordnername>|<ordnernr>|+|-\n");
01000       break;
01001     }
01002     if (nrargs==2) MoveMessage(({akt_nr-1}),GetFolderName(strargs[1]));
01003     else MoveMessage(GetNumbers(strargs[1..<2]),GetFolderName(strargs[<1]));
01004     update(0,1);  // unbedingt neuladen.
01005     break;
01006   case "bean":
01007   case "r":
01008   case "grup":
01009   case "g":
01010     if (nrargs<2) { 
01011       if (Reply(akt_nr-1,(strargs[0][0]=='g'))) return 1;
01012       break;
01013     }
01014     if (!IS_NUMBER(strargs[1])) {
01015       write("Argumentfehler: Bitte Nummer des Briefes angeben, auf den sich die Antwort\n"
01016                     "beziehen soll. Ohne Argument bezieht sie sich auf den aktuellen Brief.\n");
01017       break;
01018     }
01019     if (nrargs>2) {
01020       write("Zu viele Argumente. Eine Antwort darf sich nur auf einen Brief beziehen!\n");
01021       break;
01022     }
01023     if (Reply(to_int(strargs[1])-1,(strargs[0][0]=='g'))) return 1;
01024     break;
01025   case "weit":
01026   case "f":
01027     if (nrargs<2 || 
01028                 (IS_NUMBER(strargs[nrargs-1])&&sizeof(old_explode(strargs[nrargs-1],"@"))==1)) {
01029       write("Syntax: f [nr|nr-nr [nr|nr-nr ...]]  empfaenger [empf2 ...]\n");
01030       break;
01031     } 
01032     if (!IS_NUMBER(strargs[1])) {
01033       if (Forward(strargs[1..],akt_nr-1)) return 1; 
01034     }  // return, nicht break: input() wird von get_carbon_copy() aufger.
01035     else {
01036       int pos; // letzte Position, an der eine Nummer steht
01037       
01038       for (pos=nrargs-1;pos>1&&!IS_NUMBER(strargs[pos]);pos--);
01039       if (ForwardArea(strargs[(pos+1)..],GetNumbers(strargs[1..pos])))
01040                 return 1;
01041     } 
01042     break;
01043   case "Weit":
01044   case "F":
01045     if (nrargs<2 || (nrargs==2 && IS_NUMBER(strargs[1]))) {
01046       write("Haeh? Bitte so: F [nr] empfaenger\n");
01047       break;
01048     }
01049     if (!IS_NUMBER(strargs[1])) {
01050       if (Forward(strargs[1..],akt_nr-1,1)) return 1;
01051       break;
01052     }
01053     if (IS_NUMBER(strargs[2])||member(strargs[1],'-')>=0) {
01054       write("Argumentfehler: Wenn Du eigenen Text anhaengen willst, darfst Du nur einen\n"
01055                     "Brief angeben, nicht mehrere.\n");
01056       break;
01057     }
01058     if (Forward(strargs[2..],to_int(strargs[1])-1,1)) return 1;
01059     break;
01060   case "lies":
01061     if (nrargs<2) { if (ReadMessage(akt_nr-1)) return 1; } else
01062     if (ReadMessage(to_int(strargs[1])-1)) return 1;
01063     break;
01064   case ".":
01065     if (ReadMessage(akt_nr-1)) return 1;
01066     break;
01067   case "+":
01068     if (akt_nr==sizeof(folders[1][akt_folder]))
01069       write("Noch weiter vorwaerts gehts nicht!\nMit 'c +' kannst Du den naechsten Ordner oeffnen.\n");
01070     else if (ReadMessage(akt_nr)) return 1;
01071     break;
01072   case "-":
01073     if (akt_nr==1)
01074       write("Noch weiter zurueck gehts nicht!\nMit 'c -' kannst Du den vorhergehenden Ordner oeffnen.\n");
01075     else if (ReadMessage(akt_nr-2)) return 1;
01076     break;
01077   case "spei":
01078   case "s":
01079     if ((nrargs==2 && !IS_NUMBER(strargs[1]))) {
01080       write("Syntax: s [nr|nr-nr [nr|nr-nr ...]]\n");
01081       break;
01082     }
01083     if (nrargs==1) (SaveMessage(({akt_nr-1})));
01084     else (SaveMessage(GetNumbers(strargs[1..])));
01085     break;
01086   default:
01087     write("Kommando nicht verstanden. Eine Hilfsseite bekommst Du mit 'h'.\n");
01088     break;
01089   }
01090   return input();
01091 }

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

static MakeFolder ( string  s  )  [static]

Definiert in Zeile 634 der Datei testmailer.c.

Benutzt MAILDEMON und name.

00634                             {
00635   int ret;
00636   if (sscanf(s,"%d",ret)||s[0]<'a'||s[0]>'z') return
00637      write("Um Probleme zu vermeiden, duerfen Ordner nicht mit Nummern oder Sonderzeichen\nbezeichnet werden.\n");
00638   if (s=="newmail"||s=="unread") return
00639     write("Die Ordnernamen 'newmail' und 'unread' sind reserviert.\n");
00640   ret=MAILDEMON->MakeFolder(s, name);
00641   if (ret==1) write("Ok, neuer Ordner mit Namen "+s+" angelegt.\n");
00642   else write("Ein Ordner mit dem Namen existiert bereits.\n");
00643   return s;
00644 }

static MediumHelpPage (  )  [static]

Definiert in Zeile 432 der Datei testmailer.c.

Benutzt akt_folder, folders, input, IS_WIZARD und SAVEFILENAME.

Wird benutzt von mail_cmds().

00432                         {
00433   if (sizeof(folders[0])) 
00434     write("Aktueller Ordner ist \""+folders[0][akt_folder]+"\"\n");
00435   write("\n\
00436 Brief <nr> lesen                       '<nr>'                 (lies <nr>)\n\
00437 Aktueller / naechster / letzter Brief  '.' / '+' / '-'\n\
00438 Brief schreiben                        'm <name>'             (schreibe)\n\
00439 Brief beantworten                      'r [nr]'               (beantworte)\n\
00440 Gruppenantwort an alle Empfaenger      'g [nr]'               (gruppe)\n\
00441 Brief(e) loeschen                      'd [nummern]'          (loesche)\n\
00442 Brief(e) weitersenden                  'f [nummern] <name>'   (weiter)\n\
00443 Weitersenden plus eigenen Text         'F [nr] <name>'        (Weiter)\n\
00444 Brief(e) in anderen Ordner verschieben 'v [nummern] <ordner>' (verschiebe)\n\
00445 Mails in diesem Ordner listen          'l' (oder nichts)      (anzeigen)\n\
00446 Aktuellen Ordner wechseln              'c <ordner>'           (oeffne)\n\
00447 Neuen Ordner anlegen                   'n <ordnername>'       (erzeuge)\n\
00448 Leeren Ordner loeschen                 'e <ordner>'           (entferne)\n\
00449 Alle Ordner anzeigen                   'i'                    (ordner)\n\
00450 "+ (IS_WIZARD(this_player()) ? "\
00451 Brief(e) speichern in Datei            's [nummern]'          (speichere)\n\
00452   "+SAVEFILENAME+"\n" : "")+ "\
00453 Mailaliase anzeigen                    'a'                    (aliase)\n\
00454 Verfuegbare Kommandos zeigen           '?' oder 'h'\n\
00455 Postmenue verlassen                    'q'\n\
00456 Kommando <cmd> ausfuehren              '!<cmd>'\n\
00457 [nummern] bedeutet: [nr|nr-nr [nr|nr-nr ...]]. (Liste von Nr und Bereichen)\n\
00458 Bei der Langform reicht es, die ersten 4 Zeichen eines Kommandos anzugeben.\n\
00459 ");
00460   return input();
00461 }

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

static string Message2string ( int  nr  )  [static]

Definiert in Zeile 822 der Datei testmailer.c.

Benutzt akt_folder, folders, message, MSG_BODY, MSG_CC, MSG_DATE, MSG_FROM, MSG_RECIPIENT, MSG_SENDER, MSG_SUBJECT und x.

Wird benutzt von ForwardArea(), ReadMessage() und SaveMessage().

00822                                      {
00823   mixed letter;
00824   string message;
00825   int x;
00826   if (!pointerp(folders)||!pointerp(folders[0])||
00827       sizeof(folders[0])<=akt_folder){
00828     write("Seltsamer Fehler: Kein aktueller Ordner!\n");
00829     return 0;
00830   }
00831   if (!pointerp(folders[1][akt_folder]) ||
00832       sizeof(folders[1][akt_folder])<=nr ||
00833       nr<0) {
00834     write("Diese Nummer gibt es in diesem Ordner nicht!\n");
00835     return 0;
00836   }
00837   letter=folders[1][akt_folder][nr];
00838   message=
00839        "Absender: "+capitalize(letter[MSG_FROM])+"\n"+
00840        ((letter[MSG_FROM]==letter[MSG_SENDER]) ? "" :
00841                 "Abgesandt aber von: "+capitalize(letter[MSG_SENDER])+"\n") +
00842        "An: "+capitalize(letter[MSG_RECIPIENT]);
00843   if (letter[MSG_CC] && letter[MSG_CC]!="") {
00844     message+="\nCc: ";
00845     if (!pointerp(letter[MSG_CC])) message+=capitalize(letter[MSG_CC]);    
00846     else message+=implode(map(letter[MSG_CC],#'capitalize),", ");//'))
00847   }
00848   message+="\nDatum: "+letter[MSG_DATE]+"\n"+
00849 /* Sinnlos, oder? "Id: "+letter[MSG_ID]+"\n"+ */
00850       "Titel: "+letter[MSG_SUBJECT]+"\n\n"+
00851                 letter[MSG_BODY]+"\n\n";
00852   return message;
00853 }

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

static MoveMessage ( mixed  msg,
mixed  fol 
) [static]

Definiert in Zeile 687 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, folders, MAILDEMON und name.

Wird benutzt von mail_cmds().

00687                                         {
00688   int ret,i;
00689   
00690   for (i=0;i<sizeof(msg);i++) {
00691     ret=MAILDEMON->MoveMsg(msg[i]-i, akt_folder, fol, name);
00692     switch(ret) {
00693     case 1:
00694       write("Brief "+(msg[i]+1)+" verschoben nach "+fol+".\n");
00695       break;
00696     case 0: 
00697       write("So viele Briefe sind nicht im aktuellen Ordner.\n"); return 0;
00698     case -1:
00699       write("Seltsamer Fehler - duerfte eigentlich nicht passieren:\n'Kein aktueller Ordner.'\n"); return -1;
00700     case -3:
00701       write("Den Zielordner "+fol+" gibt es nicht!\n"); return ret;
00702     default:
00703       write("MAILDEMON: MoveMsg Interner Fehler "+ret+". Bitte Erzmagier verstaendigen.\n"); return ret;
00704     }
00705   }
00706   if (akt_nr>=sizeof(folders[1][akt_folder])) 
00707     akt_nr=sizeof(folders[1][akt_folder])-1;
00708   
00709   return ret;
00710 }

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

postneustart (  ) 

Definiert in Zeile 143 der Datei testmailer.c.

Benutzt input, name, nedittext und RescueText().

00143                {
00144   if (!this_interactive() || name!=geteuid(this_interactive())
00145       || query_input_pending(this_interactive())
00146       || this_interactive()!=this_player()) return 0;
00147   write("Und weiter gehts...\n");
00148   if (nedittext) return RescueText();
00149   return input();
00150 }

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

static mixed process_names ( mixed  s  )  [static]

Definiert in Zeile 1126 der Datei testmailer.c.

Benutzt domain und x.

Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), GetAlias() und write_mail().

01126                                     {
01127   mixed a1,a2,h;
01128   int i;
01129   string domain;
01130   if (stringp(s)) a1=explode(lower_case(s)," ");
01131   else a1=s;
01132   a2=({});
01133   for (i=0;i<sizeof(a1);i++) a2+=explode(a1[i],",");
01134   a1=({});
01135 
01136 //  printf("DEBUG ANFANG: %O\n",a2);
01137 
01138   for (i=0;i<sizeof(a2);i++) {
01139     if (sscanf(a2[i],"d.%s",domain))
01140       a1+=((sizeof(h=filter(((h=(get_dir("/d/"+domain+"/*")||({}))-({".",".."})) ? h : ({})),#'query_wiz_level))) ? h : ({"d."+domain}));
01141     else if (a2[i]=="freunde") a1+=(this_player()->QueryProp("friends") || ({}));
01142     else if (a2[i]=="me") a1+=({this_player()->QueryProp(P_MAILADDR)});
01143     else if (aliases[a2[i]]) a1+=GetAlias(a2[i]);
01144 #ifdef MAIL_SUPPORT_BCC
01145     else if (a2[i][0]=='-') a1+=map(RecurseProcessNames(a2[i][1..]),lambda(({'x}),({#'+,"-",'x})));
01146 #endif
01147     else if ( (a2[i][0]>='a' && a2[i][0]<='z') || (sscanf(a2[i],"%s@%s",domain,domain)) || a2[i][0]=='\\') a1+=({a2[i]});
01148   }
01149   
01150 //  printf("DEBUG ENDE: %O\n",a1);
01151 
01152   return filter(a1, 
01153      lambda( ({'x}) , ({ #'> , ({ #'strlen,'x }) , 1 }) ));
01154 } 

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

static prompt (  )  [static]

Definiert in Zeile 1096 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, folders, path und update().

01096                 {
01097   string path;
01098   
01099   update();
01100   if (!pointerp(folders)||!pointerp(folders[0])||
01101      sizeof(folders[0])<=akt_folder)
01102     path="(kein Ordner)";
01103   else
01104     path= "(" + folders[0][akt_folder] + ":" +
01105       ( sizeof(folders[1][akt_folder]) ?
01106        akt_nr + "/" + sizeof(folders[1][akt_folder]) :
01107        "leer") + ")";
01108   write(path + " [Hilfe mit h] => ");
01109 }

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

query_prevent_shadow (  ) 

Definiert in Zeile 1260 der Datei testmailer.c.

01260 { return 1; }

static mapping Read_mailrc ( string  file  )  [static]

Definiert in Zeile 1163 der Datei testmailer.c.

Wird benutzt von do_mail().

01163                                         {
01164   mapping al;
01165   int i;
01166   mixed ar;
01167   string s1,s2;
01168 
01169   if (!(ar=read_file(file))) {
01170 //   write(file+" not readable\n");
01171     return ([]);
01172   }
01173   al=([]);
01174   ar=explode(ar,"\n");
01175   for (i=sizeof(ar)-1;i>=0;i--)
01176     if (sscanf(ar[i],"%s %s",s1,s2)==2) 
01177       al+=([s1:s2]);
01178 //  printf("Got aliases %O",al);
01179   return al;
01180 }

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

static ReadMessage ( int  nr  )  [static]

Definiert in Zeile 812 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, folders, message und Message2string().

Wird benutzt von mail_cmds().

00812                            {
00813   if (nr<sizeof(folders[1][akt_folder]) && nr>=0)
00814     akt_nr=nr+1;
00815   message=Message2string(nr);
00816   if (!message) return 0;
00817   this_player()->More(message,0,#'input); //')
00818   return 1;
00819 }

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

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

static RemoveFolder ( string  x  )  [static]

Definiert in Zeile 647 der Datei testmailer.c.

Benutzt MAILDEMON und name.

00647                               {
00648   int ret;
00649   if (!x) return -42;    // folder existiert nicht, Fehlermeldung bereits geg.
00650 //  if (intp(x)) x=folders[0][x];
00651 
00652   if (x=="newmail") return
00653     write("Der Ordnername 'newmail' ist reserviert.\nDieser Ordner darf nicht geloescht werden.\n"),-43;
00654 
00655   ret=MAILDEMON->RemoveFolder(x, name);
00656   switch (ret) {
00657   case 1: write("Ordner "+x+" geloescht.\n"); break;
00658   case -1: write("Kein solcher Ordner.\n"); break;
00659   case 0: write("Der Ordner war nicht leer - nicht geloescht.\n"); break;
00660   default: write("Fehler Nummer "+ret+" - was auch immer das heisst...\n"); break;
00661   }
00662   return ret;
00663 }

static varargs Reply ( int  nr,
int  group 
) [static]

Definiert in Zeile 713 der Datei testmailer.c.

Benutzt akt_folder, DEBUGVAR, folders, GetReTitle(), MSG_BODY, MSG_CC, MSG_FROM, MSG_RECIPIENT, MSG_SUBJECT, name und write_mail().

Wird benutzt von mail_cmds().

00713                                        {
00714   mixed to,dummy;
00715   if (!pointerp(folders)||!pointerp(folders[0])||
00716       sizeof(folders[0])<=akt_folder) {
00717     write("Seltsamer Fehler: Kein aktueller Ordner!\n");
00718     return 0;
00719   }
00720   if (nr<0 || !pointerp(folders[1][akt_folder]) ||
00721       sizeof(folders[1][akt_folder])<=nr){
00722     write("Einen Brief mit Nummer "+(nr+1)+" gibt es in diesem Ordner nicht!\n");
00723     return 0;
00724   }
00725 
00726   if (sscanf("\n"+lower_case(folders[1][akt_folder][nr][MSG_BODY]),
00727                      "%s\nreply-to:%s\n",dummy,to)==2) { // Reply-to gesetzt
00728     while (to[0]==' ') to=to[1..]; // ueberschuessige Leerzeichen entfernen
00729     while (to[<1]==' ') to=to[0..<2];
00730   }
00731   else 
00732     to=folders[1][akt_folder][nr][MSG_FROM];
00733   if (group) // Gruppenantwort
00734     to=({to,
00735         folders[1][akt_folder][nr][MSG_RECIPIENT]})+
00736        (pointerp(folders[1][akt_folder][nr][MSG_CC]) ? folders[1][akt_folder][nr][MSG_CC] : ({}))
00737        -({name});
00738 #ifdef DEBUG
00739      DEBUGVAR(name);
00740      DEBUGVAR(to);
00741 #endif
00742   write_mail(to,GetReTitle(folders[1][akt_folder][nr][MSG_SUBJECT]));
00743   return 1;
00744 }

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

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

reset ( void   ) 

Definiert in Zeile 126 der Datei testmailer.c.

Benutzt find_player(), name, nedittext, pl und reset().

00126         {
00127   object pl;
00128   (::reset());
00129   if (!name) return remove();
00130   pl=find_player(name);
00131   if (!pl || environment()!=pl) return remove();
00132   if (nedittext && !query_input_pending(pl)) {
00133     tell_object(pl,"\
00134 *** Hoppla! Du hast noch einen nicht fertiggeschriebenen Brief!\n\
00135 *** Mit ~r kannst Du weiterschreiben.\n");
00136     return;
00137   }
00138   if (query_input_pending(pl)!=this_object())
00139     return remove();
00140 }

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

static varargs SaveMessage ( int *  nrs  )  [static]

Definiert in Zeile 866 der Datei testmailer.c.

Benutzt IS_WIZARD, LagWarning(), Message2string(), SAVEFILENAME und x.

Wird benutzt von mail_cmds().

00866                                       {
00867   int x,nr;
00868   string rest;
00869   mixed letter;
00870 
00871   if (!IS_WIZARD(this_player())) {
00872     write("Das koennen nur Magier!\n");
00873     return 0;
00874   }
00875   if (!sizeof(nrs)) {
00876     write("Speichere nichts.\n");
00877     return 1;
00878   }
00879   
00880   if ( sizeof(nrs) > 15 ) LagWarning();
00881 
00882   for (nr=0;nr<sizeof(nrs);nr++) {
00883     write("Speichere Brief "+(nrs[nr]+1)+": ");
00884     letter=Message2string(nrs[nr]);
00885     letter+="----------------------------------------------------------------------\n";
00886     if (!letter) {
00887       write("Speichern unmoeglich.\n");
00888       return 0;
00889     }
00890     if (!write_file(SAVEFILENAME, letter))
00891       write("Brief zu lang!\n");
00892     else
00893       write("Ok.\n");
00894   }
00895   write("Speichern nach "+SAVEFILENAME+" fertig.\nBitte denk dran, diese Datei wieder zu loeschen!\n");
00896   return 1;
00897 }

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

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

static varargs send_mail ( mixed  back  )  [static]

Definiert in Zeile 328 der Datei testmailer.c.

Benutzt blindcarbon, carbon, ctime(), DEBUGVAR, MAILDEMON, message, MSG_BCC, MSG_BODY, MSG_CC, MSG_DATE, MSG_FROM, MSG_ID, MSG_RECIPIENT, MSG_SENDER, MSG_SUBJECT, office_name, receiver und subject.

Wird benutzt von get_carbon_copy().

00328                                      {
00329   mixed *mail;
00330   
00331   mail=allocate(9);
00332 
00333 #ifdef DEBUG
00334   DEBUGVAR(receiver);
00335   DEBUGVAR(carbon);
00336 #endif
00337 
00338   if (!pointerp(carbon) || !sizeof(carbon)) carbon=0;
00339   mail[MSG_FROM]=this_player()->query_real_name();
00340   mail[MSG_SENDER]=office_name;
00341   mail[MSG_RECIPIENT]=(back ? mail[MSG_FROM] : receiver);
00342   mail[MSG_CC]=(back ? 0 : carbon);
00343 #ifdef MAIL_SUPPORT_BCC
00344   mail[MSG_BCC]=blindcarbon;
00345 #else
00346   mail[MSG_BCC]=0;
00347 #endif
00348 
00349   mail[MSG_SUBJECT]=(back ? "Zurueck! Empfaenger unbekannt: "+implode(back,", ") : subject);
00350   mail[MSG_DATE]=ctime(time());
00351   mail[MSG_ID]="MorgenGrauen:"+time();
00352   mail[MSG_BODY]=message;
00353   return MAILDEMON->DeliverMail(mail,1);
00354 }

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

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

static varargs SendMail ( text  ,
flag   
) [static]

Definiert in Zeile 206 der Datei testmailer.c.

Benutzt carbon, directflag, flag, get_carbon_copy(), input, input_to(), message, receiver, subject und text().

00206                                    {
00207   // flag: 1 = keine CC abfragen.
00208   if (!text) {
00209     write("Abbruch! Brief landet im Reisswolf.\n");
00210     if (directflag) return remove();
00211     subject=receiver=carbon=message=0;
00212     return input();
00213   }
00214   message=text;
00215   if (flag) return get_carbon_copy(0);
00216   write("Cc: ");
00217   input_to("get_carbon_copy");
00218   return 1;
00219 }

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

SetOfficeName ( string  n  ) 

Definiert in Zeile 153 der Datei testmailer.c.

Benutzt office_name.

00153                         {
00154   return office_name=n;
00155 }

string* unify_array ( string *  a  ) 

Definiert in Zeile 1183 der Datei testmailer.c.

01183                                  {
01184   int i;
01185   for (i=sizeof(a)-1;i>=0;i--) a=a-({a[i]})+({a[i]});
01186   return a;
01187 }

static varargs update ( directflag  ,
nocondflag   
) [static]

Definiert in Zeile 484 der Datei testmailer.c.

Benutzt akt_folder, akt_nr, DEBUGVAR, directflag, find_player(), folders, GetFolders(), MAILDEMON, member_array(), msg(), MSG_BCC, MSG_BODY, MSG_CC, MSG_FROM, MSG_RECIPIENT, MSG_SUBJECT, name, office_name, P_IGNORE und QueryProp().

00484                                              {
00485   // directflag: Mailer wird im Direktmodus betrieben
00486   // nocondflag: Unbedingt neuladen
00487 
00488   int i,j,k,newletters;
00489   mixed *ignored;
00490   
00491   if (!GetFolders(nocondflag)) return; // es hat sich nix getan
00492 
00493   if (akt_nr<1) akt_nr=1;
00494 
00495   DEBUGVAR(akt_folder);
00496 
00497   if (akt_folder>=sizeof(folders[0]) || akt_folder<0) {
00498     akt_folder=member_array("newmail",folders[0]);
00499     if (akt_folder==-1) {
00500       MAILDEMON->MakeFolder("newmail",name);
00501       GetFolders(1);
00502       DEBUGVAR(folders[0]);
00503       akt_folder=member_array("newmail",folders[0]);
00504     }
00505     if (!directflag && akt_folder!=-1) write("Ordner 'newmail' aufgeschlagen.\n");
00506   }
00507 
00508 //  if (!pointerp(folders)) return write("ERROR: folders no array in update\n"); // Kann eigentlich nicht vorkommen
00509   if (sizeof(folders[0]) && akt_nr>sizeof(folders[1][akt_folder]))
00510     akt_nr=sizeof(folders[1][akt_folder]);
00511   j=member_array("unread",folders[0]);
00512   if (j==-1) return;
00513   newletters=0;
00514 
00515   // Testweise eine neue Version, die aber voraussetzt, dass die Position von
00516   // unread in der Folderliste von /secure/mail waehrend der Aktion
00517   // nicht veraendert wird.
00518   // alt ausgeklammert, ausserdem ueberall 0 statt k
00519   //  k=0;
00520   // Neue Version wieder testweise drin
00521 
00522   //  while (j != -1 && pointerp(folders[1][j]) && sizeof(folders[1][j])>0) {
00523   for (k=0;k<sizeof(folders[1][j]);k++) {
00524 
00525     //    write("DEBUG: j="+j+"\n");
00526     
00527     if (pointerp(ignored=this_player()->QueryProp(P_IGNORE)) &&
00528                                 member(ignored, lower_case(folders[1][j][k][MSG_FROM]+".mail"))>=0) {
00529       mixed msg;
00530       msg=folders[1][j][k];
00531       write("Du laesst einen Brief von "+capitalize(msg[MSG_FROM])+
00532                     " unbesehen zurueckgehen.\n");
00533       msg[MSG_BODY]=this_player()->name()+" \
00534 hat diesen Brief ungeoeffnet an Dich zurueckgehen lassen\n\
00535 und moechte nicht mehr von Deinen Briefen belaestigt werden.\n\
00536 Titel: "+msg[MSG_SUBJECT]+"\n\
00537 ------ Inhalt: ------------------------\n"+
00538   msg[MSG_BODY];
00539       msg[MSG_RECIPIENT]=msg[MSG_FROM];
00540       msg[MSG_SUBJECT]="Annahme verweigert - zurueck an Absender";
00541       msg[MSG_CC]=0;
00542       msg[MSG_BCC]=0;
00543       MAILDEMON->DeliverMail(msg,1);
00544       if (find_player(msg[MSG_RECIPIENT]))
00545                 tell_object(find_player(msg[MSG_RECIPIENT]),
00546                                     "Ein Postreiter ruft Dir aus einiger Entfernung leicht sauer zu, dass er einen\nzurueckgekommenen Brief fuer Dich hat.\n");
00547       MAILDEMON->RemoveMsg(0,j,name);
00548     } else {
00549     // Testweise durch DeleteUnreadFolder ersetzt (080297)
00550 #ifndef MAILDEMON0297
00551       MAILDEMON->MoveMsg(0, j, "newmail", name);
00552 #endif
00553       newletters++;
00554     }
00555     // GetFolders(1);
00556     // j=member_array("unread",folders[0]);
00557     // Letzte 2 Zeilen in "neuer" Version ersatzlos gestrichen
00558   }
00559 
00560 #ifdef MAILDEMON0297
00561   MAILDEMON->DeleteUnreadFolder(name);
00562 #else
00563   MAILDEMON->RemoveFolder("unread",name);
00564 #endif
00565   if (newletters) {
00566     if (office_name=="mpa Kurierdienst") 
00567       write("Ein Kurier drueckt Dir "+
00568                     ((newletters==1) ? "einen neuen Brief" : newletters+" neue Briefe")
00569                     +" in die Hand und verschwindet wieder.\n");
00570     else 
00571       write("Du siehst, wie ein Postbeamter "+
00572                     ((newletters==1) ? "einen neuen Brief" : newletters+" neue Briefe")
00573                     +" in Dein Fach legt.\n");
00574   }
00575   GetFolders(1); // jetzt ohne unread, damit im endgueltigen Zustand.
00576   while (akt_folder>=sizeof(folders[0])) akt_folder--;
00577   if ((!akt_nr)&&sizeof(folders[1][akt_folder])) akt_nr=1;
00578 }

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

static varargs write_mail ( mixed  str,
std_subject  ,
text   
) [static]

Definiert in Zeile 158 der Datei testmailer.c.

Benutzt carbon, directflag, h, input und process_names().

Wird benutzt von do_mail(), mail_cmds() und Reply().

00158                                                         {
00159   string str2;
00160   int h;
00161   
00162   carbon=process_names(str);
00163   if (!sizeof(carbon)) return 
00164     write("Kein Empfaenger angegeben!\n"),(directflag?remove():input());
00165   write("Empfaenger: "+implode(map(carbon,#'capitalize),", ")+"\n");
00166   str=carbon[0];
00167   if (sizeof(carbon)>=2) carbon=carbon[1..<1];
00168   else carbon=0;
00169   if ((str2=str) && str2!="" && str2[0]=='\\') str2=str2[1..];
00170   if (!str) return write("WEM willst Du schreiben?\n"),(directflag?remove():input());
00171   if (((catch(h=file_size("/"+SAVEPATH+str2[0..0]+"/"+str2+".o"))),h<=0 
00172        && member(str2,'@')==-1))
00173     return write("Mit dem Namen gibt es hier niemanden.\n"),(directflag?remove():input());
00174   receiver=str;
00175 
00176   if (text) {
00177     subject=std_subject;
00178     return SendMail(text,1);  // flag 1: keine CC's bitte.
00179   }
00180 
00181   write("Titel");
00182   if (std_subject) write(" ("+std_subject+")");
00183   write(": ");
00184   subject=std_subject;
00185   input_to("get_subject");
00186   return 1;
00187 }

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

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


Variablen-Dokumentation

int akt_folder [static]
int akt_nr [static]

Definiert in Zeile 95 der Datei testmailer.c.

Wird benutzt von ChangeFolder(), ListContent(), mail_cmds(), MoveMessage(), prompt(), ReadMessage() und update().

mapping aliases [static]

Definiert in Zeile 97 der Datei testmailer.c.

string * carbon [static]

Definiert in Zeile 90 der Datei testmailer.c.

Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), send_mail(), SendMail() und write_mail().

int directflag [static]

Definiert in Zeile 95 der Datei testmailer.c.

Wird benutzt von do_mail(), get_carbon_copy(), SendMail(), update() und write_mail().

int done [static]

Definiert in Zeile 95 der Datei testmailer.c.

int folder_date [static]

Definiert in Zeile 96 der Datei testmailer.c.

Wird benutzt von create() und GetFolders().

int folder_size [static]

Definiert in Zeile 96 der Datei testmailer.c.

Wird benutzt von create() und GetFolders().

mixed* folders

Definiert in Zeile 99 der Datei testmailer.c.

int i [static]

Definiert in Zeile 95 der Datei testmailer.c.

static string message [static]

Definiert in Zeile 90 der Datei testmailer.c.

string name [static]

Definiert in Zeile 94 der Datei testmailer.c.

inherit NEDIT

Definiert in Zeile 61 der Datei testmailer.c.

string office_name [static]

Definiert in Zeile 94 der Datei testmailer.c.

Wird benutzt von create(), send_mail(), SetOfficeName() und update().

string receiver [static]

Definiert in Zeile 90 der Datei testmailer.c.

Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), send_mail() und SendMail().

string sender [static]

Definiert in Zeile 90 der Datei testmailer.c.

string subject [static]

Definiert in Zeile 90 der Datei testmailer.c.

Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), get_subject(), send_mail() und SendMail().

inherit std thing

Definiert in Zeile 59 der Datei testmailer.c.

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