mpa.c-Dateireferenz

#include <properties.h>
#include <language.h>
#include <news.h>
#include <wizlevels.h>
#include <ansi.h>
#include "/mail/post.h"
Include-Abhängigkeitsdiagramm für mpa.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define DEFAULTGROUP   "allgemeines"
#define HELPPAGE   "/p/service/loco/doc/mpa"
#define WIZHELPPAGE   "/p/service/loco/doc/mpa.wiz"
#define SAVEMSGPATH(pl)   ("/open/News/"+(geteuid(pl))+".news")
#define IS_POST(r)   (member(inherit_list(r),STDPOST+".c")>=0)
#define TP   this_player()
#define TI   this_interactive()
#define abs(x)   (((x)>=0) ? (x) : -(x))
#define STATUSESCAPE   "~#!"
#define IS_STATUSLINE(s)   ((s[0..1]=="#!")||(s[0..2]=="~#!"))
#define IGNOREGROUP   "*ignored*"
#define NNADWMSG   "*NNADWMSG*"
#define SYSTEMGROUPS   ({IGNOREGROUP,NNADWMSG})
#define M2S_VT100   1
#define M2S_ANSI   M2S_VT100
#define M2S_REMOTE   2
#define LAST_TITLE   0
#define LAST_WRITER   1
#define LAST_TIME   2
#define LAST_TID   3
#define LAST_GROUP   4
#define LAST_NR   5
#define LAST_SIZEOF   6
#define DEBUGVAR(x)
#define M_READNEXT   1
#define M_LISTNEW   2
#define M_LISTNEWGR   3
#define M_READGR   4

Funktionen

int GetTID (mixed message)
 create ()
static mapping _query_material ()
static int _query_gender ()
static mixed _query_ids ()
static mixed _query_nodrop ()
static mixed _query_neverdrop ()
static mixed _query_read_msg ()
 long ()
 init ()
 verbrennen (str)
static KillGroup (name)
 _set_autoloadobj (mixed arg)
 _query_autoloadobj ()
static Mail (str)
 LiesArtikel (str)
static int CheckThreads (string rubrik, int timeout)
static ReadNextUnread (str)
static SetNNADWMSG (str)
static Ignore (str)
static Catchup (string str)
static CatchupSyntax ()
static int UncatchupSyntax ()
static Uncatchup (string str)
 QueryRead ()
static varargs schreib (str, pretext, called_by_itself, statuslines)
static Reply2 (str)
static varargs Reply (string str, string newtitle)
static PostNote (text)
 inhalt (str)
static rubriken (mixed arg)
static rubrik (str)
static artikel (str)
static loesche (str)
static varargs lies (mixed str)
static Unsubscribe (str)
static Bestelle (str)
static Subscribe (str)
static MoveTrash ()
static MoveMessage (str)
static SaveMessage (str)
static MailMessage (str)
 HelpPage (str)
static void InformPlayers (string group, string player, string text)
static varargs string Message2string (mixed msg, mixed messages, int flag, string group)
static varargs mixed GetGroupName (mixed g, mixed groups)
static CatchNewsError (int err, string text4minus3)
protected void NotifyMove (object dest, object oldenv, int method)
varargs int InterpretTime (mixed a, int flag)

Variablen

inherit std thing
inherit NEDIT
mapping read_until
mixed lasttitle
mixed message
int deadTID
string GROUP

Makro-Dokumentation

#define abs ( x   )     (((x)>=0) ? (x) : -(x))
#define DEBUGVAR ( x   ) 

Definiert in Zeile 97 der Datei mpa.c.

#define DEFAULTGROUP   "allgemeines"

Definiert in Zeile 57 der Datei mpa.c.

Wird benutzt von inhalt(), ReadNextUnread() und rubrik().

#define HELPPAGE   "/p/service/loco/doc/mpa"

Definiert in Zeile 58 der Datei mpa.c.

Wird benutzt von HelpPage().

#define IGNOREGROUP   "*ignored*"

Definiert in Zeile 72 der Datei mpa.c.

Wird benutzt von Catchup(), CheckThreads() und ReadNextUnread().

#define IS_POST (  )     (member(inherit_list(r),STDPOST+".c")>=0)

Definiert in Zeile 61 der Datei mpa.c.

Wird benutzt von MailMessage().

#define IS_STATUSLINE (  )     ((s[0..1]=="#!")||(s[0..2]=="~#!"))

Definiert in Zeile 69 der Datei mpa.c.

Wird benutzt von Message2string().

#define LAST_GROUP   4

Definiert in Zeile 89 der Datei mpa.c.

Wird benutzt von MailMessage(), MoveTrash() und Reply().

#define LAST_NR   5

Definiert in Zeile 90 der Datei mpa.c.

Wird benutzt von MoveTrash().

#define LAST_SIZEOF   6

Definiert in Zeile 91 der Datei mpa.c.

Wird benutzt von MailMessage() und MoveTrash().

#define LAST_TID   3

Definiert in Zeile 88 der Datei mpa.c.

Wird benutzt von Reply().

#define LAST_TIME   2

Definiert in Zeile 87 der Datei mpa.c.

Wird benutzt von MailMessage() und Reply().

#define LAST_TITLE   0

Definiert in Zeile 85 der Datei mpa.c.

#define LAST_WRITER   1

Definiert in Zeile 86 der Datei mpa.c.

Wird benutzt von MailMessage() und Reply().

#define M2S_ANSI   M2S_VT100

Definiert in Zeile 81 der Datei mpa.c.

#define M2S_REMOTE   2

Definiert in Zeile 82 der Datei mpa.c.

Wird benutzt von MailMessage(), Message2string() und SaveMessage().

#define M2S_VT100   1

Definiert in Zeile 80 der Datei mpa.c.

Wird benutzt von lies() und Message2string().

#define M_LISTNEW   2

Definiert in Zeile 305 der Datei mpa.c.

Wird benutzt von ReadNextUnread().

#define M_LISTNEWGR   3

Definiert in Zeile 306 der Datei mpa.c.

#define M_READGR   4

Definiert in Zeile 307 der Datei mpa.c.

Wird benutzt von ReadNextUnread().

#define M_READNEXT   1

Definiert in Zeile 304 der Datei mpa.c.

Wird benutzt von ReadNextUnread().

#define NNADWMSG   "*NNADWMSG*"

Definiert in Zeile 73 der Datei mpa.c.

Wird benutzt von ReadNextUnread() und SetNNADWMSG().

#define SAVEMSGPATH ( pl   )     ("/open/News/"+(geteuid(pl))+".news")

Definiert in Zeile 60 der Datei mpa.c.

Wird benutzt von SaveMessage().

#define STATUSESCAPE   "~#!"

Definiert in Zeile 68 der Datei mpa.c.

Wird benutzt von GetTID(), Message2string(), MoveMessage() und Reply().

#define SYSTEMGROUPS   ({IGNOREGROUP,NNADWMSG})

Definiert in Zeile 74 der Datei mpa.c.

Wird benutzt von ReadNextUnread() und rubriken().

#define TI   this_interactive()
#define TP   this_player()

Definiert in Zeile 65 der Datei mpa.c.

#define WIZHELPPAGE   "/p/service/loco/doc/mpa.wiz"

Definiert in Zeile 59 der Datei mpa.c.

Wird benutzt von HelpPage().


Dokumentation der Funktionen

_query_autoloadobj (  ) 

Definiert in Zeile 254 der Datei mpa.c.

00254                      {
00255   //  tell_object(find_player("loco"),sprintf("*** <query:%O> TI= %O\n",this_object(),TI));
00256   return 1;
00257 }

static int _query_gender (  )  [static]

Definiert in Zeile 123 der Datei mpa.c.

Benutzt FEMALE.

Wird benutzt von _query_ids() und long().

00123 { return FEMALE; }

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

static mixed _query_ids (  )  [static]

Definiert in Zeile 124 der Datei mpa.c.

00124 { return ({"nn","zeitung","servicepaket","mpa"}); }

static mapping _query_material (  )  [static]

Definiert in Zeile 122 der Datei mpa.c.

00122 { return ([MAT_PAPER:100]); }

static mixed _query_neverdrop (  )  [static]

Definiert in Zeile 126 der Datei mpa.c.

Benutzt _query_nodrop().

00126 { return _query_nodrop(); }

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

static mixed _query_nodrop (  )  [static]

Definiert in Zeile 125 der Datei mpa.c.

Wird benutzt von _query_neverdrop().

00125 { return "Das persoenliche Servicepaket der mpa kann man nicht wegwerfen.\n"; }

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

static mixed _query_read_msg (  )  [static]

Definiert in Zeile 127 der Datei mpa.c.

Benutzt long().

00127 { return long(); }

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

_set_autoloadobj ( mixed  arg  ) 

Definiert in Zeile 242 der Datei mpa.c.

Benutzt P_READ_NEWS, read_until und TP.

00242                             {
00243 
00244   if (pointerp(arg) && sizeof(arg)>=2)
00245   {
00246     read_until=arg[1];
00247   } else
00248     if (TP)
00249        read_until=((TP->QueryProp(P_READ_NEWS))||([]));
00250 
00251   if (TP) TP->SetProp(P_READ_NEWS,read_until);
00252 }

static artikel ( str   )  [static]

Definiert in Zeile 1003 der Datei mpa.c.

Benutzt lies().

Wird benutzt von _query_short().

01003                     {
01004   return lies(str);
01005 }

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

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

static Bestelle ( str   )  [static]

Definiert in Zeile 1099 der Datei mpa.c.

Benutzt _notify_fail() und Unsubscribe().

01099                      { /* ab ! */
01100   if (!str || !sscanf(str,"%s ab",str)) return _notify_fail(
01101        "Die Syntax ist: 'bestelle <rubrik> ab', "
01102        "oder meinst Du 'abonniere'?\n"),0;
01103   return Unsubscribe(str);
01104 }

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

static CatchNewsError ( int  err,
string  text4minus3 
) [static]

Definiert in Zeile 1416 der Datei mpa.c.

Wird benutzt von MoveMessage(), PostNote() und schreib().

01416                                                   {
01417   switch (err) {
01418     case  1: return 1;
01419     case -1: write("Du darfst in dieser Rubrik nicht schreiben!\n"); return 0;
01420     case -2: write("Die Rubrik gibt es nicht mehr, sehr seltsam...\n"); return 0;
01421     case -3: write(text4minus3+"\n"); return 0;
01422     default: write("Interner Fehler "+err+", Erzmagier verstaendigen!\n"); return 0;
01423   }
01424 }

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

