Následuje ukázka implementace příkazu CD s parametry ve zjednodušené formě podle příkazů na Příkazovém řádku Windows.
package wintrainer;
/**
*
* @author sarka
*/
// trida pro zpracovani prikazu CD
public class TCd {
public String out = new String(); // po vyhodnoceni bude zobrazeno v okne
TData data; // v konstruktoru bude predan odkaz na data (adresarova struktura apod.)
public TCd(TData nodes) {
data = nodes;
}
void getHelp() {
out = "Zobrazí název nebo změní aktuální adresář.\n"
+"CHDIR [jednotka:][cesta]\n"
+"CHDIR [..]\n"
+"CD [jednotka:][cesta]\n"
+"CD [..]\n\n"
+".. Nastaví nadřazený adresář jako aktuální.\n"
+"Příkazem CD jednotka: zobrazíte aktuální adresář zadané jednotky.\n"
+"Příkazem CD bez parametrů zobrazíte aktuální jednotku a adresář.";
}
public int run (String params) {
if (params == null) return 1; // chyba ve vyhodnocovani
params = params.trim();
int delka = params.length();
if (delka == 0) { // prikaz CD bez parametru, vypise aktivni uzel
out = data.active.getFullName(); return 0;
}
out = ""; // vycistime vypis
char [] rad = params.toCharArray(); // zkonvertujeme na zpracovatelne pole
int pos = 0;
String dir = new String();
// provedeme analyzu parametru prikazu CD:
switch (rad[0]) {
case '/': // prepinace, zatim funguje jen "CD /?" pro vypis napovedy
if (rad[1] == '?') getHelp(); return 0;
case '\"': // parametrem je nazev adresare v uvozovkach
pos++;
while (pos < delka && rad[pos] != '\"') dir = dir + rad[pos]; // nacteme cely nazev
if (rad[pos] != '\"') return 1; // ukoncovaci symbol neni, chyba uzivatele
if (data.changeNode(dir)) return 0;
return 1;
case '\\': // prikaz "CD \" znamena presun do korenoveho adresare aktivniho disku
if (delka == 1) {
if(data.goToRoot()) return 0;
return 1;
} // jinak default
default:
if (data.changeNode(params)) return 0; // presun do bezne zadaneho adresare, funguji i "teckove"
return 1;
}
}
}