/* ShellScr v1.0 by Kyzer/CSG */
/* Creates a fullscreen shell with it's own screen */

OPT OSVERSION=37

MODULE 'intuition/screens','dos/dos'

PROC main()
  DEF defscr:PTR TO screen, scr:PTR TO screen, dri:PTR TO drawinfo,
  pub[16]:STRING, cmd[100]:STRING, nil, sig

  IF (sig:=AllocSignal(-1))=-1 THEN RETURN

  StringF(pub,'SHELL_\h',FindTask(NIL)) -> unique publicscreen name

  IF (defscr:=LockPubScreen(NIL))=NIL THEN RETURN
  dri:=GetScreenDrawInfo(defscr)

  scr:=OpenScreenTagList(NIL,[SA_DEPTH,dri.depth,
                              SA_PENS,dri.pens,
                              SA_TYPE,PUBLICSCREEN,
                              SA_PUBNAME,pub,
                              SA_PUBSIG,sig,
                              SA_PUBTASK,FindTask(NIL),
                              SA_DISPLAYID,GetVPModeID(defscr.viewport),
                              SA_TITLE,'AmigaShell',NIL])

  FreeScreenDrawInfo(defscr,dri)
  UnlockPubScreen(NIL,defscr)

  IF scr=NIL THEN RETURN
  PubScreenStatus(scr,PUBLICSCREEN) -> make screen go public

  StringF(cmd,'NewShell CON:0/3/\d/\d//BACKDROP/NOBORDER/SCREEN\s',
          scr.width,scr.height-3,pub)

  IF nil:=Open('NIL:',MODE_READWRITE)
    Execute(cmd,nil,nil) -> spawn new process on our screen
    Close(nil)

    nil:=Wait(Shl(1,sig)) -> wait for "last-window-gone" signal
  ENDIF

  CloseScreen(scr)
  FreeSignal(sig)
ENDPROC
-> $VER: ShellScr.e 1.0 (14.9.96)
CHAR '$VER: ShellScr 1.0 (14.6.96)',0
