ex.c-Dateireferenz

#include <sys_debug.h>
#include <wizlevels.h>
#include <player.h>
Include-Abhängigkeitsdiagramm für ex.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define MODE   0
#define CMD   0
#define INP   1
#define TEXT   1
#define LINE   2
#define FUNC   3
#define ARGS   4
#define FLAG   5
#define NUM   1
#define CHG   6
#define YANK   "@YANK"

Funktionen

int evaluate (string in)
varargs int error (string msg, string arg)
string substitute (string s, string regex, string n, string extra)
int saveText ()
string cmdPrompt (int mode, mixed text, int line, int maxl)
string inputPrompt ()
string AddNum (string s)
void showLines (int from, int to)
int commandMode (string in)
int inputMode (string in)
void StartEX (string in, mixed c)
varargs int ex (mixed text, closure func, mixed fargs, string buffer)

Variablen

inherit std util input
static private mapping ctrl = ([])
static private mixed buf

Makro-Dokumentation

#define ARGS   4

Definiert in Zeile 29 der Datei ex.c.

Wird benutzt von saveText().

#define CHG   6

Definiert in Zeile 32 der Datei ex.c.

#define CMD   0

Definiert in Zeile 24 der Datei ex.c.

Wird benutzt von evaluate(), ex() und inputMode().

#define FLAG   5

Definiert in Zeile 30 der Datei ex.c.

#define FUNC   3

Definiert in Zeile 28 der Datei ex.c.

Wird benutzt von saveText().

#define INP   1

Definiert in Zeile 25 der Datei ex.c.

Wird benutzt von evaluate().

#define LINE   2

Definiert in Zeile 27 der Datei ex.c.

Wird benutzt von AddNum() und inputPrompt().

#define MODE   0

Definiert in Zeile 23 der Datei ex.c.

#define NUM   1

Definiert in Zeile 31 der Datei ex.c.

Wird benutzt von inputPrompt().

#define TEXT   1

Definiert in Zeile 26 der Datei ex.c.

Wird benutzt von fread(), inputMode(), More(), saveText() und showLines().

#define YANK   "@YANK"

Definiert in Zeile 34 der Datei ex.c.


Dokumentation der Funktionen

string AddNum ( string  s  ) 

Definiert in Zeile 88 der Datei ex.c.

Benutzt buf, ctrl, inputPrompt() und LINE.

00089 {
00090   string r;
00091   r = inputPrompt()+s;
00092   ctrl[buf][LINE]++;
00093   return r;
00094 }

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

string cmdPrompt ( int  mode,
mixed  text,
int  line,
int  maxl 
)

Definiert in Zeile 75 der Datei ex.c.

00076 {
00077   return ":";
00078 }

int commandMode ( string  in  ) 

Definiert in Zeile 104 der Datei ex.c.

Wird benutzt von evaluate().

