Contributor: GREG ESTABROOKS { There are 2 ways that I can think of off hand. One is to execute COMMAND.COM with the parameter '/K PROMPT [Whatever]' OR You could create your own program enviroment and then add/edit as many enviroment variables as you have memory for. The following program demonstrates this. It creates its own enviroment , then copies the old info to it but changes the prompt to whatever you want. After the shell it releases the memory: } {***********************************************************************} PROGRAM PromptDemo; { Apr 18/94, Greg Estabrooks. } {$M 16840,0,0} { Reserved some memory for the shell. } USES CRT, { IMPORT Clrscr,Writeln. } DOS; { IMPORT Exec. } PROCEDURE ShellWithPrompt( Prompt :STRING ); { Routine to allocate a temporary Enviroment } { with our prompt and the execute COMMAND.COM. } { NOTE: This does NO error checking. } VAR NewEnv :WORD; { Points to our newly allocated env. } OldEnv :WORD; { Holds Old Env Segment. } EnvPos :WORD; { Position inside our enviroment. } EnvLp :WORD; { Variable to loop through ENVStrings. } TempStr:STRING; { Holds temporary EnvString info. } BEGIN ASM Mov AH,$48 { Routine to allocate memory. } Mov BX,1024 { Allocate 1024(1k) of memory. } Int $21 { Call DOS to allocate memory. } Mov NewEnv,AX { Save segment address of our memory. } END; EnvPos := 0; { Initiate pos within our Env. } FOR EnvLp := 1 TO EnvCount DO { Loop through entire enviroment. } BEGIN TempStr := EnvStr(EnvLp); { Retrieve Envirment string. } IF Pos('PROMPT=',TempStr) <> 0 THEN { If its our prompt THEN .... } TempStr := 'PROMPT='+Prompt+#0 { Create our new prompt. } ELSE { .... otherwise......... } TempStr := TempStr + #0; { Add NUL to make it ASCIIZ compatible. } Move(TempStr[1],Mem[NewEnv:EnvPos],Length(TempStr)); { Put in Env. } INC(EnvPos,Length(TempStr)); { Point to new position in Enviroment. } END;{For} OldEnv := MemW[PrefixSeg:$2C];{ Save old enviroment segment. } MemW[PrefixSeg:$2C] := NewEnv;{ Point to our new enviroment. } SwapVectors; { Swap Int vectors in case of conflicts.} Exec(GetEnv('COMSPEC'),''); { Call COMMAND.COM. } SwapVectors; { Swap em back. } MemW[PrefixSeg:$2C] := OldEnv;{ Point back to old enviroment. } ASM Push ES { Save ES. } Mov AH,$49 { Routine to deallocate memory. } Mov ES,NewEnv { Point ES to area to deallocate. } Int $21; { Call DOS to free memory. } Pop ES { Restore ES. } END; END;{ShellWithPrompt} BEGIN Clrscr; { Clear the screen. } Writeln('Type EXIT to return');{ Show message on how to exit shell. } ShellWithPrompt('[PromptDemo] $P$G'); { shell to DOS with our prompt. } END.{PromptDemo} {***********************************************************************}