CertServerF.hs

module CertServerF(certServerF,backspace) where
import Fudgets
--import AllFudgets(expandTabs)
import Char(isDigit)
import FudExtras(longTextChoicePopupF)

certServerF =
   loopThroughRightF (absF certServerSP)
	             (delayF shF>+<longTextChoicePopupF)

shF = --teeF show "shF" >==<
      (inputLinesSP -+- inputLinesSP) >^^=< subProcessF "sh" >=^< (++"\n")

certServerSP = loop
  where
    loop = get $ either ignore fromInput

    ignore _ = loop -- ignore output from shell while waiting for a cmd

    fromInput cmd =
      putSh ("LANG=C "++cmd ++ " ; echo +-+ $?") $
      getResult $ \ res ->
      output res $
      loop

getResult cont = loop []
  where
    loop acc = dispatch fromShell fromPopup ignore
      where
        ignore _ = loop acc -- ignore new cmds while a cmd is in progress

        fromShell l =
	  case l of
	    Left ('+':'-':'+':' ':s) | all isDigit s ->
	      cont (s=="0",reverse acc)
	    Right "+-+ Yes No" -> popup (msgTxt acc,("Yes","No")) (loop [])
	    --Right ('+':'-':'+':' ':s) -> cont (s=="0",reverse acc)
	    _ -> loop (mapEither backspace backspace l:acc)

        fromPopup msg = putSh msg (loop acc)

        msgTxt = map stripEither . reverse

output = put . Right
putSh = put . Left . Left
popup = put . Left . Right

dispatch fromShell fromPopup fromInput =
    get $ either (either fromShell fromPopup) fromInput

--confirmString Confirm = "Yes"
--confirmString Cancel = "No"


-- Interpret the backspace control character:
backspace = bs []
  where
    bs ls ('\b':rs) = bs (drop 1 ls) rs
    bs ls (r:rs) = bs (r:ls) rs
    bs ls [] = reverse ls

Plain-text version of CertServerF.hs | Valid HTML?