00105 {
00106   int from, to, swap;
00107   string cmd;
00108 
00109   if(!in) return 0;
00110   if(in[0..1] == "se") {
00111     ctrl[buf][FLAG] ^= NUM;
00112     return 0;
00113   }
00114     
00115   if(sscanf(in, "%d,%d%s", from, to, cmd) != 3)
00116     if(sscanf(in, "%d%s", from, cmd) != 2)
00117       if(!stringp(in)) return error("Kein Editorkommando", in);
00118       else { cmd = in; from = to = ctrl[buf][LINE]; }
00119     else to = from;
00120 
00121   if(from < 0) from = sizeof(ctrl[buf][TEXT])-1+from;
00122   if(to < 1) to = sizeof(ctrl[buf][TEXT])-1+to;
00123   if(to && to < from) return error("Erste Adresse groesser als die Zweite");
00124   if(from) ctrl[buf][LINE] = from;
00125   if(from > sizeof(ctrl[buf][TEXT])-1 ||
00126      to > sizeof(ctrl[buf][TEXT])-1) 
00127     return error("Nicht so viele Zeilen im Speicher");
00128   if(!to) to = from;
00129   switch(cmd[0])
00130   {
00131   case 'h':
00132     write("ex: Kommandohilfe\n\n"
00133                  "Alle Kommandos funktionieren nach folgendem Prinzip:\n"
00134                  "Adresse Kommando Argumente\n"
00135                  "Adressen werden gebildet durch: ZeileVon,ZeileBis\n"
00136                  "(ZeileBis kann weggelassen werden, samt Komma)\n"
00137                  "Kommandos:\n"
00138                  "  q,x -- Editor verlassen\n"
00139                  "  r   -- Datei einfuegen\n"
00140                  "         r<datei>\n"
00141                  "  a   -- Text hinter der aktuellen Zeile einfuegen\n"
00142                  "  i   -- Text vor der aktuellen Zeile einfuegen\n"
00143                  "  d   -- Zeilen loeschen\n"
00144                  "  y   -- Zeilen zwischenspeichern\n"
00145                  "  pu  -- Zwischengespeicherte Zeilen einfuegen\n"
00146                  "  s   -- Substitution von Text in Zeilen\n"
00147                  "         s/AlterText/NeuerText/\n"
00148           "  p,l -- Zeilen anzeigen\n"
00149                  "  z   -- Eine Seite anzeigen\n");
00150     break;
00151   case 'q':
00152     if(ctrl[buf][CHG])
00153       if(!(strlen(cmd) > 1 && cmd[1]=='!'))
00154         return error("Datei wurde geaendert! Abbrechen mit q!");
00155       else ctrl[buf] = ctrl[buf+"!"];
00156   case 'x':
00157     if(saveText()) return 1;
00158   case 'r':
00159     if(!IS_WIZARD(this_player()))
00160       return error("Kommando gesperrt", cmd[0..0]);
00161     if(file_size(cmd[1..]) < 0) 
00162       return error("Datei nicht gefunden", "\""+cmd[1..]+"\"");
00163     ctrl[buf][TEXT] = ctrl[buf][TEXT][0..from] 
00164                                   + explode(read_file(cmd[1..]), "\n")
00165                            + ctrl[buf][TEXT][(from == to ? to+1 : to)..];
00166     ctrl[buf][CHG] = 1;
00167     break;
00168   case 'a':
00169     ctrl[buf][MODE] = INP;
00170     write("Texteingabe: (. beendet zum Kommandomodus, ** beendet ganz)\n");
00171     input(#'inputPrompt, 0, #'evaluate); 
00172     ctrl[buf][CHG] = 1;
00173     return 1;
00174   case 'i':
00175     ctrl[buf][MODE] = INP;
00176     ctrl[buf][LINE]--;
00177     write("Texteingabe: (. beendet zum Kommandomodus, ** beendet ganz)\n");
00178     input(#'inputPrompt, 0, #'evaluate);
00179     ctrl[buf][CHG] = 1;
00180     return 1;
00181   case 'd':
00182     ctrl[buf][TEXT][from..to] = ({});
00183     ctrl[buf][CHG] = 1;
00184     break;
00185   case 'y':
00186     ctrl[YANK] = ctrl[buf][TEXT][from..to];
00187     if(to - from) error(to-from+1+" Zeilen gespeichert");
00188     break;
00189   case 's':
00190   {
00191     mixed reg, new, extra, scmd;
00192     if(sizeof(scmd = old_explode(cmd[1..], cmd[1..1])) < 2)
00193       return error("Substitution fehlgeschlagen");
00194     reg = scmd[0]; new = scmd[1];
00195     if(sizeof(scmd) > 2) extra = scmd[2];
00196     else extra = "";
00197     ctrl[buf][TEXT][from..to] = map(ctrl[buf][TEXT][from..to], 
00198                                                                       #'substitute, 
00199                                           reg, new, extra);
00200     showLines(from, to);
00201     ctrl[buf][CHG] = 1;
00202     break;
00203   }
00204   case 'z':
00205     showLines(ctrl[buf][LINE], 
00206                      ctrl[buf][LINE]+this_player()->QueryProp(P_SCREENSIZE));
00207     ctrl[buf][LINE] += this_player()->QueryProp(P_SCREENSIZE);
00208     break;
00209   case 'p':
00210     if(strlen(cmd) > 1 && cmd[1] == 'u')
00211     {
00212       if(!pointerp(ctrl[YANK])) return error("Keine Zeilen im Speicher");
00213       if(from >= ctrl[buf][LINE]) ctrl[buf][TEXT] += ctrl[YANK];
00214       else
00215         ctrl[buf][TEXT][0..from] + ctrl[YANK] + ctrl[buf][TEXT][from+1..];
00216       ctrl[buf][LINE] += sizeof(ctrl[YANK]);
00217       ctrl[YANK] = 0;
00218       showLines(ctrl[buf][LINE], ctrl[buf][LINE]);
00219       break;
00220     }
00221   case 'l':
00222   default:
00223     if(!from) 
00224     {
00225       error("Kein Editorkommando", sprintf("%c", cmd[0]));
00226       return 0;
00227     }
00228     showLines(from, to);
00229   }
00230   input(#'cmdPrompt, 0, #'evaluate);
00231   return 1;
00232 }

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

varargs int error ( string  msg,
string  arg 
)

Definiert in Zeile 38 der Datei ex.c.

Wird benutzt von _examine(), _inventory(), _sense_exa(), cmd_dup(), cmd_inv(), cmd_pop(), cmd_rekinv(), cmd_scan(), cmd_swap(), cmd_top(), do_call(), do_call_efun(), do_lpc(), lisp(), parseNext(), saveText(), udp_www(), Xcall(), Xclone(), Xeval(), Xload(), Xlpc() und Xuclone().

00039 {
00040   if(stringp(arg)) write(arg+": "+msg+"\n");
00041   else write(msg+"\n");
00042 }

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

int evaluate ( string  in  ) 

Definiert in Zeile 262 der Datei ex.c.

Benutzt buf, CMD, commandMode(), ctrl, INP, inputMode() und MODE.

Wird benutzt von inputMode() und StartEX().

00263 {
00264   switch(ctrl[buf][MODE])
00265   {
00266     case INP: return inputMode(in);
00267     case CMD: return commandMode(in);
00268     default : return 0;
00269   }
00270 }

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

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

varargs int ex ( mixed  text,
closure  func,
mixed  fargs,
string  buffer 
)

Definiert in Zeile 281 der Datei ex.c.

Benutzt c, CMD, ctrl, input und StartEX().

00282 {
00283   int c, l;
00284   mixed ct;
00285   if(!text) text = "";
00286   c = strlen(text);
00287   l = sizeof(text = explode(text, "\n")) - 1;
00288   ct = ({ CMD, text, 0, func, fargs, 0, 0});
00289   if(!ctrl[buffer]) StartEX(0, ct);
00290   else input(sprintf("Es existiert bereits Text! Verwerfen? [j]"),
00291                     0, #'StartEX, ct);
00292   return 1;
00293 }

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

int inputMode ( string  in  ) 

Definiert in Zeile 236 der Datei ex.c.

Benutzt buf, CMD, ctrl, evaluate(), input, MODE, saveText() und TEXT.

Wird benutzt von evaluate().

00237 {
00238   switch(in)
00239   {
00240   case ".": 
00241     ctrl[buf][MODE] = CMD;
00242     ctrl[buf][LINE]--;
00243     input(#'cmdPrompt, 0, #'evaluate);
00244     break;
00245   case "**":
00246     return saveText();
00247   default:
00248     if(!in) /* do nothing now */;
00249     if(ctrl[buf][LINE] < sizeof(ctrl[buf][TEXT])-1)
00250       ctrl[buf][TEXT] = ctrl[buf][TEXT][0..ctrl[buf][LINE]-1] + ({ in }) 
00251                         + ctrl[buf][TEXT][ctrl[buf][LINE]..];
00252     else ctrl[buf][TEXT] += ({ in });
00253     ctrl[buf][LINE]++;
00254     input(#'inputPrompt, 0, #'evaluate);
00255     break;
00256   }
00257   return 1;
00258 }

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

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

string inputPrompt (  ) 

Definiert in Zeile 82 der Datei ex.c.

Benutzt buf, ctrl, FLAG, LINE und NUM.

Wird benutzt von AddNum().

00083 {
00084   if(ctrl[buf][FLAG] & NUM) return sprintf("[%02d] ", ctrl[buf][LINE]);
00085   return "";
00086 }

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

int saveText (  ) 

Definiert in Zeile 59 der Datei ex.c.

Benutzt ARGS, buf, ctrl, error(), FUNC, m_delete(), TEXT und text().

Wird benutzt von inputMode().

00060 {
00061   string text;
00062   text = implode(ctrl[buf][TEXT][1..], "\n")+"\n";
00063   error(sprintf("%O, %d Zeilen, %d Zeichen", 
00064                        buf ? buf : "", sizeof(ctrl[buf][TEXT])-1,
00065                        strlen(text)));
00066   if(ctrl[buf][FUNC]) apply(ctrl[buf][FUNC], ctrl[buf][ARGS], text);
00067   ctrl = m_delete(ctrl, buf);
00068   ctrl = m_delete(ctrl, buf+"!");
00069   buf = 0;
00070   return 1;
00071 }

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

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

void showLines ( int  from,
int  to 
)

Definiert in Zeile 96 der Datei ex.c.

Benutzt buf, ctrl und TEXT.

00097 {
00098   write(implode(map(ctrl[buf][TEXT][from..to], #'AddNum), "\n")+"\n");
00099   ctrl[buf][LINE] = from;
00100 }

void StartEX ( string  in,
mixed  c 
)

Definiert in Zeile 272 der Datei ex.c.

Benutzt buf, ctrl, evaluate() und input.

Wird benutzt von ex().

00273 {
00274   if(!in || in == "j" || in == "J") ctrl[buf] = c;
00275   else if(in && (in != "n"  || in != "N"))
00276     return 0;
00277   ctrl[buf+"!"] = ctrl[buf];
00278   input(#'cmdPrompt, 0, #'evaluate);
00279 }

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

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

string substitute ( string  s,
string  regex,
string  n,
string  extra 
)

Definiert in Zeile 44 der Datei ex.c.

Benutzt del() und i.

00045 {
00046   mixed del; int i;
00047   if((i = sizeof(del = regexplode(s, regex))) < 2) return s;
00048   if(member(extra, 'g') == -1) i = 1;
00049   else i -= 2;
00050   while(i>0) {
00051     del[i] = n;
00052     i -= 2;
00053   }
00054   return implode(del, "");
00055 }

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


Variablen-Dokumentation

private mixed buf [static]
private mapping ctrl = ([]) [static]

Definiert in Zeile 15 der Datei ex.c.

Wird benutzt von AddNum(), evaluate(), ex(), inputMode(), inputPrompt(), saveText(), showLines() und StartEX().

static void input
Erzeugt am Thu Jun 3 14:43:25 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3