/* PL/I symbolic debugger procedure to execute the command in commandline */ do_command: procedure; %include 'scandef.pli'; /**following belongs in demain, but cant because then the PL/I runtime would delete endcmd on-unit*/ %include 'workdef.pli'; dcl (oncode, onloc) builtin; on transmit(workfile) call error('bug in the debugger: transmit on debug workfile, oncode='!!oncode!!', onloc='!!onloc); on endfile(workfile) call error('bug in the debugger: endfile on debug workfile, onloc='!!onloc); /**preceding belongs in demain, but cant because then the PL/I runtime would delete endcmd on-unit*/ /**************************************************************************************************************/ if nextp < 0 then nextp = -nextp; /*if nextp<0 we have finished an include file, do group, or debprocedure and must execute remainder of the line*/ else nextp = 1; /*start at beginning*/ errorp = nextp ; startp = nextp ; debprocedure_startp = 1; /*to allow error to give user a chance to re-enter line of do-group*/ on condition(endcmd) goto command_done; /*where to go when command is done, whether normally or due to error*/ do while( (nextp<=length(commandline)) & (nextp>=0) ); /*nextp becomes <0 when we begin a do group or debprocedure - must switch to new command stream*/ in_set_break = false; call symcmd; /*interpret deposit, examine, put commands*/ /*must be first for deposit to interpret assignment without deposit keyword*/ call breakcmd; /*interpret commands pertaining to break points &tc*/ /*must be next as it factors out the SET keyword*/ call gocmd; /*more breakpoint-related commands*/ call modcmd; /*interpret module-related commands*/ call pokecmd; /*undocumented commands for poking around user task and for debugging debugger*/ call othercmd; /*interpret misc commands*/ /*must be last since it gives error for unrecognized command*/ command_done: startp = nextp; end; end do_command;