GDBShellCommandParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 13 Dec 2018 14:53:48 +0000
changeset 164 a16705f64a64
child 259 651864c2aa29
permissions -rw-r--r--
Add support for arbitrary (shell) command to launch GDB. Until now it was only possible to specify GDB executable. In some cases however it is useful to be able to specify whole command including parameters - passing --data-directory or tunneling GDB through SSH, for example. To support this, a new setting, #gdbCommand: has been introduced making old gdbExecutable: obsolete. The specified command is NOT passed to shell, however. Instead, it's parsed the same way shell (or `cmd.exe` on Windows) would do it and then passed to `exec()` (`CreateProcessEx` on Windows). This is to avoid shell inkering with input/output stream - we need to handle them ourselves.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
164
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
This library is free software; you can redistribute it and/or
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
License as published by the Free Software Foundation; either
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
version 2.1 of the License. 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
This library is distributed in the hope that it will be useful,
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
Lesser General Public License for more details.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
License along with this library; if not, write to the Free Software
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"{ Package: 'jv:libgdbs' }"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: Smalltalk }"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
Object subclass:#GDBShellCommandParser
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	instanceVariableNames:'stream'
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	category:'GDB-Private'
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
!GDBShellCommandParser class methodsFor:'documentation'!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
copyright
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
jv:libgdbs - GNU Debugger Interface Library
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
Copyright (C) 2015-now Jan Vrany
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
This library is free software; you can redistribute it and/or
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
modify it under the terms of the GNU Lesser General Public
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
License as published by the Free Software Foundation; either
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
version 2.1 of the License. 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
This library is distributed in the hope that it will be useful,
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
but WITHOUT ANY WARRANTY; without even the implied warranty of
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
Lesser General Public License for more details.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
You should have received a copy of the GNU Lesser General Public
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
License along with this library; if not, write to the Free Software
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
! !
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
!GDBShellCommandParser class methodsFor:'parsing'!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
parse: input
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
     "Parses input (stream or string) as a shell command. Returns
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
     an array of arguments (main's argv[], actually)"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
     ^ self new
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
        stream: input;
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
        parse
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    "
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    GDBShellCommandParser parse: 'gdb'
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    GDBShellCommandParser parse: 'ssh jv@debian-sid-rv64 gdb'
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    "
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    "Created: / 12-12-2018 / 16:43:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
! !
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
!GDBShellCommandParser methodsFor:'accessing'!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
stream
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    ^ stream
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
stream:aStringOrStream
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    stream := aStringOrStream readStream.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    "Modified: / 12-12-2018 / 16:39:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
! !
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
!GDBShellCommandParser methodsFor:'parsing'!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
parse
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    "Parses input stream as a shell command. Returns
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
     an array of arguments (main's argv[], actually)"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    OperatingSystem isMSWINDOWSNTlike ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
        ^ self parseAsForCmd
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    ] ifFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
        ^ self parseAsForSh
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    ]
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    "Created: / 12-12-2018 / 16:40:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
! !
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
!GDBShellCommandParser methodsFor:'parsing - private'!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
parseAsForCmd
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    ^ Array streamContents:[ :argv | 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
        stream skipSeparators.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
        [ stream atEnd ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
            argv nextPut: self parseTokenAsForCmd.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
            stream skipSeparators.   
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
        ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "Created: / 12-12-2018 / 16:41:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
parseAsForSh
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    ^ Array streamContents:[ :argv | 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
        stream skipSeparators.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
        [ stream atEnd ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
            argv nextPut: self parseTokenAsForSh.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
            stream skipSeparators.   
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
        ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    "Created: / 12-12-2018 / 16:40:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
parseTokenAsForCmd
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    | buffer char done1 done2 |
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    buffer := (String new: 10) writeStream.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    done1 := false.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    char := stream next.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
    [ done1 ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
        char == $" ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
            done2 := false.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
            [ done2 ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
                stream atEnd ifTrue:[ self error:'Unterminated string token'. ^ nil ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
                char := stream next.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
                char == $" ifTrue:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
                    done2 := true.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
                ] ifFalse:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
                    buffer nextPut: char      
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
                ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
            ]
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
        ] ifFalse:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
            char == $^ ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
                stream atEnd ifTrue:[ self error:'Unterminated string token'. ^ nil ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
                char := stream next.                    
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
                char == Character space ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
                    buffer nextPut: $^ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
                ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
            ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
            buffer nextPut: char.   
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
        ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
        char := stream atEnd ifTrue:[ nil ] ifFalse:[ stream next ].  
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
        done1 := char isNil or:[ char isSeparator ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
    ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    ^ buffer contents
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    "Created: / 12-12-2018 / 16:41:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
!
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
parseTokenAsForSh
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
    | buffer char done1 done2 |
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    buffer := (String new: 10) writeStream.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    done1 := false.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    char := stream next.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    [ done1 ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
        char == $" ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
            done2 := false.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
            [ done2 ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
                stream atEnd ifTrue:[ self error:'Unterminated string token'. ^ nil ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
                char := stream next.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
                char == $\ ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
                    stream atEnd ifTrue:[ self error:'Unterminated string token'. ^ nil ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
                    char := stream next.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
                    char == $" ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
                        buffer nextPut: $"  
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
                    ] ifFalse:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
                        buffer nextPut: $\; nextPut: char  
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
                    ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
                ] ifFalse:[ char == $" ifTrue:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
                    done2 := true.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
                ] ifFalse:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
                    buffer nextPut: char      
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
                ]].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
            ]
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
        ] ifFalse:[ char == $' ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
            done2 := false.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
            [ done2 ] whileFalse:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
                stream atEnd ifTrue:[ self error:'Unterminated string token'. ^ nil ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
                char := stream next.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
                char == $' ifTrue:[
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
                    done2 := true.
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
                ] ifFalse:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
                    buffer nextPut: char      
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
                ].                       
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
            ]
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
        ] ifFalse:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
            char == $\ ifTrue:[ 
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
                stream atEnd ifTrue:[ self error:'Unterminated string token'. ^ nil ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
                char := stream next.                    
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
            ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
            buffer nextPut: char.   
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
        ]].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
        char := stream atEnd ifTrue:[ nil ] ifFalse:[ stream next ].  
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
        done1 := char isNil or:[ char isSeparator ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    ].
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    ^ buffer contents
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    "Created: / 12-12-2018 / 16:41:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
! !
a16705f64a64 Add support for arbitrary (shell) command to launch GDB.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211