about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
...
| * Added offline to /who autocompleteJames Booth2012-10-281-0/+2
| |
| * Added /me handling in logsJames Booth2012-10-282-4/+20
| |
| * Added /me handling for incoming messagesJames Booth2012-10-281-4/+21
| |
* | Merge branch 'master' into chatstatesJames Booth2012-10-284-187/+234
|\|
| * Added /who autocompleteJames Booth2012-10-281-0/+24
| |
| * Moved remaining autocomplete code to command.cJames Booth2012-10-283-146/+133
| |
| * Moved autcomplete code to command.cJames Booth2012-10-284-75/+110
| |
| * Reordered autocompletersJames Booth2012-10-281-6/+7
| |
* | Merge branch 'master' into chatstatesJames Booth2012-10-288-149/+284
|\|
| * Added /intype settingJames Booth2012-10-286-39/+82
| | | | | | | | | | Seperate settings for showing contact typing in UI (/intype), and as desktop notifications (/notify typing).
| * Added autocomplete for second /notify parameterJames Booth2012-10-281-2/+56
| |
| * Added type autcomplete for /notifyJames Booth2012-10-273-4/+24
| |
| * Unified desktop notification preferencesJames Booth2012-10-276-104/+122
| |
| * Rewrote settings help summariesJames Booth2012-10-271-8/+8
| |
* | Merge branch 'master' into chatstatesJames Booth2012-10-276-33/+48
|\| | | | | | | | | Conflicts: docs/profanity.1
| * Refactored disconnectJames Booth2012-10-274-33/+16
| |
| * Renamed shutdown functionJames Booth2012-10-271-3/+3
| |
| * Added /disconnect commandJames Booth2012-10-274-2/+41
| |
| * Removed _shutdown function in profanity.cJames Booth2012-10-272-8/+1
| |
| * Show development version when splash screen enabledJames Booth2012-10-271-1/+1
| |
| * Correction in man pageJames Booth2012-10-271-1/+1
| |
| * Updated to 0.1.10 developmentJames Booth2012-10-241-2/+2
| |
| * Updated for release 0.1.9James Booth2012-10-242-3/+5
| |
* | Changed to 0.1.10 development versionJames Booth2012-10-241-2/+2
| |
* | Updated for release 0.1.9James Booth2012-10-242-3/+5
| |
* | Merge branch 'master' into type_outJames Booth2012-10-2412-49/+388
|\| | | | | | | | | Conflicts: Makefile.am
| * _cmd_tiny: fix possible NULL pointer dereferenceDmitry Podgorny2012-10-241-5/+6
| | | | | | | | Check 'url' for NULL and move free(url) out of if-else structure
| * Fixed possible NULL pointer references when offlineJames Booth2012-10-243-14/+27
| |
| * Added autocomplete for version checking parameterJames Booth2012-10-242-0/+3
| |
| * Made version check a user preferenceJames Booth2012-10-245-16/+76
| |
| * Check for later releaseJames Booth2012-10-242-7/+36
| |
| * Merge branch 'master' into devJames Booth2012-10-241-10/+10
| |\
| | * libraries order does matter when --as-needed is passed to linkerDmitry Podgorny2012-10-241-10/+10
| | | | | | | | | | | | This fixes linking error when --as-needed option is used.
| * | Only check for new release if release buildJames Booth2012-10-241-7/+17
| | |
| * | Added missing filesJames Booth2012-10-232-0/+101
| | |
| * | Added PACKAGE_STATUS to configure.acJames Booth2012-10-232-4/+13
| | |
| * | Merge branch 'master' into devJames Booth2012-10-232-6/+18
| |\|
| | * autotools: move libraries to LIBS instead of AM_CFLAGSDmitry Podgorny2012-10-231-2/+1
| | | | | | | | | | | | | | | | | | Libraries are agruments for linker. So move them to LIBS vatiable. AC_CHECK_LIB adds library to LIBS on success and we don't have to add them manually.
| | * autotools: introduce choice among libxml2 and expatDmitry Podgorny2012-10-231-3/+13
| | | | | | | | | | | | | | | | | | | | | Now profanity is linked with expat only. This breaks build when libstrophe is build with libxml2 support. This patch introduce --with-libxml2 option to ./configure in the same way as it is done in libstrophe.
| | * Check for method of setting ESCDELAYJames Booth2012-10-231-2/+5
| | |
| * | Added check for latest releaseJames Booth2012-10-232-1/+9
| |/
| * Removed libxml2 from install-all.shJames Booth2012-10-231-3/+3
| |
| * Removed dependency on libxml2James Booth2012-10-231-3/+1
| | | | | | | | expat is used by default in libstrophe
| * Added /about commandJames Booth2012-10-233-18/+45
| | | | | | | | Useful for showing version
| * Trailing whitespaceJames Booth2012-10-232-2/+2
| |
| * Split help into sectionsJames Booth2012-10-223-3/+63
| | | | | | | | Most of the time complete help was too big for the screen
| * Escape key clears input lineJames Booth2012-10-221-0/+8
| |
* | Merge branch 'master' into type_outJames Booth2012-10-2239-623/+722
|\|
| * Added autocomplete for boolean settingsJames Booth2012-10-223-11/+48
| |
| * Removed scripts from root folderJames Booth2012-10-222-9/+0
| |
f5908b'>7a583220 ^
33352536 ^