static Catchup ( string  str  )  [static]

Definiert in Zeile 457 der Datei mpa.c.

Benutzt abs, CatchupSyntax(), dtime(), GetGroupName(), GROUP, i, IGNOREGROUP, InterpretTime(), lasttitle, m_delete(), M_TIME, NEWSSERVER, notify_fail(), P_READ_NEWS, read_until, TP und zeit.

Wird benutzt von Ignore().

00458 {
00459   int welche,zeit,i;
00460   string gr;
00461   mixed groups,news,args;
00462 
00463   if (!pointerp(NEWSSERVER->GetNotes(GROUP)))
00464     return notify_fail("Seltsam, die Rubrik '"+GROUP+
00465         "' gibt es nicht mehr...\n"), 0;
00466 
00467   str=this_player()->_unparsed_args();   // wg. Datum
00468   if (str) str=lower_case(str);
00469   else str=GROUP; // default: aktuelle Rubrik komplett.
00470 
00471   if (str=="?"|| str=="-?") return CatchupSyntax();
00472 
00473   // uebergehe Antworten (Thread ignorieren)
00474   if (str&&(str[0..6]=="antwort"||str=="thread")) {
00475     if (!pointerp(lasttitle)) return 
00476       write("Du hast bisher noch keinen Artikel gelesen, damit kann ich nicht wissen,\nwelchen Thread du uebergehen willst.\n"),1;
00477     if (!read_until[IGNOREGROUP]) read_until[IGNOREGROUP]=([]);
00478     if (!read_until[IGNOREGROUP][GROUP]) read_until[IGNOREGROUP][GROUP]=([]);
00479     if (read_until[IGNOREGROUP][GROUP][lasttitle[3]]) {
00480       read_until[IGNOREGROUP][GROUP]=m_delete(read_until[IGNOREGROUP][GROUP],lasttitle[3]);
00481       write("Dieser Thread wird jetzt nicht mehr uebergangen.\n");
00482     } else {
00483       read_until[IGNOREGROUP][GROUP][lasttitle[3]]=lasttitle[2];
00484       write("Dieser Thread wird ab sofort uebergangen.\nFalls das ein Irrtum war, wiederhole den Befehl augenblicklich.\n");
00485     }
00486     if (TP) TP->SetProp(P_READ_NEWS,read_until);
00487     return 1;
00488   }    
00489 
00490   groups=NEWSSERVER->GetGroups();
00491 
00492   args=explode(str," ");
00493 
00494   // Uebergehe alles
00495 
00496   if (args[0]=="alle" || args[0]=="alles" || args[0]=="all") {
00497     if (sizeof(args)<=1) zeit=time()-1;
00498     else if (args[1]!="bis") return CatchupSyntax();
00499     else if (sizeof(args)<3) return CatchupSyntax();
00500 
00501     else zeit=InterpretTime(args[2..],1);
00502     if (zeit>time()) zeit=time()-1;
00503     write("Uebergehe alle Rubriken bis "+dtime(zeit)+".\n");
00504     for (welche=0;welche<sizeof(groups);++welche) {
00505       gr=groups[welche];
00506 //      zeit=NEWSSERVER->GetNewsTime(gr);
00507       if (abs(read_until[gr])<zeit) 
00508                 read_until[gr]=(read_until[gr]>=0)?zeit:-zeit;
00509       if (TP) TP->SetProp(P_READ_NEWS,read_until);
00510     }
00511     return 1;
00512   }
00513 
00514   // Anzahl Artikel
00515   
00516   if (sizeof(args)>=2 && args[1]=="artikel") {
00517     if (!to_int(args[0])) return CatchupSyntax();
00518     news=NEWSSERVER->GetNotes(GROUP);
00519     for (i=sizeof(news)-1;i>=0&&news[i][M_TIME]>read_until[GROUP];i--);
00520     welche=i+to_int(args[0]);
00521     if (welche>=sizeof(news)) welche=sizeof(news)-1;
00522     write("Uebergehe die naechsten "+(welche-i)+" Artikel in Rubrik "+
00523         GROUP+"\n.");
00524     if (welche>=0) {
00525       zeit=news[welche][M_TIME];
00526       read_until[GROUP]=(read_until[GROUP]>=0)?zeit:-zeit;
00527       if (TP) TP->SetProp(P_READ_NEWS,read_until);
00528     }
00529     return 1;
00530   }
00531 
00532   // einzelne Rubrik.
00533 
00534   if (!(gr=GetGroupName(args[0]))) return 1;
00535   news=NEWSSERVER->GetNotes(gr);
00536   if (!sizeof(news)) {
00537     write("Rubrik "+gr+" ist leer.\n");
00538     return 1;
00539   }
00540 //  zeit=news[sizeof(news)-1][M_TIME];
00541   if (sizeof(args)<=1)
00542     zeit=time();
00543   else
00544     if (args[1]!="bis") return CatchupSyntax();
00545   else 
00546     zeit=InterpretTime(args[2..],1);
00547   if (zeit>time()) zeit=time();
00548   read_until[gr]=zeit;
00549   if (TP) TP->SetProp(P_READ_NEWS,read_until);
00550   write("Uebergehe "+gr+" bis "+dtime(zeit)+",\nletzter Artikel war vom "+
00551       dtime(NEWSSERVER->GetNewsTime(gr))+"\n");
00552   return 1;
00553 }

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

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

static CatchupSyntax (  )  [static]

Definiert in Zeile 556 der Datei mpa.c.

Wird benutzt von Catchup().

00556                        {
00557   write("Syntax des Befehls uebergehe (oder catchup):\n"
00558                 "  uebergehe [rubrik]              (default: aktuelle Rubrik)\n"
00559                 "  uebergehe alles                 (in allen Rubriken)\n"
00560                 "  uebergehe <anz> artikel         (in akt. Rubrik)\n"
00561                 "  uebergehe [rubrik]|alles bis <tag>.<monat>.[<jahr>]\n"
00562                 "  uebergehe [rubrik]|alles bis vor <zeit>        wobei\n"
00563                 "      <zeit> = [<n> d|tage] [<n> h|stunden] [<n> m|min|minuten]\n"
00564                 "  uebergehe thread|antworten      (entspr. 'ignoriere thread')\n");
00565 
00566   return 1;
00567 }

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

static int CheckThreads ( string  rubrik,
int  timeout 
) [static]

Definiert in Zeile 292 der Datei mpa.c.

Benutzt deadTID, i, IGNOREGROUP und read_until.

Wird benutzt von ReadNextUnread().

00292                                                    {
00293   mixed tids;
00294   int i;
00295 
00296 //  deadTID=0;
00297   tids=m_indices(read_until[IGNOREGROUP][rubrik]);
00298   for (i=sizeof(tids)-1;i>=0&&!deadTID;i--)
00299     if (read_until[IGNOREGROUP][rubrik][tids[i]]<timeout) deadTID=tids[i];
00300   return 1;
00301 }  

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

create (  ) 

Definiert in Zeile 109 der Datei mpa.c.

Benutzt create(), GROUP, P_NAME, P_SHORT, read_until und SetProp().

00110 {
00111   ::create();
00112   seteuid(getuid());
00113   GROUP="allgemeines";
00114   SetProp(P_SHORT,"Die Zeitung");
00115   SetProp(P_NAME,"Zeitung");
00116   if (!read_until) read_until=(["dwnews":-1,"muell":-1]);
00117 }

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

static varargs mixed GetGroupName ( mixed  g,
mixed  groups 
) [static]

Definiert in Zeile 1369 der Datei mpa.c.

Benutzt break_string(), GROUP, i und NEWSSERVER.

Wird benutzt von Catchup(), inhalt(), MoveMessage(), ReadNextUnread(), rubrik(), Subscribe() und Unsubscribe().

01369                                                         {
01370   /* Name einer Rubrik. g ist int oder string, enthaelt Name oder Nummer
01371      (ab 1 numeriert) */
01372   mixed i,expr,gg;
01373   if (!g) return write("Du solltest schon die Rubrik angeben.\n"),0;
01374   if (!groups) groups=NEWSSERVER->GetGroups();
01375   if (intp(i=g) || sscanf(g,"%d",i)) {
01376     if (i>0 && i<=sizeof(groups)) return groups[i-1];
01377     write("Eine Rubrik mit der Nummer "+i+" gibt es leider nicht.\n");
01378     return 0;
01379   }
01380   g=lower_case(g);
01381   switch(g){
01382   case ".": return GROUP;
01383   case "+": return groups[(member(groups,GROUP)+1)%sizeof(groups)];
01384   case "-": 
01385     return groups[(member(groups,GROUP)-1+sizeof(groups))%sizeof(groups)];
01386   }
01387 
01388   // Existiert die Rubrik genau so?
01389   if (member(groups,g)>-1) return g;
01390 
01391   g = regreplace(g,"[[\\]\\*()?]","",1);
01392   // haerteres Kriterium: Alle Abschnitte angegeben
01393   expr="^"+implode(explode(g,"."),"[^\\.]*\\.")+"[^\\.]*$";
01394 //  write("REGEXP="+expr+"\n");
01395   gg=regexp(groups,expr);
01396   if (sizeof(gg)==1) return gg[0];
01397 
01398   // weicheres Kriterium: Nicht alle Abschnitte angegeben
01399   expr="^(.*\\.)*"+implode(explode(g,"."),".*\\.")+".*$";
01400 //  write("REGEXP="+expr+"\n");
01401   gg=regexp(groups,expr);
01402 
01403   if (!sizeof(gg)) {
01404     write("Eine Rubrik '"+g+"' gibt es hier leider nicht.\n");
01405     return 0;
01406   }
01407 
01408   if (sizeof(gg)==1) return gg[0];
01409   
01410   write(break_string("Die Rubrik "+g+" ist nicht eindeutig. Wahrscheinlich "
01411         "meinst Du eine der folgenden: "+implode(gg,", ")+".\n",78));
01412   return 0;
01413 }

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

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

int GetTID ( mixed  message  ) 

Definiert in Zeile 1435 der Datei mpa.c.

Benutzt M_MESSAGE, M_TIME und STATUSESCAPE.

Wird benutzt von lies(), ReadNextUnread() und Reply().

