#include <sys_debug.h>#include <wizlevels.h>#include <player.h>
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 |
| #define ARGS 4 |
Definiert in Zeile 29 der Datei ex.c.
Wird benutzt von saveText().
| #define CMD 0 |
Definiert in Zeile 24 der Datei ex.c.
Wird benutzt von evaluate(), ex() und inputMode().
| #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 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().
| 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 }

| string cmdPrompt | ( | int | mode, | |
| mixed | text, | |||
| int | line, | |||
| int | maxl | |||
| ) |
| 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 }

| 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().

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


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

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


| string inputPrompt | ( | ) |
| 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 }


| void showLines | ( | int | from, | |
| int | to | |||
| ) |
| 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 }


| string substitute | ( | string | s, | |
| string | regex, | |||
| string | n, | |||
| string | extra | |||
| ) |
Definiert in Zeile 44 der Datei ex.c.
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 }

private mixed buf [static] |
Definiert in Zeile 16 der Datei ex.c.
Wird benutzt von AddNum(), evaluate(), format_paths(), inputMode(), inputPrompt(), ResizeRingBuffer(), saveText(), showLines(), StartEX() und WriteBuffer().
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 |
Definiert in Zeile 13 der Datei ex.c.
Wird benutzt von do_mail(), done(), eval_command(), ex(), get_carbon_copy(), inputMode(), mail_cmds(), MediumHelpPage(), modify_command(), parsecommand(), postneustart(), SendMail(), StartEX() und write_mail().
1.6.3