6030d7e2 ^
5f6edeea ^
e59a74ab ^


3a044623 ^
e59a74ab ^



33352536 ^
e59a74ab ^
33352536 ^
7dac9ade ^
e59a74ab ^

5f6edeea ^
9d27e966 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
ee9a9237 ^
6030d7e2 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
6030d7e2 ^
ee9a9237 ^
6030d7e2 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
ddd2e989 ^
ee9a9237 ^
6030d7e2 ^
ddd2e989 ^

ee9a9237 ^
ddd2e989 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
6030d7e2 ^
5f6edeea ^

9d27e966 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
ee9a9237 ^
6030d7e2 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^

ee9a9237 ^
6030d7e2 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^

ee9a9237 ^
6030d7e2 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
ee9a9237 ^
6030d7e2 ^

ee9a9237 ^
6030d7e2 ^
ee9a9237 ^
33352536 ^
ddd2e989 ^
ee9a9237 ^
6030d7e2 ^
ddd2e989 ^

ee9a9237 ^
ddd2e989 ^
ee9a9237 ^
33352536 ^
9d27e966 ^
6030d7e2 ^
5f6edeea ^


f1eade72 ^
6030d7e2 ^
9b16f190 ^
6030d7e2 ^
9b16f190 ^
bfcc0f85 ^
9b16f190 ^
6030d7e2 ^
9b16f190 ^
5f6edeea ^
ee9a9237 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252


                                                                 


                                                                                                                                                 
 
                        



                                            
                                         
                                                                                                                                                                                         
                                   
 
                                                                   
                

                                                                                                                                                                       
                                                                                                                                
                                                                                                                                                                        
                                               
                   

                                                                                                                                                                      
              
                                 
                      
                                                                                                                                                                  
                                    
                   
                                                   
                      






                                                                                                                                                                             
                                                                                                   
                                 


                                                                                                                                                                              
                                


                                                                                                                                                                              
                                


                                                                                                                                                                              
                                 


                                                                                                                                                                              
              
                             
                      




                                                                                                                                                                           
                         


                 
                  
                

                                                                                                                                                                       
             
 
                                                
                

                                                                                                                                                                       
                      











                                                                                                                                                                             
                                                               
                 
                                                                                                                                                                            
                                       
                                                                                                                                                                              
                                        
                                                                                                                                                                             
                 
                                 

                                
                                                

                                                                                                                                                                           
                         





                 
                

                                                                                                                                                                       
             
 


                               
                                                             



                           
                                                                                                                                                                  
                        
                           
                                

                     
                         

                                  
                   
                               
              
                                
                      
                                                                                                                                                                  
                                   
                   
                                
              
                                
                      
                                                                                                                                                                  
                                  
                   

                                
              
                         
                      
                                                                                                                                                                  
                                               
                   

                                
              
                                
                      
                                                                                                                                                                  
                                                 
                   
                                                 

                               
              
                                      
                      
                                                                                                                                                                  
           
             

                          

                                  
                   
                               
              
                                
                      
                                                                                                                                                                  
                                   
                   
                                
              
                                
                      
                                                                                                                                                                  
                                 
                   

                                
              
                         
                      
                                                                                                                                                                  

                                                 
                   

                                
              
                                
                      
                                                                                                                                                                  

                                 
                   

                                
              
                         
                      
                                                                                                                                                                  
                                                 
                   

                                
              
                                
                      
                                                                                                                                                                  
                                                 
                   
                                                  

                               
              
                                      
                      
                                                                                                                                                                  
           
             


       
                               
                         
           
                        
           
          
           
          
                                              
 
                            
# write-stream: like write, but write streams rather than strings

== code
#   instruction                     effective address                                                   register    displacement    immediate
# . op          subop               mod             rm32          base        index         scale       r32
# . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes

#? Entry:  # manual test
#?     # write-stream(stdout, _test-stream2)
#?     68/push  _test-stream2/imm32
#?     68/push  1/imm32/stdout
#?     e8/call write-stream/disp32
#?     # syscall(exit, Num-test-failures)
#?     8b/copy                         0/mod/indirect  5/rm32/.disp32            .             .           3/r32/ebx   Num-test-failures/disp32          # copy *Num-test-failures to ebx
#?     e8/call  syscall_exit/disp32

write-stream:  # f: fd or (addr stream byte), s: (addr stream byte)
    # . prologue
    55/push-ebp
    89/copy                         3/mod/direct    5/rm32/ebp    .           .             .           4/r32/esp   .               .                 # copy esp to ebp
    # if (f < 0x08000000) _write-stream(f, s), return  # f can't be a user-mode address, so treat it as a kernel file descriptor
    81          7/subop/compare     1/mod/*+disp8   5/rm32/ebp    .           .             .           .           8/disp8         0x08000000/imm32  # compare *(ebp+8)
    73/jump-if-addr>=  $write-stream:fake/disp8
    # . . push args
    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           0xc/disp8       .                 # push *(ebp+12)
    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp    .           .             .           .           8/disp8         .                 # push *(ebp+8)
    # . . call
    e8/call  _write-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    eb/jump  $write-stream:end/disp8
$write-stream:fake:
    # otherwise, treat 'f' as a stream to append to
    # . save registers
    50/push-eax
    56/push-esi
    57/push-edi
    # edi = f
    8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .                         7/r32/edi   8/disp8         .                 # copy *(ebp+8) to edi
    # esi = s
    8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .                         6/r32/esi   0xc/disp8       .                 # copy *(ebp+12) to esi
    # eax = _append-4(&f->data[f->write], &f->data[f->size], &s->data[s->read], &s->data[s->write])
    # . . push &s->data[s->write]
    8b/copy                         0/mod/indirect  6/rm32/esi    .           .             .           0/r32/eax   .               .                 # copy *esi to eax
    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  0/index/eax   .           0/r32/eax   0xc/disp8       .                 # copy esi+eax+12 to eax
    50/push-eax
    # . . push &s->data[s->read]
    8b/copy                         1/mod/*+disp8   6/rm32/esi    .           .             .           0/r32/eax   4/disp8         .                 # copy *(esi+4) to eax
    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  0/index/eax   .           0/r32/eax   0xc/disp8       .                 # copy esi+eax+12 to eax
    50/push-eax
    # . . push &f->data[f->size]
    8b/copy                         1/mod/*+disp8   7/rm32/edi    .           .             .           0/r32/eax   8/disp8         .                 # copy *(edi+8) to eax
    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    7/base/edi  0/index/eax   .           0/r32/eax   0xc/disp8       .                 # copy edi+eax+12 to eax
    50/push-eax
    # . . push &f->data[f->write]
    8b/copy                         0/mod/indirect  7/rm32/edi    .           .             .           0/r32/eax   .               .                 # copy *edi to eax
    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    7/base/edi  0/index/eax   .           0/r32/eax   0xc/disp8       .                 # copy edi+eax+12 to eax
    50/push-eax
    # . . call
    e8/call  _append-4/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0x10/imm32        # add to esp
    # f->write += eax
    01/add                          0/mod/indirect  7/rm32/edi    .           .             .           0/r32/eax   .               .                 # add eax to *edi
    # s->read += eax
    01/add                          1/mod/*+disp8   6/rm32/esi    .           .             .           0/r32/eax   4/disp8         .                 # add eax to *(esi+4)
    # . restore registers
    5f/pop-to-edi
    5e/pop-to-esi
    58/pop-to-eax
$write-stream:end:
    # . epilogue
    89/copy                         3/mod/direct    4/rm32/esp    .           .             .           5/r32/ebp   .               .                 # copy ebp to esp
    5d/pop-to-ebp
    c3/return

_write-stream:  # fd: int, s: (addr stream byte)
    # . prologue
    55/push-ebp
    89/copy                         3/mod/direct    5/rm32/ebp    .           .             .           4/r32/esp   .               .                 # copy esp to ebp
    # . save registers
    50/push-eax
    51/push-ecx
    52/push-edx
    53/push-ebx
    56/push-esi
    57/push-edi
    # esi = s
    8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .             .           6/r32/esi   0xc/disp8       .                 # copy *(ebp+12) to esi
    # edi = s->read
    8b/copy                         1/mod/*+disp8   6/rm32/esi    .           .             .           7/r32/edi   4/disp8         .                 # copy *(esi+4) to edi
    # edx = s->write
    8b/copy                         0/mod/indirect  6/rm32/esi    .           .             .           2/r32/edx   .               .                 # copy *esi to edx
    # syscall(write, fd, &s->data[s->read], s->write - s->read)
    # . . fd: ebx
    8b/copy                         1/mod/*+disp8   5/rm32/ebp    .           .             .           3/r32/ebx   8/disp8         .                 # copy *(ebp+8) to ebx
    # . . data: ecx = &s->data[s->read]
    8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  7/index/edi   .           1/r32/ecx   0xc/disp8       .                 # copy esi+edi+12 to ecx
    # . . size: edx = s->write - s->read
    29/subtract                     3/mod/direct    2/rm32/edx    .           .             .           7/r32/edi   .               .                 # subtract edi from edx
    # . . syscall
    e8/call  syscall_write/disp32
    # if (eax < 0) abort
    3d/compare-eax-with  0/imm32
    0f 8c/jump-if-<  $_write-stream:abort/disp32
    # s->read += eax
    01/add                          1/mod/*+disp8   6/rm32/esi    .           .             .           0/r32/eax   4/disp8         .                 # add eax to *(esi+4)
    # . restore registers
    5f/pop-to-edi
    5e/pop-to-esi
    5b/pop-to-ebx
    5a/pop-to-edx
    59/pop-to-ecx
    58/pop-to-eax
    # . epilogue
    89/copy                         3/mod/direct    4/rm32/esp    .           .             .           5/r32/ebp   .               .                 # copy ebp to esp
    5d/pop-to-ebp
    c3/return

$_write-stream:abort:
    # . _write(2/stderr, error)
    # . . push args
    68/push  "_write-stream: failed to write to file\n"/imm32
    68/push  2/imm32/stderr
    # . . call
    e8/call  _write/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # . syscall(exit, 1)
    bb/copy-to-ebx  1/imm32
    e8/call  syscall_exit/disp32
    # never gets here

test-write-stream-single:
    # setup
    # . clear-stream(_test-stream)
    # . . push args
    68/push  _test-stream/imm32
    # . . call
    e8/call  clear-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
    # . clear-stream(_test-stream2)
    # . . push args
    68/push  _test-stream2/imm32
    # . . call
    e8/call  clear-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
    # . write(_test-stream2, "Ab")
    # . . push args
    68/push  "Ab"/imm32
    68/push  _test-stream2/imm32
    # . . call
    e8/call  write/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # write-stream(_test-stream, _test-stream2)
    # . . push args
    68/push  _test-stream2/imm32
    68/push  _test-stream/imm32
    # . . call
    e8/call  write-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # check-stream-equal(_test-stream, "Ab", msg)
    # . . push args
    68/push  "F - test-write-stream-single"/imm32
    68/push  "Ab"/imm32
    68/push  _test-stream/imm32
    # . . call
    e8/call  check-stream-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         # add to esp
    # . end
    c3/return

test-write-stream-appends:
    # setup
    # . clear-stream(_test-stream)
    # . . push args
    68/push  _test-stream/imm32
    # . . call
    e8/call  clear-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
    # . clear-stream(_test-stream2)
    # . . push args
    68/push  _test-stream2/imm32
    # . . call
    e8/call  clear-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
    # . write(_test-stream2, "C")
    # . . push args
    68/push  "C"/imm32
    68/push  _test-stream2/imm32
    # . . call
    e8/call  write/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # first write
    # . write-stream(_test-stream, _test-stream2)
    # . . push args
    68/push  _test-stream2/imm32
    68/push  _test-stream/imm32
    # . . call
    e8/call  write-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # second write
    # . write(_test-stream2, "D")
    # . . push args
    68/push  "D"/imm32
    68/push  _test-stream2/imm32
    # . . call
    e8/call  write/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # . write-stream(_test-stream, _test-stream2)
    # . . push args
    68/push  _test-stream2/imm32
    68/push  _test-stream/imm32
    # . . call
    e8/call  write-stream/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
    # check-stream-equal(_test-stream, "CD", msg)
    # . . push args
    68/push  "F - test-write-stream-appends"/imm32
    68/push  "CD"/imm32
    68/push  _test-stream/imm32
    # . . call
    e8/call  check-stream-equal/disp32
    # . . discard args
    81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               0xc/imm32         # add to esp
    # . end
    c3/return

== data

_test-stream2:  # (stream byte)
    # current write index
    4/imm32
    # current read index
    1/imm32
    # size
    8/imm32
    # data
    41/A 42/B 43/C 44/D 00 00 00 00  # 8 bytes

# . . vim:nowrap:textwidth=0