01435                           {
01436   string dummy;
01437   int tid;
01438   return (sscanf(message[M_MESSAGE],"%s" STATUSESCAPE " tid=%d",dummy,tid)==2) 
01439     ? tid : message[M_TIME];
01440 }

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

HelpPage ( str   ) 

Definiert in Zeile 1281 der Datei mpa.c.

Benutzt HELPPAGE, IS_LEARNER, TP und WIZHELPPAGE.

01281               {
01282   if (str!="mpa"&&str!="zeitung") return 0;
01283   this_player()->More(read_file(HELPPAGE)+
01284       (IS_LEARNER(TP) ? read_file(WIZHELPPAGE) : ""));
01285   return 1;
01286 }

static Ignore ( str   )  [static]

Definiert in Zeile 452 der Datei mpa.c.

Benutzt Catchup().

00452                    {
00453   if (str=="thread"||str=="antworten") return Catchup(str);
00454   return 0;
00455 }

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

static void InformPlayers ( string  group,
string  player,
string  text 
) [static]

Definiert in Zeile 1290 der Datei mpa.c.

Benutzt data, i, P_IGNORE, P_READ_NEWS, P_WAITFOR und players.

Wird benutzt von PostNote().

01291 {
01292   object *players;
01293   int i;
01294   mixed data;
01295   string ig;
01296 
01297   players=users();
01298   ig=lower_case(player)+".news";
01299   for (i=sizeof(players)-1;i>=0;i--) {
01300     data=players[i]->QueryProp(P_WAITFOR);
01301     if (pointerp(data)&&(member(data,"Mpa")>-1)) {
01302       data=players[i]->QueryProp(P_READ_NEWS);
01303       if (mappingp(data)&&(data[group]>0)) {
01304                 data=players[i]->QueryProp(P_IGNORE);
01305                 if ((!pointerp(data))||(member(data,ig)==-1))
01306                   tell_object(players[i],text);
01307       }
01308     }
01309   }
01310 }

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

inhalt ( str   ) 

Definiert in Zeile 856 der Datei mpa.c.

Benutzt abs, DEFAULTGROUP, dtime(), GetGroupName(), GROUP, i, M_MESSAGE, M_TIME, M_TITLE, M_WRITER, NEWSSERVER, notify_fail(), read_until und ReadNextUnread().

00856             {
00857   int i,endflag,timeout;
00858   string *gruppen,s,txt,suche;
00859   mixed messages;
00860 
00861   if (str=="?"||str=="-?") return
00862     write("Syntax: inhalt [<rubrik>] [ende] [suche <text>]\n"),1;
00863 
00864   str=(!str)?({}):explode(str," ");
00865 
00866   if (sizeof(str) && (str[0]=="neu" || str[0]=="neues") )
00867     return ReadNextUnread("liste"),1;
00868 
00869   if (endflag=member(str,"ende")+1) str-=({"ende"});
00870   if (((i=member(str,"suche")) != -1) && (sizeof(str) > i)) {
00871     suche=lower_case(implode(str[i+1..]," "));
00872     str=str[0..i-1];
00873   }
00874   else
00875     suche=0;
00876   if (!sizeof(str)) {
00877     str=GROUP;
00878     if (!pointerp(messages=NEWSSERVER->GetNotes(str))){
00879       str=GROUP=DEFAULTGROUP;
00880     if (!pointerp(messages=NEWSSERVER->GetNotes(str)))
00881       return notify_fail("Seltsam, irgendwie geht hier einiges schief...\n"),0;
00882     }
00883   }
00884   else {
00885     str=GetGroupName(str[0]);
00886     if (!str) return 1;
00887     messages=NEWSSERVER->GetNotes(str);
00888   }
00889   timeout=abs(read_until[str]);
00890   s="Inhalt der Rubrik "+str+":\n\n";
00891   if (!pointerp(messages) || !sizeof(messages))
00892     return 
00893       write(s+"Zur Zeit befinden sich keine Artikel in dieser Rubrik.\n"),1;
00894   if (suche)
00895     s+="Suche nach '"+suche+"' in der Rubrik ergab folgende Treffer:\n\n";
00896   else
00897     if (sizeof(messages)==1)
00898       s+="Zur Zeit befindet sich ein Artikel in der Rubrik:\n\n";
00899     else
00900       s+="Zur Zeit befinden sich "+sizeof(messages)+
00901         " Artikel in der Rubrik:\n\n";
00902   if (endflag&&(sizeof(messages)>16)&&
00903       messages[sizeof(messages)-16][M_TIME]>=timeout) timeout=-1;
00904   for (i=(endflag?(((endflag=sizeof(messages)-15)<0)?0:endflag):0);
00905        i<sizeof(messages);i++)
00906   {
00907     txt=sprintf("%2d.%s%-48s%4d (%-11s) %s\n",i+1,
00908                 (((timeout>=0) && timeout<messages[i][M_TIME] )?
00909                  ( (timeout=-1),"*"):" "),messages[i][M_TITLE],
00910                         sizeof(explode(messages[i][M_MESSAGE],"\n")),
00911                         messages[i][M_WRITER],
00912                         dtime(messages[i][M_TIME])[5..11]);
00913     if (!suche || (strstr(lower_case(txt), suche) != -1))
00914       s+=txt;
00915   }
00916   if (endflag) write(s);
00917   else this_player()->More(s);
00918   return 1;
00919 }

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

init (  ) 

Definiert in Zeile 159 der Datei mpa.c.

Benutzt init(), init_rescue(), IS_ELDER, IS_LEARNER, IS_SEER und TP.

00160 {
00161   ::init();
00162   remove_action("lies"); /* von /std/thing, damit das lies() nicht buggt. */
00163   add_action("schreib","schreib");
00164   add_action("schreib","schreibe");
00165   add_action("schreib","note");
00166   add_action("LiesArtikel","lies");
00167   add_action("artikel","artikel");
00168   add_action("loesche","loesch");
00169   add_action("loesche","loesche");
00170   add_action("rubrik","rubrik");
00171   add_action("inhalt","inhalt");
00172   add_action("rubriken","rubriken");
00173   add_action("ReadNextUnread","nn");
00174   add_action("Catchup","catchup");
00175   add_action("Catchup","uebergeh");
00176   add_action("Catchup","uebergehe");
00177   add_action("Uncatchup","wiederhol");
00178   add_action("Uncatchup","wiederhole");
00179   add_action("Uncatchup","uncatchup");
00180   add_action("Reply","antwort");
00181   add_action("Reply","antworte");
00182   add_action("Reply2","reply");
00183   add_action("HelpPage","hilfe");
00184   add_action("HelpPage","man");
00185   add_action("Unsubscribe","unsubscribe");
00186   add_action("Bestelle","bestell");
00187   add_action("Bestelle","bestelle");
00188   add_action("Subscribe","subscribe");
00189   add_action("Subscribe","abonnier");
00190   add_action("Subscribe","abonniere");
00191   add_action("MoveMessage","verleg");
00192   add_action("MoveMessage","verlege");
00193   add_action("SetNNADWMSG","zeitungsmeldung");
00194   add_action("Ignore","ignorier");
00195   add_action("Ignore","ignoriere");
00196   add_action("MailMessage","versende");
00197   add_action("verbrennen","verbrenne");
00198 
00199   if (IS_SEER(TP)) {
00200     add_action("Mail","mail");
00201   }
00202   if (IS_LEARNER(TP)) {
00203     add_action("SaveMessage","speicher");
00204     add_action("SaveMessage","speichere");
00205     add_action("ReadNextUnread","read"); /* NF Compatibility Special */
00206   }
00207   if (IS_ELDER(TP))
00208   {
00209     add_action("MoveTrash","trash");
00210   }
00211   init_rescue();
00212 }

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

varargs int InterpretTime ( mixed  a,
int  flag 
)

Definiert in Zeile 1443 der Datei mpa.c.

Benutzt ctime() und i.

Wird benutzt von Catchup(), spielpause() und Uncatchup().

01443                                             {
01444   // string oder string *
01445   // akzeptiert folgende Formate:
01446   //   dd.mm.jj     (Rueckgabe: 0:00 des entsprechenden Tages)
01447   //   vor [<anz> d|tagen] [<anz> h|stunden] [<anz> m|minuten]
01448   // flag=1: "inklusive": bei dd.mm.jj-Format 23:59:59 statt 0:00 Uhr
01449 
01450   int i,j,k,t,nrargs;
01451   string s;
01452   if (stringp(a)) a=explode(a," ");
01453 
01454 //  printf("%O\n",a);
01455 
01456   if ((nrargs=sscanf(a[0],"%d.%d.%d",i,j,k))==3 || 
01457       (nrargs=sscanf(a[0],"%d.%d.",i,j))==2) {
01458     // Datum -> Zeit: Funktioniert im Zeitraum 1973 - ca. 2090
01459     //                in Zeitzonen mit ganzen Stunden ggue Rechneruhr.
01460     if (nrargs==2) 
01461       k=70+time()/31536000;
01462     if (k<70) k+=100;
01463     if (k>1970) k-=1900;
01464     if (k<70||k>150) return
01465       write("Unzulaessiges Jahr (erlaubt: 70-heute).\n"),0;
01466     t=(k-70)*31536000;
01467 
01468     if (i<1||i>31) return write("Unzulaessiger Tag (erlaubt: 1-31).\n"),0;
01469     if (j<1||j>12) return write("Unzulaessiger Monat (erlaubt: 1-12).\n"),0;
01470 //    printf("%d.%d.%d\n",i,j,k);
01471     s=ctime(t);
01472     if ((j>2) && !(k%4)) t+=86400;    // Schaltjahrkorrektur fuer Monate>=3
01473     t+=({        0,  2678400,  5097600,  7776000,
01474                   10368000, 13046400, 15638400, 18316800,
01475                   20995200, 23587200, 26265600, 28857600})[j-1];
01476     t+=86400*(i-1);
01477     t+=86400*(32-to_int(s[8..9]));  // Schaltjahrkorrektur
01478     t-=3600*to_int(s[11..12]);      // Zeitzonenkorrektur
01479     t-=3600*to_int(ctime(t)[11..12]);      // Sommerzeitkorrektur
01480 //    write("Kontrolle: "+dtime(t)+"\n");
01481     if (nrargs==2 && t>time()) t-=31536000;
01482     return (flag?t+86399:t);
01483   }
01484 
01485   t=0;
01486   if (a[0]=="vor") for (i=sizeof(a)-1;i>0;i--) {
01487     switch (a[i]) {
01488     case "m": 
01489     case "minuten": 
01490     case "min": 
01491     case "minute":
01492       t+=60*to_int(a[i-1]);
01493       break;
01494     case "h": 
01495     case "stunde": 
01496     case "stunden": 
01497     case "s":
01498       t+=3600*to_int(a[i-1]);
01499       break;
01500     case "d": 
01501     case "tag": 
01502     case "tage": 
01503     case "t":
01504       t+=86400*to_int(a[i-1]);
01505       break;
01506     default: 
01507       if (!to_int(a[i]))
01508         write("Argumentfehler: Kann nichts mit '"+a[i]+"' anfangen.\n");
01509     }
01510     return time()-t;
01511   }
01512   else return write("Argumentfehler.\n"),0;
01513 }

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

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

