flat assembler
Message board for the users of flat assembler.
Index
> Compiler Internals > suggestion /*Comments*/ (final rev.8 - over for me) Goto page Previous 1, 2, 3, 4, 5, 6, 7, 8 Next |
Author |
|
ouadji 15 Mar 2010, 23:04
sorry for this stupid error in version 6.
This version 7 is stable, and works fine. and includes a checking of syntax of control word "init" This command "INIT" is fun but in fact it has little utility. The "IDLE" word control is powerful enough to prevent the rare cases where multiline comments are a problem. I think that eventually, this command has no really rationale. Allow to change the symbols start/end is fun, but in practice, it's absurd. The only case which has really been a problem is found in a macro created by Baldr (I think especially for me ) A macro a little bit artificial, in the words of Baldr. And this case, almost unique, was solved without problem with the idle control. Watch how this engine works, it's quite nice. Code: ;Ouadji - Multiline Comments for FASM ;developed based on the first work of mikhajduk. ;================================================= Multiline_Core: ;(7.1 - tuning of ".syntax:") cmp al,"\" je .BS.Core cmp al,byte [@S_] je .presumed cmp al,"/" je .presumed ret .presumed: push ebx mov bx,[@S_] cmp word [esi-1],bx pop ebx je .SL.Core cmp word [esi-1],"/*" je .SL.Core ret ;---------------------------------------------------------- .SL.Core: pushad mov ebp,esp xor edi,edi inc esi call Search_absolute_end_comment jmp .wayout ;---------------------------------------------------------- .BS.Core: pushad mov ebp,esp xor edi,edi xor edx,edx .BS.engine: call Search_to_the_right jc .wayout call Search_absolute_end_comment jmp .BS.engine ;---------------------------------------------------------- .wayout: add [esp+24h],edi ;<---line numbering mov [esp+04h],esi ;<---hide comments cmp edx,2 popad jb .direct dec esi ;closed (BS or SL) cmp al,"\" jne .final dec esi ret .direct: cmp al,"\" ;open or code (BS or SL) jne .final mov byte[esi-1],al ret .final: mov [esp],eax mov eax,[back_] xchg eax,[esp] ret ;==================================================== Search_to_the_right: cmp edx,2 je .failed xor edx,edx mov ecx,100h mov ebx,-1 .loop_scan: lods byte [esi] call Prohibited jz .abortChar cmp al,20h je .nextScan cmp al,09h je .nextScan push eax mov ax,[@S_] cmp word [esi-1],ax pop eax je .found cmp word [esi-1],"/*" je .found call CRLF_ jc .firstTwo cmp al,";" jne .abortChar .fasm: lods byte [esi] call Prohibited jz .abortChar call CRLF_ jnc .fasm .firstTwo: inc ebx .nextScan: loopz .loop_scan jz out_error ;---------------------------------------------------------- .two_crlf: sub edi,2 ;"edi" always >=2! sub esi,4 mov word [esi],0A0Dh stc ret .abortChar: dec esi or edi,edi je .failed dec edi sub esi,2 mov word [esi],0A0Dh .failed: stc ret .found: inc esi ;cy=0 from "je" ret ;==================================================== Search_absolute_end_comment: call AccessRight jc .done mov ecx,1 mov ebx,20000h .loopScan: lods byte [esi] call Prohibited jz out_error call CRLF_ jc .gonext call Nestings jecxz .done ;end_comment found! .gonext: sub ebx,1 jnc .loopScan jmp out_error .done: ret ;==================================================== Nestings: push edi movzx eax,word[esi-1] mov edi,+1 cmp ax,[@S_] je .core neg edi cmp ax,[@E_] je .core pop edi ret .core: add esi,2 shl eax,8 or eax,22000022h cmp dword[esi-4],eax je .quoted xor eax,("'..'" xor '".."') ;(")<=>(') ;here,tks baldr! cmp dword[esi-4],eax je .quoted add ecx,edi dec esi .quoted: pop edi ret ;==================================================== CRLF_: cmp al,0Dh je .next cmp al,0Ah je .next clc ret .next: xor al,(0Ah xor 0Dh) ;here,tks baldr! cmp al,byte [esi] jne .done inc esi .done: inc edi stc ret ;==================================================== AccessRight: cmp byte [esi],"i" je .confirm .noCode: cmp [Gate],0 jne .back .open: mov ax,[@S_] cmp word [esi-2],ax jne .back xor edx,edx ret ;nocy! (xor=clc) .back: mov edx,2 stc ret .confirm: mov ecx,9 @@: mov al,byte [esi+ecx] call Prohibited loopnz @B jz .noCode ;ok=nz,bad=z call IDLE_Code jc .done call INIT_Code jc .done ;call .mynextcode jnc .noCode .done: ret ;==================================================== IDLE_Code: cmp dword [esi-2],'/*id' jne .done cmp dword [esi+2],'le!!' jne .done .idleCore: add esi,6 not [Gate] ;open<=>close gate mov edx,1 stc ret .done: clc ;ok=cy(+edx),bad=nocy ret ;==================================================== INIT_Code: push esi cmp dword [esi-2],'/*in' jne .done cmp dword [esi+2],'it!!' jne .done .initCore: call .syntax mov [esp],esi mov [@SE_],eax mov edx,1 pop esi stc ret .done: pop esi clc ;ok=cy(+edx),bad=nocy ret ;-------------------------------------- .syntax: cld push edx mov ecx,4 add esi,10 mov ah,(4*4) mov edx,[esi-4] mov ebx,init_syntax .S.check: rol edx,8 mov al,dl xlat byte[ebx] sub ah,al or al,al jne @F mov dl,"?" @@: loop .S.check or ah,ah jne .fail.char ;-------------------------------------- mov eax,edx bswap eax cmp ax,dx jnz .problem mov eax,edx pop edx ret .problem: xchg ah,al cmp ax,dx jz .fail.inv ;-------------------------------------- .fail.seq: mov eax,3 jmp out_info .fail.inv: mov eax,2 jmp out_info .fail.char: mov [invalid.sequence],edx mov eax,1 jmp out_info ;==================================================== Prohibited: cmp al,1Ah je .done or al,al .done: ret ;z=pb. nz=ok ;==================================================== out_error: mov esp,ebp add [esp+24h],edi popad mov dword [esp],global_error jmp assembler_error out_info: mov esp,ebp add [esp+24h],edi mov [esp+1Ch],eax popad mov eax,[message_list + eax*4] mov [esp],eax jmp assembler_error ;==================================================== ;variables ;---------- Gate dd 0 back_ dd ? @S_ dw "/*" @E_ dw "*/" virtual at @S_ @SE_ dd ? end virtual init_syntax db 1 dup (\ \; 1 2 3 4 5 6 7 8 9 A B C D E F 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;1 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\ ;2 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4,\ ;3 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\ ;4 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,\ ;5 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\ ;6 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 0,\ ;7 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;9 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,\ ;A 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;B 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;C 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;D 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;E 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ;F ;messages ;-------- global_error db 'error multiline comments',0 message_1 db 'INIT : invalid characters : ' invalid.sequence dd ? db 0 message_2 db 'INIT : char ok but seq reversed',0 message_3 db 'INIT : char ok but seq prohibited',0 message_list: ;----------- dd global_error dd message_1 dd message_2 dd message_3 ;==================================================== Last edited by ouadji on 21 Sep 2010, 20:30; edited 4 times in total |
|||
15 Mar 2010, 23:04 |
|
vid 16 Mar 2010, 01:11
ouadji: so, is there a description of rules for your /* */ usage?
|
|||
16 Mar 2010, 01:11 |
|
ouadji 16 Mar 2010, 07:32
rules ? only one :where you want, how you want. "start" or "stop", inside a comment must be between quotes. /*idle!! disable/enable multiline comment. /*init!!xyyx changes start/stop xyyx : identical, but reversed. backslash effect jumps over comment. Code: endless possibilities ... /*TEXT*/ mov eax,ebx mov eax,/* TEXT */ebx ;but also .... db \ /* /* 0 mov /*TE... quoted "/*" or '*/' ...XT*/eax,/*TE /* TEXT */ XT*/ebx /*TEXT*/ db 0,1\ /*TEXT*/ /* TEXT */ /*TEXT*/,2 struc array /*comment*/ [arg] /*hello*/ { common match n def, /*comment*/ arg \{ /*comment*/ rept 1 %:1 \\{ /*comment*/ . def \\} /*comment*/ rept n-1 %:2 \/*v*/\/*v*/{ .\\#_/ comment */\\#% def \\} \} /*comment*/ } obviously, put comments anywhere is absurd. it's only to shows the power of engine. |
|||
16 Mar 2010, 07:32 |
|
ouadji 17 Mar 2010, 09:24
rev 7.2 no change of use, but a code "more beautiful" and optimized. about "search and management of codes" old name in rev.7 :AccessRight new name : Access_Settings Code: Access_Settings: cmp word[esi-2],"/*" jne .noCode call .search_code jnc .noCode ;"Z" ret ;back to "Search_absolute_end_comment" .noCode: cmp [Gate],0 jne .back mov ax,[@S_] cmp word [esi-2],ax jne .back xor edx,edx ret ;nocy! (xor=clc) .back: mov edx,2 stc ret ;==================================================== .search_code: cld push edi esi xor edx,edx .sc_: mov edi,[code_addr + edx] or edi,edi jz .zCode mov ecx,100h repz cmpsb mov al,[esi-1] call Not_Legal ;new name of "Prohibited" in rev.7.0 jz .zCode cmp byte[edi],0 jz .codefound add edx,4 mov esi,[esp] jmp .sc_ .zCode: pop esi edi ret ;back to "Z" above (no code cy=0) ;------------------------------------------- .codefound: dec esi pop edi edi ; it's correct 2xedi call dword [proc_addr + edx] ret ;"Y" (back to "Z" above) ;==================================================== IDLE_Code: not [Gate] ;open<=>close gate mov edx,1 stc ret ;back to "Y" above ;==================================================== INIT_Code: call .syntax mov [@SE_],eax ;"X" mov edx,1 stc ret ;back to "Y" above .syntax: mov ecx,4 mov dh,(4*4) mov ebx,init_syntax .S_check: lods byte[esi] mov dl,al call Not_Legal jz .fail.seq xlat byte[ebx] or al,al jnz @F mov dl,"?" @@: xchg al,dl ror eax,8 sub dh,dl loop .S_check jnz .fail.char ;-------------------------------------- mov edx,eax bswap edx cmp ax,dx jnz .seq_rev ret ;----------> syntax ok (back to "X" above) ;-------------------------------------- .seq_rev: xchg dh,dl cmp ax,dx jz .fail.rev ;-------------------------------------- .fail.seq: mov eax,3 jmp out_info .fail.rev: mov eax,2 jmp out_info .fail.char: mov [invalid.sequence],eax mov eax,1 jmp out_info ;===================================== ;changes in "Var_multi.INC" code_addr: dd code_a dd code_b dd 0 proc_addr: dd IDLE_Code dd INIT_Code code_list: code_a: db "idle!!",0FFh,0 code_b: db "init!!",0FFh,0 |
|||
17 Mar 2010, 09:24 |
|
ouadji 20 Mar 2010, 15:40
Final revision 8, perfect code, perfect result ! I read again all messages and discussions about this subject. Half of fasm users would like a solution. I feel that my solution bothers and disturbs. There is no doubt. Maybe the solutions "from outside" are not welcome, or unwanted. I think so, it's a pity ! over for me Code: ;Ouadji - Multiline Comments for FASM - Rev.8 ;developed based on the first work of mikhajduk. ;==================================================== Multiline_Core: /* cmp esi,[echo_] mov [echo_],esi ;redundant address je .echo ;jne>>je (~30x) necessary in theory, but ineffective. Because 93% of jumps are "jne". (the time-saver is negative) */ cmp al,"\" ;<---real start je .Core_ cmp al,"/" je .maybe cmp al,byte [@S_] je .maybe .echo: ret .maybe: dec esi bts [omega],1 cmp word [esi],"/*" je .Core_ push ebx mov bx,[@S_] cmp word [esi],bx pop ebx je .Core_ btr [omega],1 inc esi ret ;---------------------------------------------------------- .Core_: pushad mov ebp,esp xor edi,edi .engine_: call Search_to_the_right jc .wayout call Search_absolute_end_comment jz \ .engine_ ;==================================================== .wayout: add [esp+24h],edi ;<---line numbering mov [esp+04h],esi ;<---hide comments popad push ebx mov ebx,[omega] mov [omega],0 .action: cmp ebx,0000b je .@0000 cmp ebx,0010b je .@0010 cmp ebx,0110b je .@0110 ;------------------------------------------- .@0100: dec esi .@0110: dec esi .@0000: mov byte [esi-1],al pop ebx ret .@0010: mov ebx,[back_] mov [esp+4],ebx pop ebx ret ;==================================================== Search_to_the_right: mov ecx,100h mov ebx,-1 mov edx,esi .loop_scan: lods byte [esi] call Not_Legal jz .abortChar cmp al,20h je .nextScan cmp al,09h je .nextScan mov ax,word [esi-1] cmp ax,"/*" je .found cmp ax,[@S_] je .found call CRLF_ jc .firstTwo cmp al,";" jne .abortChar .fasm: lods byte [esi] call Not_Legal jz .abortChar call CRLF_ jnc .fasm .firstTwo: inc ebx .nextScan: loopz .loop_scan jz out_error ;---------------------------------------------------------- .two_crlf: dec edi ;"edi" always >=2! dec esi .notfirst: dec edi sub esi,3 mov word [esi],0A0Dh stc ret .abortChar: or edi,edi jne .notfirst mov esi,edx stc ret .found: inc esi ;cy=0 from "je .found" ret ;here,ax=[esi-2] ;==================================================== Search_absolute_end_comment: call Settings jc .done mov ecx,1 mov ebx,20000h .loopScan: lods byte [esi] call Not_Legal jz out_error call CRLF_ jc .gonext call Nestings jecxz .done ;end_comment found! .gonext: sub ebx,1 jnc .loopScan jmp out_error .done: test [omega],0110b ret ;==================================================== Nestings: push edi movzx eax,word[esi-1] mov edi,+1 cmp ax,[@S_] je .core neg edi cmp ax,[@E_] je .core pop edi ret .core: add esi,2 shl eax,8 or eax,22000022h cmp dword[esi-4],eax je .quoted xor eax,("'..'" xor '".."') ;here,tks baldr! cmp dword[esi-4],eax je .quoted add ecx,edi dec esi .quoted: pop edi ret ;=================================================== CRLF_: cmp al,0Dh je .next cmp al,0Ah je .next clc ret .next: xor al,(0Ah xor 0Dh) ;here,tks baldr! cmp al,[esi] jne .done inc esi .done: inc edi stc ret ;==================================================== Settings: cmp ax,"/*" ;ax=word[esi-2] jne .noCode call .search_code jnc .noCode ret .noCode: bt [Gate],0 jc .refused cmp ax,[@S_] jne .refused ret .refused: or [omega],0100b stc ret ;==================================================== .search_code: cld push edi esi xor edx,edx .search: mov edi,[code_addr + edx] or edi,edi jz .zCode mov ecx,100h repz cmpsb mov cl,[esi-1] cmp cl,1Ah je .zCode or cl,cl jz .zCode cmp byte[edi],0 jz .codefound add edx,4 mov esi,[esp] jmp .search .zCode: pop esi edi ;from "jz"=nocy=nocode ret ;------------------------------------------- .codefound: dec esi pop edi edi call dword [proc_addr + edx] ;address proc code ret ;==================================================== IDLE_Code: btc [Gate],0 ;open<=>close gate stc ret ;==================================================== INIT_Code: call .syntax mov [@SE_],eax stc ret .syntax: mov ecx,4 mov dh,(4*4) mov ebx,init_syntax .S_check: lods byte[esi] call Not_Legal jz .fail.seq mov dl,al xlat byte[ebx] or al,al jnz @F mov dl,"?" @@: xchg al,dl ror eax,8 sub dh,dl loop .S_check jnz .fail.char ;-------------------------------------- mov edx,eax bswap edx cmp ax,dx jne .seq_rev ret ;-------------------->syntax ok ;-------------------------------------- .seq_rev: xchg dh,dl cmp ax,dx je .fail.rev ;-------------------------------------- .fail.seq: mov eax,3 jmp out_info .fail.rev: mov eax,2 jmp out_info .fail.char: mov [invalid.sequence],eax mov eax,1 jmp out_info ;==================================================== Not_Legal: cmp al,1Ah je .done or al,al .done: ret ;z=pb. nz=ok ;==================================================== out_error: mov esp,ebp add [esp+24h],edi popad mov dword [esp],global_error jmp assembler_error out_info: mov esp,ebp add [esp+24h],edi mov [esp+1Ch],eax popad mov eax,[message_list + eax*4] mov [esp],eax jmp assembler_error ;==================================================== ;variables for Core_multi.INC ;---------------------------- omega dd 0 Gate dd 0 back_ dd ? echo_ dd 0 @S_ dw "/*" @E_ dw "*/" virtual at @S_ @SE_ dd ? end virtual ;------------------------------------------------------------------------------ init_syntax db 1 dup (\ \; 1 2 3 4 5 6 7 8 9 A B C D E F 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;1 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\ ;2 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4,\ ;3 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\ ;4 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,\ ;5 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\ ;6 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 0,\ ;7 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;9 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,\ ;A 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;B 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;C 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;D 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ ;E 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ;F ;------------------------------------------------------------------------------ message_list: dd global_error dd message_1 dd message_2 dd message_3 global_error db 'error multiline comments',0 message_1 db 'INIT : invalid characters : ' invalid.sequence dd ? db 0 message_2 db 'INIT : char ok but seq reversed',0 message_3 db 'INIT : char ok but seq prohibited',0 ;------------------------------------------------------------------------------ code_addr: dd code_a dd code_b dd 0 proc_addr: dd IDLE_Code dd INIT_Code code_list: code_a: db "idle!!",0FFh,0 code_b: db "init!!",0FFh,0 ;==================================================== Code: from PREPROCE.INC ..... convert_line_data: ..... jz convert_separator cmp ah,27h cmp ah,22h je convert_string ;====================================== mov [back_],convert_line_data call Multiline_Core ;---------------> n°1a ;====================================== mov byte [edi],1Ah scas word [edi] xchg al,ah stos byte [edi] mov ebx,characters xor ecx,ecx convert_symbol: lods byte [esi] ;====================================== mov [back_],convert_symbol call Multiline_Core ;---------------> n°1b ;====================================== stos byte [edi] xlat byte [ebx] or al,al loopnzd convert_symbol neg ecx cmp ecx,255 ja name_too_long mov ebx,edi sub ebx,ecx mov byte [ebx-2],cl found_separator: dec edi mov ah,[esi-1] convert_separator: xchg al,ah cmp al,20h jb control_character je convert_line_data symbol_character: cmp al,3Bh je ignore_comment ;====================================== mov [back_],convert_line_data call Multiline_Core ;---------------> n°2a ;====================================== cmp al,5Ch je backslash_character stos byte [edi] jmp convert_line_data control_character: ..... ..... group_backslashes: lods byte [esi] cmp al,5Ch jne backslashed_symbol ;====================================== call Multiline_Core ;---------------> n°2b ;====================================== stos byte [edi] inc byte [ecx] jmp group_backslashes backslashed_symbol: ..... ..... |
|||
20 Mar 2010, 15:40 |
|
hopcode 20 Mar 2010, 23:14
ouadji wrote: over for me Ok, pause button, trink something fresh considering (if not yet discussed) the reasons why it was not implemented. ouadji wrote: I feel that my solution bothers and disturbs. Not me, surely. I have not read the code-fragment, but you could try to explain to a simple person like me in few lines, 3,4 or 5, the design of your fragment, and how it works on the preexistent code. If you succeed i will implement it in my local fasm. And if i compile something with it i will attach, ... copyright is Tomasz la la la, ...commented with the commentor engine, fragment of ouadji from Belgium. No kidding now. But if you fail, ... dont worry because this is a low-level-emotion forum, and after all nothing important will ever change... for a while... But I am really curious. Forge up something hi--hi -hi-emotional to show me teorethically that it is not a superficial (oberflächig bis zum Unsinn, meine ich, typisch HLL) modification. After 127 active replies on this thread, considering the fragment in ~320 lines without comments, there is a passive bug ~ every second line (if my mod-brain works). But i cannot state it because, as i said, read i no code didnt. i hope it helps, Cheers, hopcode _________________ ⠓⠕⠏⠉⠕⠙⠑ |
|||
20 Mar 2010, 23:14 |
|
ouadji 21 Mar 2010, 00:52
Quote:
multiline/block comment for fasm. (C-style) it has already been explained extensively in all the previous messages of this topic. If you want to try it, here is the compiled version. it is impossible to explain the operation of this engine in a few lines. Code: endless possibilities ... comments... as you want, wherever you want. /*comment*/ control words : /*idle!! and /*init!!xyyx (see previous messages) Nestings comments allowed. /*TEXT*/ mov eax,ebx mov eax,/* TEXT */ebx ;but also .... mov /*TEXT*/eax,/*TE /* TEXT */ XT*/ebx /*TEXT*/ db 0,1\ /*TEXT*/ /* TEXT */ /*TEXT*/,2 struc array /*TEXT*/ [arg/*TEXT*/] /*TEXT*/ { common match n def, /*TEXT*/ arg \{ /*TEXT*/ rept 1 %/*TEXT*/:1 \\{ /*TEXT*/ . def \\} /*TEXT*/ rept n-1 %:2 \/*TEXT*/\/*TEXT*/{ .\\#_/* comment */\\#% def \/*TEXT*/\} \} /*TEXT*/ } Place comments anywhere is absurd !! It's just to show the power of the engine. Quote:
Last edited by ouadji on 21 Sep 2010, 20:27; edited 3 times in total |
|||
21 Mar 2010, 00:52 |
|
DOS386 21 Mar 2010, 01:01
ouadji wrote: Final revision 8, perfect code, perfect result ! The latest RAR does not have the PREPROCE.INC - could you please include this file too (the only one modified source file ?). |
|||
21 Mar 2010, 01:01 |
|
ouadji 21 Mar 2010, 01:13
yes, PREPROCE.INC is the only modified file. version 9 in progress, to be able to place also the control words inside comments themselves it is almost finished. Last edited by ouadji on 21 Sep 2010, 20:29; edited 1 time in total |
|||
21 Mar 2010, 01:13 |
|
hopcode 21 Mar 2010, 01:48
in the meanwhile i read
Quote: version 9 in process... Quote: clic here erm... let me see one moment...elaboratink..sputnink... Ready: YES=8 tom tobias MCD Matrix f0dder mike.dld Kain Octavio PopeInnocent NO=6 Frank Madis731 rea JohnFound THEWizardGenius r22 PROPOSAL / CREATIVE =5 vbVeryBeginner vid UCM Pirata Derek kake_zinger The fact is that the YES-people, apart f0dder, are not so active-posters like the sum of NO-people and YES-but-creative. ouadji wrote: ...it is impossible to explain the operation of this engine in a few lines... has not yet pronounced his YES to the block commentor feature, nothing will be impossible on this world !!! Ok..Ok..., i will give a try. I am open to the future. And (almost forgotten) thanks for your code. Cheers, hopcode _________________ ⠓⠕⠏⠉⠕⠙⠑ |
|||
21 Mar 2010, 01:48 |
|
Tyler 21 Mar 2010, 05:47
Wow, that's awesome, way too much work for me though . If you just want simple /* to */ without all the other things you added try the attached. Very simple, but it works(I did it all in the last 30 min .
Code: convert_line_data: cmp edi,[memory_end] jae out_of_memory lods byte [esi] ; EVERY byte goes through this ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Begin My addition cmp al, '/' ; if it's a '/' then I need to check if it's got a '*' behind it je multilinecomment ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; End cmp al,20h ; all of the comment will be seen by Fasm as 0x20s after I overwrite it je convert_line_data [crap load of code] Code: multilinecomment: pushad lodsb cmp al, '*' ; chech if next char is '*' jne multilinecomment_done ; if it isn't, i'm done mov word[esi - 2], ' ' ; block out '/*' with spaces multilinecomment_not_done: mov byte [esi - 1], ' ' ; if i'm here, the last char needs to be blocked out(I realize the original '*' gets overwritten twice though) lodsb ; get the next char cmp al, '*' ; check if it's a '/' jne multilinecomment_not_done cmp byte[esi], '/' ; is the next char a / jne multilinecomment_not_done mov dword [esi - 3], ' ' multilinecomment_done: popad jmp convert_line_data All mine does is overwrite the /**/ and the stuff in between with 0x20, so the when I restore esi, Fasm processes it as spaces. What do you think?
|
|||||||||||
21 Mar 2010, 05:47 |
|
DOS386 21 Mar 2010, 07:19
ouadji wrote: version 9 in progress, to be able to place also the control words inside comments themselves it is almost finished. Please include complete source or all modified or added source files then (FASMW.ASM & Co). Last edited by DOS386 on 23 Mar 2010, 08:02; edited 1 time in total |
|||
21 Mar 2010, 07:19 |
|
ouadji 21 Mar 2010, 08:31
Quote:
in PREPROCE.INC, 4 calls to "Multiline_Core" b) the code of Multiline_Core is above. (PREPROCE_8.INC too) Quote:
As I said ,"over for me", too much inertia to change. And after much thoughtful, ";" and "macro" are the best solutions. |
|||
21 Mar 2010, 08:31 |
|
hopcode 21 Mar 2010, 10:11
ouadji wrote: As I said ,"over for me"... Ok, if the code is buggy i dont know, every code is buggy. I have not yet tested it; that makes no difference. But this Quote: And after much thoughtful, ";" and "macro" are the best solutions. Why confirming me again that i was right with my opinion about this forum ?... There is no good, no open future in this way. Ok, i do you the last proposal. You could implement it in the Scintilla lexer. Look there or try it for assembler lexer... I am sure of this: You come here again to tell me that a theorethical explanation of the design of your code is possible and simple in 3,4 or 5 lines. You know, i am a simple person Cheers, hopcode _________________ ⠓⠕⠏⠉⠕⠙⠑ |
|||
21 Mar 2010, 10:11 |
|
Tyler 21 Mar 2010, 10:22
Should quotes be closed, Fasm just crashed because I made it skip strings(I didn't close the quotes), or should quotes be ignored?
Here's the problem Code: /*"*/ ; will loop until finding the next ", but the quotation mark happens to be outside the comment, causing an infinite loop That's easily fixable, I just need to know if I skip ""s. So that this will assemble Code: /* mov ax, "*/" */ Quote:
No. Mine works with what is necessary, imposing a few logical constraints in order to keep simplicity, like, one must put a space in between any directive or opcode and the beginning of the comment. Code: org/*stuff */0x100 /*DOESN'T WORK*/ org /*stuff */0x100 /*DOES WORK*/ I didn't fix this because it's pointless and I didn't want to put a checker in convert_symbol function. I'm actually not sure if the above works with the code I gave, I've been toying with it since then. One helpful thing is that I have a Fasm that can do the most useful kind of block comments Code: /* code... */ Honestly, this is all I foresee using block comments for(debugging without drastically modifying code or putting 100 ;s). I'm working on the having to put a space after the directives. |
|||
21 Mar 2010, 10:22 |
|
ouadji 21 Mar 2010, 10:35
Quote:
no, my code is perfect. Quote:
@Tylrer : all the problems you mention were part of my first attempts. My current code has fixed all that and is very powerful. Code: /*"*/ no problem with mine. i search "/*" or '/*' not only " or ' |
|||
21 Mar 2010, 10:35 |
|
Tomasz Grysztar 21 Mar 2010, 12:39
As it seems that my official opinion about this subject is not really easy to find out on this forums (well, it was so long ago, that perhaps this board did not even exist at the time). Well, there is some mention about my position made by Tom Tobias, but that's about all.
Thus I'm going to recapitulate: no, I don't plan to implement such feature (and even if I were, it would be likely MASM/TASM-style COMMENT directive, which was a line-based one, not any C-style comments that can be inserted in the middle of a line). The reasons for my decision are quite nicely summarized by this post from JohnFound. As for quickly commenting large block of code, there was a plan that such a feature of editor (insert/remove semicolons from the beginnings of lines in the selected text) would be implemented as a plugin for fasmw (by the way, there are other editors that have such feature already and can be used with fasm). However the plugin system for fasmw is something like a Duke Nukem Forever project. I started it at the same time, when I was writing fasmw itself, but never actually came near to finishing it. I still hope I manage to release it someday. And as for the topic of other people contributing something to fasm, check out this thread. |
|||
21 Mar 2010, 12:39 |
|
ouadji 22 Mar 2010, 00:19
thank you Tomasz for your reply. I fully understand your opinion and I respect it. Quote:
Code: code ... COMMENT * text text * ... ; no insertion in the middle of a line code once again, I respect your view. However, this doesn't meet the needs of users. Of course, I speak of users who would like a extended functionality about this. In this case, it is better to do nothing and keep what currently exists.(";") This would complicate Fasm with a feature that, indeed, would respect the asm spirit, but which in practice would be almost useless. |
|||
22 Mar 2010, 00:19 |
|
CandyMan 09 Apr 2010, 16:37
I entered some modifications into the code. Now it should work. Try out.
|
|||||||||||
09 Apr 2010, 16:37 |
|
Goto page Previous 1, 2, 3, 4, 5, 6, 7, 8 Next < Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.