From: Mark Oteiza Date: Mon, 20 Feb 2017 02:31:22 +0000 (-0500) Subject: Replace nested ifs with cond X-Git-Tag: emacs-26.0.90~769 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0db5ba48b294640774262b01e2f9abc9cbf23d31;p=emacs.git Replace nested ifs with cond * lisp/play/dunnet.el (dun-messages, dun-describe-room, dun-examine): (dun-eat, dun-put-objs, dun-turn, dun-press, dun-ls, dun-cd): Use when and cond where appropriate. (dun-sauna-heat): Accept sauna level as an argument. Use cond. (dun-take): Use null and dun-mprincl. (dun-inven-weight, dun-load-d): Reformat. (dun-remove-obj-from-inven, dun-remove-obj-from-room): Nix setq to nil. --- diff --git a/lisp/play/dunnet.el b/lisp/play/dunnet.el index 755c6583e7a..a5aa7040c14 100644 --- a/lisp/play/dunnet.el +++ b/lisp/play/dunnet.el @@ -1154,14 +1154,12 @@ treasures for points?" "4" "four") (defun dun-messages () (if dun-dead (text-mode) - (if (eq dungeon-mode 'dungeon) - (progn - (if (not (= room dun-current-room)) - (progn - (dun-describe-room dun-current-room) - (setq room dun-current-room))) - (dun-fix-screen) - (dun-mprinc ">"))))) + (when (eq dungeon-mode 'dungeon) + (when (not (= room dun-current-room)) + (dun-describe-room dun-current-room) + (setq room dun-current-room)) + (dun-fix-screen) + (dun-mprinc ">")))) ;;;###autoload @@ -1192,24 +1190,23 @@ treasures for points?" "4" "four") (not (string= dun-mode "long"))) nil (dun-mprinc (car (nth (abs room) dun-rooms))) - (dun-mprinc "\n")) - (if (not (string= dun-mode "long")) - (if (not (member (abs room) dun-visited)) - (setq dun-visited (append (list (abs room)) dun-visited)))) + (dun-mprinc "\n")) + (when (and (not (string= dun-mode "long")) + (not (member (abs room) dun-visited))) + (setq dun-visited (append (list (abs room)) dun-visited))) (dolist (xobjs (nth dun-current-room dun-room-objects)) - (if (= xobjs obj-special) - (dun-special-object) - (if (>= xobjs 0) - (dun-mprincl (car (nth xobjs dun-objects))) - (if (not (and (= xobjs obj-bus) dun-inbus)) - (progn - (dun-mprincl (car (nth (abs xobjs) dun-perm-objects))))))) - (if (and (= xobjs obj-jar) dun-jar) - (progn - (dun-mprincl "The jar contains:") - (dolist (x dun-jar) - (dun-mprinc " ") - (dun-mprincl (car (nth x dun-objects))))))) + (cond + ((= xobjs obj-special) + (dun-special-object)) + ((>= xobjs 0) + (dun-mprincl (car (nth xobjs dun-objects)))) + ((not (and (= xobjs obj-bus) dun-inbus)) + (dun-mprincl (car (nth (abs xobjs) dun-perm-objects))))) + (when (and (= xobjs obj-jar) dun-jar) + (dun-mprincl "The jar contains:") + (dolist (x dun-jar) + (dun-mprinc " ") + (dun-mprincl (car (nth x dun-objects)))))) (if (and (member obj-bus (nth dun-current-room dun-room-objects)) dun-inbus) (dun-mprincl "You are on the bus.")))) @@ -1314,35 +1311,31 @@ disk bursts into flames, and disintegrates.") (dun-mprincl (cadr (nth x dun-objects)))))))))) (defun dun-shake (obj) - (let (objnum) - (when (setq objnum (dun-objnum-from-args-std obj)) - (if (member objnum dun-inventory) - (progn -;;; If shaking anything will do anything, put here. - (dun-mprinc "Shaking ") - (dun-mprinc (downcase (cadr (nth objnum dun-objects)))) - (dun-mprinc " seems to have no effect.") - (dun-mprinc "\n") - ) - (if (and (not (member objnum (nth dun-current-room dun-room-silents))) - (not (member objnum (nth dun-current-room dun-room-objects)))) - (dun-mprincl "I don't see that here.") -;;; Shaking trees can be deadly - (if (= objnum obj-tree) - (progn - (dun-mprinc + (let ((objnum (dun-objnum-from-args-std obj))) + (when objnum + (cond + ((member objnum dun-inventory) + ;; If shaking anything will do anything, put here. + (dun-mprinc "Shaking ") + (dun-mprinc (downcase (cadr (nth objnum dun-objects)))) + (dun-mprinc " seems to have no effect.") + (dun-mprinc "\n")) + ((and (not (member objnum (nth dun-current-room dun-room-silents))) + (not (member objnum (nth dun-current-room dun-room-objects)))) + (dun-mprincl "I don't see that here.")) + ;; Shaking trees can be deadly + ((= objnum obj-tree) + (dun-mprinc "You begin to shake a tree, and notice a coconut begin to fall from the air. As you try to get your hand up to block it, you feel the impact as it lands on your head.") - (dun-die "a coconut")) - (if (= objnum obj-bear) - (progn - (dun-mprinc + (dun-die "a coconut")) + ((= objnum obj-bear) + (dun-mprinc "As you go up to the bear, it removes your head and places it on the ground.") - (dun-die "a bear")) - (if (< objnum 0) - (dun-mprincl "You cannot shake that.") - (dun-mprincl "You don't have that."))))))))) + (dun-die "a bear")) + ((< objnum 0) (dun-mprincl "You cannot shake that.")) + (t (dun-mprincl "You don't have that.")))))) (defun dun-drop (obj) @@ -1396,36 +1389,33 @@ through."))))) ;;; Give long description of current room, or an object. (defun dun-examine (obj) - (let (objnum) - (setq objnum (dun-objnum-from-args obj)) - (if (eq objnum obj-special) - (dun-describe-room (* dun-current-room -1)) - (if (and (eq objnum obj-computer) - (member obj-pc (nth dun-current-room dun-room-silents))) - (dun-examine '("pc")) - (if (eq objnum nil) - (dun-mprincl "I don't know what that is.") - (if (and (not (member objnum - (nth dun-current-room dun-room-objects))) - (not (and (member obj-jar dun-inventory) - (member objnum dun-jar))) - (not (member objnum - (nth dun-current-room dun-room-silents))) - (not (member objnum dun-inventory))) - (dun-mprincl "I don't see that here.") - (if (>= objnum 0) - (if (and (= objnum obj-bone) - (= dun-current-room marine-life-area) dun-black) + (let ((objnum (dun-objnum-from-args obj))) + (cond + ((eq objnum obj-special) + (dun-describe-room (* dun-current-room -1))) + ((and (eq objnum obj-computer) + (member obj-pc (nth dun-current-room dun-room-silents))) + (dun-examine '("pc"))) + ((null objnum) + (dun-mprincl "I don't know what that is.")) + ((and (not (member objnum (nth dun-current-room dun-room-objects))) + (not (and (member obj-jar dun-inventory) + (member objnum dun-jar))) + (not (member objnum (nth dun-current-room dun-room-silents))) + (not (member objnum dun-inventory))) + (dun-mprincl "I don't see that here.")) + ((>= objnum 0) + (if (and (= objnum obj-bone) + (= dun-current-room marine-life-area) dun-black) (dun-mprincl "In this light you can see some writing on the bone. It says: For an explosive time, go to Fourth St. and Vermont.") - (if (nth objnum dun-physobj-desc) - (dun-mprincl (nth objnum dun-physobj-desc)) - (dun-mprincl "I see nothing special about that."))) - (if (nth (abs objnum) dun-permobj-desc) - (progn - (dun-mprincl (nth (abs objnum) dun-permobj-desc))) - (dun-mprincl "I see nothing special about that."))))))))) + (if (nth objnum dun-physobj-desc) + (dun-mprincl (nth objnum dun-physobj-desc)) + (dun-mprincl "I see nothing special about that.")))) + ((nth (abs objnum) dun-permobj-desc) + (dun-mprincl (nth (abs objnum) dun-permobj-desc))) + (t (dun-mprincl "I see nothing special about that."))))) (defun dun-take (obj) (setq obj (dun-firstword obj)) @@ -1447,10 +1437,8 @@ For an explosive time, go to Fourth St. and Vermont.") (dun-mprincl "Nothing to take.")))) (let (objnum) (setq objnum (cdr (assq (intern obj) dun-objnames))) - (if (eq objnum nil) - (progn - (dun-mprinc "I don't know what that is.") - (dun-mprinc "\n")) + (if (null objnum) + (dun-mprincl "I don't know what that is.") (if (and dun-inbus (not (and (member objnum dun-jar) (member obj-jar dun-inventory)))) (dun-mprincl "You can't take anything while on the bus.") @@ -1485,12 +1473,12 @@ For an explosive time, go to Fourth St. and Vermont.") (dun-mprinc "\n"))) (defun dun-inven-weight () - (let (total) - (setq total 0) + (let ((total 0)) (dolist (x dun-jar) (setq total (+ total (nth x dun-object-lbs)))) (dolist (x dun-inventory) - (setq total (+ total (nth x dun-object-lbs)))) total)) + (setq total (+ total (nth x dun-object-lbs)))) + total)) ;;; We try to take an object that is untakable. Print a message ;;; depending on what it is. @@ -1533,18 +1521,19 @@ For an explosive time, go to Fourth St. and Vermont.") notice that the tree is very unsteady."))))) (defun dun-eat (obj) - (let (objnum) - (when (setq objnum (dun-objnum-from-args-std obj)) - (if (not (member objnum dun-inventory)) - (dun-mprincl "You don't have that.") - (if (not (= objnum obj-food)) - (progn - (dun-mprinc "You forcefully shove ") - (dun-mprinc (downcase (cadr (nth objnum dun-objects)))) - (dun-mprincl " down your throat, and start choking.") - (dun-die "choking")) - (dun-mprincl "That tasted horrible.") - (dun-remove-obj-from-inven obj-food)))))) + (let ((objnum (dun-objnum-from-args-std obj))) + (when objnum + (cond + ((not (member objnum dun-inventory)) + (dun-mprincl "You don't have that.")) + ((/= objnum obj-food) + (dun-mprinc "You forcefully shove ") + (dun-mprinc (downcase (cadr (nth objnum dun-objects)))) + (dun-mprincl " down your throat, and start choking.") + (dun-die "choking")) + (t + (dun-mprincl "That tasted horrible.") + (dun-remove-obj-from-inven obj-food)))))) (defun dun-put (args) (let (newargs objnum objnum2 obj) @@ -1580,65 +1569,59 @@ notice that the tree is very unsteady."))))) (if (= obj2 obj-disposal) (setq obj2 obj-chute)) - (if (and (= obj1 obj-cpu) (= obj2 obj-computer)) - (progn - (dun-remove-obj-from-inven obj-cpu) - (setq dun-computer t) - (dun-mprincl + (cond + ((and (= obj1 obj-cpu) (= obj2 obj-computer)) + (dun-remove-obj-from-inven obj-cpu) + (setq dun-computer t) + (dun-mprincl "As you put the CPU board in the computer, it immediately springs to life. The lights start flashing, and the fans seem to startup.")) - (if (and (= obj1 obj-weight) (= obj2 obj-button)) - (dun-drop '("weight")) - (if (= obj2 obj-jar) ;; Put something in jar - (if (not (member obj1 (list obj-paper obj-diamond obj-emerald - obj-license obj-coins obj-egg - obj-nitric obj-glycerine))) - (dun-mprincl "That will not fit in the jar.") - (dun-remove-obj-from-inven obj1) - (setq dun-jar (append dun-jar (list obj1))) - (dun-mprincl "Done.")) - (if (= obj2 obj-chute) ;; Put something in chute - (progn - (dun-remove-obj-from-inven obj1) - (dun-mprincl -"You hear it slide down the chute and off into the distance.") - (dun-put-objs-in-treas (list obj1))) - (if (= obj2 obj-box) ;; Put key in key box - (if (= obj1 obj-key) - (progn - (dun-mprincl + ((and (= obj1 obj-weight) (= obj2 obj-button)) + (dun-drop '("weight"))) + ((= obj2 obj-jar) ; Put something in jar + (if (not (member obj1 (list obj-paper obj-diamond obj-emerald + obj-license obj-coins obj-egg + obj-nitric obj-glycerine))) + (dun-mprincl "That will not fit in the jar.") + (dun-remove-obj-from-inven obj1) + (setq dun-jar (append dun-jar (list obj1))) + (dun-mprincl "Done."))) + ((= obj2 obj-chute) ; Put something in chute + (dun-remove-obj-from-inven obj1) + (dun-mprincl "You hear it slide down the chute and off into the distance.") + (dun-put-objs-in-treas (list obj1))) + ((= obj2 obj-box) ; Put key in key box + (if (/= obj1 obj-key) + (dun-mprincl "You can't put that in the key box!") + (dun-mprincl "As you drop the key, the box begins to shake. Finally it explodes with a bang. The key seems to have vanished!") - (dun-remove-obj-from-inven obj1) - (dun-replace dun-room-objects computer-room (append - (nth computer-room - dun-room-objects) - (list obj1))) - (dun-remove-obj-from-room dun-current-room obj-box) - (setq dun-key-level (1+ dun-key-level))) - (dun-mprincl "You can't put that in the key box!")) - - (if (and (= obj1 obj-floppy) (= obj2 obj-pc)) - (progn - (setq dun-floppy t) - (dun-remove-obj-from-inven obj1) - (dun-mprincl "Done.")) - - (if (= obj2 obj-urinal) ;; Put object in urinal - (progn - (dun-remove-obj-from-inven obj1) - (dun-replace dun-room-objects urinal (append - (nth urinal dun-room-objects) - (list obj1))) - (dun-mprincl - "You hear it plop down in some water below.")) - (if (= obj2 obj-mail) - (dun-mprincl "The mail chute is locked.") - (if (member obj1 dun-inventory) - (dun-mprincl + (dun-remove-obj-from-inven obj1) + (dun-replace dun-room-objects computer-room (append + (nth computer-room + dun-room-objects) + (list obj1))) + (dun-remove-obj-from-room dun-current-room obj-box) + (setq dun-key-level (1+ dun-key-level)))) + + ((and (= obj1 obj-floppy) (= obj2 obj-pc)) + (setq dun-floppy t) + (dun-remove-obj-from-inven obj1) + (dun-mprincl "Done.")) + + ((= obj2 obj-urinal) ; Put object in urinal + (dun-remove-obj-from-inven obj1) + (dun-replace dun-room-objects urinal (append + (nth urinal dun-room-objects) + (list obj1))) + (dun-mprincl "You hear it plop down in some water below.")) + ((= obj2 obj-mail) + (dun-mprincl "The mail chute is locked.")) + ((member obj1 dun-inventory) + (dun-mprincl "I don't know how to combine those objects. Perhaps you should -just try dropping it.") - (dun-mprincl "You can't put that there."))))))))))) +just try dropping it.")) + (t (dun-mprincl "You can't put that there.")))) (defun dun-type (_args) (if (not (= dun-current-room computer-room)) @@ -1890,73 +1873,67 @@ huge rocks sliding down from the ceiling, and blocking your way out.\n") (dun-mprincl "The dial will not turn further in that direction.") (setq dun-sauna-level 0)) - (dun-sauna-heat)))))))) - -(defun dun-sauna-heat () - (if (= dun-sauna-level 0) - (dun-mprincl - "The temperature has returned to normal room temperature.")) - (if (= dun-sauna-level 1) - (dun-mprincl "It is now luke warm in here. You are perspiring.")) - (if (= dun-sauna-level 2) - (dun-mprincl "It is pretty hot in here. It is still very comfortable.")) - (if (= dun-sauna-level 3) - (progn - (dun-mprincl -"It is now very hot. There is something very refreshing about this.") - (if (or (member obj-rms dun-inventory) - (member obj-rms (nth dun-current-room dun-room-objects))) - (progn - (dun-mprincl + (dun-sauna-heat dun-sauna-level)))))))) + +(defun dun-sauna-heat (level) + (cond + ((= level 0) + (dun-mprincl "The temperature has returned to normal room temperature.")) + ((= level 1) + (dun-mprincl "It is now luke warm in here. You are perspiring.")) + ((= level 2) + (dun-mprincl "It is pretty hot in here. It is still very comfortable.")) + ((= level 3) + (dun-mprincl + "It is now very hot. There is something very refreshing about this.") + (when (or (member obj-rms dun-inventory) + (member obj-rms (nth dun-current-room dun-room-objects))) + (dun-mprincl "You notice the wax on your statuette beginning to melt, until it completely melts off. You are left with a beautiful diamond!") - (if (member obj-rms dun-inventory) - (progn - (dun-remove-obj-from-inven obj-rms) - (setq dun-inventory (append dun-inventory - (list obj-diamond)))) - (dun-remove-obj-from-room dun-current-room obj-rms) - (dun-replace dun-room-objects dun-current-room - (append (nth dun-current-room dun-room-objects) - (list obj-diamond)))))) - (if (or (member obj-floppy dun-inventory) - (member obj-floppy (nth dun-current-room dun-room-objects))) - (progn - (dun-mprincl + (if (member obj-rms dun-inventory) + (progn + (dun-remove-obj-from-inven obj-rms) + (setq dun-inventory (append dun-inventory + (list obj-diamond)))) + (dun-remove-obj-from-room dun-current-room obj-rms) + (dun-replace dun-room-objects dun-current-room + (append (nth dun-current-room dun-room-objects) + (list obj-diamond))))) + (when (or (member obj-floppy dun-inventory) + (member obj-floppy (nth dun-current-room dun-room-objects))) + (dun-mprincl "You notice your floppy disk beginning to melt. As you grab for it, the disk bursts into flames, and disintegrates.") - (if (member obj-floppy dun-inventory) - (dun-remove-obj-from-inven obj-floppy) - (dun-remove-obj-from-room dun-current-room obj-floppy)))))) + (if (member obj-floppy dun-inventory) + (dun-remove-obj-from-inven obj-floppy) + (dun-remove-obj-from-room dun-current-room obj-floppy)))) - (if (= dun-sauna-level 4) - (progn - (dun-mprincl -"As the dial clicks into place, you immediately burst into flames.") - (dun-die "burning")))) + ((= level 4) + (dun-mprincl "As the dial clicks into place, you immediately burst into flames.") + (dun-die "burning")))) (defun dun-press (obj) - (let (objnum) - (when (setq objnum (dun-objnum-from-args-std obj)) - (if (not (or (member objnum (nth dun-current-room dun-room-objects)) - (member objnum (nth dun-current-room dun-room-silents)))) - (dun-mprincl "I don't see that here.") - (if (not (member objnum (list obj-button obj-switch))) - (progn - (dun-mprinc "You can't ") - (dun-mprinc (car line-list)) - (dun-mprincl " that.")) - (if (= objnum obj-button) - (dun-mprincl + (let ((objnum (dun-objnum-from-args-std obj))) + (cond + ((not (or (member objnum (nth dun-current-room dun-room-objects)) + (member objnum (nth dun-current-room dun-room-silents)))) + (dun-mprincl "I don't see that here.")) + ((not (member objnum (list obj-button obj-switch))) + (dun-mprinc "You can't ") + (dun-mprinc (car line-list)) + (dun-mprincl " that.")) + ((= objnum obj-button) + (dun-mprincl "As you press the button, you notice a passageway open up, but as you release it, the passageway closes.")) - (if (= objnum obj-switch) - (if dun-black - (progn - (dun-mprincl "The button is now in the off position.") - (setq dun-black nil)) - (dun-mprincl "The button is now in the on position.") - (setq dun-black t)))))))) + ((= objnum obj-switch) + (if dun-black + (progn + (dun-mprincl "The button is now in the off position.") + (setq dun-black nil)) + (dun-mprincl "The button is now in the on position.") + (setq dun-black t)))))) (defun dun-swim (_args) (if (not (member dun-current-room (list lakefront-north lakefront-south))) @@ -2376,15 +2353,14 @@ for a moment, then straighten yourself up. ;;; Load an encrypted file, and eval it. (defun dun-load-d (filename) - (let (old-buffer result) - (setq result t) - (setq old-buffer (current-buffer)) + (let ((old-buffer (current-buffer)) + (result t)) (switch-to-buffer (get-buffer-create "*loadc*")) (erase-buffer) (condition-case nil (insert-file-contents filename) (error (setq result nil))) - (unless (not result) + (when result (condition-case nil (dun-rot13) (error (yank))) @@ -2397,7 +2373,6 @@ for a moment, then straighten yourself up. (defun dun-remove-obj-from-room (room objnum) (let (newroom) - (setq newroom nil) (dolist (x (nth room dun-room-objects)) (if (not (= x objnum)) (setq newroom (append newroom (list x))))) @@ -2405,7 +2380,6 @@ for a moment, then straighten yourself up. (defun dun-remove-obj-from-inven (objnum) (let (new-inven) - (setq new-inven nil) (dolist (x dun-inventory) (if (not (= x objnum)) (setq new-inven (append new-inven (list x))))) @@ -2567,24 +2541,19 @@ Note: Restricted bourne shell in use.\n"))) (setq dungeon-mode 'dungeon))) (defun dun-ls (args) - (if (car args) - (let (ocdpath ocdroom) - (setq ocdpath dun-cdpath) - (setq ocdroom dun-cdroom) - (if (not (eq (dun-cd args) -2)) - (dun-ls nil)) - (setq dun-cdpath ocdpath) - (setq dun-cdroom ocdroom)) - (if (= dun-cdroom -10) - (dun-ls-inven)) - (if (= dun-cdroom -2) - (dun-ls-rooms)) - (if (= dun-cdroom -3) - (dun-ls-root)) - (if (= dun-cdroom -4) - (dun-ls-usr)) - (if (> dun-cdroom 0) - (dun-ls-room)))) + (let ((ocdroom dun-cdroom)) + (if (car args) + (let ((ocdpath dun-cdpath)) + (if (not (eq (dun-cd args) -2)) + (dun-ls nil)) + (setq dun-cdpath ocdpath) + (setq dun-cdroom ocdroom)) + (cond + ((= ocdroom -10) (dun-ls-inven)) + ((= ocdroom -2) (dun-ls-rooms)) + ((= ocdroom -3) (dun-ls-root)) + ((= ocdroom -4) (dun-ls-usr)) + ((> ocdroom 0) (dun-ls-room)))))) (defun dun-ls-root () (dun-mprincl "total 4 @@ -2853,80 +2822,63 @@ drwxr-xr-x 3 root staff 2048 Jan 1 1970 ..") (dun-uexit nil)))))))) (defun dun-cd (args) - (let (tcdpath tcdroom path-elements room-check) - (if (not (car args)) - (dun-mprincl "Usage: cd ") - (setq tcdpath dun-cdpath) - (setq tcdroom dun-cdroom) + (if (not (car args)) + (dun-mprincl "Usage: cd ") + (let ((tcdpath dun-cdpath) + (tcdroom dun-cdroom) + path-elements) (setq dun-badcd nil) (condition-case nil (setq path-elements (dun-get-path (car args) nil)) (error (dun-mprincl "Invalid path") (setq dun-badcd t))) (dolist (pe path-elements) - (unless dun-badcd - (if (not (string= pe ".")) - (if (string= pe "..") - (progn - (if (> tcdroom 0) ;In a room - (progn - (setq tcdpath "/rooms") - (setq tcdroom -2)) - ;In /rooms,/usr,root - (if (or - (= tcdroom -2) (= tcdroom -4) - (= tcdroom -3)) - (progn - (setq tcdpath "/") - (setq tcdroom -3)) - (if (= tcdroom -10) ;In /usr/toukmond - (progn - (setq tcdpath "/usr") - (setq tcdroom -4)))))) - (if (string= pe "/") - (progn - (setq tcdpath "/") - (setq tcdroom -3)) - (if (= tcdroom -4) - (if (string= pe "toukmond") - (progn - (setq tcdpath "/usr/toukmond") - (setq tcdroom -10)) - (dun-nosuchdir)) - (if (= tcdroom -10) - (dun-nosuchdir) - (if (> tcdroom 0) - (dun-nosuchdir) - (if (= tcdroom -3) - (progn - (if (string= pe "rooms") - (progn - (setq tcdpath "/rooms") - (setq tcdroom -2)) - (if (string= pe "usr") - (progn - (setq tcdpath "/usr") - (setq tcdroom -4)) - (dun-nosuchdir)))) - (if (= tcdroom -2) - (progn - (dolist (x dun-visited) - (setq room-check - (nth x - dun-room-shorts)) - (if (string= room-check pe) - (progn - (setq tcdpath - (concat "/rooms/" room-check)) - (setq tcdroom x)))) - (if (= tcdroom -2) - (dun-nosuchdir))))))))))))) - (if (not dun-badcd) - (progn - (setq dun-cdpath tcdpath) - (setq dun-cdroom tcdroom) - 0) - -2)))) + (when (and (not dun-badcd) + (not (string= pe "."))) + (cond + ((string= pe "..") + (cond + ((> tcdroom 0) ;In a room + (setq tcdpath "/rooms") + (setq tcdroom -2)) + ((memq tcdroom '(-2 -3 -4)) ; In /rooms,/usr,root + (setq tcdpath "/") + (setq tcdroom -3)) + ((= tcdroom -10) + (setq tcdpath "/usr") + (setq tcdroom -4)))) + ((string= pe "/") + (setq tcdpath "/") + (setq tcdroom -3)) + ((= tcdroom -4) + (if (not (string= pe "toukmond")) + (dun-nosuchdir) + (setq tcdpath "/usr/toukmond") + (setq tcdroom -10))) + ((or (= tcdroom -10) (> tcdroom 0)) (dun-nosuchdir)) + ((= tcdroom -3) + (cond + ((string= pe "rooms") + (setq tcdpath "/rooms") + (setq tcdroom -2)) + ((string= pe "usr") + (setq tcdpath "/usr") + (setq tcdroom -4)) + (t (dun-nosuchdir)))) + ((= tcdroom -2) + (let (room-check) + (dolist (x dun-visited) + (setq room-check (nth x dun-room-shorts)) + (when (string= room-check pe) + (setq tcdpath (concat "/rooms/" room-check)) + (setq tcdroom x)))) + (when (= tcdroom -2) + (dun-nosuchdir)))))) + (if dun-badcd + -2 + (setq dun-cdpath tcdpath) + (setq dun-cdroom tcdroom) + 0)))) (defun dun-nosuchdir () (dun-mprincl "No such directory.")