static KillGroup ( name   )  [static]

Definiert in Zeile 226 der Datei mpa.c.

Benutzt m_delete(), name und read_until.

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

static varargs lies ( mixed  str  )  [static]

Definiert in Zeile 1049 der Datei mpa.c.

Benutzt GetTID(), GROUP, IS_LEARNER, lasttitle, M2S_VT100, M_TIME, M_TITLE, M_WRITER, Message2string(), NEWSSERVER und notify_fail().

01049                                {
01050   mixed num;
01051   mixed *messages;
01052   int tid;
01053 
01054   if (str=="?"||str=="-?") return 
01055     write("Syntax: lies <nr>\n"
01056                   "        artikel <nr>\n"
01057                   "Siehe auch: nn\n"),1;
01058 
01059   if (intp(str)) num=str;
01060   if ((!num && (!str || str=="" || sscanf(str,"%d",num)!=1)) || num<=0) {
01061     notify_fail("WELCHE Nachricht willst Du lesen?\n");
01062     return 0;
01063   }
01064   if (!pointerp(messages=NEWSSERVER->GetNotes(GROUP)))
01065     return notify_fail("Seltsam, die Rubrik '"+GROUP+
01066         "' gibt es nicht mehr...\n"), 0;
01067   num--;
01068   if (sizeof(messages)<=num) {
01069     notify_fail("So viele Artikel sind da nicht!\n");
01070     return 0;
01071   }
01072   
01073   lasttitle=({messages[num][M_TITLE],messages[num][M_WRITER],
01074       messages[num][M_TIME],GetTID(messages[num]),GROUP,num});
01075   this_player()->More(Message2string(messages[num],messages,M2S_VT100));
01076   if (this_player() && IS_LEARNER(this_player()))
01077     this_player()->save_me(1);
01078   return 1;
01079 }

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

LiesArtikel ( str   ) 

Definiert in Zeile 271 der Datei mpa.c.

Benutzt lies() und rubrik().

00271                  {
00272   string s1;
00273   if ( !str ) return 0;
00274   if (sscanf(str,"rubrik %s",s1))
00275     return rubrik(s1);
00276   if (sscanf(str,"artikel %s",s1))
00277     return lies(s1);
00278 }

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

static loesche ( str   )  [static]

Definiert in Zeile 1008 der Datei mpa.c.

Benutzt dtime(), GROUP, M_TIME, M_TITLE, M_WRITER, name, NEWSSERVER und notify_fail().

01008                     {
01009   int num;
01010   mixed *messages;
01011 
01012   if (str=="?"||str=="-?") return 
01013     write("Syntax: loesche artikel <nr>\n"
01014                   "  (bezieht sich immer auf die aktuelle Rubrik.\n"),1;
01015 
01016   if (!str || sscanf(str,"artikel %d",num)!=1 || num<=0) 
01017    return notify_fail("WELCHEN Artikel willst Du loeschen ?\n"),0;
01018   num--;
01019   messages=(NEWSSERVER->GetNotes(GROUP));
01020   if (sizeof(messages)<=num) return
01021     notify_fail("So viele Artikel sind da nicht!\n"),0;
01022   
01023   write("Rubrik "+GROUP+", Artikel "+(num+1)+
01024                 " von "+capitalize(messages[num][M_WRITER])+
01025                 " vom "+dtime(messages[num][M_TIME])[5..26]+
01026                 ",\nTitel: "+messages[num][M_TITLE]+",\n\n");
01027 
01028   /* (ueberfluessige Abfrage, macht schon /secure/news)
01029   if (!IS_LEARNER(TI) && lower_case(messages[num][M_WRITER])!=geteuid(TI)) 
01030     return 
01031       write("Nicht geloescht - du darfst nur eigene Artikel loeschen.\n"),1;
01032                   */
01033 
01034   switch (NEWSSERVER->RemoveNote(GROUP, num)){
01035   case 1: write("Artikel ist geloescht.\n");
01036     say(this_player()->name()+" loescht einen Artikel aus der Zeitung.\n");
01037     return 1;
01038   case -1: write("Diesen Artikel darfst Du nicht loeschen.\n");
01039     say(this_player()->name()+" versucht vergeblich, einen Artikel zu loeschen.\n");
01040     return 1;
01041   case -3: write("So viele Artikel sind da nicht !\n");
01042     return 1;
01043   default: write("Interner Fehler. Bitte Erzmagier verstaendigen !\n");
01044     return 1;
01045   }  
01046 }

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

long (  ) 

Definiert in Zeile 129 der Datei mpa.c.

Benutzt GROUP, IS_LEARNER, IS_SEER und TP.

00129        {
00130   return "\
00131 Dies ist das Servicepaket der MPA (Morgengrauens Presse Agentur) -\n\
00132 die Zeitung des Morgengrauens.\n\
00133 Du kannst damit aktuelle Artikel lesen und schreiben, mit folgenden Befehlen:\n\
00134  'nn [rubrik]' (Neueste Nachrichten) wuehlt die Rubrik durch und schaut,\n\
00135                 ob was neu ist. Der erste ungelesene Artikel wird angezeigt.\n\
00136                 Ohne Argument werden alle Rubriken durchwuehlt.\n\
00137  'hilfe mpa'    Ausfuehrliche Hilfsseite. Lesen dringend empfohlen!\n\
00138 Weitere Befehle:\n\
00139  rubriken [neu]                       bestelle <rubrik> ab\n\
00140  [lies ]rubrik <rubrik>               abonniere <rubrik>\n\
00141  inhalt [<rubrik>|neu|suche <text>]   wiederhole ...\n\
00142  nn <rubriken>|<liste>                uebergehe ...\n\
00143  [lies ]artikel <nummer>"+
00144   ( (IS_LEARNER(TP)) ? "              speichere artikel <nr>" : "" )+"\n\
00145  schreib <titel>                      versende artikel [nr] an <adresse>\n\
00146  antworte [auf artikel <nr>] [titel]  verlege artikel <nr> nach <rubrik>\n\
00147  loesche artikel <nr>                 zeitungsmeldung [neue Meldung]\n\
00148  verbrenne zeitung                    wenn Dir alles zuviel wird....\n\
00149 "+ (IS_SEER(TP) ? "\
00150 Mit 'mail' bzw 'mail <spieler>' kannst Du Post lesen und schreiben.\n\
00151 " : "" )+"\
00152 Eingebaute aliase: note, catchup, reply, unsubscribe, subscribe, uncatchup.\n\
00153 Viele Befehle geben mit '<befehl> ?' einige Syntaxhinweise.\n\
00154 Aktuelle Rubrik: "+GROUP+"\n\
00155 ";
00156 }

static Mail ( str   )  [static]

Definiert in Zeile 260 der Datei mpa.c.

Benutzt MAILER und TP.

Wird benutzt von ReadNextUnread().

00260                  {
00261   object mailer;
00262   if (this_interactive()!=this_player()) return 0;
00263   mailer=clone_object(MAILER);
00264   mailer->SetOfficeName("mpa Kurierdienst");
00265   mailer->do_mail( ((!str)||(str=="mail")) ? 0 : TP->_unparsed_args() );
00266   return 1;
00267 }

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

static MailMessage ( str   )  [static]

Definiert in Zeile 1212 der Datei mpa.c.

Benutzt GROUP, group, h, IS_POST, IS_SEER, LAST_GROUP, LAST_SIZEOF, LAST_TIME, LAST_WRITER, lasttitle, M2S_REMOTE, M_TIME, M_TITLE, M_WRITER, MAILER, Message2string(), NEWSSERVER, notify_fail(), rec() und TP.

01212                         {
01213   mixed num,rec,group;
01214   mixed *messages;
01215 
01216 //  printf("%O\n",inherit_list(environment(TP)));
01217 //  if (member(query_actions(this_player()),"mail")<0)
01218 //     tut nicht wegen anderer Implemtierung von AddCmd in Raeumen
01219   
01220   if (str=="?"||str=="-?") return
01221     write("Syntax: versende artikel <nr> an <adresse>\n"),1;
01222 
01223   str=TP->_unparsed_args();     // wegen Mailadressen
01224   if (str) str=lower_case(str);
01225 
01226   if (!IS_SEER(TP) && !IS_POST(environment(TP)))
01227     return notify_fail("Du musst in ein Postamt gehen, "
01228         "um etwas versenden zu koennen.\n"),0;
01229   
01230   num=0;
01231   
01232   if (!str || (sscanf(str,"artikel %d an %s",num,rec)!=2 &&
01233                        sscanf(str,"note %d to %s",num,rec)!=2 &&
01234                        sscanf(str,"note to %s",rec)!=1 &&
01235                        sscanf(str,"artikel an %s",rec)!=1)){
01236      if (!str || str[0..6]=="artikel"||str[0..3]=="note") return 
01237       write("Welchen Artikel willst Du versenden, und wohin?\n"),1;
01238     else return 
01239       notify_fail("Welchen Artikel willst Du versenden, und wohin?\n"),0;
01240   }
01241   if (!num&&(!pointerp(lasttitle)||sizeof(lasttitle)<LAST_SIZEOF))
01242     return write("Du hast scheinbar noch nichts gelesen, worauf man sich "
01243         "beziehen kann.\nGib notfalls die Nummer des Artikels an.\n"),1;
01244 
01245   //  printf("lasttitle= %O\nnum=%d\n",lasttitle,num);
01246 
01247   if (!pointerp(messages=
01248       NEWSSERVER->GetNotes(group=(num?GROUP:lasttitle[LAST_GROUP]))))
01249     return notify_fail("Seltsam, die Rubrik gibt es nicht mehr...\n"), 0;
01250 
01251   if (!pointerp(messages)||!sizeof(messages))
01252     return write("Die Rubrik "+group+" ist leer.\n"),1;
01253   if (num<0||sizeof(messages)<num) return
01254     write("Einen Artikel mit Nummer "+num+" gibt es in Rubrik "+group+
01255         " nicht!\n"),1;
01256 
01257   if (num) num--;
01258   else {
01259     int h;
01260     num=-1;
01261     if (pointerp(messages)) {
01262       for (h=sizeof(messages)-1;
01263                    (h>=0 && messages[h][M_TIME]>=lasttitle[LAST_TIME]);h--) 
01264                 if (messages[h][M_TIME]==lasttitle[LAST_TIME] && 
01265                     lower_case(messages[h][M_WRITER])==
01266             lower_case(lasttitle[LAST_WRITER]))
01267           num=h;
01268     }
01269     if (num<0)
01270       return notify_fail("Konnte Artikel nicht wiederfinden, "
01271           "bitte gib die Nummer an.\n"),0;
01272   }
01273   MAILER->do_mail( rec,
01274       "MPA: "+messages[num][M_TITLE]+" ("+messages[num][M_WRITER]+")",
01275       Message2string(num,messages,M2S_REMOTE,group)+"\n");
01276   return 1;
01277 }

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

