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.
This commit is contained in:
Mark Oteiza 2017-02-19 21:31:22 -05:00
parent c8d14cfc6c
commit 0db5ba48b2

View file

@ -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!"))
(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))))
(if (and (= obj1 obj-floppy) (= obj2 obj-pc))
(progn
(setq dun-floppy t)
(dun-remove-obj-from-inven obj1)
(dun-mprincl "Done."))
((and (= obj1 obj-floppy) (= obj2 obj-pc))
(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
((= 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))))))))
(dun-sauna-heat dun-sauna-level))))))))
(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
(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 <path>")
(setq tcdpath dun-cdpath)
(setq tcdroom dun-cdroom)
(if (not (car args))
(dun-mprincl "Usage: cd <path>")
(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.")