Here is a rough start, I did not include a reset or repeat.
You also need a block called "IE-ATTRIBUTE" containing an atttribute"
Code:
(defun c:foo (/ oil-ie sp1 sp2 local-dist local-fall ofall-per-foot bn bs att1)
(setq bn "IE-ATTRIBUTE")
(setq bs (getvar "Dimscale"))
(if (not il-ie) (setq il-ie (getreal "\nspecify start invert elevation:" )))
(setq oil-ie il-ie)
(if (not fall-per-foot) (setq fall-per-foot 0.125))
(setq ofall-per-foot fall-per-foot)
(princ (strcat "\nfall per foot = " (rtos fall-per-foot 4 4) "\nstarting elevation = " (rtos (/ il-ie 12) 2 3)))
(setq sp1 (getpoint "\nspecify start point: "))
(if (/= sp1 nil)
(progn
(setq sp2 (getpoint "\nspecify next point of pipe run: " sp1))
(setq local-dist (distance sp1 sp2))
(setq local-fall (* local-dist fall-per-foot))
(setq il-ie (+ oil-ie local-fall))
(princ (strcat "\nnew elevation is " (rtos (/ il-ie 12) 2 3)))
(setq att1 (rtos (/ il-ie 12) 2 3))
(command "-insert" bn "S" bs "r" 0 "non" sp1)
(command att1)
(command "rotate" (entlast) "" "non" sp1 pause)
))
(princ))