/***********************************************************************
**             (C) Copyright 1979  TRIPOS Research Group              **
**            University of Cambridge Computer Laboratory             **
************************************************************************
*                                                                      *
*      ##    ##  ########  ##    ##    #####   ##        ########      *
*      ###   ##  ########  ##    ##   #######  ##        ########      *
*      ####  ##  ##        ##    ##  ##        ##           ##         *
*      ## ## ##  ######    ##    ##  ##        ##           ##         *
*      ##  ####  ##        ## ## ##  ##        ##           ##         *
*      ##  ####  ##        ########  ##        ##           ##         *
*      ##   ###  ########  ###  ###   #######  ########  ########      *
*      ##    ##  ########  ##    ##    #####   ########  ########      *
*                                                                      *
************************************************************************
**                                                                    **
***********************************************************************/



// Modifications:
// 13 Jan 84 by BJK: CLI.INIT altered to GLOBIN the library segments before
//                   returning, in case they define START.

SECTION "NEWCLI"

GET "LIBHDR"
GET "CLIHDR"
GET "IOHDR"


LET start() BE
 $( LET argv = VEC 50
    LET pkt = VEC pkt.arg6
    LET task = 0

    IF rdargs("DEV",argv,50)=0 GOTO err
    IF argv!0=0 DO argv!0 := "**"

    FOR i = 1000 TO 501 BY -1 DO
    $( task := createtask(tcb!tcb.seglist,
                          tcb!tcb.stsiz, i)
       UNLESS task=0 BREAK
    $)
    IF task=0 GOTO err

    cli.module!(cli.module!1) := globsize
    rootnode!rtn.tasktab!task!tcb.seglist!3 := cli.module

    IF sendpkt(-1, task, 0, -1, 0,
               copydir(currentdir),
               consoletask,
               argv!0,
               copydir(cli.commanddir),
               cli.defaultstack,
               cli.prompt)=0 GOTO err

    RETURN

err:writes("NEWCLI failed*N")
    stop(20)
 $)


LET cli.init(pkt) = VALOF
 $( initio()
    currentdir := pkt!pkt.arg1
    consoletask := pkt!pkt.arg2
    cli.currentinput := findinput(pkt!pkt.arg3)
    selectinput(cli.currentinput)
    UNLESS cli.currentinput=0 DO
    $( cli.currentoutput := findoutput(pkt!pkt.arg3)
       selectoutput(cli.currentoutput)
    $)
    IF cli.currentinput=0 | cli.currentoutput=0 DO
    $( endread()
       endwrite()
       returnpkt(pkt,0,result2)
       result2 := taskid
       RESULTIS deletetask
    $)
    UNLESS compstring(pkt!pkt.arg3,"**")=0 DO
       consoletask := ABS cli.currentinput!scb.type
    cli.background := FALSE
    cli.standardinput := cli.currentinput
    cli.standardoutput := cli.currentoutput
    cli.commanddir := pkt!pkt.arg4
    returncode := 0
    cli.returncode := 0
    cli.faillevel  := cli.initialfaillevel
    cli.result2 := 0
    cli.commandfile%0 := 0
    cli.defaultstack := pkt!pkt.arg5
    cli.module := 0
    FOR i = 0 TO pkt!pkt.arg6%0 DO
      cli.prompt%i := pkt!pkt.arg6%i
    writef("New CLI task %N*N", taskid)
    tcb!tcb.seglist!3 := 0
    start := cli.undefglobval
    globin(tcb!tcb.seglist!1)   // In case library segments define START
    globin(tcb!tcb.seglist!2)
    result2 := pkt
    RESULTIS qpkt
 $)


