#include <properties.h>#include <language.h>#include <news.h>#include <wizlevels.h>#include <ansi.h>#include "/mail/post.h"
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 |
Definiert in Zeile 67 der Datei mpa.c.
Wird benutzt von _query_internal_extralook(), Catchup(), extract(), format_error(), GetDefaultChangeMsg(), inhalt(), IPv4_int2addr(), ReadNextUnread(), rubriken(), slice_array(), Subscribe() und Uncatchup().
| #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 | ( | r | ) | (member(inherit_list(r),STDPOST+".c")>=0) |
Definiert in Zeile 61 der Datei mpa.c.
Wird benutzt von MailMessage().
| #define IS_STATUSLINE | ( | s | ) | ((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_TIME 2 |
Definiert in Zeile 87 der Datei mpa.c.
Wird benutzt von MailMessage() und Reply().
| #define LAST_WRITER 1 |
Definiert in Zeile 86 der Datei mpa.c.
Wird benutzt von MailMessage() und Reply().
| #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_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() |
Definiert in Zeile 66 der Datei mpa.c.
Wird benutzt von _set_debug(), AddNote(), AddNotiz(), ChangeHelper(), ChangePrio(), ChangeStatus(), CmdAddNote(), CmdFix(), CmdLock(), CmdReassign(), debug(), delete_player(), ErgaenzeText(), ErsetzeText(), FinishNotiz(), handle_runtime_error(), LiesNotiz(), MoveMessage(), RemoveNotiz(), ShowTeamInfo(), versende_mail() und ZeigeZettel().
| #define WIZHELPPAGE "/p/service/loco/doc/mpa.wiz" |
Definiert in Zeile 59 der Datei mpa.c.
Wird benutzt von HelpPage().
| _query_autoloadobj | ( | ) |
| static int _query_gender | ( | ) | [static] |
| static mixed _query_ids | ( | ) | [static] |
| static mapping _query_material | ( | ) | [static] |
| static mixed _query_neverdrop | ( | ) | [static] |
Definiert in Zeile 126 der Datei mpa.c.
Benutzt _query_nodrop().
00126 { return _query_nodrop(); }

| static mixed _query_nodrop | ( | ) | [static] |
Definiert in Zeile 125 der Datei mpa.c.
Wird benutzt von _query_neverdrop().

| static mixed _query_read_msg | ( | ) | [static] |
| _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 }


| 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 }

| 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 }

| 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 }


| 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 }

| 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 }

| 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 }

| 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 }


| 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 }

| 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] |
| 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 }

| 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 }

| 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 }

| varargs int InterpretTime | ( | mixed | a, | |
| int | flag | |||
| ) |
Definiert in Zeile 1443 der Datei mpa.c.
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 }


| static KillGroup | ( | name | ) | [static] |
Definiert in Zeile 226 der Datei mpa.c.
Benutzt m_delete(), name und read_until.
00226 { read_until=m_delete(read_until,name); }

| 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 }

| LiesArtikel | ( | str | ) |
| 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 }

| 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.
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 }

| 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 }

| 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 }


| 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 }


| 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 }

| 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 }

| 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 }

| 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 }


| 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 }


| static Reply2 | ( | str | ) | [static] |
| 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 }


| 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 }


| 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 }

| 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 }


| 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 }

| 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 }

| 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 }

| 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 }


| 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 }


| verbrennen | ( | str | ) |
| int deadTID |
Definiert in Zeile 104 der Datei mpa.c.
Wird benutzt von CheckThreads() und ReadNextUnread().
| mixed lasttitle |
Definiert in Zeile 102 der Datei mpa.c.
Wird benutzt von Catchup(), lies(), MailMessage(), MoveTrash() und Reply().
| mapping read_until |
Definiert in Zeile 101 der Datei mpa.c.
Wird benutzt von _set_autoloadobj(), Catchup(), CheckThreads(), create(), inhalt(), KillGroup(), NotifyMove(), QueryRead(), ReadNextUnread(), rubriken(), SetNNADWMSG(), Subscribe(), Uncatchup() und Unsubscribe().
1.6.3