static varargs string Message2string ( mixed  msg,
mixed  messages,
int  flag,
string  group 
) [static]

Definiert in Zeile 1313 der Datei mpa.c.

Benutzt ANSI_BOLD, ANSI_NORMAL, dtime(), GROUP, h, i, IS_STATUSLINE, M2S_REMOTE, M2S_VT100, M_MESSAGE, M_TIME, M_TITLE, M_WRITER, P_TTY und STATUSESCAPE.

Wird benutzt von lies(), MailMessage() und SaveMessage().

01313                                                                                      {
01314   // Aufrufe: (Nummer,Notes[,flag[,group]]) oder (Note,Notes[,flag[,group]])
01315   // flag: M2S_VT100 : ggf ANSI-Codes verwenden
01316   //       M2S_REMOTE: Rubrik und Artikelnummer ausgeben (speichern, versenden)
01317   // Achtung: Wenn flag&M2S_REMOTE, muss msg int sein
01318   // group: Name der Rubrik, wenn nicht aktuelle Rubrik. Nur bei M2S_REMOTE
01319 
01320   string txt,hs,s,*m,s2;
01321   int i,hi,thisnr,ansiflag;
01322 
01323   if (flag&M2S_REMOTE) txt="Rubrik: "+(group?group:GROUP)+", Artikel: "+
01324     (intp(msg)?to_string(msg+1):"???")+" von "+sizeof(messages)+"\n";
01325   else txt="";
01326 
01327   if (intp(msg)) {
01328     thisnr=msg;
01329     msg=messages[msg];
01330   } else thisnr=-1;
01331   if (!msg) return 0;
01332 
01333   ansiflag=(flag&M2S_VT100)&&(this_player()->QueryProp(P_TTY)!="dumb");
01334 
01335   txt += (ansiflag?ANSI_BOLD:"")+ msg[M_TITLE]+(ansiflag?ANSI_NORMAL:"")+
01336     " ("+msg[M_WRITER]+", "+
01337     dtime(msg[M_TIME])[5..26]+"):\n";
01338 //  if (geteuid(TP)=="sitopanaki") txt+="TID="+GetTID(msg)+"\n"; // Debug
01339   if (!IS_STATUSLINE(msg[M_MESSAGE]))
01340     return txt+"\n"+msg[M_MESSAGE];
01341   m=explode(msg[M_MESSAGE],"\n");
01342   while (IS_STATUSLINE(m[0])) {
01343 //    txt+=m[0]+"\n"; // ###
01344     if (sscanf(m[0],"%s rn=%s rt=%d rg=%s",hs,s,hi,hs)==4 ||
01345                 sscanf(m[0],"%s rn=%s rt=%d",hs,s,hi)==3)
01346     {
01347       int nr,h;
01348       nr=-1;
01349       if (pointerp(messages))
01350       {
01351                 for (h=((thisnr>=0) ? thisnr-1 : sizeof(messages)-1);
01352                      (h>=0 && messages[h][M_TIME]>=hi);h--) 
01353                   if (messages[h][M_TIME]==hi &&
01354               lower_case(messages[h][M_WRITER])==lower_case(s))
01355             nr=h;
01356       }
01357       txt+="[Bezug: Artikel "+((nr>=0) ? (nr+1) : 
01358                  (hs==STATUSESCAPE||hs==(group?group:GROUP)?"(geloescht?)":"in "+hs))+
01359          " von "+capitalize(s)+" vom "+dtime(hi)[5..26]+"]\n";
01360     }
01361     if (sscanf(m[0],"%s on=%s ot=%d og=%s",hs,s,hi,hs)==4) {
01362       txt+="[Autor: "+s+", "+dtime(hi)[5..26]+", verlegt von "+hs+"]\n";
01363     }
01364     m=m[1..];
01365   }
01366   return txt+"\n"+implode(m,"\n");
01367 }

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

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

static MoveMessage ( str   )  [static]

Definiert in Zeile 1134 der Datei mpa.c.

Benutzt CatchNewsError(), GetGroupName(), GROUP, i, IS_LEARNER, M_BOARD, M_MESSAGE, M_TIME, M_WRITER, msg(), NEWSSERVER, notify_fail(), STATUSESCAPE und TI.

Wird benutzt von MoveTrash().

01134                         {
01135   int num,i;
01136   mixed msg/*,expl*/;
01137   string gr;
01138   if (str=="?"||str=="-?") return
01139     write("Syntax: verlege artikel <nr> nach <rubrik>\n"
01140                   "  Artikel und Rubrik muessen explizit angegeben werden.\n"),1;
01141   if (!str || sscanf(str,"artikel %d nach %s",num,gr)!=2) return (int)notify_fail(
01142                 "verlege artikel <nr> nach <rubrik>, oder was?\n");
01143   if (!(gr=GetGroupName(gr))) return 1;
01144   if (!(CatchNewsError(NEWSSERVER->AskAllowedWrite(gr),"Die Rubrik ist leider voll.\n"))) return 1;
01145 
01146   if (!pointerp(msg=NEWSSERVER->GetNotes(GROUP)))
01147     return notify_fail("Seltsam, die Rubrik '"+GROUP+
01148         "' gibt es nicht mehr...\n"), 0;
01149 
01150   num--;
01151   if (sizeof(msg)<=num) return
01152     notify_fail("So viele Nachrichten sind da nicht !\n"),0;
01153   msg=msg[num];
01154   if (geteuid(TI) != lower_case(msg[M_WRITER])) {    
01155     if (!IS_LEARNER(TI)) return 
01156       write("Du darfst nur Deine eigenen Artikel verlegen.\n"),1;
01157     write("WARNUNG: Das ist nicht Dein eigener Artikel!\n");
01158   }
01159     //  return (int)notify_fail("Man darf zur Zeit nur eigene Artikel verlegen.\n");
01160   if (!CatchNewsError(NEWSSERVER->RemoveNote(GROUP,num),"Dieser Fehler kann eigentlich nicht auftreten"))
01161     write("Warnung! Konnte Artikel an alter Position nicht loeschen.\n");
01162   else write("Artikel von Rubrik "+GROUP+" entfernt.\n");
01163 
01164   msg[M_MESSAGE]=
01165     sprintf("%s on=%s ot=%d og=%s\n",
01166                     STATUSESCAPE,msg[M_WRITER],msg[M_TIME],msg[M_BOARD])
01167       +msg[M_MESSAGE];
01168 
01169 /*
01170   expl=explode(msg[M_MESSAGE],"\n");
01171   for (i=0;(IS_STATUSLINE(expl[i][0..2]));i++);
01172   msg[M_MESSAGE]=( (i) ? implode(expl[0..i-1],"\n")+"\n" : "" ) +
01173     "[Verlegt von "+msg[M_BOARD]+", "+msg[M_WRITER]+", "+
01174     dtime(msg[M_TIME])[5..26]+"]:\n"+
01175       implode(expl[i..],"\n")+"\n";
01176 */
01177 
01178   msg[M_BOARD]=gr;
01179   NEWSSERVER->WriteNote(msg);
01180   write("Artikel nach Rubrik "+gr+" verlegt.\n");
01181   return 1;
01182 }

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

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

static MoveTrash (  )  [static]

Definiert in Zeile 1124 der Datei mpa.c.

Benutzt GROUP, LAST_GROUP, LAST_NR, LAST_SIZEOF, lasttitle und MoveMessage().

01125 {
01126   if (!pointerp(lasttitle)||sizeof(lasttitle)<LAST_SIZEOF) return
01127     write("Was denn bitte? Du hast noch gar nichts gelesen!\n"),1;
01128   if (lasttitle[LAST_GROUP]!=GROUP) return
01129     write("Nix gibts! Du hast die Rubrik gewechselt!\n"),1;
01130   return MoveMessage(sprintf("artikel %d nach muell",lasttitle[LAST_NR]+1));
01131 }

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

protected void NotifyMove ( object  dest,
object  oldenv,
int  method 
)

Definiert in Zeile 1426 der Datei mpa.c.

Benutzt P_READ_NEWS und read_until.

Wird benutzt von move() und NotifyMove().

01426                                                                   {
01427   ::NotifyMove(dest, oldenv, method);
01428   if (objectp(environment()) && query_once_interactive(environment()) &&
01429       (!mappingp(read_until)||(sizeof(read_until)))) {
01430     read_until=((environment()->QueryProp(P_READ_NEWS))||([]));
01431 //    if ((TP==TI)&&(TP==environment())) RebuildGroupList();
01432   }
01433 }

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

static PostNote ( text   )  [static]

Definiert in Zeile 814 der Datei mpa.c.

Benutzt CatchNewsError(), err, InformPlayers(), M_BOARD, M_MESSAGE, message, NEWSSERVER, old_explode(), text() und TP.

00814                       {
00815   int err;
00816   string sig;
00817 
00818   if (!text) {
00819     write("Abbruch! Artikel landet im Reisswolf.\n");
00820     return 1;
00821   }
00822   if (!sizeof(old_explode(text,"\n")-
00823                       ({"q","quit"," **","** ","ende","","exit"," "}) 
00824                       ) )
00825     return write("\
00826 ACHTUNG: Wolltest Du wirklich einen Artikel ohne Inhalt in die mpa setzen?\n\
00827 Artikel ohne erkennbaren Inhalt werden NICHT veroeffentlicht. Bitte ueber-\n\
00828 pruef Deine Syntax, falls Du keinen Artikel schreiben wolltest, oder schreib\n\
00829 auch ein bisschen Text!\n\
00830 Artikel landet im Reisswolf.\n"),1;
00831   if (!message[M_MESSAGE])
00832     message[M_MESSAGE] = text;
00833   else
00834     message[M_MESSAGE]+=text;
00835   if (sig=read_file("/players/"+geteuid(this_interactive())+"/.signature"))
00836     message[M_MESSAGE]+=sig;
00837   if (!CatchNewsError(NEWSSERVER->WriteNote(message),
00838        "Diese Rubrik ist voll. Mist, da war jemand schneller...")) {
00839     write("Versuch, Platz in der Rubrik zu finden, dann kannst Du mir ~r nochmal\nin den Text einsteigen und ihn anschliessend veroeffentlichen.\n(Vorschlag: Einen veralteten Artikel abhaengen oder verlegen.\n");
00840     return 0;
00841   }
00842   write("OK, Artikel ist veroeffentlicht.\n");
00843   say(capitalize(TP->name())+
00844       " hat einen Artikel in der Zeitung veroeffentlicht.\n");
00845   if (geteuid(TP)!="sitopanaki")
00846     InformPlayers(message[M_BOARD],geteuid(this_interactive()),
00847                                 "* MPA: Neuer Artikel von "+
00848                                 capitalize(geteuid(this_interactive()))+
00849                                 " in Rubrik \""+message[M_BOARD]+"\".\n");
00850   message=0; /* Platz sparen! */
00851   return 1;
00852 }

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

QueryRead (  ) 

Definiert in Zeile 697 der Datei mpa.c.

Benutzt read_until.

00697             { 
00698   return read_until; 
00699 }

static ReadNextUnread ( str   )  [static]

Definiert in Zeile 309 der Datei mpa.c.

Benutzt abs, CheckThreads(), deadTID, DEFAULTGROUP, dtime(), GetGroupName(), GetTID(), GROUP, group, IGNOREGROUP, lies(), m_delete(), M_LISTNEW, M_READGR, M_READNEXT, M_TIME, M_TITLE, M_WRITER, Mail(), member_array(), NEWSSERVER, NNADWMSG, notify_fail(), P_IGNORE, P_READ_NEWS, QueryProp(), read_until, rubriken(), SYSTEMGROUPS und TP.

Wird benutzt von inhalt().

00310 {
00311   string *groups,group;
00312   mixed *messages;
00313   int curgr,curmsg,timeout,start,nrgroups,sog,mode;
00314 
00315   if (str=="mail") return Mail(0); /* NF Compatibility Special */
00316 
00317   if (str=="?"||str=="-?") return
00318     write("Syntax: nn             naechster neuer Artikel\n"
00319                   "        nn <rubrik>    in entspr. Rubrik, wenn da was neu ist\n"
00320                   "        nn rubriken    Liste der Rubriken mit neuen Artikeln\n"
00321                   "        nn liste       Liste der ungelesenen Artikel\n"),1;
00322 
00323   groups=NEWSSERVER->GetGroups();
00324   deadTID=0;
00325   map(m_indices(read_until)-groups-SYSTEMGROUPS,#'KillGroup); //'
00326   nrgroups=sizeof(groups);
00327   if (str && str!="rubriken" && str!="liste"){
00328     if (!group=GetGroupName(str)) return 1;
00329   }
00330   else
00331     group=0;
00332   if (group && (curgr=member(groups,group)+1)) {
00333     --curgr;
00334     if (curgr<0 || curgr>=sizeof(groups)) 
00335       return notify_fail("Nee... so eine Rubrik gibts hier nicht.\n"),0;
00336     GROUP=group;
00337     start=curgr+1;
00338     mode=M_READGR;
00339     write("Rubrik "+(curgr+1)+": "+GROUP+"\n");
00340   } else {
00341     switch (str) {
00342     case 0: mode=M_READNEXT; break;
00343     case "liste": mode=M_LISTNEW; write("Du hast noch nicht gelesen:\n"); break;
00344     case "rubriken": return rubriken("neu");
00345     default:
00346       notify_fail("\
00347 Diesen Parameter verstehe ich nicht. Entweder gar nichts, \"liste\"\n\
00348 \"rubriken\", oder Name bzw. Nummer einer Rubrik.\n");
00349       return 0;
00350     }
00351     curgr=member_array(GROUP,groups);
00352     start=curgr+nrgroups;
00353   }
00354   if (!pointerp(messages=NEWSSERVER->GetNotes(GROUP))){
00355     GROUP=DEFAULTGROUP;
00356     if (!pointerp(messages=NEWSSERVER->GetNotes(GROUP)))
00357     return notify_fail("Seltsam, irgendwie geht hier einiges schief...\n"),0;
00358   }
00359   timeout=read_until[GROUP];
00360   curmsg=0;
00361   sog=sizeof(messages);
00362   while (curgr<start) {
00363     ++curmsg;
00364     if (curmsg>sog) {
00365       if (deadTID)
00366                 read_until[IGNOREGROUP][GROUP]=
00367                   m_delete(read_until[IGNOREGROUP][GROUP],deadTID);
00368       ++curgr;
00369       deadTID=0;
00370       if (mode!=M_READGR) {
00371                 GROUP=groups[curgr%nrgroups];
00372                 timeout=read_until[GROUP];
00373                 if (!timeout) read_until[GROUP]=1;  // Nimm neue Gruppen in Liste auf
00374                 if (timeout<0 || timeout>=NEWSSERVER->GetNewsTime(GROUP)) {
00375                   sog=0;    /* Ueberlistung: Gruppe hat nix neues oder */
00376                   curmsg=1; /* ist unsubscribed */
00377                 }
00378                 else {
00379                   messages=NEWSSERVER->GetNotes(GROUP);
00380                   curmsg=0;
00381                   sog=sizeof(messages);
00382                 }
00383       }
00384     } else {
00385       if ((timeout>=0 || mode==M_READGR) && messages[curmsg-1][M_TIME] > abs(timeout)) {
00386                 if (pointerp(this_player()->QueryProp(P_IGNORE)) &&
00387                     member(this_player()->QueryProp(P_IGNORE),
00388                                    lower_case(messages[curmsg-1][M_WRITER])+".news") != -1) {
00389                   printf("Uebergehe ignorierten Artikel %d von %s in Rubrik %s.\n",
00390                                  curmsg,messages[curmsg-1][M_WRITER],GROUP);
00391                   read_until[GROUP]=messages[curmsg-1][M_TIME];
00392                   if (TP) TP->SetProp(P_READ_NEWS,read_until);
00393                 } else if 
00394                   (read_until[IGNOREGROUP]&&
00395                    read_until[IGNOREGROUP][GROUP]&&
00396                    CheckThreads(GROUP,messages[0][M_TIME])&& /* Tote threads weg */
00397                    read_until[IGNOREGROUP][GROUP][GetTID(messages[curmsg-1])]) {
00398                     printf("Uebergehe Artikel %d aus ignoriertem Thread.\n",curmsg);
00399                     read_until[IGNOREGROUP][GROUP][GetTID(messages[curmsg-1])]=
00400                       messages[curmsg-1][M_TIME];
00401                     if (deadTID&&deadTID==GetTID(messages[curmsg-1])) deadTID=0;
00402                     read_until[GROUP]=messages[curmsg-1][M_TIME];
00403                     if (TP) TP->SetProp(P_READ_NEWS,read_until);
00404                 } else {
00405                   write("\nRubrik "+(curgr%nrgroups+1)+": "+GROUP+", Artikel: "+curmsg+" von "+sog+"\n");
00406                   if (mode==M_LISTNEW) {
00407                     write(sprintf("  %-45s [%-11s] %s\n",messages[curmsg-1][M_TITLE],
00408                                                   messages[curmsg-1][M_WRITER],
00409                                                   dtime(messages[curmsg-1][M_TIME])[5..16]));
00410                   } else { /* mode == M_READNEXT || mode==M_READGR */
00411                     if (timeout>=0) read_until[GROUP]=messages[curmsg-1][M_TIME];
00412                     else read_until[GROUP]=-messages[curmsg-1][M_TIME];
00413                     if (TP) TP->SetProp(P_READ_NEWS,read_until);
00414                     return (lies(""+curmsg));
00415                   }
00416                 }
00417       }
00418       /* sonst mach einfach garnix. Schleife laeuft weiter. */
00419     }
00420   }
00421   switch(mode) {
00422     case M_LISTNEW:  return 1;
00423     case M_READNEXT: write((read_until[NNADWMSG]||"Nix Neues auf der Welt.")
00424                                                    +"\n"); break;
00425     case M_READGR:   write("Nix Neues in dieser Rubrik.\n"); break;
00426   }
00427   return 1;
00428 }

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

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

static varargs Reply ( string  str,
string  newtitle 
) [static]

Definiert in Zeile 749 der Datei mpa.c.

Benutzt _unparsed_args(), DEBUGVAR, GetTID(), GROUP, LAST_GROUP, LAST_TID, LAST_TIME, LAST_WRITER, lasttitle, M_TIME, M_TITLE, M_WRITER, NEWSSERVER, schreib() und STATUSESCAPE.

Wird benutzt von Reply2().

00749                                                  {
00750   mixed dummy,replytitle,s;
00751   int nr;
00752 
00753   if ((dummy=(str||newtitle))=="?"||dummy=="-?") {
00754     write("Der Antworte-Befehl ist doppelt belegt.\n"
00755                   "1. (Zeitung): Schreibe Antwort auf einen Artikel in der Zeitung.\n"
00756                   "   Syntax: antworte\n"
00757                   "           antworte auf artikel <nr> [neuer Titel]\n"
00758                   "           reply [auf artikel <nr> | to note <nr>] [neuer Titel]\n"
00759                   "2. aehnlich 'sage':\n"
00760                   "   Du tippst zum Beispiel:\n"
00761                   "     antworte ja, das weiss ich\n"
00762                   "   Alle Spieler im Raum sehen dann:\n"
00763                   "     <Dein Name> antwortet: ja, das weiss ich.\n"
00764                   "Bitte beachte, dass jede Syntax, die auf den antworte-Befehl der "
00765           "Zeitung\npasst, auch von der Zeitung ausgewertet wird.\n");
00766     return 1;
00767   }
00768 
00769   if (str&&
00770       ((sscanf(lower_case(str),"auf artikel %d",dummy)==1 && 
00771                 str=this_player()->_unparsed_args()[12..])||
00772        (sscanf(lower_case(str),"to note %d",dummy)==1 && 
00773                 str=this_player()->_unparsed_args()[8..]))) {
00774     mixed notes;
00775     notes=NEWSSERVER->GetNotes(GROUP);
00776     if (dummy<1||dummy>sizeof(notes))
00777       return write("Einen Artikel mit der Nummer "+dummy+
00778                                    " gibt es in dieser Rubrik nicht.\n"),1;
00779     dummy--;
00780     replytitle=({notes[dummy][M_TITLE],notes[dummy][M_WRITER],
00781                                    notes[dummy][M_TIME],GetTID(notes[dummy]),GROUP});
00782     DEBUGVAR(str);
00783     if (!newtitle&&str&&strlen(str)&&sscanf(str,"%d %s",dummy,str)==2)
00784       newtitle=str;
00785   }
00786   else if (!str||!strlen(str)) {
00787     if (!lasttitle) return
00788       write("Du hast noch gar nichts gelesen, worauf Du "
00789           "antworten koenntest.\n"),1;
00790     replytitle=lasttitle;
00791   }
00792   else return 0;      
00793 
00794 // return ComposeReply(replytitle);
00795 //}
00796 //
00797 //
00798 //ComposeReply(mixed replytitle) {
00799 
00800   if (!newtitle) {
00801     if (replytitle[0][0..7]=="Re: Re: ") newtitle="Re^3: "+replytitle[0][8..];
00802     else if (sscanf(replytitle[0],"Re^%d: %s",nr,newtitle))
00803       newtitle="Re^"+(nr+1)+": "+newtitle;
00804     else newtitle="Re: "+replytitle[0];
00805   }
00806   return schreib(newtitle,0,0,
00807                                  STATUSESCAPE+" rn="+replytitle[LAST_WRITER]+
00808                                               " rt="+replytitle[LAST_TIME]+
00809                                               " rg="+replytitle[LAST_GROUP]+"\n"+
00810                                  STATUSESCAPE+" tid="+replytitle[LAST_TID]+"\n");
00811 }

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

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

static Reply2 ( str   )  [static]

Definiert in Zeile 741 der Datei mpa.c.

Benutzt Reply().

00741                    {
00742   str = this_player()->_unparsed_args();
00743   if (!str||str[0..11]=="auf artikel "||str[0..7]=="to note ")
00744     return Reply(str);
00745   return Reply(0,str);
00746 }

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

static rubrik ( str   )  [static]

Definiert in Zeile 973 der Datei mpa.c.

Benutzt break_string(), DEFAULTGROUP, GetGroupName(), GROUP, i, NEWSSERVER und notify_fail().

Wird benutzt von LiesArtikel().

00974 {
00975   mixed *gruppen;
00976   mixed news;
00977   int anz,i;
00978   
00979   if (str=="?"||str=="-?") return
00980     write("Syntax: rubrik <rubrik>\n"
00981                   "  wechselt die aktuelle Rubrik. Es wird die Nummer der Rubrik,\n"
00982           "  ihr Name oder jede eindeutige Abkuerzung akzeptiert.\n"),1;
00983 
00984   if (!str || str==0) {
00985       if (!pointerp(news=NEWSSERVER->GetNotes(GROUP))){
00986       GROUP=DEFAULTGROUP;
00987     if (!pointerp(news=NEWSSERVER->GetNotes(GROUP)))
00988       return notify_fail("Seltsam, irgendwie geht hier einiges schief...\n"),0;
00989       }
00990     return write("Aktuelle Rubrik: "+GROUP+" ("+sizeof(news)+" Artikel).\n"),1;
00991   }
00992   str=GetGroupName(str);
00993   if (!str) return 1;
00994   GROUP=str;
00995   news=NEWSSERVER->GetNotes(GROUP);
00996   write(break_string("Ok, Du hast die Rubrik "+GROUP+" mit "+sizeof(news)+
00997                      " Artikel"+(sizeof(news)==1?"":"n")+" aufgeschlagen.\n",
00998                      78));
00999   return 1;
01000 }

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

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

static rubriken ( mixed  arg  )  [static]

Definiert in Zeile 922 der Datei mpa.c.

Benutzt abs, ctime(), dtime(), GROUP, i, lasttime, M_TIME, NEWSSERVER, read_until und SYSTEMGROUPS.

Wird benutzt von ReadNextUnread().

00923 {
00924   mixed *gruppen, *messages;
00925   mixed news;
00926   int anz,i,lasttime,timeout,foundone;
00927   string s;
00928   
00929   if (arg=="?"||arg=="-?") return
00930     write("Syntax: rubriken        listet alle Rubriken\n"
00931                   "        rubriken neu    nur Rubriken mit ungelesenen Artikeln\n"),1;
00932 
00933   gruppen=NEWSSERVER->GetGroups();
00934   map(m_indices(read_until)-gruppen-SYSTEMGROUPS,#'KillGroup); // ');
00935   s="\nEs gibt zur Zeit ";
00936   anz=sizeof(gruppen);
00937   if (anz==0) {
00938     write(s+"keine Rubriken (wie seltsam ...)\n");
00939     return 1;
00940   }
00941   s+=anz+" Rubrik"+(anz==1 ? "" : "en")+".";
00942   if (arg=="neu") s+="\nDavon enthalten neue Artikel:\n\n";
00943   else s+="\n(* oder x: enthaelt neue Artikel, x oder -: abbestellt, "
00944     ">: aktuelle Rubrik)\n\n";
00945   for (i=0;i<anz;i++) {
00946     timeout=read_until[gruppen[i]];
00947     /* GetNewsTime lieferte leider manchmal was falsches :-(  */
00948     /* jetzt hoffentlich richtig? Wenn nicht, das if ausklammern */
00949     if ( arg!="neu" || (lasttime=NEWSSERVER->GetNewsTime(gruppen[i])) > timeout) {
00950       messages=NEWSSERVER->GetNotes(gruppen[i]);
00951       if (!messages || !sizeof(messages)) lasttime=0;
00952       else lasttime=messages[sizeof(messages)-1][M_TIME];
00953       foundone=1;
00954     }
00955     if (arg!="neu" || (timeout>=0 && lasttime>abs(timeout)))
00956       s+=sprintf("%s%s%3d\. %-39.39s: ",
00957                  ((gruppen[i]==GROUP)?">":" "),
00958                                  ((lasttime>abs(timeout)) ? ((timeout<0) ? "x" : "*")
00959                                                           : ((timeout<0) ? "-" : " ") ),
00960                                  i+1,gruppen[i])+ 
00961                  (lasttime ? sprintf("%3d Artikel (%s)\n",
00962                                                      sizeof(messages),
00963                                                      // ((sizeof(messages)==1) ? ".  " : "en."),
00964                                                      dtime(lasttime)[5..12]+ctime(lasttime)[<2..]) :
00965                                      "        - leer -\n");
00966   }
00967   if (arg=="neu"&&!foundone) s+="Keine Rubrik enthaelt neue Artikel.\n";
00968   this_player()->More(s);
00969   return 1;
00970 }

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

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

static SaveMessage ( str   )  [static]

Definiert in Zeile 1185 der Datei mpa.c.

Benutzt break_string(), GROUP, M2S_REMOTE, Message2string(), NEWSSERVER, notify_fail(), SAVEMSGPATH und TP.

01185                         {
01186   mixed num;
01187   mixed *messages;
01188 
01189   if (intp(str)) num=str;
01190   if ((!num && (!str || str=="" || sscanf(str,"artikel %d",num)!=1)) || num<=0) {
01191     notify_fail("Welchen Artikel willst Du abspeichern?\n");
01192     return 0;
01193   }
01194   if (!pointerp(messages=NEWSSERVER->GetNotes(GROUP)))
01195     return notify_fail("Seltsam, die Rubrik '"+GROUP+
01196         "' gibt es nicht mehr...\n"), 0;
01197   num--;
01198   if (sizeof(messages)<=num) {
01199     notify_fail("So viele Nachrichten sind da nicht !\n");
01200     return 0;
01201   }
01202   if(write_file(SAVEMSGPATH(TP),Message2string(num,messages,M2S_REMOTE)+"\n"))
01203     write(break_string(
01204       "Inhalt des Artikels wurde nach "+SAVEMSGPATH(TP)+" gespeichert.\n"));
01205   else
01206     write(break_string(
01207       "Fehler beim Schreiben nach "+SAVEMSGPATH(TP)+"!\n"));
01208   return 1;
01209 }

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

static varargs schreib ( str  ,
pretext  ,
called_by_itself  ,
statuslines   
) [static]

Definiert in Zeile 702 der Datei mpa.c.

Benutzt CatchNewsError(), err, GROUP, input_to(), killctrl(), M_BOARD, M_MESSAGE, M_TITLE, message, nedit(), NEWSSERVER und query_real_name().

Wird benutzt von Reply().

00702                                                                  {
00703   int err;
00704 
00705   if (str=="?"||str=="-?") {
00706     write("Syntax: schreib <Titel>\n"
00707                   "  beginnt einen neuen Artikel in der Zeitung.\n");
00708     return 1;
00709   }
00710   
00711   if (!this_interactive() || !this_interactive()->query_real_name()) return 0;
00712   if (!called_by_itself && extern_call() && !pretext)
00713     str=this_interactive()->_unparsed_args()||"";
00714   if (called_by_itself && str=="~q") {
00715     write("Abgebrochen.\n");
00716     return 1;
00717   }
00718   if (!CatchNewsError(
00719                                       NEWSSERVER->AskAllowedWrite(GROUP),
00720                                       "Diese Rubrik ist leider schon randvoll!")) return 1;
00721   if (!called_by_itself)
00722     write("Neuer Artikel in Rubrik "+GROUP+":\n");
00723   if (!str || str=="" || str=="artikel") {
00724     write("Titel des Artikels: ");
00725     input_to("schreib",0,pretext,1);
00726     return 1;
00727   }
00728   // writer=this_interactive()->query_real_name();
00729   message=allocate(6);
00730   message[M_BOARD]=GROUP;
00731   message[M_TITLE]=killctrl(str);
00732   message[M_MESSAGE]=statuslines;
00733   write("Titel ist: "+str+".\n\
00734 Gib jetzt Deinen Text ein,\n\
00735 ** oder . wenn Du fertig bist, ~q zum Abbrechen, ~h fuer eine Hilfsseite.\n");
00736   nedit("PostNote",pretext);
00737   return 1;
00738 }

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

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

static SetNNADWMSG ( str   )  [static]

Definiert in Zeile 431 der Datei mpa.c.

Benutzt m_delete(), NNADWMSG, P_READ_NEWS, read_until und TP.

00431                         {
00432   if (str=="?"||str=="-?") return
00433     write("Syntax: zeitungsmeldung <neue Meldung>    setzt Meldung\n"
00434                   "        zeitungsmeldung                   loescht Meldung\n"),1;
00435   if (!read_until[NNADWMSG]) {
00436     write("Du hast zur Zeit keine eigene NNADW-Meldung definiert.\n");
00437     if (!str) return 1;
00438   }
00439   else write("Deine alte NNADW-Meldung war:\n"+read_until[NNADWMSG]+"\n");
00440   if (!str) {
00441     read_until=m_delete(read_until,NNADWMSG);
00442     write("Meldung ist geloescht, es gilt wieder die Standardmeldung.\n");
00443   } else {
00444     read_until[NNADWMSG]=this_player()->_unparsed_args();
00445     write("Deine neue Meldung lautet jetzt:\n"+read_until[NNADWMSG]+"\n");
00446   }
00447   if (TP) TP->SetProp(P_READ_NEWS,read_until);
00448   return 1;
00449 }    

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

static Subscribe ( str   )  [static]

Definiert in Zeile 1107 der Datei mpa.c.

Benutzt abs, GetGroupName(), notify_fail(), P_READ_NEWS, read_until und TP.

01107                       {
01108   int timeout;
01109   if (str=="?"||str=="-?") return
01110     write("Syntax: abonniere <rubrik>\n"
01111                   "  oder: subscribe <rubrik>\n"),1;
01112   str=GetGroupName(str);
01113   if (!str) return 1;
01114   timeout=read_until[str];
01115   if (timeout>=0) return (int)notify_fail(
01116        "Die Rubrik hast Du doch schon abonniert!\n");
01117   read_until[str]=abs(timeout);
01118   if (TP) TP->SetProp(P_READ_NEWS,read_until);
01119   write("Rubrik "+str+" abonniert.\n");
01120   return 1;
01121 }

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

static Uncatchup ( string  str  )  [static]

Definiert in Zeile 584 der Datei mpa.c.

Benutzt abs, break_string(), dtime(), GROUP, h, i, InterpretTime(), M_TIME, NEWSSERVER, notify_fail(), P_READ_NEWS, read_until, TP, UncatchupSyntax() und zeit.

00585 {
00586   mixed args;
00587   int i,zeit;
00588   int mode; // 0 = nix, 1=Anzahl Artikel, 2=Zeit, 3=alles
00589 
00590   str=this_player()->_unparsed_args();   // wg. Datum
00591   if ( !TP || !str || !stringp(str) || str=="?" || str=="-?" )
00592     return UncatchupSyntax();
00593 
00594   if (!pointerp(NEWSSERVER->GetNotes(GROUP)))
00595     return notify_fail("Seltsam, die Rubrik '"+GROUP+
00596         "' gibt es nicht mehr...\n"), 0;
00597 
00598   args=({""})+explode(lower_case(str)," ");
00599   if (args[1]=="ab") {
00600     mode=2;
00601     if (sizeof(args)<3)
00602       return UncatchupSyntax();
00603     zeit=InterpretTime(args[2..]);
00604   } else {
00605     zeit=time();
00606     for (i=sizeof(args)-1;i>0;i--) {
00607       switch(args[i]){
00608       case "alles":
00609       case "alle":
00610       case "all":
00611                 if (mode&&mode!=3) return
00612           notify_fail("Bitte nur Zeit ODER alles ODER Anzahl angeben!\n"),0;
00613                 mode=3;
00614                 break;
00615       case "minuten":
00616       case "minute":
00617       case "m":
00618       case "stunden":
00619       case "stunde":
00620       case "h":
00621       case "tage":
00622       case "tag":
00623       case "d":
00624                 if (mode&&mode!=2) return
00625                   notify_fail("Bitte nur Zeit/Datum ODER alles ODER "
00626               "Anzahl angeben!\n"),0;
00627                 mode=2;
00628                 zeit-=(((args[i][0]=='m') ? 60 :
00629                                 ((args[i][0]=='s' || args[i][0]=='h') ? 3600 : 86400))
00630                        *to_int(args[i-1]));
00631                 i--;
00632                 break;
00633       case "artikel":
00634                 if (mode&&mode!=1) return 
00635                   notify_fail("Bitte nur Zeit/Datum ODER alles ODER "
00636               "Anzahl angeben!\n"),0;
00637                 mode=1;
00638                 zeit=to_int(args[i-1]);
00639                 i--;
00640                 break;
00641       case "ab":
00642                 return 
00643                   notify_fail("Bitte nur Zeit/Datum ODER alles ODER "
00644               "Anzahl angeben!\n"),0;
00645       default:
00646                 if (!to_int(args[i])) 
00647                   return notify_fail("Unbekanntes Argument '"+args[i]+
00648                                                      "'! Aktion abgebrochen.\n"),0;
00649                 if (mode&&mode!=1) return 
00650                   notify_fail("Bitte nur Zeit/Datum ODER alles ODER "
00651               "Anzahl angeben!\n"),0;
00652                 mode=1;
00653                 zeit=to_int(args[i]);
00654       }
00655     }
00656   }
00657 
00658   switch(mode){
00659   case 0:
00660     return notify_fail("Gib bitte irgendeine Einheit an "
00661         "(Hilfe mit wiederhole -?)!\n");
00662   case 2:
00663     read_until[GROUP]=(read_until[GROUP]>=0)?zeit:-zeit;
00664     write(break_string("Markiere alle Artikel in Rubrik "+GROUP+
00665           " seit "+dtime(zeit)+" als ungelesen.\n",78));
00666     break;
00667   case 3:
00668     read_until[GROUP]=(read_until[GROUP]>=0?1:-1);
00669     write("Markiere die komplette Rubrik "+GROUP+" als ungelesen.\n");
00670     break;
00671   case 1:
00672     write(break_string("Markiere die letzten "+zeit+
00673           " gelesenen Artikel in Rubrik "+GROUP+" als ungelesen.\n",78));
00674     { int h; mixed notes;
00675       notes=NEWSSERVER->GetNotes(GROUP);
00676       h=sizeof(notes)-1;
00677       while ( (h>=0) && (abs(read_until[GROUP]) < notes[h][M_TIME]) ) {
00678                 h--;
00679       }
00680       if (h==-1||h<zeit)
00681                 read_until[GROUP]=
00682                   (read_until[GROUP]>=0)?1:-1;
00683       else
00684                 read_until[GROUP]=(
00685                   (read_until[GROUP]>=0)?notes[h-zeit][M_TIME]
00686                     :-notes[h-zeit][M_TIME]);
00687     }
00688   }
00689   write("Ok. Du kannst die als ungelesen markierten Artikel "
00690       "mit nn nochmal lesen.\n");
00691   
00692   if (TP) TP->SetProp(P_READ_NEWS,read_until);
00693   return 1;
00694 }

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

static int UncatchupSyntax (  )  [static]

Definiert in Zeile 570 der Datei mpa.c.

Benutzt notify_fail().

Wird benutzt von Uncatchup().

00571 {
00572   notify_fail(
00573     "Syntax: wiederhole <anz> [artikel]\n"
00574     "        wiederhole [ab vor] [<anz> m|minute[n]] [<anz> h|stunde[n]] [<anz> d|tag[e]]\n"
00575     "        wiederhole ab tag.monat[.jahr]\n"
00576     "        wiederhole alles\n"
00577     "Der wiederhole- oder uncatchup-Befehl bezieht sich immer auf die aktuelle\n"
00578     "Rubrik und markiert die angegebenen Artikel wieder als ungelesen.\n"
00579     "Zeiten (2. Syntax) sind rueckwaerts ab aktueller Uhrzeit gerechnet.\n"),0;
00580   return 0;
00581 }

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

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

static Unsubscribe ( str   )  [static]

Definiert in Zeile 1082 der Datei mpa.c.

Benutzt GetGroupName(), notify_fail(), P_READ_NEWS, read_until und TP.

Wird benutzt von Bestelle().

01082                         {
01083   int timeout;
01084   if (str=="?"||str=="-?") return
01085     write("Syntax: unsubscribe <rubrik>"
01086                   "  oder: bestelle <rubrik> ab\n"),1;
01087   str=GetGroupName(str);
01088   if (!str) return 1;
01089   timeout=read_until[str];
01090   if (timeout<0) return (int)notify_fail(
01091        "Die Rubrik hast Du gar nicht abonniert!\n");
01092   read_until[str]=(timeout ? -timeout : -1);
01093   if (TP) TP->SetProp(P_READ_NEWS,read_until);
01094   write("Rubrik "+str+" abbestellt.\n");
01095   return 1;
01096 }

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

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

verbrennen ( str   ) 

Definiert in Zeile 214 der Datei mpa.c.

Benutzt TP und WER.

00214                 {
00215   if (!str || !id(str)) return 0;
00216   write("Du verbrennst Deine Zeitung mit groesstem Vergnuegen.\n");
00217   say(TP->Name(WER)+" verbrennt seine Zeitung in einem Freudenfeuer.\n"); 
00218   remove(1);
00219   return 1;
00220 }


Variablen-Dokumentation

int deadTID

Definiert in Zeile 104 der Datei mpa.c.

Wird benutzt von CheckThreads() und ReadNextUnread().

string GROUP

Definiert in Zeile 105 der Datei mpa.c.

mixed lasttitle

Definiert in Zeile 102 der Datei mpa.c.

Wird benutzt von Catchup(), lies(), MailMessage(), MoveTrash() und Reply().

mixed message

Definiert in Zeile 103 der Datei mpa.c.

inherit NEDIT

Definiert in Zeile 53 der Datei mpa.c.

mapping read_until
inherit std thing

Definiert in Zeile 52 der Datei mpa.c.

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